UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

3 lines 465 kB
var nm=Object.defineProperty,om=Object.defineProperties;var im=Object.getOwnPropertyDescriptors;var tr=Object.getOwnPropertySymbols;var pu=Object.prototype.hasOwnProperty,fu=Object.prototype.propertyIsEnumerable;var du=(d,e,t)=>e in d?nm(d,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[e]=t,N=(d,e)=>{for(var t in e||(e={}))pu.call(e,t)&&du(d,t,e[t]);if(tr)for(var t of tr(e))fu.call(e,t)&&du(d,t,e[t]);return d},_=(d,e)=>om(d,im(e));var Ue=(d,e)=>{var t={};for(var n in d)pu.call(d,n)&&e.indexOf(n)<0&&(t[n]=d[n]);if(d!=null&&tr)for(var n of tr(d))e.indexOf(n)<0&&fu.call(d,n)&&(t[n]=d[n]);return t};import{merge as xf}from"lodash";import Yl from"axios";import{PublicKey as gu}from"@solana/web3.js";import{get as yu,set as rm}from"lodash";var ba=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}},bu={},am={};function ke(d){let e=yu(bu,d);if(!e){let t=yu(am,d);e=new ba({name:d,logLevel:t}),rm(bu,d,e)}return e}import{MINT_SIZE as sm,TOKEN_PROGRAM_ID as um,getTransferFeeConfig as cm,unpackMint as lm}from"@solana/spl-token";var ga=ke("Raydium_accountInfo_util");async function gt(d,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=N({batchRequest:!1},t),r=Pa(e,i),a=new Array(r.length).fill([]);if(n){let u=r.map(l=>{let m=d._buildArgs([l.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:m}}),s=Pa(u,10);a=(await(await Promise.all(s.map(async l=>await d._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&ga.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=m;return p.length!==2&&p[1]!=="base64"&&ga.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new gu(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(u=>d.getMultipleAccountsInfo(u,o)))}catch(u){u instanceof Error&&ga.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Me(d,e,t){let n=await gt(d,e.map(o=>o.pubkey),t);return e.map((o,i)=>_(N({},o),{accountInfo:n[i]}))}async function io({connection:d,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Me(d,e.map(u=>({pubkey:St(u)})),t),o={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<sm){console.log("invalid mint account",u.pubkey.toBase58());continue}let s=lm(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);o[u.pubkey.toString()]=_(N({},s),{programId:((r=u.accountInfo)==null?void 0:r.owner)||um,feeConfig:(a=cm(s))!=null?a:void 0})}return o[gu.default.toBase58()]=o[j.toBase58()],o}import jn from"bn.js";import PC from"decimal.js";import Pm from"big.js";import ir from"bn.js";import mm from"toformat";var dm=mm,ti=dm;import or from"big.js";import fm from"bn.js";import ym from"decimal.js-light";import ni from"bn.js";var Pu=9007199254740991;function ce(d){let e=ke("Raydium_parseBigNumberish");if(d instanceof ni)return d;if(typeof d=="string"){if(d.match(/^-?[0-9]+$/))return new ni(d);e.logWithError(`invalid BigNumberish string: ${d}`)}return typeof d=="number"?(d%1&&e.logWithError(`BigNumberish number underflow: ${d}`),(d>=Pu||d<=-Pu)&&e.logWithError(`BigNumberish number overflow: ${d}`),new ni(String(d))):typeof d=="bigint"?new ni(d.toString()):(e.error(`invalid BigNumberish value: ${d}`),new ni(0))}var nr=ke("module/fraction"),Aa=ti(or),oi=ti(ym),bm={[0]:oi.ROUND_DOWN,[1]:oi.ROUND_HALF_UP,[2]:oi.ROUND_UP},gm={[0]:or.roundDown,[1]:or.roundHalfUp,[2]:or.roundUp},Ce=class{constructor(e,t=new fm(1)){this.numerator=ce(e),this.denominator=ce(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ce(this.denominator,this.numerator)}add(e){let t=e instanceof Ce?e:new Ce(ce(e));return this.denominator.eq(t.denominator)?new Ce(this.numerator.add(t.numerator),this.denominator):new Ce(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ce?e:new Ce(ce(e));return this.denominator.eq(t.denominator)?new Ce(this.numerator.sub(t.numerator),this.denominator):new Ce(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ce?e:new Ce(ce(e));return new Ce(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ce?e:new Ce(ce(e));return new Ce(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||nr.logWithError(`${e} is not an integer.`),e<=0&&nr.logWithError(`${e} is not positive.`),oi.set({precision:e+1,rounding:bm[n]});let o=new oi(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||nr.logWithError(`${e} is not an integer.`),e<0&&nr.logWithError(`${e} is negative.`),Aa.DP=e,Aa.RM=gm[n]||1,new Aa(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Am=ke("Raydium_amount"),Au=ti(Pm);function wm(d,e){let t="0",n="0";if(d.includes(".")){let o=d.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Am.logWithError(`invalid number string, num: ${d}`)}else t=d;return[t,n.slice(0,e)||n]}var Re=class extends Ce{constructor(t,n,o=!0,i){let r=new ir(0),a=wa.pow(new ir(t.decimals));if(o)r=ce(n);else{let u=new ir(0),s=new ir(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[c,l]=wm(n.toString(),t.decimals);u=ce(c),s=ce(l)}u=u.mul(a),r=u.add(s)}super(r,a);this.logger=ke(i||"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 Re(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Re(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Au.DP=this.token.decimals,new Au(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as km}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as wu}from"@solana/spl-token";var En={chainId:101,address:km.default.toBase58(),programId:wu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Lt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:wu.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 Ba}from"@solana/web3.js";import{PublicKey as Qe,SystemProgram as ku,SYSVAR_RENT_PUBKEY as Tm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hm}from"@solana/spl-token";function K({pubkey:d,isSigner:e=!1,isWritable:t=!0}){return{pubkey:d,isWritable:t,isSigner:e}}var ka=[K({pubkey:hm,isWritable:!1}),K({pubkey:ku.programId,isWritable:!1}),K({pubkey:Tm,isWritable:!1})];function Ta({publicKey:d,transformSol:e}){let t=ha(d.toString());if(t instanceof Qe)return e&&t.equals(Pt)?j:t;if(e&&t.toString()===Pt.toBase58())return j;if(typeof t=="string"){if(t===Qe.default.toBase58())return Qe.default;try{return new Qe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ha(d){try{return new Qe(d)}catch{return d}}var un=new Qe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Ot=new Qe("SysvarRent111111111111111111111111111111111"),fy=new Qe("SysvarC1ock11111111111111111111111111111111"),Pn=new Qe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Bm=new Qe("Sysvar1nstructions1111111111111111111111111"),Tu=ku.programId,yy=new Qe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),by=new Qe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),gy=new Qe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Py=new Qe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Ay=new Qe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),wy=new Qe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),ky=new Qe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Ty=new Qe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),hy=new Qe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),By=new Qe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Iy=new Qe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Qe("So11111111111111111111111111111111111111112"),Pt=Qe.default;function St(d){return Ta({publicKey:d,transformSol:!0})}var Ia=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===Pt.toBase58()||e instanceof Ba&&Pt.equals(e)){this.decimals=Lt.decimals,this.symbol=Lt.symbol,this.name=Lt.name,this.mint=new Ba(Lt.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Ba.default:Ta({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ge=Ia;Ge.WSOL=new Ia(_(N({},Lt),{mint:Lt.address}));var xa=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},rr=xa;rr.SOL=new xa(En);import Im from"bn.js";var hu=new Ce(new Im(100)),At=class extends Ce{toSignificant(e=5,t,n){return this.mul(hu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(hu).toFixed(e,t,n)}};var xm=ke("Raydium_price"),Ft=class extends Ce{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ce(Sa(n.decimals),Sa(o.decimals))}get raw(){return new Ce(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Ft({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&xm.logWithError("mul token not equals");let n=super.mul(t);return new Ft({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};import{PublicKey as Vm}from"@solana/web3.js";import Su,{isBN as Ku}from"bn.js";import{bits as Sm,BitStructure as Gy,blob as Km,Blob as zy,cstr as Xy,f32 as Yy,f32be as Hy,f64 as Qy,f64be as Zy,greedy as $y,Layout as Cm,ns64 as jy,ns64be as Jy,nu64 as eb,nu64be as tb,offset as Rm,s16 as nb,s16be as ob,s24 as ib,s24be as rb,s32 as Lm,s32be as ab,s40 as sb,s40be as ub,s48 as cb,s48be as lb,s8 as mb,seq as Om,struct as db,Structure as Nm,u16 as Mm,u16be as pb,u24 as fb,u24be as yb,u32 as Fm,u32be as bb,u40 as gb,u40be as Pb,u48 as Ab,u48be as wb,u8 as vm,UInt as _m,union as kb,Union as Tb,unionLayoutDiscriminator as hb,utf8 as Bb}from"@solana/buffer-layout";var ar=Cm,Bu=Nm;var Ka=_m;var Iu=vm,ve=Mm;var ii=Fm;var st=Lm;var xu=Om;var Ae=Km;var Ca=Sm,Ra=Rm;var ro=class extends ar{constructor(t,n,o){super(t,o);this.blob=Ae(t),this.signed=n}decode(t,n=0){let o=new Su(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new Su(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},sr=class extends ar{constructor(t){super(8,t);this._lower=Ca(ii(),!1),this._upper=Ca(ii(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return N(N({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function V(d){return new Ka(1,d)}function ze(d){return new Ka(4,d)}function w(d){return new ro(8,!1,d)}function ae(d){return new ro(16,!1,d)}function Cu(d){return new ro(1,!0,d)}function xo(d){return new ro(8,!0,d)}function Ru(d){return new ro(16,!0,d)}var ao=class extends ar{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function F(d){return new ao(Ae(32),e=>new Vm(e),e=>e.toBuffer(),d)}function Ze(d){return new ao(Iu(),Em,Dm,d)}function Em(d){if(d===0)return!1;if(d===1)return!0;throw new Error("Invalid bool: "+d)}function Dm(d){return d?1:0}function Oa(d,e){let t=ii("length"),n=v([t,Z(d,Ra(t,-t.span),"values")]);return new ao(n,({values:o})=>o,o=>({values:o}),e)}function Wm(d){let e=ii("length"),t=v([e,Ae(Ra(e,-e.span),"data")]);return new ao(t,({data:n})=>n,n=>({data:n}),d)}function Dt(d){return new ao(Wm(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),d)}var La=class extends Bu{decode(e,t){return super.decode(e,t)}};function v(d,e,t){return new La(d,e,t)}function Z(d,e,t){let n,o=typeof e=="number"?e:Ku(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=Ku(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,r)},set(i,r,a){return r==="count"&&(n=a),Reflect.set(i,r,a)}});return xu(d,o,t)}var Kn=v([F("mint"),F("owner"),w("amount"),ze("delegateOption"),F("delegate"),V("state"),ze("isNativeOption"),w("isNative"),w("delegatedAmount"),ze("closeAuthorityOption"),F("closeAuthority")]);import{Keypair as Xm,PublicKey as vu}from"@solana/web3.js";import Ym from"bn.js";import{TOKEN_PROGRAM_ID as Hm}from"@solana/spl-token";function qm(d){return d instanceof Uint8Array||d!=null&&typeof d=="object"&&d.constructor.name==="Uint8Array"}function Na(d,...e){if(!qm(d))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(d.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${d.length}`)}function Ma(d,e=!0){if(d.destroyed)throw new Error("Hash instance has been destroyed");if(e&&d.finished)throw new Error("Hash#digest() has already been called")}function Lu(d,e){Na(d);let t=e.outputLen;if(d.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var cr=d=>new DataView(d.buffer,d.byteOffset,d.byteLength),cn=(d,e)=>d<<32-e|d>>>e;var Vb=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Um(d){if(typeof d!="string")throw new Error(`utf8ToBytes expected string, got ${typeof d}`);return new Uint8Array(new TextEncoder().encode(d))}function Fa(d){return typeof d=="string"&&(d=Um(d)),Na(d),d}var ur=class{clone(){return this._cloneInto()}},Eb={}.toString;function Ou(d){let e=n=>d().update(Fa(n)).digest(),t=d();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>d(),e}function Gm(d,e,t,n){if(typeof d.setBigUint64=="function")return d.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),u=n?4:0,s=n?0:4;d.setUint32(e+u,r,n),d.setUint32(e+s,a,n)}var Nu=(d,e,t)=>d&e^~d&t,Mu=(d,e,t)=>d&e^d&t^e&t,lr=class extends ur{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=cr(this.buffer)}update(e){Ma(this);let{view:t,buffer:n,blockLen:o}=this;e=Fa(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let u=cr(e);for(;o<=i-r;r+=o)this.process(u,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ma(this),Lu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let l=r;l<o;l++)t[l]=0;Gm(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=cr(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let s=u/4,c=this.get();if(s>c.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<s;l++)a.setUint32(4*l,c[l],i)}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:o,finished:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var zm=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]),Dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Wn=new Uint32Array(64),va=class extends lr{constructor(){super(64,32,8,!1),this.A=Dn[0]|0,this.B=Dn[1]|0,this.C=Dn[2]|0,this.D=Dn[3]|0,this.E=Dn[4]|0,this.F=Dn[5]|0,this.G=Dn[6]|0,this.H=Dn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:u}=this;return[e,t,n,o,i,r,a,u]}set(e,t,n,o,i,r,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=u|0}process(e,t){for(let l=0;l<16;l++,t+=4)Wn[l]=e.getUint32(t,!1);for(let l=16;l<64;l++){let m=Wn[l-15],p=Wn[l-2],f=cn(m,7)^cn(m,18)^m>>>3,y=cn(p,17)^cn(p,19)^p>>>10;Wn[l]=y+Wn[l-7]+f+Wn[l-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:u,G:s,H:c}=this;for(let l=0;l<64;l++){let m=cn(a,6)^cn(a,11)^cn(a,25),p=c+m+Nu(a,u,s)+zm[l]+Wn[l]|0,y=(cn(n,2)^cn(n,13)^cn(n,22))+Mu(n,o,i)|0;c=s,s=u,u=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,u=u+this.F|0,s=s+this.G|0,c=c+this.H|0,this.set(n,o,i,r,a,u,s,c)}roundClean(){Wn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Fu=Ou(()=>new va);function _u({owner:d,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=Kn.decode(r.data),{mint:u,amount:s}=a;n.push({publicKey:i,mint:u,amount:s,isAssociated:te(d,u,r.owner).publicKey.equals(i),isNative:!1,programId:r.owner}),o.push({pubkey:i,accountInfo:a,programId:r.owner})}return e&&n.push({mint:vu.default,amount:new Ym(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Je({fromPublicKey:d,programId:e=Hm,assignSeed:t}){let n=t?btoa(t).slice(0,32):Xm.generate().publicKey.toBase58().slice(0,32);return{publicKey:Qm(d,n,e),seed:n}}function Qm(d,e,t){let n=Buffer.concat([d.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Fu(n);return new vu(o)}import{PublicKey as Zm,SystemProgram as $m}from"@solana/web3.js";import jm from"bn.js";import{createCloseAccountInstruction as Jm,createInitializeAccountInstruction as ed,createTransferInstruction as td,TOKEN_PROGRAM_ID as So}from"@solana/spl-token";var X={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",TransferTip:"TransferTip"};function _a(d){let{mint:e,tokenAccount:t,owner:n,programId:o=So}=d;return ed(t,e,n,o)}function Cn(d){let{tokenAccount:e,destination:t,multiSigners:n=[],owner:o,programId:i=So}=d;return Jm(e,t,o,n,i)}async function qn(d){let{connection:e,amount:t,commitment:n,closeDestination:o,payer:i,owner:r,skipCloseAccount:a}=d,u=await e.getMinimumBalanceForRentExemption(Kn.span,n),s=ce(t).add(new jm(u)),c=Je({fromPublicKey:i,programId:So});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[$m.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:s.toNumber(),space:Kn.span,programId:So}),_a({mint:new Zm(Lt.address),tokenAccount:c.publicKey,owner:r,programId:So})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:a?[]:[X.CloseAccount],endInstructions:a?[]:[Cn({tokenAccount:c.publicKey,destination:o!=null?o:r,owner:r})]}}function Vu({source:d,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=So}){return td(d,e,t,BigInt(String(n)),o,i)}import{PublicKey as Ea}from"@solana/web3.js";import{PublicKey as le}from"@solana/web3.js";var Eu=new le("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Du=new le("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Wu=new le("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ri=new le("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Bg=new le("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),qu=new le("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Va=new le("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),mr=new le("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Ig=new le("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Uu=new le("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Rn=new le("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ai=new le("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),dr=new le("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),so=new le("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xg=new le("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Gu=new le("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Un=new le("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),zu=new le("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sg=new le("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),si=new le("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new le("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Ee=new le("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Kg=new le("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Cg=new le("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Rg=new le("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Lg=new le("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Og=new le("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX");var ln={OPEN_BOOK_PROGRAM:new le("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new le("Ray1111111111111111111111111111111111111111"),AMM_V4:new le("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new le("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new le("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new le("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new le("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new le("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new le("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new le("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new le("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new le("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:le.default,Router:new le("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new le("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new le("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new le("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new le("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new le("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new le("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new le("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new le("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new le("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new le("Ray1111111111111111111111111111111111111111")};import{NATIVE_MINT as Wg}from"@solana/spl-token";var qg=ke("Raydium_farm_config"),Xu=new Ea("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Yu=new Ea("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Ug=new Ea("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX"),fr={3:Hu,5:Qu,6:ci},ui={3:qa,5:Zu,6:$u},Da=d=>[3,4,5,6].indexOf(d)!==-1,Wa=d=>{var r;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=d,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(r=i[e])==null?void 0:r.call(i)},Gn={"Standard SPL":0,"Option tokens":1},Yt={[Eu.toString()]:3,[Du.toString()]:4,[Wu.toString()]:5,[ri.toString()]:6,[ln.FARM_PROGRAM_ID_V3.toString()]:3,[ln.FARM_PROGRAM_ID_V4.toString()]:4,[ln.FARM_PROGRAM_ID_V5.toString()]:5,[ln.FARM_PROGRAM_ID_V6.toString()]:6};var Ua=v([V("instruction")]),Ga=v([V("instruction")]),nd=v([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),ae("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),w("rewardType"),Z(w(),15,"padding")]),od=v([w("state"),w("nonce"),F("lpVault"),F("rewardVault"),F(),F(),w(),w(),w("totalReward"),ae("perShareReward"),w("lastSlot"),w("perSlotReward")]),id=v([w("state"),w("nonce"),F("lpVault"),F("rewardVaultA"),w("totalRewardA"),ae("perShareRewardA"),w("perSlotRewardA"),V("option"),F("rewardVaultB"),Ae(7),w("totalRewardB"),ae("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),F()]),rd=v([w(),w("state"),w("nonce"),w("validRewardTokenNum"),ae("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Z(nd,5,"rewardInfos"),F("creator"),F(),Z(w(),32,"padding")]),Hu=new Proxy(od,{get(d,e,t){return e==="decode"?(...n)=>{let o=d.decode(...n);return _(N({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(d,e,t)}}),Qu=new Proxy(id,{get(d,e,t){return e==="decode"?(...n)=>{let o=d.decode(...n);return _(N({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(d,e,t)}}),ci=new Proxy(rd,{get(d,e,t){return e==="decode"?(...n)=>{let o=d.decode(...n);return _(N({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return _(N({},i),{rewardType:((r=Object.entries(Gn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(d,e,t)}}),ad=v([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),za=v([V("instruction"),w("nonce"),Z(ad,5,"rewardTimeInfo")]),Xa=v([V("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Ya=v([V("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Zg=v([w("state"),F("id"),F("owner"),w("deposited"),Z(w(),1,"rewardDebts")]),qa=v([w("state"),F("id"),F("owner"),w("deposited"),Z(ae(),1,"rewardDebts"),w(""),w("voteLockedBalance"),Z(w(),15)]),$g=v([w("state"),F("id"),F("owner"),w("deposited"),Z(w(),2,"rewardDebts")]),Zu=v([w("state"),F("id"),F("owner"),w("deposited"),Z(ae(),2,"rewardDebts"),Z(w(),17)]),$u=v([w(),w("state"),F("id"),F("owner"),w("deposited"),Z(ae(),5,"rewardDebts"),Z(w(),16)]),Ht=v([V("instruction"),w("amount")]),sd=v([F("mint"),F("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Cu("digitShift"),Z(V(),7,"reserved1"),Z(w(),7,"reserved2")]),ud=v([Ae(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Z(V(),32,"reserved1"),Z(sd,4,"votingMints"),xo("timeOffset"),V("bump"),Z(V(),7,"reserved2"),Z(w(),11,"reserved3")]),cd=v([xo("startTime"),xo("endTime"),V("kind"),Z(V(),15,"reserved")]),ld=v([Z(cd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Ze("isUsed"),Ze("allowClawback"),V("votingMintConfigIdx"),Z(V(),29,"reserved")]),md=v([Ae(8),F("voterAuthority"),F("registrar"),Z(ld,32,"deposits"),V("voterBump"),V("voterWweightRecordBump"),Z(V(),94,"reserved")]);import wd from"bn.js";import{ComputeBudgetProgram as ju,Keypair as ec,PublicKey as dd,Transaction as tc,TransactionMessage as pd,VersionedTransaction as nc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as fd}from"@solana/spl-token";var Ju=ke("Raydium_txUtil"),oc=1644;function yr(d){let e=[],t=[];return d.microLamports&&(e.push(ju.setComputeUnitPrice({microLamports:d.microLamports})),t.push(X.SetComputeUnitPrice)),d.units&&(e.push(ju.setComputeUnitLimit({units:d.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Ko(d,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=d.getLatestBlockhash)==null?void 0:n.call(d,{commitment:t})))==null?void 0:o.blockhash}async function br(d,e){return d.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);d.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function Ha(d,e){d.length<1&&Ju.logWithError(`no instructions provided: ${d.toString()}`),e.length<1&&Ju.logWithError(`no signers provided:, ${e.toString()}`);let t=new tc;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...d);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<oc}catch{return!1}}function se(d,e){let[t,n]=dd.findProgramAddressSync(d,e);return{publicKey:t,nonce:n}}function li({instructions:d,payer:e,signers:t}){return Ha(d,[e,...t])}function mi({instructions:d,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=ec.generate().publicKey.toString()}){let i=new pd({payerKey:e,recentBlockhash:n,instructions:d}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new nc(i).serialize()).toString("base64").length<oc}catch{return!1}}var yd=d=>Buffer.isBuffer(d)?d:d instanceof Uint8Array?Buffer.from(d.buffer,d.byteOffset,d.byteLength):Buffer.from(d),bd=d=>{let e=d.serialize({requireAllSignatures:!1,verifySignatures:!1});d instanceof nc&&(e=yd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function uo(d){let e=[];return d.forEach(t=>{t instanceof tc&&(t.recentBlockhash||(t.recentBlockhash=fd.toBase58()),t.feePayer||(t.feePayer=ec.generate().publicKey)),e.push(bd(t))}),console.log("simulate tx string:",e),e}import{PublicKey as gd}from"@solana/web3.js";import Pd from"bn.js";function Ad(d){return typeof d=="object"&&d!==null&&![Ge,Re,gd,Ce,Pd,Ft,At].some(e=>typeof e=="object"&&d instanceof e)}function vt(d){return typeof d=="string"?ha(d):Array.isArray(d)?d.map(e=>vt(e)):Ad(d)?Object.fromEntries(Object.entries(d).map(([e,t])=>[e,vt(t)])):d}var kd=ke("Raydium.farm.util");function di({programId:d,poolId:e,mint:t,type:n}){let{publicKey:o}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],d);return o}function jt({programId:d,poolId:e,owner:t,version:n}){let{publicKey:o}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],d);return o}var ic=({programId:d,poolId:e})=>se([e.toBuffer()],d);function rc(d){return{isSet:new wd(1),rewardPerSecond:ce(d.perSecond),rewardOpenTime:ce(d.openTime),rewardEndTime:ce(d.endTime),rewardType:ce(Gn[d.rewardType])}}function Qa(d){return ce(d.endTime).sub(ce(d.openTime)).mul(ce(d.perSecond))}function pi(d){let e=ui[d];return e||kd.logWithError("invalid version",d),e}import{PublicKey as we,SystemProgram as ac,SYSVAR_CLOCK_PUBKEY as fi,SYSVAR_RENT_PUBKEY as Bd,TransactionInstruction as Jt}from"@solana/web3.js";import sc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as nA,createAssociatedTokenAccountIdempotentInstruction as oA,TOKEN_PROGRAM_ID as Ln}from"@solana/spl-token";import{PublicKey as Td}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hd}from"@solana/spl-token";function te(d,e,t){return se([d.toBuffer(),(t!=null?t:hd).toBuffer(),e.toBuffer()],new Td("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}var Id=ke("Raydium_farm_instruction"),fA={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 yi(d){let{version:e,id:t,ledger:n,programId:o,owner:i}=d,r={3:9,5:10}[e];r||Id.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ua.span);Ua.encode({instruction:r},a);let u=[K({pubkey:t}),K({pubkey:n}),K({pubkey:i,isWritable:!1}),K({pubkey:ac.programId,isWritable:!1}),K({pubkey:Bd,isWritable:!1})];return{instruction:new Jt({programId:o,keys:u,data:a}),instructionType:X.FarmV3CreateLedger}}function uc(d){var n;let e=Buffer.alloc(za.span);za.encode({instruction:0,nonce:new sc(d.nonce),rewardTimeInfo:d.rewardInfoConfig},e);let t=[...ka,K({pubkey:d.farmId}),K({pubkey:d.farmAuthority,isWritable:!1}),K({pubkey:d.lpVault}),K({pubkey:d.lpMint,isWritable:!1}),K({pubkey:d.lockVault}),K({pubkey:d.lockMint,isWritable:!1}),K({pubkey:(n=d.lockUserAccount)!=null?n:Pt}),K({pubkey:d.owner,isWritable:!1,isSigner:!0})];for(let o of d.rewardInfo)t.push(K({pubkey:o.rewardMint,isWritable:!1}),K({pubkey:o.rewardVault}),K({pubkey:o.userRewardToken}));return{instruction:new Jt({programId:d.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function cc(d){let e=Buffer.alloc(Ga.span);Ga.encode({instruction:5},e);let t=[K({pubkey:Ln,isWritable:!1}),K({pubkey:d.id}),K({pubkey:d.authority,isWritable:!1}),K({pubkey:d.lpVault,isWritable:!1}),K({pubkey:d.rewardVault}),K({pubkey:d.userRewardToken}),K({pubkey:d.owner,isWritable:!1,isSigner:!0})];return{instruction:new Jt({programId:d.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function Za({payer:d,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Xa.span);Xa.encode({instruction:3,rewardReopenTime:ce(o.openTime),rewardEndTime:ce(o.endTime),rewardPerSecond:ce(o.perSecond)},i);let r=[K({pubkey:Ln,isWritable:!1}),K({pubkey:n.id}),K({pubkey:n.lpVault,isWritable:!1}),K({pubkey:e}),K({pubkey:t}),K({pubkey:d,isWritable:!1,isSigner:!0})];return new Jt({programId:n.programId,keys:r,data:i})}function $a({payer:d,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Ya.span);Ya.encode({instruction:4,isSet:new sc(1),rewardPerSecond:ce(o.perSecond),rewardOpenTime:ce(o.openTime),rewardEndTime:ce(o.endTime),rewardType:ce(Gn[o.rewardType])},i);let r=[...ka,K({pubkey:t.id}),K({pubkey:t.authority,isWritable:!1}),K({pubkey:o.mint,isWritable:!1}),K({pubkey:n}),K({pubkey:e}),K({pubkey:d,isWritable:!1,isSigner:!0})];return new Jt({programId:t.programId,keys:r,data:i})}function bi(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=d,[a,u]=[new we(e.programId),new we(e.id)],s=jt({programId:a,poolId:u,owner:i,version:6}),c=Buffer.alloc(Ht.span);Ht.encode({instruction:2,amount:ce(r)},c);let l=[K({pubkey:Ln,isWritable:!1}),K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:s}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)l.push(K({pubkey:new we(t.rewardInfos[m].vault)})),l.push(K({pubkey:o[m]}));return new Jt({programId:a,keys:l,data:c})}function gi(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=jt({programId:u,poolId:s,owner:i,version:5}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:12,amount:ce(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(K({pubkey:o[p]})),m.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function lc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=v([V("instruction"),w("amount")]),l=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:a[0]}),K({pubkey:i,isSigner:!0,isWritable:!1}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1}),K({pubkey:o[1]}),K({pubkey:new we(t.rewardInfos[1].vault)})],m=Buffer.alloc(c.span);return c.encode({instruction:2,amount:r},m),new Jt({keys:l,programId:u,data:m})}function Pi(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=jt({programId:u,poolId:s,owner:i,version:3}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:11,amount:ce(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function mc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=jt({programId:u,poolId:s,owner:i,version:3}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:10,amount:ce(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function dc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=d,[u,s]=[new we(e.programId),new we(e.id)],c=jt({programId:u,poolId:s,owner:i,version:5}),l=Buffer.alloc(Ht.span);Ht.encode({instruction:11,amount:ce(r)},l);let m=[K({pubkey:s}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:c}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:fi,isWritable:!1}),K({pubkey:Ln,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(K({pubkey:o[p]})),m.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(K({pubkey:p}));return new Jt({programId:u,keys:m,data:l})}function pc(d){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=d,[a,u]=[new we(e.programId),new we(e.id)],s=jt({programId:a,poolId:u,owner:i,version:6}),c=Buffer.alloc(Ht.span);Ht.encode({instruction:1,amount:ce(r)},c);let l=[K({pubkey:Ln,isWritable:!1}),K({pubkey:ac.programId,isWritable:!1}),K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:s}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)l.push(K({pubkey:new we(t.rewardInfos[m].vault)})),l.push(K({pubkey:o[m]}));return new Jt({programId:a,keys:l,data:c})}var xd=v([ze("mintAuthorityOption"),F("mintAuthority"),w("supply"),V("decimals"),V("isInitialized"),ze("freezeAuthorityOption"),F("freezeAuthority")]);import{TOKEN_PROGRAM_ID as SA}from"@solana/spl-token";import{PublicKey as LA}from"@solana/web3.js";var Ai=d=>new Ge({mint:d.address,decimals:d.decimals,symbol:d.symbol,name:d.name}),ut=o=>{var i=o,{amount:d,isRaw:e,name:t}=i,n=Ue(i,["amount","isRaw","name"]);return new Re(new Ge({mint:St(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),d,e,t)};var ft=o=>{var i=o,{address:d,programId:e,decimals:t}=i,n=Ue(i,["address","programId","decimals"]);return N({chainId:101,address:St(d).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},An=d=>d?_(N({},d),{transferFeeConfigAuthority:d.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:d.withdrawWithheldAuthority.toBase58(),withheldAmount:d.withheldAmount.toString(),olderTransferFee:_(N({},d.olderTransferFee),{epoch:d.olderTransferFee.epoch.toString(),maximumFee:d.olderTransferFee.maximumFee.toString()}),newerTransferFee:_(N({},d.newerTransferFee),{epoch:d.newerTransferFee.epoch.toString(),maximumFee:d.newerTransferFee.maximumFee.toString()})}):void 0;import{PublicKey as de,SystemProgram as _l}from"@solana/web3.js";import{createTransferInstruction as Vl,TOKEN_PROGRAM_ID as _e,TOKEN_2022_PROGRAM_ID as Yo,createAssociatedTokenAccountIdempotentInstruction as Ho,createSyncNativeInstruction as El,createTransferCheckedInstruction as uf}from"@solana/spl-token";import Pe from"bn.js";import xe from"decimal.js";import{createAssociatedTokenAccountIdempotentInstruction as vn,TOKEN_2022_PROGRAM_ID as nn,TOKEN_PROGRAM_ID as Do}from"@solana/spl-token";import{PublicKey as G}from"@solana/web3.js";import at from"bn.js";import _n from"decimal.js";import{PublicKey as Oo,sendAndConfirmTransaction as ns,SystemProgram as Sd,Transaction as wi,TransactionMessage as ki,VersionedTransaction as Ti}from"@solana/web3.js";import Kd from"axios";import{PublicKey as ja,AddressLookupTableAccount as Lo}from"@solana/web3.js";async function Ja({connection:d,address:e,cluster:t="mainnet"}){let n=await gt(d,[...new Set(e.map(i=>i.toString()))].map(i=>new ja(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let u=new Lo({key:a,state:Lo.deserialize(r.data)});o[a.toString()]=u,t==="devnet"?Ro[a.toString()]=u:Co[a.toString()]=u}return o}var Co={},es=async d=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Co[e])return Co;let t=new ja(e),n=await d.getAccountInfo(t);return n&&(Co[e]=new Lo({key:t,state:Lo.deserialize(n.data)})),Co},Ro={},ts=async d=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ro[e])return Ro;let t=new ja(e),n=await d.getAccountInfo(t);return n&&(Ro[e]=new Lo({key:t,state:Lo.deserialize(n.data)})),Ro};var gr=2e3,Pr=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.loopMultiTxStatus=!!e.loopMultiTxStatus}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 Kd.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=yr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Sd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Oo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(X.TransferTip),!0):!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:o=[],endInstructionTypes:i=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...r.filter(a=>a!==Oo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(_(N({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new wi;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.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 o=>{var c;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:u}=o||{},s=i!=null?i:await Ko(this.connection,this.blockhashCommitment);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),uo([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await ns(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);if(this.signers.length)for(let m of l)try{m.sign(...this.signers)}catch{}return{txId:u?"":await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:r}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var s;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(c=>c.transaction.instructions.length>0),r=[o,...i.map(c=>c.transaction)],a=[this.signers,...i.map(c=>c.signers)],u=[...this.instructionTypes,...i.map(c=>c.instructionTypes).flat()];return(s=this.owner)!=null&&s.signer&&a.forEach(c=>{c.some(l=>l.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:u,execute:async c=>{var g;let{sequentially:l,onTxUpdate:m,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=c||{},b=f!=null?f:await Ko(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(l){let A=[],k=0;for(let h of r){if(++k,k<=p)continue;let P=await ns(this.connection,h,this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(P)}return{txIds:A,signedTxs:r}}return{txIds:await await Promise.all(r.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((h,P)=>(h.recentBlockhash=b,a[P].length&&h.sign(...a[P]),h));uo(A);let k=await this.signAllTransactions(A);if(l){let h=0,P=[],T=async()=>{if(!k[h])return;let I=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});P.push({txId:I,status:"sent",signedTx:k[h]}),m==null||m([...P]),h++;let x=!1,S=null,B=null,R=L=>{S!==null&&clearInterval(S),B!==null&&this.connection.removeSignatureListener(B);let O=P.findIndex(C=>C.txId===I);if(O>-1){if(P[O].status==="error"||P[O].status==="success")return;P[O].status=L.err?"error":"success"}m==null||m([...P]),L.err||T()};this.loopMultiTxStatus&&(S=setInterval(async()=>{var L;if(x){clearInterval(S);return}try{let O=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:1});O&&(x=!0,clearInterval(S),R({err:((L=O.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",I))}catch(O){x=!0,clearInterval(S),console.error("getTransaction timeout:",O,I)}},gr)),B=this.connection.onSignature(I,L=>{if(x){this.connection.removeSignatureListener(B);return}x=!0,R(L)},"confirmed"),this.connection.getSignatureStatus(I)};return await T(),{txIds:P.map(I=>I.txId),signedTxs:k}}else{let h=[];for(let P=0;P<k.length;P+=1){let T=await this.connection.sendRawTransaction(k[P].serialize(),{skipPreflight:y});h.push(T)}return{txIds:h,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 y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=f,r=Ue(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=N(N({},this.cluster==="devnet"?await ts(this.connection):await es(this.connection)),t),u=Array.from(new Set([...n,...this.lookupTableAddress])),s=[];for(let b of u)a[b]===void 0&&s.push(new Oo(b));let c=await Ja({connection:this.connection,address:s});for(let[b,g]of Object.entries(c))a[b]=g;let l=o?Oo.default.toBase58():i!=null?i:await Ko(this.connection,this.blockhashCommitment),m=new ki({payerKey:this.feePayer,recentBlockhash:l,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Ti(m);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var h;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(uo([p]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await br(this.connection,P),{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);if(this.signers.length)for(let T of P)try{T.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var s;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(c=>c.builder.instructions.length>0),r=[o,...i.map(c=>c.transaction)],a=[this.signers,...i.map(c=>c.signers)],u=[...this.instructionTypes,...i.map(c=>c.instructionTypes).flat()];return(s=this.owner)!=null&&s.signer&&a.forEach(c=>{c.some(l=>l.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:r,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var y;let{sequentially:l,onTxUpdate:m,recentBlockHash:p,skipPreflight:f=!0}=c||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),uo(r),(y=this.owner)!=null&&y.isKeyPair){if(l){let b=[];for(let g of r){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await br(this.connection,A),b.push(A)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(l){let g=0,A=[],k=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:h,status:"sent",signedTx:b[g]}),m==null||m([...A]),g++;let P=!1,T=null,I=null,x=S=>{T!==null&&clearInterval(T),I!==null&&this.connection.removeSignatureListener(I);let B=A.findIndex(R=>R.txId===h);if(B>-1){if(A[B].status==="error"||A[B].status==="success")return;A[B].status=S.err?"error":"success"}m==null||m([...A]),S.err||k()};this.loopMultiTxStatus&&(T=setInterval(async()=>{var S;if(P){clearInterval(T);return}try{let B=await this.connection.getTransaction(h,{commitment:"confirmed",maxSupportedTransactionVersion:1});B&&(P=!0,clearInterval(T),x({err:((S=B.meta)==null?void 0:S.err)||null}),console.log("tx status from getTransaction:",h))}catch(B){P=!0,clearInterval(T),console.error("getTransaction timeout:",B,h)}},gr)),I=this.connection.onSignature(h,S=>{if(P){this.connection.removeSignatureListener(I);return}P=!0,x(S)},"confirmed"),this.connection.getSignatureStatus(h)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var m;let l=e||{},{splitIns:t=[],computeBudgetConfig:n}=l,o=Ue(l,["splitIns","computeBudgetConfig"]),i=n?yr(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>_(N({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],u=[],s=[],c=0;if(this.allInstructions.forEach(p=>{let f=[...s,p],y=n?[...i.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new Oo(A));if(p!==t[c]&&s.length<12&&(li({instructions:y,payer:this.feePayer,signers:g})||li({instructions:f,payer:this.feePayer,signers:g})))s.push(p);else{if(s.length===0)throw Error("item ins too big");c+=p===t[c]?1:0,li({instructions:n?[...i.instructions,...s]:[...s],payer:this.feePayer,signers:g})?a.push(new wi().add(...i.instructions,...s)):a.push(new wi().add(...s)),u.push(Array.from(new Set(s.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),s=[p]}}),s.length>0){let f=[...new Set(s.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);li({instructions:n?[...i.instructions,...s]:[...s],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new wi().add(...i.instructions,...s)):a.push(new wi().add(...s)),u.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(m=this.owner)!=null&&m.signer&&u.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:u,instructionTypes:this.instructionTypes,execute:async p=>{var h;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await Ko(this.connection,this.blockhashCommitment);if(a.forEach(async(P,T)=>{P.recentBlockhash=k,u[T].length&&P.sign(...u[T])}),uo(a),(h=this.owner)!=null&&h.isKeyPair){if(f){let P=0,T=[];for(let I of a){if(++P,P<=b){T.push("tx skipped");continue}let x=await ns(this.connection,I,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});T.push(x)}return{txIds:T,signedTxs:a}}return{txIds:await Promise.all(a.map(async P=>await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let P=await this.signAllTransactions(a.slice(b,a.length)),T=[...a.slice(0,b),...P];if(f){let I=0,x=[],S=async()=>{if(!T[I])return;I<b&&(x.push({txId:"",status:"success",signedTx:T[I]}),y==null||y([...x]),I++,S());let B=await this.connection.sendRawTransaction(T[I].serialize(),{skipPreflight:A});x.push({txId:B,status:"sent",signedTx:T[I]}),y==null||y([...x]),I++;let R=!1,L=null,O=null,C=M=>{L!==null&&clearInterval(L),O!==null&&this.connection.removeSignatureListener(O);let D=x.findIndex(E=>E.txId===B);if(D>-1){if(x[D].status==="error"||x[D].status==="success")return;x[D].status=M.err?"error":"success"}y==null||y([...x]),M.err||S()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var M;if(R){clearInterval(L);return}try{let D=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:1});D&&(R=!0,clearInterval(L),C({err:((M=D.meta)==null?void 0:M.err)||null}),console.log("tx status from getTransaction:",B))}catch(D){R=!0,clearInterval(L),console.error("getTransaction timeout:",D,B)}},gr)),O=this.connection.onSignature(B,M=>{if(R){this.connection.removeSignatureListener(O);return}R=!0,C(M)},"confirmed"),this.connection.getSignatureStatus(B)};return await S(),{txIds:x.map(B=>B.txId),signedTxs:T}}else{let I=[];for(let x=0;x<T.length;x+=1){let S=await this.connection.sendRawTransaction(T[x].serialize(),{skipPreflight:A});I.push(S)}return{txIds:I,signedTxs:T}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var h;let k=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=k,a=Ue(k,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),u=N(N({},this.cluster==="devnet"?await ts(this.connection):await es(this.connection)),o),s=Array.from(new Set([...this.lookupTableAddress,...i])),c=[];for(let P of s)u[P]===void 0&&c.push(new Oo(P));let l=await Ja({connection:this.connection,address:c});for(let[P,T]of Object.entries(l))u[P]=T;let m=t?yr(t):{instructions:[],instructionTypes:[]},p=await Ko(this.connection,this.blockhashCommitment),f=this.signers.reduce((P,T)=>_(N({},P),{[T.publicKey.toBase58()]:T}),{}),y=[],b=[],g=[],A=0;if(this.allInstructions.forEach(P=>{let T=[...g,P],I=t?[...m.instructions,...T]:T;if(P!==n[A]&&g.length<r&&(mi({instructions:I,payer:this.feePayer,lookupTableAddressAccount:u})||mi({instructions:T,payer:this.feePayer,lookupTableAddressAccount:u})))g.push(P);else{if(g.length===0)throw Error("item ins too big");A+=P===n[A]?1:0;let x={};for(let S of[...new Set(s)])u[S]!==void 0&&(x[S]=u[S]);if(t&&mi({instructions:[...m.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:u,recentBlockhash:p})){let S=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...m.instructions,...g]}).compileToV0Message(Object.values(u));y.push(new Ti(S))}else{let S=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(u));y.push(new Ti(S))}b.push(Array.from(new Set(g.map(S=>S.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat())).map(S=>f[S]).filter(S=>S!==void 0)),g=[P]}}),g.length>0){let T=[...new Set(g.map(I=>I.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(I=>f[I]).filter(I=>I!==void 0);if(t&&mi({instructions:[...m.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:u,recentBlockhash:p})){let I=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...m.instructions,...g]}).compileToV0Message(Object.values(u));y.push(new Ti(I))}else{let I=new ki({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(u));y.push(new Ti(I))}b.push(T)}return(h=this.owner)!=null&&h.signer&&b.forEach(P=>{P.some(T=>T.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),y.forEach((P,T)=>{P.sign(b[T])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var R;let{sequentially:T,onTxUpdate:I,skipTxCount:x=0,recentBlockHash:S,skipPreflight:B=!0}=P||{};if(y.map(async(L,O)=>{b[O].length&&L.sign(b[O]),S&&(L.message.recentBlockhash=S)}),uo(y),(R=this.owner)!=null&&R.isKeyPair){if(T){let L=0,O=[];for(let C of y){if(++L,L<=x){console.log("skip tx: ",L),O.push("tx skipped");continue}let M=await this.connection.sendTransaction(C,{skipPreflight:B});await br(this.connection,M),O.push(M)}return{txIds:O,signedTxs:y}}return{txIds:await Promise.all(y.map(async L=>await this.connection.sendTransaction(L,{skipPreflight:B}))),signedTxs:y}}if(this.signAllTransactions){let L=await this.signAllTransactions(y.slice(x,y.length)),O=[...y.slice(0,x),...L];if(T){let C=0,M=[],D=async()=>{if(!O[C])return;if(C<x){M.push({txId:"",status:"success",signedTx:O[C]}),I==null||I([...M]),C++,D();return}let E=await this.connection.sendTransaction(O[C],{skipPreflight:B});M.push({txId:E,status:"sent",signedTx:O[C]}),I==null||I([...M]),C++;let z=!1,Q=null,Y=null,ee=ne=>{Q!==null&&clearInterval(Q),Y!==null&&this.connection.removeSignatureListener(Y);let $=M.findIndex(pe=>pe.txId===E);if($>-1){if(M[$].status==="error"||M[$].status==="success")return;M[$].status=ne.err?"error":"success"}I==null||I([...M]),ne.err||D()};this.loopMultiTxStatus&&(Q=setInterval(async()=>{var ne;if(z){clearInterval(Q);return}try{let $=await this.connection.getTransaction(E,{commitment:"confirmed",maxSupportedTransactionVersion:1});$&&(z=!0,clearInterval(Q),ee({err:((ne=$.meta)==null?void 0:ne.err)||null}),console.log("tx status from getTransaction:",E))}catch($){z=!0,clearInterval(Q),console.error("getTransaction timeout:",$,E)}},gr)),Y=this.connection.onSignature(E,ne=>{if(z){this.connection.removeSignatureListener(Y);return}z=!0,ee(ne)},"confirmed"),this.connection.getSignatureStatus(E)};return D(),{txIds:[],signedTxs:O}}else{let C=[];for(let M=0;M<O.length;M+=1){let D=await this.connection.sendTransaction(O[M],{skipPreflight:B});C.push(D)}return{txIds:C,signedTxs:O}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};var os=(...d)=>d.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),$e=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ke(t)}createTxBuilder(e){return this.scope.checkOwner(),new Pr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,loopMultiTxStatus:this.scope.loopMultiTxStatus,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(os(e))}logInfo(...e){this.logger.info(os(e))}logAndCreateError(...e){let t=os(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{ASSOCIATED_TOKEN_PROGRAM_ID as ds,TOKEN_2022_PROGRAM_ID as rt,TOKEN_PROGRAM_ID as Ne}from"@solana/spl-token";import{Keypair as Kr,PublicKey as H,SystemProgram as kn,TransactionInstruction as tt}from"@solana/web3.js";import Cr from"bn.js";import Ie from"bn.js";var Oe=new Ie(1).shln(64),No=64,Cd=new Ie(1).shln(128),wn=new Ie(1).shln(64).subn(1),Rd=new Ie(1).shln(128).subn(1),en=-443636,tn=443636,wt=new Ie("4295048016"),kt=new Ie("79226673521066979257578248091"),fc=new Ie("59543866431248"),yc=new Ie("184467440737095516"),bc=new Ie("15793534762490258745"),gc=16,Ar=512,Wt=60,cw=new Ie("18446743708227953217"),Pc=[{bit:0,factor:new Ie("fffcb933bd6fb800",16)},{bit:1,factor:new Ie("fff97272373d4000",16)},{bit:2,factor:new Ie("fff2e50f5f657000",16)},{bit:3,factor:new Ie("ffe5caca7e10f000",16)},{bit:4,factor:new Ie("ffcb9843d60f7000",16)},{bit:5,factor:new Ie("ff973b41fa98e800",16)},{bit:6,factor:new Ie("ff2ea16466c9b000",16)},{bit:7,factor:new Ie("fe5dee046a9a3800",16)},{bit:8,factor:new Ie("fcbe86c7900bb000",16)},{bit:9,factor:new Ie("f987a7253ac65800",16)},{bit:10,factor:new Ie("f3392b0822bb6000",16)},{bit:11,factor:new Ie("e7159475a2caf000",16)},{bit:12,factor:new Ie("d097f3bdfd2f2000",16)},{bit:13,factor:new Ie("a9f746462d9f8000",16)},{bit:14,factor:new Ie("70d869a156f31c00",16)},{bit:15,factor:new Ie("31be135f97ed3200",16)},{bit:16,factor:new Ie("9aa508b5b85a500",16)},{bit:17,factor:new Ie("5d6af8dedc582c",16)},{bit:18,factor:new Ie("2216e584f5fa",16)}],On=1e6;var wr=1e5,hi=1e4,Ac=1e4,wc=1e5;var Bi=3,kc=100;var Tc=10,hc=100,Mo=14;var J=new Ie(0),ot=new Ie(1),lw=new Ie(-1),kr={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:[]};var mw=new Ie("18446744073700000000");var is=v([Ae(8),V("bump"),ve("index"),F("owner"),ze("protocolFeeRate"),ze("tradeFeeRate"),ve("tickSpacing"),ze("fundFeeRate"),Z(ze(),1),F("fundOwner"),Z(w(),3)]),Ld=v([ze("blockTimestamp"),xo("tickCumulative"),Z(w(),4)]),Bc=v([Ae(8),Ze("initialized"),w("recentEpoch"),ve("observationIndex"),F("poolId"),Z(Ld,kc,"observations"),Z(w(),4)]),Od=v([ve("filterPeriod"),ve("decayPeriod"),ve("reductionFactor"),ze("dynamicFeeControl"),ze("maxVolatilityAccumulator"),st("tickSpacingIndexReference"),ze("volatilityReference"),ze("volatilityAccumulator"),w("lastUpdateTimestamp"),Z(V(),46)]),Nd=v([V("state"),w("openTime"),w("endTime"),w("lastUpdateTime"),ae("emissionsPerSecondX64"),w("totalEmissioned"),w("claimed"),F("mint"),F("vault"),F("creator"),ae("growthGlobalX64")]),lo=v([Ae(8),V("bump"),F("configId"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),V("mintDecimalsA"),V("mintDecimalsB"),ve("tickSpacing"),ae("liquidity"),ae("sqrtPriceX64"),st("tickCurrent"),ze(),ae("feeGrowthGlobalX64A"),ae("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Z(ae(),4),V("status"),V("feeOn"),Ae(6),Z(Nd,Bi,"rewardInfos"),Ae(8*16,"tickArrayBitmap"),Z(w(),4),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),w("recentEpoch"),Od.replicate("dynamicFeeInfo"),Z(w(),46)]),Md=v([ae("growthInsideLastX64"),w("rewardAmountOwed")]),Tr=v([Ae(8),V("bump"),F("nftMint"),F("poolId"),st("tickLower"),st("tickUpper"),ae("liquidity"),ae("feeGrowthInsideLastX64A"),ae("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),Z(Md,Bi,"rewardInfos"),w("recentEpoch"),Z(w(),7)]),yw=v([Ae(8),V("bump"),F("poolId"),st("tickLower"),st("tickUpper"),ae("liquidity"),ae("feeGrowthInsideLastX64A"),ae("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),Z(ae(),Bi,"rewardGrowthInside"),w("recentEpoch"),Z(w(),7)]),Fd=v([st("tick"),Ru("liquidityNet"),ae("liquidityGross"),ae("feeGrowthOutsideX64A"),ae("feeGrowthOutsideX64B"),Z(ae(),Bi,"rewardGrowthsOutsideX64"),w("orderPhase"),w("ordersAmount"),w("partFilledOrdersRemaining"),ae("unfilledRatioX64"),Z(ze(),3)]),Fo=v([Ae(8),F("poolId"),st("startTickIndex"),Z(Fd,Wt,"ticks"),V("initializedTickCount"),w("recentEpoch"),Z(V(),107)]),Ic=v([Ae(8),V("bump"),Z(F(),Tc,"operationOwners"),Z(F(),hc,"whitelistMints")]),mo=v([Ae(8),F("poolId"),F("owner"),st("tick"),Ze("zeroForOne"),w("orderPhase"),w("totalAmount"),w("filledAmount"),w("settleBase"),w("settleOutput"),w("openTime"),ae("unfilledRatioX64"),Z(w(),4)]),hr=v([Ae(8),F("poolId"),Ae(8*8*Mo,"positiveTickArrayBitmap"),Ae(8*8*Mo,"negativeTickArrayBitmap")]),bw=v([Ae(8),ve("index"),ve("filterPeriod"),ve("decayPeriod"),ve("reductionFactor"),ze("dynamicFeeControl"),ze("maxVolatilityAccumulator"),Z(w(),8)]),xc=v([Ae(8),F("wallet"),V("nonceIndex"),w("orderNonce"),Z(w(),4)]),gw=v([w(),V("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Z(w(),8)]),Sc=v([Ae(8),V("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),w("recentEpoch"),Z(w(),8)]);import vd from"bn.js";function Br(d){let e=Buffer.alloc(2);return e.writeUInt16LE(d),e}function rs(d){let e=Buffer.alloc(4);return e.writeInt32LE(d),e}function Kc(d){let e=Buffer.alloc(4);return e.writeInt32BE(d),e}function Cc(d){return(typeof d=="number"||typeof d=="bigint")&&(d=new vd(d.toString())),d.toArrayLike(Buffer,"be",8)}function Rc(d){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,d),new Uint8Array(e)}var xw=Buffer.from("amm_config","utf8"),Ir=Buffer.from("pool","utf8"),as=Buffer.from("pool_vault","utf8"),_d=Buffer.from("pool_reward_vault","utf8"),Lc=Buffer.from("position","utf8"),Vd=Buffer.from("tick_array","utf8"),Ed=Buffer.from("operation","utf8"),Dd=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Wd=Buffer.from("observation","utf8"),qd=Buffer.from("support_mint","utf8"),Sw=Buffer.from("dynamic_fee_config","utf8"),Ud=Buffer.from("permission","utf8");function Oc(d,e,t,n){return se([Ir,e.toBuffer(),t.toBuffer(),n.toBuffer()],d)}function Nc(d,e){return se([Ud,e.toBuffer()],d)}function Mc(d,e,t,n,o){return se([Ir,e.toBuffer(),t.toBuffer(),n.toBuffer(),Br(o)],d)}function Qt(d,e,t){return se([as,e.toBuffer(),t.toBuffer()],d)}function Fc(d,e,t){return se([_d,e.toBuffer(),t.toBuffer()],d)}function Le(d,e,t){return se([Vd,e.toBuffer(),Kc(t)],d)}function mn(d,e,t,n){return se([Lc,e.toBuffer(),rs(t),rs(n)],d)}function Zt(d,e){return se([Lc,e.toBuffer()],d)}function Nn(d){return se([Buffer.from("metadata","utf8"),Pn.toBuffer(),d.toBuffer()],Pn)}function Ii(d){return se([Ed],d)}function De(d,e){return se([Dd,e.toBuffer()],d)}function ss(d,e){return se([Wd,e.toBuffer()],d)}function po(d,e){return se([qd,e.toBuffer()],d)}function vc(d,e,t,n){return se([e.toBuffer(),t.toBuffer(),Cc(n)],d)}function _c(d,e,t){return se([e.toBuffer(),Rc(t)],d)}var Vc=Buffer.from("locked_position","utf8");function us(d,e){return se([Vc,e.toBuffer()],d)}function vo(d,e){return se([Vc,e.toBuffer()],d)}import{sha256 as Yd}from"js-sha256";import Ec from"bn.js";import cs from"decimal.js";function et(d,e,t){if(t.isZero())throw new Error("Division by zero");return d.mul(e).div(t)}function Xe(d,e,t){if(t.isZero())throw new Error("Division by zero");let n=d.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function xr(d,e){return d.div(e).add(d.mod(e).isZero()?J:ot)}var Ow=new Ec(1).shln(256).subn(1);function Dc(d){return d.isZero()?-1:d.bitLength()-1}function Wc(d,e){return new cs(d.toString()).div(cs.pow(2,64)).toDecimalPlaces(e)}function fo(d){return new Ec(d.mul(cs.pow(2,64)).floor().toFixed())}import Gd from"bn.js";import yt from"bn.js";import _o from"decimal.js";var Mn=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let i=[],r=e.length*8,a=0,u=r-1;if(o){let l=o.tick/(t*Wt)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(l)):u=Math.min(r-1,Math.floor(l))}if(a>u)return i;let s=Math.floor(a/8),c=Math.floor(u/8);for(let l=s;l<=c;l++){if(!e[l])continue;let m=l===s?a%8:0,p=l===c?u%8:7;for(let f=m;f<=p;f++)e[l]&1<<f&&i.push((l*8+f+n)*t*Wt)}return i}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Wt/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-Ar,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Wt/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:Ar,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let i=[];if(o){let u=Math.floor(o.tick/Wt/t);if(o.valueType==="gte"&&u>=-512)return i}let r=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(Wt*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(Wt*t))+7680:0;e:for(let u=0;u<Mo;u++){let s=Mo-1-u;for(let c=0;c<512;c++){let l=u*512+c;if(l>r)break e;if(l<a)continue;let m=s*64+Math.floor(c/8);if(!e[m]){c=Math.floor(c/8)*8+7;continue}if(e[m]&1<<c%8){let p=(u*512+c-7680)*Wt*t;if(i.push(p),n!==void 0&&i.length>=n)break e}}}return i}static findTickArrayStartIndex({tickSpacing:e,poolBitmap:t,tickArrayBitmap:n,findInfo:o}){if(o.type==="all")return[...this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap}),...this.findPoolBitmap({tickSpacing:e,bitmap:t}),...this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap})];let i=ge.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:r}=o;if(o.type==="oneForZero"){let a={tick:i,valueType:"gte"},u=[()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}),()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a})];return this.collectUntil(u,r)}if(o.type==="zeroForOne"){let a={tick:i,valueType:"lte"},u=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((s,c)=>c-s),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((s,c)=>c-s),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((s,c)=>c-s)];return this.collectUntil(u,r)}throw new Error("find info type check error")}static collectUntil(e,t){let n=[];for(let o of e){if(t!==void 0&&n.length>=t)break;n.push(...o())}return n.slice(0,t)}static findTickArrayAddress(e){return this.findTickArrayStartIndex(e).map(t=>Le(e.programId,e.poolId,t).publicKey)}static maxTickInTickarrayBitmap(e){return e*Wt*Ar}},ge=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(re.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(re.isInitialized({data:e.ticks[n]}))return e.ticks[n]}static nextInitalizedTick({data:e,currentTickIndex:t,tickSpacing:n,zeroForOne:o}){if(this.getTickArrayStartIndex(t,n)!==e.startTickIndex)return;let r=Math.floor((t-e.startTickIndex)/n);if(o){for(let a=r;a>=0;a--)if(re.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=r+1;a<Wt;a++)if(re.isInitialized({data:e.ticks[a]}))return e.ticks[a]}static getTickArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=this.getTickArrayStartIndex(e,t);return Math.floor((e-n)/t)}static tickCount(e){return Wt*e}static getMinTick(e){return Math.ceil(en/e)*e}static getMaxTick(e){return Math.floor(tn/e)*e}},re=class{static isInitialized({data:e}){return this.hasLiquidity({data:e})||this.hasLimitOrders({data:e})}static hasLimitOrders({data:e}){return!e.ordersAmount.isZero()||!e.partFilledOrdersRemaining.isZero()}static hasLiquidity({data:e}){return!e.liquidityGross.isZero()}static isValidTick(e){return e>=en&&e<=tn}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${en}, ${tn}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=Oe.clone();for(let{bit:o,factor:i}of Pc)(t&1<<o)!==0&&(n=et(n,i,Oe));return e>0&&(n=et(Oe,Oe,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=re.getPriceAtTick(t,!1);return et(e,o,Oe)}else{let o=re.getPriceAtTick(t,!0);return et(e,Oe,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=re.getPriceAtTick(t,!0);return Xe(e,o,Oe)}else{let o=re.getPriceAtTick(t,!1);return Xe(e,Oe,o)}}static limitOrderUnfilledAmount({tick:e}){return e.ordersAmount.add(e.partFilledOrdersRemaining)}static matchLimitOrder({tick:e,swapAmount:t,swapDirectionZeroForOne:n,isBaseInput:o,feeRate:i,isFeeOnInput:r}){let a={amountIn:J,amountOut:J,ammFeeAmount:J},u=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||u.isZero())return a;if(o)r?(a.ammFeeAmount=Xe(t,new yt(i),Ye),a.amountIn=t.sub(a.ammFeeAmount)):a.amountIn=t,a.amountOut=this.getLimitOrderOutput({amountIn:a.amountIn,tick:e.tick,zeroForOne:n}),a.amountOut.gt(u)&&(a.amountOut=u,a.amountIn=this.getLimitOrderInput({amountOut:u,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=Xe(a.amountIn,new yt(i),Ye.sub(new yt(i)))));else{let l=yt.min(t,u);r?a.amountOut=l:a.amountOut=yt.min(Xe(l,Ye,Ye.sub(new yt(i))),u),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=Xe(a.amountIn,new yt(i),Ye.sub(new yt(i))))}let s=J;e.partFilledOrdersRemaining.gt(J)&&(s=yt.min(e.partFilledOrdersRemaining,a.amountOut),s.gt(J)&&(e.unfilledRatioX64=et(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(s),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(s));let c=a.amountOut.sub(s);if(c.gt(J)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(c))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add(ot),e.unfilledRatioX64=et(Oe,e.ordersAmount.sub(c),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(c),e.ordersAmount=J}return r||(a.ammFeeAmount=Xe(a.amountOut,new yt(i),Ye),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(Oe.subn(1)).div(Oe):n.mul(n).div(Oe)}static getTickAtSqrtPrice(e){if(!(e.gte(wt)&&e.lte(kt)))throw Error("SqrtPriceX64");let t=Dc(e),n=t-64,o;n>=0?o=new yt(n).shln(32):o=new yt(-n).shln(32).neg();let i;t>=64?i=e.shrn(t-63):i=e.shln(63-t);let r=new yt(0),a=new yt(1).shln(63);for(let b=0;b<gc&&!a.isZero();b++){i=i.mul(i);let g=i.shrn(127).toNumber();i=i.shrn(63+g),g&&(r=r.add(a)),a=a.shrn(1)}let u=r.shrn(32),c=o.add(u).mul(fc),l=c.sub(yc),m=c.add(bc),p=this.signedShrn64(l),f=this.signedShrn64(m);return p===f?p:re.getSqrtPriceAtTick(f).lte(e)?f:p}static signedShrn64(e){if(e.isNeg()){let t=new yt(1).shln(64),n=e.div(t);return!e.mod(t).isZero()&&e.isNeg()?n.subn(1).toNumber():n.toNumber()}else return e.shrn(64).toNumber()}static sqrtPriceX64ToPrice(e,t,n){let o=e.mul(e),i=t-n,r=20,a=new yt(10).pow(new yt(r)),u=o.mul(a),s=new yt(1).shln(128),l=u.div(s).toString();for(;l.length<=r;)l="0"+l;let m=l.slice(0,-r),p=l.slice(-r),f=m+"."+p;return new _o(f).mul(new _o(10).pow(i))}static tickToPrice(e,t,n){let o=re.getSqrtPriceAtTick(e);return this.sqrtPriceX64ToPrice(o,t,n)}static priceToTick(e,t,n){let i=e.div(Math.pow(10,t-n)).log().div(new _o(1.0001).log()).floor();return Math.max(en,Math.min(tn,i.toNumber()))}static priceToSqrtPriceX64(e,t,n){let r=e.div(Math.pow(10,t-n)).sqrt().mul(new _o(2).pow(64));return new yt(r.toFixed(0))}static toTickIndex(e,t){return e>=0?e-e%t:e-e%t-(e%t!==0?t:0)}static getPriceAndTick({price:e,mintADecimals:t,mintBDecimals:n,zeroForOne:o,tickSpacing:i}){let r=e.clamp(1/10**Math.max(t,n),Number.MAX_SAFE_INTEGER);o||(r=new _o(1).div(r));let a=re.toTickIndex(re.priceToTick(r,t,n),i),u=re.tickToPrice(a,t,n);return{price:o?u:new _o(1).div(u),tick:a}}};async function qc(d,e,t,n,o,i,r=!0){let a=[],u=De(d,t).publicKey,s=await e.getAccountInfo(u),c=Mn.findTickArrayAddress({programId:d,poolId:t,poolBitmap:i,tickArrayBitmap:hr.decode(s.data),tickSpacing:o,findInfo:{type:r?"zeroForOne":"oneForZero",tickArrayCurrent:n}});return(await gt(e,c)).forEach((m,p)=>{m&&a.push({address:c[p],value:Fo.decode(m.data)})}),a}var zn=class{static isFullyFilled({orderInfo:e}){return e.totalAmount.eq(e.filledAmount)}static getUnFilledAmount({orderInfo:e}){return e.totalAmount.sub(e.filledAmount)}static settleFilledOrder({orderInfo:e,tickInfo:t}){if(e.settleBase.isZero())return J;if(e.orderPhase.eq(t.orderPhase))return J;if(e.orderPhase.add(ot).eq(t.orderPhase)){let n=e.settleBase.mul(t.unfilledRatioX64),o=e.unfilledRatioX64,i=n.div(o),r=n.mod(o).isZero(),a=e.settleBase.sub(i);if(a.isZero())return J;let u=r?a:a.sub(ot);return re.getLimitOrderOutput({amountIn:u,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput)}else{if(e.orderPhase.add(new Gd(2)).lte(t.orderPhase))return re.getLimitOrderOutput({amountIn:e.settleBase,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput);throw Error("invalid order phase")}}};import Sr from"bn.js";import Uc from"decimal.js";var it=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.shln(No),r=t.sub(e);if(!e.gt(J))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?xr(Xe(i,r,t),e):et(i,r,t).div(e);if(a.gt(wn))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=o?Xe(n,t.sub(e),Oe):et(n,t.sub(e),Oe);if(i.gt(wn))throw Error("MaxTokenOverflow");return i}static addDelta(e,t){if(t.isNeg()){let n=t.neg();if(e.lt(n))throw new Error("Liquidity underflow");return e.sub(n)}else return e.add(t)}static getLiquidityFromAmountA(e,t,n){if(n.isZero())return J;e.gt(t)&&([e,t]=[t,e]);let o=et(e,t,Oe),i=t.sub(e);return et(n,o,i)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return J;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return et(n,Oe,o)}static getLiquidityFromAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return this.getLiquidityFromAmountA(t,n,o);if(e.lt(n)){let r=this.getLiquidityFromAmountA(e,n,o),a=this.getLiquidityFromAmountB(t,e,i);return r.lt(a)?r:a}else return this.getLiquidityFromAmountB(t,n,i)}static getAmountsForLiquidity(e,t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let r=J,a=J;return e.lte(t)?r=this.getDeltaAmountAUnsigned(t,n,o,i):e.lt(n)?(r=this.getDeltaAmountAUnsigned(e,n,o,i),a=this.getDeltaAmountBUnsigned(t,e,o,i)):a=this.getDeltaAmountBUnsigned(t,n,o,i),{amountA:r,amountB:a}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:u,amountB:s}=this.getAmountsForLiquidity(e,t,n,o,r),c=i?1+a:1-a,l=new Sr(new Uc(u.toString()).mul(c).toFixed(0)),m=new Sr(new Uc(s.toString()).mul(c).toFixed(0));return{amountSlippageA:l,amountSlippageB:m}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:e,sqrtPriceLowerX64:t,sqrtPriceUpperX64:n,amountInfo:o}){let i;if(o.type==="liquidity")i=o.amount;else if(o.type==="amountA")i=e.gte(n)?J:this.getLiquidityFromAmountA(Sr.max(e,t),n,o.amount);else if(o.type==="amountB")i=e.lte(t)?J:this.getLiquidityFromAmountB(t,Sr.min(e,n),o.amount);else throw Error("amount info type check error");return N({liquidity:i},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};import{PublicKey as _t}from"@solana/web3.js";import Tt from"bn.js";import{TOKEN_2022_PROGRAM_ID as Gc,TOKEN_PROGRAM_ID as Xd}from"@solana/spl-token";import he from"decimal.js";import Eo from"bn.js";import ct from"bn.js";var xi=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let i=t.shln(No);if(o){let r=n.mul(e),a=i.add(r);if(a.gte(i))return Xe(i,e,a);let u=et(i,ot,e);return Xe(i,ot,u.add(n))}else{let r=n.mul(e);if(i.lte(r))throw new Error("Insufficient liquidity for token0 removal");let a=i.sub(r);return Xe(i,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let i=n.shln(No).div(t);return e.add(i)}else{let i=xr(n.shln(No),t);return e.sub(i)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(J))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(J))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceFromOutput(e,t,n,o){if(!e.gt(J))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(J))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var dn=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:i}){let r={amountSpecifiedRemaining:t,amountCalculated:J,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:J,protocolFee:J,fundFee:J,liquidity:e.liquidity,sqrtPriceNextX64:J,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:Vo.getDynamicFeeInfo({poolInfo:e})};return r.dynamicFeeInfo&&(r.tickSpacingIndex=Ki.tickSpacingIndexFromTick(r.tick,r.tickSpacing),Vo.updateReference({dynamicFeeInfo:r.dynamicFeeInfo,tickSpacingIndex:r.tickSpacingIndex,currentTimestamp:i})),r}static getTargetPriceBasedOnNextTick({data:e,tickNext:t,zeroForOne:n,sqrtPriceLimitX64:o}){e.tickNext=t,e.tickNext<en?e.tickNext=en:e.tickNext>tn&&(e.tickNext=tn),e.sqrtPriceNextX64=re.getSqrtPriceAtTick(e.tickNext);let i;if(n&&e.sqrtPriceNextX64.lt(o)||!n&&e.sqrtPriceNextX64.gt(o)?i=o:i=e.sqrtPriceNextX64,n){if(e.tick<e.tickNext)throw Error("data.tick < data.tickNext");if(e.sqrtPriceX64.lt(e.sqrtPriceNextX64))throw Error("data.sqrtPriceX64.lt(data.sqrtPriceNextX64)");if(e.sqrtPriceX64.lt(i))throw Error("data.sqrtPriceX64.lt(targetPrice)")}else{if(e.tickNext<=e.tick)throw Error("data.tickNext <= data.tick");if(e.sqrtPriceNextX64.lt(e.sqrtPriceX64))throw Error("data.sqrtPriceNextX64.lt(data.sqrtPriceX64)");if(i.lt(e.sqrtPriceX64))throw Error("targetPrice.lt(data.sqrtPriceX64)")}return i}static updateVolatilityAccumulator({state:e}){!e.dynamicFeeInfo||Vo.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,i=wc*hi*hi,r=Xe(new ct(e.dynamicFeeControl),new ct(o),new ct(i)).toNumber();return r>wr?wr:r}static getTotalFeeRate({data:e}){if(e.dynamicFeeInfo){let t=this.computeDynamicFeeRate({data:e.dynamicFeeInfo,tickSpacing:e.tickSpacing}),n=e.baseFeeRate+t;return Math.min(wr,n)}return e.baseFeeRate}static getSpacingBoundedPrice({data:e,targetPrice:t,zeroForOne:n}){if(e.dynamicFeeInfo===void 0)return{isSkipped:!0,boundedPrice:t};if(e.liquidity.isZero()||e.dynamicFeeInfo.volatilityAccumulator===e.dynamicFeeInfo.maxVolatilityAccumulator)return{isSkipped:!0,boundedPrice:t};let o=e.tickSpacing,i=n?e.tickSpacingIndex*o:(e.tickSpacingIndex+1)*o,r=Math.max(en,Math.min(tn,i)),a=re.getSqrtPriceAtTick(r);return n?{isSkipped:!1,boundedPrice:ct.max(t,a)}:{isSkipped:!1,boundedPrice:ct.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:i,isFeeOnInput:r,protocolFeeRate:a,fundFeeRate:u}){let s=r?t.add(o):t;i?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(s),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(s)),this.splitFee({state:e,feeAmount:o,protocolFeeRate:a,fundFeeRate:u})}static updateDynamicFeeIndex({state:e,zeroForOne:t,isSkippedTickSpacing:n}){if(e.dynamicFeeInfo!==void 0){if(n){let o=e.sqrtPriceX64.eq(e.sqrtPriceNextX64)?e.tickNext:e.tick,i=Ki.tickSpacingIndexFromTick(o,e.tickSpacing);!t&&o%e.tickSpacing===0&&(i=i-1),e.tickSpacingIndex=i,e.dynamicFeeInfo.volatilityAccumulator!==e.dynamicFeeInfo.maxVolatilityAccumulator&&this.updateVolatilityAccumulator({state:e})}e.tickSpacingIndex+=t?-1:1}}static splitFee({state:e,feeAmount:t,protocolFeeRate:n,fundFeeRate:o}){let i=t;if(n.gt(J)){let r=t.mul(n).div(new ct(Ye));e.protocolFee=e.protocolFee.add(r),i=i.sub(r)}if(o.gt(J)){let r=t.mul(o).div(new ct(Ye));e.fundFee=e.fundFee.add(r),i=i.sub(r)}if(e.liquidity.gt(J)){let r=et(i,Oe,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(r),e.lpFee=e.lpFee.add(i)}}},Si=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:J,amountIn:J,amountOut:J,feeAmount:J}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:i}){if(i)try{return o?it.getDeltaAmountAUnsigned(t,e,n,!0):it.getDeltaAmountBUnsigned(e,t,n,!0)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}else try{return o?it.getDeltaAmountBUnsigned(t,e,n,!1):it.getDeltaAmountAUnsigned(e,t,n,!1)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}}static computeSwap(e,t,n,o,i,r,a,u){let s=this.newSwapComputationResult({});if(r){let l=u?et(o,new ct(On-i),new ct(On)):o,m=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});m!==null&&(s.amountIn=m),s.sqrtPriceNextX64=m!==null&&l.gte(s.amountIn)?t:xi.getNextSqrtPriceFromInput(e,n,l,a)}else{let l=u?o:Xe(o,new ct(On),new ct(On-i)),m=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});m!==null&&(s.amountOut=m),s.sqrtPriceNextX64=m!==null&&l.gte(s.amountOut)?t:xi.getNextSqrtPriceFromOutput(e,n,l,a)}if(a){if(!s.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(s.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let c=t.eq(s.sqrtPriceNextX64);if(a?(c&&r||(s.amountIn=it.getDeltaAmountAUnsigned(s.sqrtPriceNextX64,e,n,!0)),c&&!r||(s.amountOut=it.getDeltaAmountBUnsigned(s.sqrtPriceNextX64,e,n,!1))):(c&&r||(s.amountIn=it.getDeltaAmountBUnsigned(e,s.sqrtPriceNextX64,n,!0)),c&&!r||(s.amountOut=it.getDeltaAmountAUnsigned(e,s.sqrtPriceNextX64,n,!1))),r)u?s.sqrtPriceNextX64.eq(t)?s.feeAmount=Xe(s.amountIn,new ct(i),new ct(On-i)):s.feeAmount=o.sub(s.amountIn):(s.feeAmount=Xe(s.amountOut,new ct(i),new ct(On)),s.amountOut=s.amountOut.sub(s.feeAmount),c||(s.amountIn=o));else if(u)s.amountOut=ct.min(s.amountOut,o),s.feeAmount=Xe(s.amountIn,new ct(i),new ct(On-i));else{s.feeAmount=Xe(s.amountOut,new ct(i),new ct(On));let l=s.amountOut.sub(s.feeAmount);l.gt(o)?(s.feeAmount=s.amountOut.sub(o),s.amountOut=o):s.amountOut=l}return s}};function ls({programId:d,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:i,amountSpecified:r,sqrtPriceLimitX64:a,zeroForOne:u,isBaseInput:s,blockTimestamp:c,includeExtraTickArrays:l}){a.isZero()&&(a=u?new Eo(wt).addn(1):new Eo(kt).subn(1));let m=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:r,amountCalculated:J,feeAmount:J,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let p=l?Mn.findTickArrayAddress({programId:d,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:i,findInfo:{type:u?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(T=>T.toString()!==n[0].address.toString()):[],f=ge.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:y,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[m].value.startTickIndex===f,firstValidTickArrayStartIndex:n[m].value.startTickIndex},g=y,A=b,k=n[m],h=qt.isFeeOnInput(t.feeOn,u),P=dn.newValue({poolInfo:t,amountSpecified:r,zeroForOne:u,feeRate:o.tradeFeeRate,blockTimestamp:c});for(;!P.amountSpecifiedRemaining.isZero()&&!P.sqrtPriceX64.eq(a);){let T=(()=>{let S=ge.nextInitalizedTick({data:k.value,tickSpacing:P.tickSpacing,zeroForOne:u,currentTickIndex:P.tick});if(S!==void 0)return S;if(g){let B=n[++m];return B===void 0?void 0:(A=B.value.startTickIndex,k=B,ge.firstinitializedTick({data:B.value,zeroForOne:u}))}else return g=!0,ge.firstinitializedTick({data:k.value,zeroForOne:u})})();if(T===void 0)return{allTrade:!1,amountSpecifiedRemaining:P.amountSpecifiedRemaining,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:n.slice(0,m).map(S=>S.address)};let I=dn.getTargetPriceBasedOnNextTick({data:P,tickNext:T.tick,zeroForOne:u,sqrtPriceLimitX64:a}),x=P.liquidity;do{dn.updateVolatilityAccumulator({state:P});let S=dn.getTotalFeeRate({data:P}),{isSkipped:B,boundedPrice:R}=dn.getSpacingBoundedPrice({data:P,targetPrice:I,zeroForOne:u}),L=!P.sqrtPriceX64.eq(R),O;L?(O=Si.computeSwap(P.sqrtPriceX64,R,P.liquidity,P.amountSpecifiedRemaining,S,s,u,h),dn.applySwapAmounts({state:P,amountIn:O.amountIn,amountOut:O.amountOut,feeAmount:O.feeAmount,isBaseInput:s,isFeeOnInput:h,protocolFeeRate:new Eo(o.protocolFeeRate),fundFeeRate:new Eo(o.fundFeeRate)})):O=Si.newSwapComputationResult({sqrtPriceNextX64:R});let C=re.limitOrderUnfilledAmount({tick:T});if(P.sqrtPriceNextX64.eq(O.sqrtPriceNextX64)){let M=re.matchLimitOrder({tick:T,swapAmount:P.amountSpecifiedRemaining,swapDirectionZeroForOne:u,isBaseInput:s,feeRate:S,isFeeOnInput:h});if(M.amountIn.gt(J)&&dn.applySwapAmounts({state:P,amountIn:M.amountIn,amountOut:M.amountOut,feeAmount:M.ammFeeAmount,isBaseInput:s,isFeeOnInput:h,protocolFeeRate:new Eo(o.protocolFeeRate),fundFeeRate:new Eo(o.fundFeeRate)}),re.hasLiquidity({data:T})&&!re.hasLimitOrders({data:T})){let D=u?T.liquidityNet.neg():T.liquidityNet;x=it.addDelta(P.liquidity,D)}P.tick=u&&!re.hasLimitOrders({data:T})||!u&&re.hasLimitOrders({data:T})?P.tickNext-1:P.tickNext}else P.sqrtPriceX64.eq(O.sqrtPriceNextX64)||(P.tick=re.getTickAtSqrtPrice(O.sqrtPriceNextX64));if(P.sqrtPriceX64=O.sqrtPriceNextX64,dn.updateDynamicFeeIndex({state:P,zeroForOne:u,isSkippedTickSpacing:B}),P.amountSpecifiedRemaining.isZero()||P.sqrtPriceX64.eq(I)){let M=re.limitOrderUnfilledAmount({tick:T});if(!P.amountSpecifiedRemaining.isZero()&&!M.eq(C)&&!M.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);P.liquidity=x}return{allTrade:!0,amountSpecifiedRemaining:J,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:[...p,...n.slice(0,m+1+(l?1:0)).map(T=>T.address)]}}var Ki=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},Vo=class{static getDynamicFeeInfo({poolInfo:e}){if(!(e.dynamicFeeInfo.filterPeriod===0&&e.dynamicFeeInfo.decayPeriod===0&&e.dynamicFeeInfo.reductionFactor===0&&e.dynamicFeeInfo.dynamicFeeControl===0&&e.dynamicFeeInfo.maxVolatilityAccumulator===0&&e.dynamicFeeInfo.tickSpacingIndexReference===0&&e.dynamicFeeInfo.volatilityReference===0&&e.dynamicFeeInfo.volatilityAccumulator===0&&e.dynamicFeeInfo.lastUpdateTimestamp.isZero()))return e.dynamicFeeInfo}static updateReference({dynamicFeeInfo:e,tickSpacingIndex:t,currentTimestamp:n}){let o=n-e.lastUpdateTimestamp.toNumber();o<e.filterPeriod||(o<e.decayPeriod?(e.tickSpacingIndexReference=t,e.volatilityReference=Math.floor(e.volatilityAccumulator*e.reductionFactor/Ac),e.lastUpdateTimestamp=new Tt(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new Tt(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*hi;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},qt=class{static isFeeOnInput(e,t){switch(e){case 0:return!0;case 1:return t;case 2:return!t;default:return!0}}static isFeeOnTokenA(e,t){return e.feeOn===0?t:e.feeOn===1}static isOverflowDefaultTickarrayBitmap({tickSpacing:e,tickIndexs:t}){let{maxTickBoundary:n,minTickBoundary:o}=this.tickArrayStartIndexRange({tickSpacing:e});for(let i of t){let r=ge.getTickArrayStartIndex(i,e);if(r>=n||r<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=Mn.maxTickInTickarrayBitmap(e),n=-t;return t>tn&&(t=ge.getTickArrayStartIndex(tn,e)+ge.tickCount(e)),n<en&&(n=ge.getTickArrayStartIndex(en,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,u,s;let r=[];for(let c=0;c<i.length;c++){let l=i[c],m=(s=(a=t.rewardDefaultInfos[c])==null?void 0:a.mint.programId)!=null?s:(u=await e.getAccountInfo(l.mint))==null?void 0:u.owner;if(m===void 0)throw Error("get new reward mint info error");let p=_(N({},l),{perSecond:Wc(l.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new _t(m)});if(p.mint.equals(_t.default)||p.totalEmissioned.eq(wn))continue;if(n<=p.openTime.toNumber()||o.eq(J)){r.push(p);continue}let f=new Tt(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime);if(y.isZero()){r.push(p);continue}let b=Xe(y,p.emissionsPerSecondX64,Oe),g=et(y,p.emissionsPerSecondX64,o),A,k=p.totalEmissioned.add(b);if(k.lte(wn))A=k;else{let P=wn.sub(p.totalEmissioned);A=wn,g=et(P,Oe,o)}let h=p.growthGlobalX64.add(g);r.push(_(N({},p),{growthGlobalX64:h,totalEmissioned:A,lastUpdateTime:f}))}return r}},lt=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r,a){let u=o.toBase58()===e.mintA.address,s=ge.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:c,amountCalculated:l,feeAmount:m,sqrtPriceX64:p,accounts:f}=ls({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:y[1].address,value:y[1]})).filter(y=>u?y.value.startTickIndex<=s:y.value.startTickIndex>=s).sort((y,b)=>u?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:J,zeroForOne:u,isBaseInput:!0,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:c,expectedAmountOut:l,remainingAccounts:f,executionPrice:p,feeAmount:m}}static getInputAmountAndRemainAccounts(e,t,n,o,i,r,a){let u=o.toBase58()===e.mintB.address,s=ge.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:c,amountCalculated:l,feeAmount:m,sqrtPriceX64:p,accounts:f}=ls({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:new _t(y[0]),value:y[1]})).filter(y=>u?y.value.startTickIndex<=s:y.value.startTickIndex>=s).sort((y,b)=>u?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:J,zeroForOne:u,isBaseInput:!1,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:c,expectedAmountIn:l,remainingAccounts:f,executionPrice:p,feeAmount:m}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Me(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=hr.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let u of t){let s=[...Mn.findTickArrayStartIndex({tickSpacing:u.tickSpacing,poolBitmap:u.tickArrayBitmap,tickArrayBitmap:u.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:u.tickCurrent}}),...Mn.findTickArrayStartIndex({tickSpacing:u.tickSpacing,poolBitmap:u.tickArrayBitmap,tickArrayBitmap:u.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:u.tickCurrent}})];for(let c of s){let{publicKey:l}=Le(u.programId,u.id,c);o[l.toString()]===void 0&&(i.push({pubkey:l}),o[l.toString()]=u.id)}}let r=await Me(e,i,{batchRequest:n}),a={};for(let u of r){if(!u.accountInfo)continue;let s=o[u.pubkey.toString()];if(!s)continue;a[s.toString()]===void 0&&(a[s.toString()]={});let c=Fo.decode(u.accountInfo.data);a[s.toString()][c.startTickIndex]=_(N({},c),{address:u.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountIn:r,slippage:a,blockTimestamp:u,priceLimit:s=new he(0)}){var O;let c,l=o.toBase58()===e.mintA.address,[m,p]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];s.equals(new he(0))?c=l?wt.add(new Tt(1)):kt.sub(new Tt(1)):c=re.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let f=bt(r,m,i,!1),{allTrade:y,expectedAmountOut:b,remainingAccounts:g,executionPrice:A,feeAmount:k}=lt.getOutputAmountAndRemainAccounts(e,t,n,o,f.amount.sub((O=f.fee)!=null?O:J),u,c),h=bt(b,p,i,!1),P=re.sqrtPriceX64ToPrice(A,e.mintA.decimals,e.mintB.decimals),T=l?P:new he(1).div(P),I=b.mul(new Tt(Math.floor((1-a)*1e10))).div(new Tt(1e10)),x=bt(I,p,i,!1),S=l?e.currentPrice:new he(1).div(e.currentPrice),B=new he(T).sub(S).abs(),R=S,L=new At(new he(B).mul(10**15).toFixed(0),new he(R).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:f,amountOut:h,minAmountOut:x,expirationTime:Fn(f.expirationTime,h.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:L,fee:k,remainingAccounts:g,executionPriceX64:A}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:i,slippage:r,epochInfo:a,blockTimestamp:u,catchLiquidityInsufficient:s=!1}){let c=i.address===e.mintB.address,[l,m]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[p,f]=[new Ge(_(N({},l),{mint:l.address,isToken2022:l.programId===Gc.toBase58()})),new Ge(_(N({},m),{mint:m.address,isToken2022:m.programId===Gc.toBase58()}))],{allTrade:y,realAmountIn:b,amountOut:g,minAmountOut:A,expirationTime:k,currentPrice:h,executionPrice:P,priceImpact:T,fee:I,remainingAccounts:x,executionPriceX64:S}=lt.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new _t(l.address),amountIn:o,slippage:r,epochInfo:a,catchLiquidityInsufficient:s,blockTimestamp:u}),B=_(N({},b),{amount:new Re(p,b.amount),fee:b.fee===void 0?void 0:new Re(p,b.fee)}),R=_(N({},g),{amount:new Re(f,g.amount),fee:g.fee===void 0?void 0:new Re(f,g.fee)}),L=_(N({},A),{amount:new Re(f,A.amount),fee:A.fee===void 0?void 0:new Re(f,A.fee)}),O=new Ft({baseToken:p,denominator:new Tt(10).pow(new Tt(20+p.decimals)),quoteToken:f,numerator:h.mul(new he(10**(20+f.decimals))).toFixed(0)}),C=new Ft({baseToken:p,denominator:new Tt(10).pow(new Tt(20+p.decimals)),quoteToken:f,numerator:P.mul(new he(10**(20+f.decimals))).toFixed(0)}),M=new Re(p,I);return{allTrade:y,realAmountIn:B,amountOut:R,minAmountOut:L,expirationTime:k,currentPrice:O,executionPrice:C,priceImpact:T,fee:M,remainingAccounts:x,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountOut:r,slippage:a,priceLimit:u=new he(0),blockTimestamp:s}){var O;let c=o.toBase58()===e.mintA.address,l={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},m;u.equals(new he(0))?m=c?kt.sub(new Tt(1)):wt.add(new Tt(1)):m=re.priceToSqrtPriceX64(u,e.mintA.decimals,e.mintB.decimals);let p=bt(r,l[o.toString()],i,!0),{allTrade:f,expectedAmountIn:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=lt.getInputAmountAndRemainAccounts(e,t,n,o,p.amount.sub((O=p.fee)!=null?O:J),s,m),k=c?e.mintB.address:e.mintA.address,h=bt(y,l[k],i,!1),P=re.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=c?P:new he(1).div(P),I=y.mul(new Tt(Math.floor((1+a)*1e10))).div(new Tt(1e10)),x=bt(I,l[k],i,!0),S=c?e.currentPrice:new he(1).div(e.currentPrice),B=new he(T).sub(S).abs(),R=S,L=new At(new he(B).mul(10**15).toFixed(0),new he(R).mul(10**15).toFixed(0));return{allTrade:f,amountIn:h,maxAmountIn:x,realAmountOut:p,expirationTime:Fn(h.expirationTime,p.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:L,fee:A,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=re.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=re.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),u=Math.max(r,i.priceMin),c=Math.min(a,i.priceMax)-u,l=a-r,m=i.priceMax-i.priceMin,p;return c<=0?p=0:l===c?p=m/c:m===c?p=c/l:p=c/m*(c/l),{feeApr:i.feeApr*p,rewardsApr:[((f=i.rewardApr[0])!=null?f:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:u}){let s=n==="day"?1:n==="week"?7:n==="month"?30:0,c=e[n],l=o[St(e.mintA.address).toString()],m=o[St(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!c||!l||!m)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=re.priceToSqrtPriceX64(new he(e.price),e.mintA.decimals,e.mintB.decimals),b=re.getSqrtPriceAtTick(r),g=re.getSqrtPriceAtTick(a),{amountSlippageA:A,amountSlippageB:k}=it.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:P}=it.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),T=new he(A.toString()).div(new he(10).pow(p)).mul(l.value).add(new he(k.toString()).div(new he(10).pow(f)).mul(m.value)),I=new he(h.toString()).div(new he(10).pow(p)).mul(l.value).add(new he(P.toString()).div(new he(10).pow(f)).mul(m.value)),x=new he(1).div(T.add(I)),B=new he(c.volumeFee).mul(365).div(s).mul(x).mul(100).toNumber(),R=3600*24*365,L=e.rewardDefaultInfos.map(O=>{var D,E;let C=O.mint.decimals,M=o[O.mint.address];return u<((D=O.startTime)!=null?D:0)||u>((E=O.endTime)!=null?E:0)||!O.perSecond||!M||C===void 0?0:new he(M.value).mul(new he(O.perSecond).mul(R)).div(new he(10).pow(C)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:L,apr:B+L.reduce((O,C)=>O+C,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:u,amountHasFee:s}){var g,A;let c=re.priceToSqrtPriceX64(new he(e.price),e.mintA.decimals,e.mintB.decimals),l=re.getSqrtPriceAtTick(n),m=re.getSqrtPriceAtTick(o),p=bt(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!s),f=new Tt(new he(p.amount.sub((A=p.fee)!=null?A:J).toString()).toFixed(0)),y;if(c.lte(l))y=t?it.getLiquidityFromAmountA(l,m,f):new Tt(0);else if(c.lte(m)){let k=it.getLiquidityFromAmountA(c,m,f),h=it.getLiquidityFromAmountB(l,c,f);y=t?k:h}else y=t?new Tt(0):it.getLiquidityFromAmountB(l,m,f);let b=await lt.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,g,A,k;let u=re.getSqrtPriceAtTick(n),s=re.getSqrtPriceAtTick(o),c=it.getAmountsForLiquidity(re.priceToSqrtPriceX64(new he(t.price),t.mintA.decimals,t.mintB.decimals),u,s,i,a),[l,m]=[bt(c.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),bt(c.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],p=r*1e4,[f,y]=[bt(c.amountA.muln(1e4-p).divn(1e4),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),bt(c.amountB.muln(1e4-p).divn(1e4),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:i,amountA:l,amountB:m,amountSlippageA:f,amountSlippageB:y,expirationTime:Fn(l.expirationTime,m.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(s=>!n[s.id]).map(s=>new _t(s.id));(await gt(e,o)).forEach((s,c)=>{!s||(n[o[c].toBase58()]=lo.decode(s.data))});let r=t.map(s=>De(new _t(s.programId),new _t(s.id)).publicKey),a=await lt.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1}),u={};return t.reduce((s,c)=>_(N({},s),{[c.id]:_(N({accInfo:n[c.id]},n[c.id]),{id:new _t(c.id),version:6,programId:new _t(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:_(N({},c.config),{id:new _t(c.config.id),fundOwner:""}),currentPrice:new he(c.price),exBitmapAccount:De(new _t(c.programId),new _t(c.id)).publicKey,exBitmapInfo:a[De(new _t(c.programId),new _t(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber(),rewardInfos:n[c.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}static async fetchTickArrayInfo({connection:e,programId:t,poolId:n,tick:o,tickSpacing:i}){let r=ge.getTickArrayStartIndex(o,i),a=Le(t,n,r).publicKey,u=await e.getAccountInfo(a);if(!u)throw new Error(`tick array ${a.toBase58()} not found`);return Fo.decode(u.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(i=>{let r=ge.getTickArrayStartIndex(i.tick,i.tickSpacing);return Le(i.programId,i.poolId,r).publicKey});return(await gt(e,n)).map(i=>i&&Fo.decode(i.data))}},ms={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function zc(d,e){let t=e!=null?e:{};return _(N({},d),{type:"Concentrated",programId:d.programId.toString(),id:d.id.toString(),rewardDefaultInfos:d.rewardInfos.filter(n=>!n.mint.equals(_t.default)).map(n=>{var o,i;return{mint:ft({address:n.mint.toBase58(),programId:Xd.toBase58(),decimals:(o=t[n.mint.toBase58()].decimals)!=null?o:6}),perSecond:Number(n.emissionsPerSecondX64.divn(10**((i=t[n.mint.toBase58()].decimals)!=null?i:6)).toString()),startTime:n.openTime.toNumber(),endTime:n.endTime.toNumber()}}),rewardDefaultPoolInfos:"Clmm",price:d.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:d.ammConfig.tradeFeeRate,openTime:d.startTime.toString(),tvl:0,day:ms,week:ms,month:ms,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:_(N({},d.ammConfig),{id:d.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),hasDynamicFee:!1,feeOn:"",launchMigratePool:!1,tips:[]})}import Uk from"bn.js";function ht(d){let e=`global:${d}`;return Buffer.from(Yd.digest(e)).slice(0,8)}Bc.span;var Xc=ke("Raydium_Clmm"),Bt={createPool:ht("create_pool"),createCustomizablePool:ht("create_customizable_pool"),createPermissionedPool:ht("create_permissioned_pool"),openPositionV2:ht("open_position_v2"),openPositionWithToken22Nft:ht("open_position_with_token22_nft"),closePosition:ht("close_position"),increaseLiquidityV2:ht("increase_liquidity_v2"),decreaseLiquidityV2:ht("decrease_liquidity_v2"),initializeReward:ht("initialize_reward"),setRewardParams:ht("set_reward_params"),updateRewardInfos:ht("update_reward_infos"),collectRemainingRewards:ht("collect_remaining_rewards"),swapV2:ht("swap_v2"),openLimitOrder:ht("open_limit_order"),increaseLimitOrder:ht("increase_limit_order"),decreaseLimitOrder:ht("decrease_limit_order"),settleLimitOrder:ht("settle_limit_order"),closeLimitOrder:ht("close_limit_order")},Yc=[188,37,179,131,82,150,84,73],Hc=[16,72,250,198,14,162,212,19],ye=class{static createPoolInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([ae("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1},...(f!=null?f:[]).map(k=>({pubkey:k,isSigner:!1,isWritable:!1}))],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,startTime:J},g);let A=Buffer.from([...Bt.createPool,...g]);return new tt({keys:b,programId:e,data:A})}static createCustomizablePoolInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b){let g=v([ae("sqrtPriceX64"),V("collectFeeOn"),Ze("enableDynamicFee")]),A=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1},...y.map(P=>({pubkey:P,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],k=Buffer.alloc(g.span);g.encode({sqrtPriceX64:p,collectFeeOn:f,enableDynamicFee:b!==void 0},k);let h=Buffer.from([...Bt.createCustomizablePool,...k]);return new tt({keys:A,programId:e,data:h})}static createPermissionedPoolInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([ae("sqrtPriceX64"),V("collectFeeOn"),Ze("enableDynamicFee"),ve("seedIndex")]),P=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1},...A.map(x=>({pubkey:x,isSigner:!1,isWritable:!1})),...k?[{pubkey:k,isSigner:!1,isWritable:!1}]:[]],T=Buffer.alloc(h.span);h.encode({sqrtPriceX64:y,collectFeeOn:b,enableDynamicFee:k!==void 0,seedIndex:g},T);let I=Buffer.from([...Bt.createPermissionedPool,...T]);return new tt({keys:P,programId:e,data:I})}static initializeRewardInstruction(e,t,n,o,i,r,a,u,s,c,l,m){let p=v([w("openTime"),w("endTime"),ae("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:c,endTime:l,emissionsPerSecondX64:m},y);let b=Buffer.from([...Bt.initializeReward,...y]);return new tt({keys:f,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Bt.updateRewardInfos]);return new tt({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,i,r,a,u,s,c,l,m){let p=v([V("rewardIndex"),ae("emissionsPerSecondX64"),w("openTime"),w("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:s,emissionsPerSecondX64:m,openTime:c,endTime:l},y);let b=Buffer.from([...Bt.setRewardParams,...y]);return new tt({keys:f,programId:e,data:b})}static closePositionInstruction(e,t,n,o,i,r,a){let u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:r?rt:Ne,isSigner:!1,isWritable:!1}];a&&u.push({pubkey:a,isSigner:!1,isWritable:!0});let s=Buffer.from([...Bt.closePosition]);return new tt({keys:u,programId:e,data:s})}static openPositionV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I,x,S,B,R){let L=v([st("tickLower"),st("tickUpper"),st("tickArrayLowerStart"),st("tickArrayUpperStart"),ae("liquidity"),w("amountMaxA"),w("amountMaxB"),Ze("withMetadata"),V("optionBaseFlag"),Ze("baseFlag")]),O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:Ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...R?[{pubkey:R,isSigner:!1,isWritable:!0}]:[]],C=Buffer.alloc(L.span);L.encode({tickLower:A,tickUpper:k,tickArrayLowerStart:h,tickArrayUpperStart:P,liquidity:T,amountMaxA:I,amountMaxB:x,withMetadata:S,optionBaseFlag:B!==null?1:0,baseFlag:B!=null?B:!1},C);let M=Buffer.from([...Bt.openPositionV2,...C]);return new tt({keys:O,programId:e,data:M})}static increaseLiquidityV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([ae("liquidity"),w("amountMaxA"),w("amountMaxB"),V("optionBaseFlag"),Ze("baseFlag")]),P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[]],T=Buffer.alloc(h.span);h.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:A!==null?1:0,baseFlag:A!=null?A:!1},T);let I=Buffer.from([...Bt.increaseLiquidityV2,...T]);return new tt({keys:P,programId:e,data:I})}static decreaseLiquidityV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([ae("liquidity"),w("amountMinA"),w("amountMinB")]),P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:A},T);let I=Buffer.from([...Bt.decreaseLiquidityV2,...T]);return new tt({keys:P,programId:e,data:I})}static swapV2Instruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g){let A=v([w("amount"),w("otherAmountThreshold"),ae("sqrtPriceLimitX64"),Ze("isBaseInput")]),k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...l.map(T=>({pubkey:T,isSigner:!1,isWritable:!0}))],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let P=Buffer.from([...Bt.swapV2,...h]);return new tt({keys:k,programId:e,data:P})}static collectRemainingRewardsInstruction(e,t,n,o,i,r,a){let u=v([V("rewardIndex")]),s=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1}],c=Buffer.alloc(u.span);u.encode({rewardIndex:a},c);let l=Buffer.from([...Bt.collectRemainingRewards,...c]);return new tt({keys:s,programId:e,data:l})}static openPositionWithToken22NftInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I,x,S,B){let R=v([st("tickLower"),st("tickUpper"),st("tickArrayLowerStart"),st("tickArrayUpperStart"),ae("liquidity"),w("amountMaxA"),w("amountMaxB"),Ze("withMetadata"),V("optionBaseFlag"),Ze("baseFlag")]),L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Ot,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],O=Buffer.alloc(R.span);R.encode({tickLower:g,tickUpper:A,tickArrayLowerStart:k,tickArrayUpperStart:h,liquidity:P,amountMaxA:T,amountMaxB:I,withMetadata:x,optionBaseFlag:S!==null?1:0,baseFlag:S!=null?S:!1},O);let C=Buffer.from([...Bt.openPositionWithToken22Nft,...O]);return new tt({keys:L,programId:e,data:C})}static openLimitOrderInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A){let k=v([V("nonceIndex"),Ze("zeroForOne"),st("tickIndex"),w("amount")]),h=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1},...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],P=Buffer.alloc(k.span);k.encode({nonceIndex:f,zeroForOne:y,tickIndex:b,amount:g},P);let T=Buffer.from([...Bt.openLimitOrder,...P]);return new tt({keys:h,programId:e,data:T})}static increaseLimitOrderInstruction(e,t,n,o,i,r,a,u,s,c){let l=v([w("amount")]),m=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],p=Buffer.alloc(l.span);l.encode({amount:c},p);let f=Buffer.from([...Bt.increaseLimitOrder,...p]);return new tt({keys:m,programId:e,data:f})}static decreaseLimitOrderInstruction(e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("amount"),w("amountMin")]),b=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},...f?[{pubkey:f,isSigner:!1,isWritable:!0}]:[]],g=Buffer.alloc(y.span);y.encode({amount:m,amountMin:p},g);let A=Buffer.from([...Bt.decreaseLimitOrder,...g]);return new tt({keys:b,programId:e,data:A})}static settleLimitOrderInstruction(e,t,n,o,i,r,a,u,s){let c=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],l=Buffer.from([...Bt.settleLimitOrder]);return new tt({keys:c,programId:e,data:l})}static closeLimitOrderInstruction(e,t,n,o){let i=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],r=Buffer.from([...Bt.closeLimitOrder]);return new tt({keys:i,programId:e,data:r})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:u}=e,[s,c]=[new H(o.address),new H(i.address)],[l,m]=[new H(o.programId||Ne),new H(i.programId||Ne)],{publicKey:p}=Oc(t,r,s,c),{publicKey:f}=ss(t,p),{publicKey:y}=Qt(t,p,s),{publicKey:b}=Qt(t,p,c),g=De(t,p).publicKey,A=[this.createPoolInstruction(t,p,n,r,f,s,y,l,c,b,m,g,a,u)];return{signers:[],instructions:A,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:p,observationId:f,exBitmapAccount:g,mintA:s,mintB:c,mintAProgram:l,mintBProgram:m,mintAVault:y,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:u,payer:s,seedIndex:c}=e,[l,m]=[new H(o.address),new H(i.address)],[p,f]=[new H(o.programId||Ne),new H(i.programId||Ne)],{publicKey:y}=Mc(t,r,l,m,c),{publicKey:b}=Nc(t,s),{publicKey:g}=ss(t,y),{publicKey:A}=Qt(t,y,l),{publicKey:k}=Qt(t,y,m),h=De(t,y).publicKey,P=[this.createPoolInstruction(t,y,n,r,g,l,A,p,m,k,f,h,a,u)];return{signers:[],instructions:P,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:y,observationId:g,exBitmapAccount:h,mintA:l,mintB:m,mintAProgram:p,mintBProgram:f,mintAVault:A,mintBVault:k,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:u,base:s,withMetadata:c,getEphemeralSigners:l,nft2022:m}){let p=[],[f,y]=[new H(e.programId),new H(e.id)],b;if(l)b=new H((await l(1))[0]);else{let B=Kr.generate();p.push(B),b=B.publicKey}let g=ge.getTickArrayStartIndex(o,e.config.tickSpacing),A=ge.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:k}=Le(f,y,g),{publicKey:h}=Le(f,y,A),{publicKey:P}=m?te(n.wallet,b,rt):te(n.wallet,b,Ne),{publicKey:T}=Nn(b),{publicKey:I}=Zt(f,b),{publicKey:x}=mn(f,y,o,i),S=m?this.openPositionWithToken22NftInstruction(f,n.feePayer,y,n.wallet,b,P,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,r,a,u,c==="create",s&&s==="MintA",qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?De(f,y).publicKey:void 0):this.openPositionV2Instruction(f,n.feePayer,y,n.wallet,b,P,T,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,r,a,u,c==="create",null,qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?De(f,y).publicKey:void 0);return{signers:p,instructions:[S],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:k,tickArrayUpper:h,positionNftAccount:P,metadataAccount:T,personalPosition:I,protocolPosition:x}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:u,liquidity:s,withMetadata:c,getEphemeralSigners:l,nft2022:m}){let p=[],[f,y]=[new H(e.programId),new H(e.id)],b;if(l)b=new H((await l(1))[0]);else{let B=Kr.generate();p.push(B),b=B.publicKey}let g=ge.getTickArrayStartIndex(o,e.config.tickSpacing),A=ge.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:k}=Le(f,y,g),{publicKey:h}=Le(f,y,A),{publicKey:P}=m?te(n.wallet,b,rt):te(n.wallet,b,Ne),{publicKey:T}=Nn(b),{publicKey:I}=Zt(f,b),{publicKey:x}=mn(f,y,o,i),S=m?this.openPositionWithToken22NftInstruction(f,n.feePayer,y,n.wallet,b,P,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,s,!r||r==="MintA"?a:u,!r||r==="MintA"?u:a,c==="create",r&&r==="MintA",qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?De(f,y).publicKey:void 0):this.openPositionV2Instruction(f,n.feePayer,y,n.wallet,b,P,T,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,g,A,J,r==="MintA"?a:u,r==="MintA"?u:a,c==="create",r==="MintA",qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?De(f,y).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:k,tickArrayUpper:h,positionNftAccount:P,metadataAccount:T,personalPosition:I,protocolPosition:x},instructions:[S],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:u,base:s,withMetadata:c,getEphemeralSigners:l,nft2022:m}){let p,f=[];if(l)p=new H((await l(1))[0]);else{let B=Kr.generate();f.push(B),p=B.publicKey}let[y,b]=[new H(e.programId),new H(e.id)],g=ge.getTickArrayStartIndex(o,e.config.tickSpacing),A=ge.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:k}=Le(y,b,g),{publicKey:h}=Le(y,b,A),{publicKey:P}=m?te(n.wallet,p,rt):te(n.wallet,p,Ne),{publicKey:T}=Nn(p),{publicKey:I}=Zt(y,p),{publicKey:x}=mn(y,b,o,i),S=m?this.openPositionWithToken22NftInstruction(y,n.wallet,b,n.wallet,p,P,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,g,A,r,a,u,c==="create",s&&s==="MintA",qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?De(y,b).publicKey:void 0):this.openPositionV2Instruction(y,n.wallet,b,n.wallet,p,P,T,x,k,h,I,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,g,A,r,a,u,c==="create",null,qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,A]})?De(y,b).publicKey:void 0);return{address:{nftMint:p,tickArrayLower:k,tickArrayUpper:h,positionNftAccount:P,metadataAccount:T,personalPosition:I,protocolPosition:x},instructions:[S],signers:f,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new H(e.programId),a=i?te(n.wallet,o.nftMint,rt).publicKey:te(n.wallet,o.nftMint,Ne).publicKey,{publicKey:u}=Zt(r,o.nftMint),s=[];return s.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,u,!!i,new H(e.id))),{address:{positionNftAccount:a,personalPosition:u},signers:[],instructions:s,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:u}){let[s,c]=[new H(e.programId),new H(e.id)],l=ge.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=ge.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Le(s,c,l),{publicKey:f}=Le(s,c,m),{publicKey:y}=u?te(o.wallet,n.nftMint,rt):te(o.wallet,n.nftMint,Ne),{publicKey:b}=Zt(s,n.nftMint),{publicKey:g}=mn(s,c,n.tickLower,n.tickUpper),A=this.increaseLiquidityV2Instruction(s,o.wallet,y,b,c,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),i,r,a,null,qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[l,m]})?De(s,c).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:u}){let[s,c]=[new H(e.programId),new H(e.id)],l=ge.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=ge.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Le(s,c,l),{publicKey:f}=Le(s,c,m),{publicKey:y}=u?te(o.wallet,n.nftMint,rt):te(o.wallet,n.nftMint,Ne),{publicKey:b}=Zt(s,n.nftMint),{publicKey:g}=mn(s,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increaseLiquidityV2Instruction(s,o.wallet,y,b,c,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),J,i==="MintA"?r:a,i==="MintA"?a:r,i==="MintA",qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[l,m]})?De(s,c).publicKey:void 0)],signers:[],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:u,nft2022:s}){let[c,l]=[new H(e.programId),new H(e.id)],m=ge.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),p=ge.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Le(c,l,m),{publicKey:y}=Le(c,l,p),{publicKey:b}=s?te(o.wallet,n.nftMint,rt):te(o.wallet,n.nftMint,u),{publicKey:g}=Zt(c,n.nftMint),{publicKey:A}=mn(c,l,n.tickLower,n.tickUpper),k=new Map;for(let I=0;I<t.rewardInfos.length;I++)k.set(t.rewardInfos[I].mint.address,o.rewardAccounts[I]);let h=[];for(let I=0;I<t.rewardInfos.length;I++){let x=t.rewardInfos[I].mint.address,S=k.get(x);S&&h.push({poolRewardVault:new H(t.rewardInfos[I].vault),ownerRewardVault:S,rewardMint:new H(x)})}let P=[],T=this.decreaseLiquidityV2Instruction(c,o.wallet,b,g,l,A,f,y,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),h,i,r,a,qt.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[m,p]})?De(c,l).publicKey:void 0);return P.push(T),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:P,instructionTypes:[X.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:s}){let[c,l]=[new H(e.programId),new H(e.id)],[m,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address.toString()===i.toString(),g=[this.swapV2Instruction(c,o.wallet,l,new H(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?m:p,b?p:m,b?f:y,b?y:f,s,n,r,a,u,!0,De(c,l).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:u,remainingAccounts:s}){let[c,l]=[new H(e.programId),new H(e.id)],[m,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintB.address.toString()===i.toBase58(),g=[this.swapV2Instruction(c,o.wallet,l,new H(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?m:p,b?p:m,b?f:y,b?y:f,s,n,r,a,u,!1,De(c,l).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(e.id)],a=Fc(i,r,o.mint).publicKey,u=Ii(i).publicKey,s=[this.initializeRewardInstruction(i,n.wallet,r,u,new H(e.config.id),n.tokenAccount,o.programId,o.mint,a,new Cr(o.openTime),new Cr(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:s,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(e.id)],a,u,s;for(let m=0;m<e.rewardDefaultInfos.length;m++)e.rewardDefaultInfos[m].mint.address===o.mint.toString()&&(a=m,u=new H(t.rewardInfos[m].vault),s=new H(t.rewardInfos[m].mint.address));(a===void 0||u===void 0)&&Xc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=Ii(i).publicKey,l=[this.setRewardParamsInstruction(i,n.wallet,r,c,new H(e.config.id),n.tokenAccount,u,s,a,new Cr(o.openTime),new Cr(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:c},signers:[],instructions:l,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new H(e.programId),new H(e.id)],a,u;for(let c=0;c<e.rewardDefaultInfos.length;c++)e.rewardDefaultInfos[c].mint.address===o.toString()&&(a=c,u=new H(t.rewardInfos[c].vault));(a===void 0||u===void 0)&&Xc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let s=[this.collectRemainingRewardsInstruction(i,n.wallet,r,n.tokenAccount,u,o,a)];return{address:{rewardVault:u},signers:[],instructions:s,instructionTypes:[X.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:u}){let s=[],c;if(u)c=new H((await u(1))[0]);else{let g=Kr.generate();s.push(g),c=g.publicKey}let l=a?te(i,r,rt).publicKey:te(i,r,Ne).publicKey,{publicKey:m}=Zt(n,r),p=vo(e,c).publicKey,f=te(i,c,Ne).publicKey,y=Nn(c).publicKey,b=ye.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:l,positionId:m,lockPositionId:p,lockNftMint:c,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:te(t,r,a?rt:Ne).publicKey,positionNftProgram:a?rt:Ne});return{address:{positionId:m,lockPositionId:p,lockNftAccount:f,lockNftMint:c,positionNftAccount:l,metadataAccount:y},instructions:[b],signers:s,instructionTypes:[X.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:u,authPositionNftAccount:s,positionNftProgram:c,lockPositionId:l,lockNftMint:m,lockNftAccount:p,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}],g=v([Ze("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...Yc,...A]);return new tt({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=te(o,i,Ne),{publicKey:a}=Zt(n,i),u=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:us(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:kn.programId,isSigner:!1,isWritable:!1}];return new tt({keys:u,programId:e,data:Buffer.from(Yc)})}static harvestLockPositionInstruction(e){let[t,n]=[new H(e.poolKeys.programId),new H(e.poolKeys.id)],o=ge.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=ge.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=Le(t,n,o),{publicKey:a}=Le(t,n,i),{publicKey:u}=te(e.owner,e.ownerPosition.nftMint,Ne),{publicKey:s}=Zt(t,e.ownerPosition.nftMint),{publicKey:c}=mn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),l=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)l.push({poolRewardVault:new H(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new H(e.poolKeys.rewardInfos[f].mint.address)});let m=[...l.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:us(e.programId,s).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,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:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...m];return new tt({keys:p,programId:e.programId,data:Buffer.from(Hc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:u,positionId:s,poolId:c,protocolPosition:l,vaultA:m,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:h,exTickArrayBitmap:P}){let T=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...h.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...T];return new tt({keys:I,programId:e,data:Buffer.from(Hc)})}};var Ci=class extends $e{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var P;let{programId:t,owner:n=((P=this.scope.owner)==null?void 0:P.publicKey)||G.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:u,txVersion:s,txTipConfig:c,feePayer:l}=e,m=this.createTxBuilder(l),[p,f,y]=new at(new G(o.address).toBuffer()).gt(new at(new G(i.address).toBuffer()))?[i,o,new _n(1).div(a)]:[o,i,a],b=re.priceToSqrtPriceX64(y,p.decimals,f.decimals),g=[],A=[];p.programId===nn.toBase58()&&A.push(po(t,new G(p.address)).publicKey),f.programId===nn.toBase58()&&A.push(po(t,new G(f.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(A)).forEach((T,I)=>{T&&g.push(A[I])});let h=await ye.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:f,ammConfigId:r.id,initialPriceX64:b,extendMintAccount:g});return m.addInstruction(h),m.addCustomComputeBudget(u),m.addTipInstruction(c),m.versionBuild({txVersion:s,extInfo:{address:_(N({},h.address),{observationId:h.address.observationId.toBase58(),exBitmapAccount:h.address.exBitmapAccount.toBase58(),programId:t.toString(),id:h.address.poolId.toString(),mintA:p,mintB:f,openTime:"0",vault:{A:h.address.mintAVault.toString(),B:h.address.mintBVault.toString()},rewardInfos:[],config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:h.address.poolId.toString(),mintA:p,mintB:f,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:y.toNumber(),config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]},feeOn:"Both",hasDynamicFee:!1,launchMigratePool:!1,burnPercent:0,tips:[]},kr)}})}async createCustomizablePool(e){var B;let{programId:t,owner:n=((B=this.scope.owner)==null?void 0:B.publicKey)||G.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOnMint:u,dynamicFeeConfig:s,computeBudgetConfig:c,txVersion:l,txTipConfig:m,feePayer:p,addSupportMintExt:f}=e;if(e.collectFeeOn!==void 0)throw Error("SDK no longer supports this parameter, please use collectFeeOnMint");let y=this.createTxBuilder(p),[b,g,A]=new at(new G(o.address).toBuffer()).gt(new at(new G(i.address).toBuffer()))?[i,o,new _n(1).div(r)]:[o,i,r],k=re.priceToSqrtPriceX64(A,b.decimals,g.decimals),h=[],P=[];f&&(b.programId===nn.toBase58()&&P.push(po(t,new G(b.address)).publicKey),g.programId===nn.toBase58()&&P.push(po(t,new G(g.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((L,O)=>{L&&h.push(P[O])}));let{address:T}=await ye.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:g,ammConfigId:a.id,initialPriceX64:k,extendMintAccount:h}),I=[];if(s){if(!await this.scope.connection.getAccountInfo(s))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",s.toBase58()),I.push({pubkey:s,isSigner:!1,isWritable:!1})}let x;u===void 0?x=0:u.equals(T.mintA)?x=1:u.equals(T.mintB)?x=2:this.logAndCreateError("param collectFeeOnMint find error");let S=ye.createCustomizablePoolInstruction(t,T.poolId,this.scope.ownerPubKey,a.id,T.mintA,T.mintB,T.mintAVault,T.mintBVault,T.observationId,T.exBitmapAccount,T.mintAProgram,T.mintBProgram,k,x,[...h,...I.map(R=>R.pubkey)],s);return y.addInstruction({instructions:[S]}),y.addCustomComputeBudget(c),y.addTipInstruction(m),y.versionBuild({txVersion:l,extInfo:{address:_(N({},T),{observationId:T.observationId.toBase58(),exBitmapAccount:T.exBitmapAccount.toBase58(),programId:t.toString(),id:T.poolId.toString(),mintA:b,mintB:g,openTime:"0",vault:{A:T.mintAVault.toString(),B:T.mintBVault.toString()},rewardInfos:[],config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:T.poolId.toString(),mintA:b,mintB:g,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:x,feeOn:x===0?"Both":x===1?"TokenA":"TokenB",hasDynamicFee:!!s,tips:[],launchMigratePool:!1},kr)}})}async createPermissionedPool(e){var L;let{programId:t,owner:n=((L=this.scope.owner)==null?void 0:L.publicKey)||G.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOnMint:u,dynamicFeeConfig:s,computeBudgetConfig:c,txVersion:l,txTipConfig:m,feePayer:p,addSupportMintExt:f}=e;if(e.collectFeeOn!==void 0)throw Error("SDK no longer supports this parameter, please use collectFeeOnMint");let y=this.createTxBuilder(p),[b,g,A]=new at(new G(o.address).toBuffer()).gt(new at(new G(i.address).toBuffer()))?[i,o,new _n(1).div(r)]:[o,i,r],k=re.priceToSqrtPriceX64(A,b.decimals,g.decimals),h=[],P=[];f&&(b.programId===nn.toBase58()&&P.push(po(t,new G(b.address)).publicKey),g.programId===nn.toBase58()&&P.push(po(t,new G(g.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((C,M)=>{C&&h.push(P[M])}));let T=p!=null?p:this.scope.ownerPubKey,I=Math.floor(Math.random()*Math.pow(2,16))+1,{address:x}=await ye.createPermissionedPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:g,ammConfigId:a.id,initialPriceX64:k,extendMintAccount:h,payer:T,seedIndex:I}),S=[];if(s){if(!await this.scope.connection.getAccountInfo(s))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",s.toBase58()),S.push({pubkey:s,isSigner:!1,isWritable:!1})}let B;u===void 0?B=0:u.equals(x.mintA)?B=1:u.equals(x.mintB)?B=2:this.logAndCreateError("param collectFeeOnMint find error");let R=ye.createPermissionedPoolInstruction(t,T,T,x.permission,a.id,x.poolId,x.mintA,x.mintB,x.mintAVault,x.mintBVault,x.observationId,x.exBitmapAccount,x.mintAProgram,x.mintBProgram,k,B,I,[...h,...S.map(O=>O.pubkey)],s);return y.addInstruction({instructions:[R]}),y.addCustomComputeBudget(c),y.addTipInstruction(m),y.versionBuild({txVersion:l,extInfo:{address:_(N({},x),{observationId:x.observationId.toBase58(),exBitmapAccount:x.exBitmapAccount.toBase58(),programId:t.toString(),id:x.poolId.toString(),mintA:b,mintB:g,openTime:"0",vault:{A:x.mintAVault.toString(),B:x.mintBVault.toString()},rewardInfos:[],config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:x.poolId.toString(),mintA:b,mintB:g,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:B,feeOn:B===0?"Both":B===1?"TokenA":"TokenB",hasDynamicFee:!!s,tips:[],launchMigratePool:!1},kr)}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r=null,baseAmount:a,otherAmountMax:u,liquidity:s=new at(0),nft2022:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:p="create",getEphemeralSigners:f,computeBudgetConfig:y,txTipConfig:b,txVersion:g,feePayer:A}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let k=this.createTxBuilder(A),h=null,P=null,T=n.useSOLBalance&&e.mintA.address===j.toString(),I=n.useSOLBalance&&e.mintB.address===j.toString(),[x,S]=r==="MintA"?[a,u]:[u,a],{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:l,checkCreateATAOwner:m});B&&(h=B),k.addInstruction(R||{});let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:I||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:l,checkCreateATAOwner:m});L&&(P=L),k.addInstruction(O||{}),(!h||!P)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:h==null?void 0:h.toBase58(),ownerTokenAccountB:P==null?void 0:P.toBase58()});let C=t!=null?t:await this.getClmmPoolKeys(e.id.toString()),M=await ye.openPositionFromBaseInstructions({poolInfo:e,poolKeys:C,ownerInfo:_(N({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:u,liquidity:s,withMetadata:p,getEphemeralSigners:f,nft2022:c});return k.addInstruction(M),k.addCustomComputeBudget(y),k.addTipInstruction(b),k.versionBuild({txVersion:g,extInfo:N({},M.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,base:r=null,tickLower:a,tickUpper:u,liquidity:s,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:p,computeBudgetConfig:f,txTipConfig:y,getEphemeralSigners:b,nft2022:g,feePayer:A}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let k=this.createTxBuilder(A),h=null,P=null,T=n.useSOLBalance&&e.mintA.address===j.toBase58(),I=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:c,checkCreateATAOwner:l});x&&(h=x),k.addInstruction(S||{});let{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:I||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:c,checkCreateATAOwner:l});B&&(P=B),k.addInstruction(R||{}),(h===void 0||P===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let L=t||await this.getClmmPoolKeys(e.id.toString()),O=await ye.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:L,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},tickLower:a,tickUpper:u,liquidity:s,amountMaxA:o,amountMaxB:i,base:r,withMetadata:m,getEphemeralSigners:b,nft2022:g});return k.addInstruction(O),k.addCustomComputeBudget(f),k.addTipInstruction(y),k.versionBuild({txVersion:p,extInfo:{address:O.address}})}async increasePositionFromLiquidity(e){var B;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:u,associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=u.useSOLBalance&&t.mintA.address===j.toString(),k=u.useSOLBalance&&t.mintB.address===j.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:s,checkCreateATAOwner:c});h&&(b=h),y.addInstruction(P||{});let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:s,checkCreateATAOwner:c});T&&(g=T),y.addInstruction(I||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),S=ye.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(B=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:B.owner.equals(nn)});return y.addInstruction(S),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:p,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:c,txTipConfig:l,txVersion:m,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===j.toString(),A=a.useSOLBalance&&t.mintB.address===j.toString(),{account:k,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:s});k&&(y=k),f.addInstruction(h||{});let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:s});P&&(b=P),f.addInstruction(T||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),x=ye.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(nn)});return f.addInstruction(x),f.addCustomComputeBudget(c),f.addTipInstruction(l),f.versionBuild({txVersion:m,extInfo:{address:x.address}})}async decreaseLiquidity(e){var O;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:u,associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=i.useSOLBalance&&t.mintA.address===j.toString(),g=i.useSOLBalance&&t.mintB.address===j.toString(),A,k,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:s,checkCreateATAOwner:c});A=h,P&&y.addInstruction(P);let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:s,checkCreateATAOwner:c});k=T,I&&y.addInstruction(I);let x=n!=null?n:await this.getClmmPoolKeys(t.id),S=[];for(let C of x.rewardInfos){let M=i.useSOLBalance&&C.mint.address===j.toString(),D;if(C.mint.address===t.mintA.address)D=A;else if(C.mint.address===t.mintB.address)D=k;else{let{account:E,instructionParams:z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(C.mint.programId),mint:new G(C.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,associatedOnly:M?!1:s,checkCreateATAOwner:c});D=E,z&&y.addInstruction(z)}S.push(D)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let B=(O=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:O.owner.equals(nn),R=await ye.decreaseLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:S},liquidity:u,amountMinA:r,amountMinB:a,nft2022:B});y.addInstruction({instructions:R.instructions,instructionTypes:[X.ClmmDecreasePosition]});let L=N({},R.address);if(i.closePosition){let C=await ye.closePositionInstructions({poolInfo:t,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:B});y.addInstruction({endInstructions:C.instructions,endInstructionTypes:C.instructionTypes}),L=N(N({},L),C.address)}return y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=ai,authProgramId:n=dr,poolProgramId:o=Rn,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:u,txVersion:s,getEphemeralSigners:c,feePayer:l}=e,m=this.createTxBuilder(l),p=await ye.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:c,nft2022:(f=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:f.owner.equals(nn)});return m.addInstruction(p),m.addCustomComputeBudget(a),m.addTipInstruction(u),m.versionBuild({txVersion:s,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=ai,authProgramId:n=dr,clmmProgram:o=Rn,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:c,txTipConfig:l,txVersion:m,feePayer:p}=e,f=i||await this.getClmmPoolKeys(r.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let g=Tr.decode(b.data),A=a.useSOLBalance&&f.mintA.address===j.toString(),k=a.useSOLBalance&&f.mintB.address===j.toString(),h,P,{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new G(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:u,checkCreateATAOwner:s});h=T,I&&y.addInstruction(I);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new G(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:s});P=x,S&&y.addInstruction(S);let B={},R=[];for(let ee of f.rewardInfos){let ne=a.useSOLBalance&&ee.mint.address===j.toString(),$=B[ee.mint.address];if(!$){let{account:pe,instructionParams:oe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(ee.mint.programId),mint:new G(ee.mint.address),notUseTokenAccount:ne,owner:this.scope.ownerPubKey,skipCloseAccount:!ne,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ne?!1:u});$=pe,oe&&y.addInstruction(oe)}B[ee.mint.address]=$,R.push($)}let L=vo(t,r.lockNftMint).publicKey,O=te(this.scope.ownerPubKey,r.lockNftMint,Do).publicKey,C=ge.getTickArrayStartIndex(g.tickLower,f.config.tickSpacing),M=ge.getTickArrayStartIndex(g.tickUpper,f.config.tickSpacing),{publicKey:D}=Le(new G(f.programId),r.poolId,C),{publicKey:E}=Le(new G(f.programId),r.poolId,M),{publicKey:z}=mn(new G(f.programId),r.poolId,g.tickLower,g.tickUpper),Q=[];for(let ee=0;ee<f.rewardInfos.length;ee++){let ne=f.rewardInfos[ee].mint.address,$=B[ne];$&&Q.push({poolRewardVault:new G(f.rewardInfos[ee].vault),ownerRewardVault:$,rewardMint:new G(ne)})}let Y=await ye.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:O,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:z,vaultA:new G(f.vault.A),vaultB:new G(f.vault.B),tickArrayLower:D,tickArrayUpper:E,userVaultA:h,userVaultB:P,mintA:new G(f.mintA.address),mintB:new G(f.mintB.address),rewardAccounts:Q,exTickArrayBitmap:De(o,r.poolId).publicKey});return y.addInstruction({instructions:[Y],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(c),y.addTipInstruction(l),y.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var l;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let u=this.createTxBuilder(a),s=t!=null?t:await this.getClmmPoolKeys(e.id),c=ye.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(l=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:l.owner.equals(nn)});return u.addCustomComputeBudget(i),u.addTipInstruction(r),u.addInstruction(c).versionBuild({txVersion:o,extInfo:{address:c.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let s=this.createTxBuilder(u),c=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(n.mint.programId),mint:new G(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new at(new _n(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:o,checkCreateATAOwner:i});p&&s.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=ye.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new G(n.mint.programId),mint:new G(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:fo(n.perSecond)}});return s.addInstruction(y),s.addCustomComputeBudget(r),s.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:u,txVersion:s,feePayer:c}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let l=this.createTxBuilder(c),m={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===j.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(p.mint.programId),mint:new G(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new at(new _n(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});g&&l.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=ye.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new G(p.mint.programId),mint:new G(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:fo(p.perSecond)}});m=N(N({},m),k.address),l.addInstruction(k)}return l.addCustomComputeBudget(a),l.addTipInstruction(u),l.versionBuild({txVersion:s,extInfo:{address:m}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:u,feePayer:s}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(s),l=t.useSOLBalance&&n.mint.equals(j),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new at(new _n(n.perSecond.mul(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.mul(n.endTime-n.openTime))?n.perSecond.mul(n.endTime-n.openTime).toFixed(0):n.perSecond.mul(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:i});p&&c.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=ye.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:fo(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(r),c.addTipInstruction(a),c.versionBuild({txVersion:u,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:u,txVersion:s,feePayer:c}){let l=this.createTxBuilder(c),m={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===j.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(p.mint.programId),mint:new G(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new at(new _n(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});b&&l.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),A=ye.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new G(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:fo(p.perSecond)}});l.addInstruction(A),m=N(N({},m),A.address)}return l.addCustomComputeBudget(a),l.addTipInstruction(u),l.versionBuild({txVersion:s,extInfo:{address:m}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:u,feePayer:s}){let c=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());c||this.logAndCreateError("reward mint error","not found reward mint",n);let l=this.createTxBuilder(s),m=t.useSOLBalance&&n.equals(j),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(c.mint.programId),mint:n,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:o,checkCreateATAOwner:i});f&&l.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=ye.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return l.addInstruction(b),l.addCustomComputeBudget(r),l.addTipInstruction(a),l.versionBuild({txVersion:u,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c={};for(let l of n){let m=e.rewardDefaultInfos.find(A=>A.mint.address===l.toString());if(!m){this.logAndCreateError("reward mint error","not found reward mint",l);continue}let p=t.useSOLBalance&&l.equals(j),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(m.mint.programId),mint:l,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&s.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=ye.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:l});s.addInstruction(g),c=N(N({},c),g.address)}return s.addCustomComputeBudget(r),s.addTipInstruction(a),s.build({address:c})}async openLimitOrder({poolInfo:e,baseIn:t=!0,orderTick:n,amount:o,noneIndex:i=0,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,feePayer:s,computeBudgetConfig:c,txTipConfig:l,txVersion:m}){let p=new G(e.id),f=new G(e.programId),y=t?new G(e.mintA.address):new G(e.mintB.address),b=t?new G(e.mintB.address):new G(e.mintA.address),g=new G(e[t?"mintA":"mintB"].programId),A=new G(e[t?"mintB":"mintA"].programId),k=y.equals(j),h=b.equals(j),P=a.useSOLBalance&&k,T=a.useSOLBalance&&h,I=this.createTxBuilder(),x=P||!u?void 0:te(this.scope.ownerPubKey,y,g).publicKey;if(x)I.addInstruction({instructions:[vn(this.scope.ownerPubKey,x,this.scope.ownerPubKey,y,g)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:g,mint:y,notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!P});x=z,Q&&I.addInstruction(Q)}let S=T||!u?void 0:te(this.scope.ownerPubKey,b,A).publicKey;if(S)I.addInstruction({instructions:[vn(this.scope.ownerPubKey,S,this.scope.ownerPubKey,b,A)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A,mint:b,notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!T});S=z,Q&&I.addInstruction(Q)}let B=_c(f,this.scope.ownerPubKey,i).publicKey,R=await this.scope.connection.getAccountInfo(B),L=R?xc.decode(R.data).orderNonce:new at(0),O=vc(f,s||this.scope.ownerPubKey,B,L).publicKey,C=ge.getTickArrayStartIndex(n,e.config.tickSpacing),M=Le(f,p,C).publicKey,D=Qt(f,p,new G(e[t?"mintA":"mintB"].address)).publicKey,E=Qt(f,p,new G(e[t?"mintB":"mintA"].address)).publicKey;return I.addInstruction({instructions:[ye.openLimitOrderInstruction(f,s||this.scope.ownerPubKey,p,M,B,O,x,S,D,E,y,b,g,i,t,n,o,r)]}),I.addCustomComputeBudget(c),I.addTipInstruction(l),I.versionBuild({txVersion:m,extInfo:{limitOrder:O}})}async increaseLimitOrder({poolInfo:e,limitOrder:t,amount:n,ownerInfo:o={useSOLBalance:!0},associatedOnly:i=!0,feePayer:r,computeBudgetConfig:a,txTipConfig:u,txVersion:s}){let c=new G(e.id),l=new G(e.programId),m=await this.scope.connection.getAccountInfo(t);m||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let p=mo.decode(m.data),f=p.zeroForOne?new G(e.mintA.address):new G(e.mintB.address),y=new G(e[p.zeroForOne?"mintA":"mintB"].programId),b=f.equals(j),g=o.useSOLBalance&&b,A=this.createTxBuilder(),k=g||!i?void 0:te(this.scope.ownerPubKey,f,y).publicKey;if(k)A.addInstruction({instructions:[vn(this.scope.ownerPubKey,k,this.scope.ownerPubKey,f,y)]});else{let{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y,mint:f,notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:n},associatedOnly:!g});k=I,x&&A.addInstruction(x)}let h=Qt(l,c,new G(e[p.zeroForOne?"mintA":"mintB"].address)).publicKey,P=ge.getTickArrayStartIndex(p.tick,e.config.tickSpacing),T=Le(l,c,P).publicKey;return A.addInstruction({instructions:[ye.increaseLimitOrderInstruction(l,r||this.scope.ownerPubKey,p.poolId,T,t,k,h,f,y,n)]}),A.addCustomComputeBudget(a),A.addTipInstruction(u),A.versionBuild({txVersion:s})}async decreaseLimitOrder({poolInfo:e,limitOrder:t,limitOrderInfo:n,amount:o,slippage:i=1e3,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,feePayer:s,computeBudgetConfig:c,txTipConfig:l,txVersion:m,forerunCreate:p}){let f=new G(e.id),y=new G(e.programId),b=n;if(!b){let z=await this.scope.connection.getAccountInfo(t);z||this.logAndCreateError(`limit order ${t.toBase58()} not exist`),b=mo.decode(z.data)}let g=o.muln(1e4-i).divn(1e4),A=zn.getUnFilledAmount({orderInfo:b});(A.isZero()||o.gt(A))&&this.logAndCreateError(`amount should be less than unfulfilled amount: ${A.toString()}, amount: ${o.toString()}`);let[k,h]=b.zeroForOne?[new G(e.mintA.address),new G(e.mintB.address)]:[new G(e.mintB.address),new G(e.mintA.address)],[P,T]=b.zeroForOne?[new G(e.mintA.programId),new G(e.mintB.programId)]:[new G(e.mintB.programId),new G(e.mintA.programId)],[I,x]=[k.equals(j),h.equals(j)],[S,B]=[a.useSOLBalance&&I,a.useSOLBalance&&x],R=this.createTxBuilder(),L=S||!u?void 0:te(this.scope.ownerPubKey,k,P).publicKey,O=B||!u?void 0:te(this.scope.ownerPubKey,h,T).publicKey;if(L)R.addInstruction({instructions:[vn(this.scope.ownerPubKey,L,this.scope.ownerPubKey,k,P)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:P,mint:k,notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!S});L=z,Q&&R.addInstruction(Q)}if(O)R.addInstruction({instructions:[vn(this.scope.ownerPubKey,O,this.scope.ownerPubKey,h,T)]});else{let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T,mint:h,notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!B});O=z,Q&&R.addInstruction(Q)}let[C,M]=[Qt(y,f,k).publicKey,Qt(y,f,h).publicKey],D=ge.getTickArrayStartIndex(b.tick,e.config.tickSpacing),E=Le(y,f,D).publicKey;return R.addInstruction({instructions:[ye.decreaseLimitOrderInstruction(y,s||this.scope.ownerPubKey,f,E,t,L,O,C,M,k,h,o,g,r)]}),R.addCustomComputeBudget(c),R.addTipInstruction(l),R.versionBuild({txVersion:m,extInfo:{forerunCreate:p}})}async closeLimitOrder({programId:e=Rn,limitOrder:t,autoWithdraw:n=!0,tickArrayBitmap:o,slippage:i=0,feePayer:r,computeBudgetConfig:a,txTipConfig:u,txVersion:s}){let c=await this.scope.connection.getAccountInfo(t);c||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let l=mo.decode(c.data),m=zn.getUnFilledAmount({orderInfo:l});!n&&!m.isZero()&&this.logAndCreateError(`unfulfilled amount should be 0, (${m.toString()} remaining), please withdraw first or set autoWithdraw: true`);let p=this.createTxBuilder(),f=(await this.scope.api.fetchPoolById({ids:l.poolId.toBase58()}))[0];f||(f=(await this.getSimplePoolInfo(l.poolId)).poolInfo);let y=await lt.fetchTickArrayInfo({connection:this.scope.connection,programId:e,poolId:l.poolId,tick:l.tick,tickSpacing:f.config.tickSpacing}),b=zn.settleFilledOrder({orderInfo:l,tickInfo:y.ticks.find(g=>g.tick===l.tick)});if(m.isZero()){if(!b.isZero()){let g=await this.settleLimitOrder({limitOrder:t});p.addInstruction(N({},g.builder.AllTxData))}}else{let{builder:g}=await this.decreaseLimitOrder({poolInfo:f,limitOrder:t,limitOrderInfo:l,amount:m,tickArrayBitmap:o,slippage:i,txVersion:0});p.addInstruction({instructions:g.allInstructions})}return p.addInstruction({instructions:[ye.closeLimitOrderInstruction(e,r||this.scope.ownerPubKey,this.scope.ownerPubKey,t)]}),p.addCustomComputeBudget(a),p.addTipInstruction(u),p.versionBuild({txVersion:s})}async closeAllLimitOrder({programId:e=Rn,limitOrders:t,autoWithdraw:n=!0,slippage:o=1e4,feePayer:i,computeBudgetConfig:r,txVersion:a}){let u=this.createTxBuilder(),c=(await gt(this.scope.connection,t)).map((A,k)=>A?_(N({},mo.decode(A.data)),{pda:t[k]}):null),l=c.filter(Boolean),m=l.map(A=>A.poolId.toBase58()),p=(await this.scope.api.fetchPoolById({ids:m.join(",")})).filter(Boolean),f={};p.forEach(A=>f[A.id]=A);let y=await lt.fetchMultipleTickArrayInfo({connection:this.scope.connection,tickInfoList:l.map(A=>({programId:e,poolId:A.poolId,tick:A.tick,tickSpacing:f[A.poolId.toString()].config.tickSpacing}))}),b={};y.forEach((A,k)=>{!A||(b[l[k].pda.toBase58()]=A)});let g=0;for(let A of t){let k=c[g];if(!k){g++;continue}let h=zn.getUnFilledAmount({orderInfo:k});!n&&!h.isZero()&&this.logAndCreateError(`${A.toBase58()} order unfulfilled amount should be 0 (${h.toString()} remaining), please withdraw first or set autoWithdraw: true`);let P=f[k.poolId.toBase58()],T=b[A.toBase58()],I=zn.settleFilledOrder({orderInfo:k,tickInfo:T.ticks.find(x=>x.tick===k.tick)});if(h.isZero()){if(!I.isZero()){let x=await this.settleLimitOrder({limitOrder:A,forerunCreate:!0});u.addInstruction(N({},x.builder.AllTxData))}}else{let{builder:x}=await this.decreaseLimitOrder({poolInfo:P,limitOrder:A,limitOrderInfo:k,amount:h,slippage:o,txVersion:0,forerunCreate:!0});u.addInstruction({instructions:x.allInstructions})}u.addInstruction({instructions:[ye.closeLimitOrderInstruction(e,i||this.scope.ownerPubKey,this.scope.ownerPubKey,A)]}),g++}return a===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async settleLimitOrder({limitOrder:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txTipConfig:r,txVersion:a,forerunCreate:u}){let s=await this.scope.connection.getAccountInfo(e);s||this.logAndCreateError(`limit order ${e.toBase58()} not exist`);let c=mo.decode(s.data),l=(await this.scope.api.fetchPoolById({ids:c.poolId.toBase58()}))[0];l||(l=(await this.getSimplePoolInfo(c.poolId)).poolInfo);let m=c.zeroForOne?l.mintB:l.mintA,[p,f]=[new G(m.address),new G(m.programId)],y=new G(l.programId),b=this.createTxBuilder(),g=p.equals(j),A=n.useSOLBalance&&g,k=A||!o?void 0:te(this.scope.ownerPubKey,p,f).publicKey;if(k)b.addInstruction({instructions:[vn(this.scope.ownerPubKey,k,this.scope.ownerPubKey,p,f)]});else{let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f,mint:p,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});k=P,T&&b.addInstruction(T)}let h=ge.getTickArrayStartIndex(c.tick,l.config.tickSpacing);return b.addInstruction({instructions:[ye.settleLimitOrderInstruction(y,t||this.scope.ownerPubKey,c.poolId,Le(y,c.poolId,h).publicKey,e,k,Qt(y,c.poolId,p).publicKey,p,f)]}),b.addCustomComputeBudget(i),b.addTipInstruction(r),b.versionBuild({txVersion:a,extInfo:{forerunCreate:u}})}async settleAllLimitOrder({limitOrders:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txVersion:r}){let a=await gt(this.scope.connection,e),u=[],s=a.map((p,f)=>{if(!p)return;let y=mo.decode(p.data);return u.push(y.poolId.toString()),_(N({},y),{pda:e[f]})}),c=await this.scope.api.fetchPoolById({ids:u.join(",")});c.filter(Boolean).length||(c=(await Promise.all(u.map(f=>this.getSimplePoolInfo(f)))).map(f=>f.poolInfo));let l=this.createTxBuilder(),m={};for(let p of s){if(!p)continue;let f=c.find(I=>I.id===p.poolId.toBase58());if(!f)continue;let y=new G(f.programId),b=new G(p.zeroForOne?f.mintB.address:f.mintA.address),g=b.equals(j),A=n.useSOLBalance&&g,k=new G(g?Do:(await this.scope.token.getTokenInfo(b)).programId),h=m[b.toBase58()],P=A||!o?void 0:te(this.scope.ownerPubKey,b,k).publicKey;if(h)P=h;else{if(P)l.addInstruction({instructions:[vn(this.scope.ownerPubKey,P,this.scope.ownerPubKey,b,k)]});else{let{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k,mint:b,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});P=I,x&&l.addInstruction(x)}m[b.toBase58()]=P}let T=ge.getTickArrayStartIndex(p.tick,f.config.tickSpacing);l.addInstruction({instructions:[ye.settleLimitOrderInstruction(y,t||this.scope.ownerPubKey,p.poolId,Le(y,p.poolId,T).publicKey,p.pda,P,Qt(y,p.poolId,b).publicKey,b,k)]})}return r===0?l.sizeCheckBuildV0({computeBudgetConfig:i}):l.sizeCheckBuild({computeBudgetConfig:i})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:u,remainingAccounts:s,associatedOnly:c=!0,checkCreateATAOwner:l=!1,txVersion:m,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address.toString(),A=u.useSOLBalance&&e.mintA.address.toString()===j.toBase58(),k=u.useSOLBalance&&e.mintB.address.toString()===j.toBase58(),h;!r||r.equals(new _n(0))?h=g?wt.add(new at(1)):kt.sub(new at(1)):h=re.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:A?!1:c,checkCreateATAOwner:l});P=x,S&&b.addInstruction(S)}let T;if(!T){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:c,checkCreateATAOwner:l});T=x,S&&b.addInstruction(S)}(!P||!T)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:T,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:c});let I=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(ye.makeSwapBaseInInstructions({poolInfo:_(N({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:T},inputMint:new G(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:J,remainingAccounts:s})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:m})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:u,remainingAccounts:s,associatedOnly:c=!0,checkCreateATAOwner:l=!1,txVersion:m,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address.toString(),A=u.useSOLBalance&&e.mintA.address.toString()===j.toBase58(),k=u.useSOLBalance&&e.mintB.address.toString()===j.toBase58(),h;!r||r.equals(new _n(0))?h=g?wt.add(new at(1)):kt.sub(new at(1)):h=re.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new G(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:A?!1:c,checkCreateATAOwner:l});P=x,S&&b.addInstruction(S)}let T;if(!T){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new G(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:u.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:c,checkCreateATAOwner:l});T=x,S&&b.addInstruction(S)}(!P||!T)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:T,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:c});let I=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(ye.makeSwapBaseOutInstructions({poolInfo:_(N({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:T},outputMint:new G(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:J,remainingAccounts:s})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:m})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:u,computeBudgetConfig:s,feePayer:c,lockProgram:l=ai,lockAuth:m=dr,clmmProgram:p=Rn}){var k,h;let f={};for(let P of this.scope.account.tokenAccountRawInfos)i?te(this.scope.ownerPubKey,P.accountInfo.mint,a).publicKey.equals(P.pubkey)&&(f[P.accountInfo.mint.toString()]=P.pubkey):f[P.accountInfo.mint.toString()]=P.pubkey;let y=Object.values(t).flat().map(P=>P.nftMint),b=await Me(this.scope.connection,y.map(P=>({pubkey:P}))),g={};b.forEach(P=>{var T,I;g[P.pubkey.toBase58()]=(I=(T=P==null?void 0:P.accountInfo)==null?void 0:T.owner)!=null?I:null});let A=this.createTxBuilder(c);for(let P of Object.values(e)){if(t[P.id]===void 0||!t[P.id].find(C=>!C.liquidity.isZero()||C.rewardInfos.find(M=>!M.rewardAmountOwed.isZero())))continue;let T=P,I=o.useSOLBalance&&T.mintA.address===j.toString(),x=o.useSOLBalance&&T.mintB.address===j.toString(),S=f[T.mintA.address];if(!S)if(I){let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T.mintA.programId,mint:new G(T.mintA.address),notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:I?!1:i,checkCreateATAOwner:r});S=C,M&&A.addInstruction(M)}else{let C=new G(T.mintA.address);S=this.scope.account.getAssociatedTokenAccount(C,new G(T.mintA.programId)),A.addInstruction({instructions:[vn(this.scope.ownerPubKey,S,this.scope.ownerPubKey,C,new G(T.mintA.programId))]})}let B=f[T.mintB.address];if(!B)if(x){let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T.mintB.programId,mint:new G(T.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});B=C,M&&A.addInstruction(M)}else{let C=new G(T.mintB.address);B=this.scope.account.getAssociatedTokenAccount(C,new G(T.mintB.programId)),A.addInstruction({instructions:[vn(this.scope.ownerPubKey,B,this.scope.ownerPubKey,C,new G(T.mintB.programId))]})}f[T.mintA.address]=S,f[T.mintB.address]=B;let R=[];for(let C of T.rewardDefaultInfos){let M=o.useSOLBalance&&C.mint.address===j.toString(),D=f[C.mint.address];if(!D){let{account:E,instructionParams:z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new G(C.mint.programId),mint:new G(C.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,skipCloseAccount:!M,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:M?!1:i});D=E,z&&A.addInstruction(z)}f[C.mint.address]=D,R.push(D)}let L=await this.getClmmPoolKeys(T.id),O=[];for(let C=0;C<L.rewardInfos.length;C++)O.push({poolRewardVault:new G(L.rewardInfos[C].vault),ownerRewardVault:R[C],rewardMint:new G(L.rewardInfos[C].mint.address)});for(let C of t[P.id]){let M=(k=n==null?void 0:n[P.id])==null?void 0:k[C.nftMint.toBase58()];if(M){let D=te(this.scope.ownerPubKey,M.lockNftMint,Do).publicKey,E=ge.getTickArrayStartIndex(C.tickLower,L.config.tickSpacing),z=ge.getTickArrayStartIndex(C.tickUpper,L.config.tickSpacing),{publicKey:Q}=Le(new G(L.programId),M.poolId,E),{publicKey:Y}=Le(new G(L.programId),M.poolId,z),{publicKey:ee}=mn(new G(L.programId),M.poolId,C.tickLower,C.tickUpper),ne=vo(l,M.lockNftMint).publicKey,$=ye.harvestLockPositionInstructionV2({programId:l,auth:m,lockPositionId:ne,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:M.lockNftMint,lockNftAccount:D,positionNftAccount:M.nftAccount,positionId:M.positionId,poolId:M.poolId,protocolPosition:ee,vaultA:new G(L.vault.A),vaultB:new G(L.vault.B),tickArrayLower:Q,tickArrayUpper:Y,userVaultA:S,userVaultB:B,mintA:new G(L.mintA.address),mintB:new G(L.mintB.address),rewardAccounts:O,exTickArrayBitmap:De(p,M.poolId).publicKey});A.addInstruction({instructions:[$],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let D=ye.decreaseLiquidityInstructions({poolInfo:T,poolKeys:L,ownerPosition:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:S,tokenAccountB:B,rewardAccounts:R},liquidity:new at(0),amountMinA:new at(0),amountMinB:new at(0),nft2022:(h=g[C.nftMint.toBase58()])==null?void 0:h.equals(nn)});A.addInstruction(D)}}}return u===0?A.sizeCheckBuildV0({computeBudgetConfig:s}):A.sizeCheckBuild({computeBudgetConfig:s})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ii(e).publicKey);return t?Ic.decode(t.data).whitelistMints.filter(o=>!o.equals(G.default)):[]}async getOwnerPositionInfo({programId:e=Rn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new at(1))).map(r=>Zt(new G(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=Tr.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=ai}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(u=>u.accountInfo.amount.eq(new at(1))).map(u=>vo(new G(e),u.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(u=>{if(!u)return;let s=Sc.decode(u.data);i.push(s)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(u=>u.positionId)),a=[];return r.forEach(u=>{if(!u)return;let s=Tr.decode(u.data);a.push(s)}),i.map((u,s)=>({position:a[s],lockInfo:u}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Me(this.scope.connection,e.map(i=>({pubkey:new G(i)})),t),o={};for(let i=0;i<e.length;i++){let r=n[i];if(r===null||!r.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=lo.decode(r.accountInfo.data),u=re.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=_(N({},a),{currentPrice:u,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].configId.toBase58())),o=await Me(this.scope.connection,Array.from(n).map(u=>({pubkey:new G(u)}))),i={};o.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=is.decode(u.accountInfo.data))});let r=await lt.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var l,m,p,f;let[s,c]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:ft({address:s,decimals:e[u].mintDecimalsA,programId:t[s].programId.toBase58()||Do.toBase58(),extensions:{feeConfig:(l=t[s])!=null&&l.feeConfig?An((m=t[s])==null?void 0:m.feeConfig):void 0}}),mintB:ft({address:c,decimals:e[u].mintDecimalsB,programId:t[c].programId.toBase58()||Do.toBase58(),extensions:{feeConfig:(p=t[c])!=null&&p.feeConfig?An((f=t[c])==null?void 0:f.feeConfig):void 0}}),price:e[u].currentPrice,config:_(N({},i[e[u].configId.toBase58()]),{id:e[u].configId.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await lt.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58(),...t.rewardInfos.filter(c=>!c.mint.equals(G.default)).map(c=>c.mint.toBase58())]),o=await io({connection:this.scope.connection,mints:Array.from(n).map(c=>new G(c))}),{computeClmmPoolInfo:i,computePoolTickData:r}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Me(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=zc(i[e],o);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(Kn.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(Kn.decode(a[1].accountInfo.data).amount.toString());let s=_(N({},i[e]),{exBitmapAccount:i[e].exBitmapAccount.toBase58(),observationId:i[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:u.config,rewardInfos:i[e].rewardInfos.filter(c=>!c.vault.equals(G.default)).map(c=>{var l;return{mint:ft({address:c.mint.toBase58(),programId:Do.toBase58(),decimals:(l=o[c.mint.toBase58()].decimals)!=null?l:6}),vault:c.vault.toBase58()}})});return{poolInfo:u,poolKeys:s,computePoolInfo:i[e],tickData:r,rpcPoolInfo:t,tickArrays:Object.values(r[e])}}async getSwapPoolInfo(e,t=!0){let{poolInfo:n,rpcData:o}=await this.getSimplePoolInfo(e),i=await this.scope.connection.getAccountInfo(o.configId),r=is.decode(i.data),a=new G(n.programId),u=new G(e),s=await qc(a,this.scope.connection,u,o.tickCurrent,r.tickSpacing,o.tickArrayBitmap,t);return{poolInfo:n,rpcData:o,configInfo:r,tickArrays:s}}async getSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=await this.scope.connection.getMultipleAccountsInfo([t.mintA,t.mintB]);return{poolInfo:{id:e.toString(),programId:t.programId.toString(),mintA:{address:t.mintA.toString(),programId:n[0].owner.toString(),decimals:t.mintDecimalsA},mintB:{address:t.mintB.toString(),programId:n[1].owner.toString(),decimals:t.mintDecimalsB},config:{id:t.configId.toBase58(),tickSpacing:t.tickSpacing}},rpcData:t}}async getMultipleSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfos({poolIds:e}),n=new Set(Object.values(t).map(r=>[r.mintA.toBase58(),r.mintB.toBase58()]).flat()),o=await io({connection:this.scope.connection,mints:Array.from(n).map(r=>new G(r))}),i={};return e.forEach(r=>{let a=t[r.toString()];if(!a)return null;let u=o[a.mintA.toBase58()],s=o[a.mintB.toBase58()];i[r.toString()]={poolInfo:{id:r.toString(),programId:a.programId.toString(),mintA:{address:a.mintA.toString(),programId:u.programId.toString(),decimals:a.mintDecimalsA},mintB:{address:a.mintB.toString(),programId:s.programId.toString(),decimals:a.mintDecimalsB},config:{id:a.configId.toBase58(),tickSpacing:a.tickSpacing}},rpcData:a}}),i}};var Qc=v([Ae(8),V("bump"),Ze("disableCreatePool"),ve("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),F("protocolOwner"),F("fundOwner"),w("creatorFeeRate"),w("creatorFeeShareRate"),Z(w(),14)]),Rr=v([Ae(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),V("bump"),V("status"),V("lpDecimals"),V("mintDecimalA"),V("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),w("epoch"),V("feeOn"),Ze("enableCreatorFee"),Z(V(),6),w("creatorFeesMintA"),w("creatorFeesMintB"),Z(w(),28)]),th=v([Ae(8),F("configId"),Z(w(),30)]),nh=v([Ae(8),V("bump"),F("creator"),F("ammConfig"),w("shareRate"),Z(w(),8)]);import{PublicKey as Ri,TransactionInstruction as Tn,Keypair as ip,SystemProgram as Lr}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Li,TOKEN_2022_PROGRAM_ID as gs,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var Hd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),ah=Buffer.from("amm_config","utf8"),Qd=Buffer.from("pool","utf8"),Zd=Buffer.from("pool_lp_mint","utf8"),$d=Buffer.from("pool_vault","utf8"),jd=Buffer.from("observation","utf8"),Jd=Buffer.from("permission","utf8"),ep=Buffer.from("support_mint","utf8"),tp=Buffer.from("creator_fee_share","utf8");function yo(d){return se([Hd],d)}function ps(d,e,t,n){return se([Qd,e.toBuffer(),t.toBuffer(),n.toBuffer()],d)}function np(d,e){return se([Zd,e.toBuffer()],d)}function Zc(d,e,t){return se([$d,e.toBuffer(),t.toBuffer()],d)}function bo(d,e){return se([jd,e.toBuffer()],d)}function fs({poolId:d,programId:e,configId:t,mintA:n,mintB:o}){let i=yo(e).publicKey,r=d||ps(e,t,n,o).publicKey,a=np(e,r).publicKey,u=Zc(e,r,n).publicKey,s=Zc(e,r,o).publicKey,c=bo(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:u,vaultB:s,observationId:c}}var op=Buffer.from("locked_liquidity","utf8");function Wo(d,e){return se([op,e.toBuffer()],d)}function $c(d,e){return se([Jd,e.toBuffer()],d)}function ys(d,e){return se([ep,e.toBuffer()],d)}function bs(d,e,t){return se([tp,e.toBuffer(),t.toBuffer()],d)}var rp=ke("Raydium_cpmm"),hn={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132]),collectCreatorFeePermissionless:Buffer.from([202,202,34,83,226,122,145,229])};function jc(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h){let P=v([w("amountMaxA"),w("amountMaxB"),w("openTime")]),T=ps(d,t,i,r).publicKey,I=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(T),isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Tu,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1},...(h!=null?h:[]).map(S=>({pubkey:S,isSigner:!1,isWritable:!1}))],x=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:A,openTime:k},x),new Tn({keys:I,programId:d,data:Buffer.from([...hn.initialize,...x])})}function Jc(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return rp.debug("cpmm deposit data",{lpAmount:m.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:m,amountMaxA:p,amountMaxB:f},g),new Tn({keys:b,programId:d,data:Buffer.from([...hn.deposit,...g])})}function el(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:un,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:m,amountMinA:p,amountMinB:f},g),new Tn({keys:b,programId:d,data:Buffer.from([...hn.withdraw,...g])})}function qo(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y){let b=v([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},A),new Tn({keys:g,programId:d,data:Buffer.from([...hn.swapBaseInput,...A])})}function tl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y){let b=v([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},A),new Tn({keys:g,programId:d,data:Buffer.from([...hn.swapBaseOutput,...A])})}async function nl(d){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=d,r=[],[a,u]=[new Ri(t.id),new Ri(t.lpMint.address)],s;if(i)s=new Ri((await i(1))[0]);else{let g=ip.generate();r.push(g),s=g.publicKey}let{publicKey:c}=te(o,s,Vn),{publicKey:l}=Nn(s),{publicKey:m}=Wo(d.lockProgram,s),{publicKey:p}=te(e.wallet,u,Vn),{publicKey:f}=te(d.lockAuthProgram,u,Vn),y=ap({programId:d.lockProgram,auth:d.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:s,nftAccount:c,poolId:a,lockPda:m,mintLp:u,userLpVault:p,lockLpVault:f,poolVaultA:new Ri(n.vault.A),poolVaultB:new Ri(n.vault.B),metadataAccount:l,lpAmount:d.lpAmount,withMetadata:(b=d.withMetadata)!=null?b:!0});return{address:{nftMint:s,nftAccount:c,metadataAccount:l,lockPda:m,userLpVault:p,lockLpVault:f},instructions:[y],signers:r,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function ap({programId:d,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:i,nftAccount:r,poolId:a,lockPda:u,mintLp:s,userLpVault:c,lockLpVault:l,poolVaultA:m,poolVaultB:p,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Ot,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1}],A=v([w("lpAmount"),Ze("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let h=Buffer.from([...hn.lockCpLiquidity,...k]);return new Tn({keys:g,programId:d,data:h})}function Ps({programId:d,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:i,mintLp:r,userVaultA:a,userVaultB:u,poolVaultA:s,poolVaultB:c,mintA:l,mintB:m,lockLpVault:p,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:Un,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:zu,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1}],A=v([w("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let h=Buffer.from([...hn.collectCpFee,...k]);return new Tn({keys:g,programId:d,data:h})}function As(d,e,t,n,o,i,r,a,u,s,c,l,m){let p=bs(d,e,o).publicKey,f=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1}];return new Tn({keys:f,programId:d,data:hn.collectCreatorFee})}function ol(d,e,t,n,o,i,r,a,u,s,c,l,m,p){let f=bs(d,t,i).publicKey,y=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1}];return new Tn({keys:y,programId:d,data:hn.collectCreatorFeePermissionless})}function il(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I){let x=v([w("amountA"),w("amountB"),w("openTime"),V("feeOn")]),S=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:A,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:Lr.programId,isSigner:!1,isWritable:!1},...(I!=null?I:[]).map(R=>({pubkey:R,isSigner:!1,isWritable:!1}))],B=Buffer.alloc(x.span);return x.encode({amountA:k,amountB:h,openTime:P,feeOn:T},B),new Tn({keys:S,programId:d,data:Buffer.from([...hn.initializeWithPermission,...B])})}import rl from"bn.js";import Or from"bn.js";function ws(d,e){if(e.isZero())throw Error("divisor is zero");return d.mod(e)}function sp(d,e){if(e.isZero())throw Error("rhs is zero");let t=d.div(e);return ws(d,e).gt(Oi)&&(t=t.add(new Or(1))),[t,e]}var Oi=new Or(0),Ni=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),i=t.add(e);return o.div(i)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),i=n.sub(e),[r]=sp(o,i);return r}static lpTokensToTradingTokens(e,t,n,o,i){let r=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:r,tokenAmount1:a};if(i===1)return ws(e.mul(n),t).gt(Oi)&&r.gt(Oi)&&(r=r.add(new Or(1))),ws(e.mul(o),t).gt(Oi)&&a.gt(Oi)&&(a=a.add(new Or(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import cp from"bn.js";import up from"bn.js";var Ye=new up(1e6);var Ut=class{static tradingFee(e,t){return Mi(e,t,Ye)}static protocolFee(e,t){return Nr(e,t,Ye)}static fundFee(e,t){return Nr(e,t,Ye)}static creatorFee(e,t){return Mi(e,t,Ye)}static splitCreatorFee(e,t,n){return Nr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Ye),o=Ye.sub(t);return n.add(o).sub(new cp(1)).div(o)}};var Fi=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,i,r,a,u){let s=new rl(0),c=Ut.tradingFee(e,o),l;u?(s=Ut.creatorFee(e,i),l=e.sub(c).sub(s)):l=e.sub(c);let m=Ut.protocolFee(c,r),p=Ut.protocolFee(c,a),f=Ni.swapBaseInputWithoutFees(l,t,n),y;return u?y=f:(s=Ut.creatorFee(f,i),y=f.sub(s)),{newInputVaultAmount:t.add(l),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:c,protocolFee:m,fundFee:p,creatorFee:s}}static swapBaseOutput(e,t,n,o,i,r,a,u){let s,c=new rl(0),l;if(u)l=e;else{let b=Ut.calculatePreFeeAmount(e,i);c=b.sub(e),l=b}let m=Ni.swapBaseOutputWithoutFees(l,t,n),p;if(u){let b=Ut.calculatePreFeeAmount(m,o.add(i)),g=b.sub(m);c=Ut.splitCreatorFee(g,o,i),s=g.sub(c),p=b}else{let b=Ut.calculatePreFeeAmount(m,o);s=b.sub(m),p=b}let f=Ut.protocolFee(s,r),y=Ut.fundFee(s,a);return{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(l),inputAmount:p,outputAmount:e,tradeFee:s,protocolFee:f,fundFee:y,creatorFee:c}}};import al from"bn.js";var ks=new al(25),Mr=new al(1e4);var sl=new Set(["5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1","3uaZBfHPfmpAHW7dsimC1SnyR61X4bJqQZKWmRSCXJxv","GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"]);var Ts=v([V("instruction"),w("amountIn"),w("minAmountOut")]),hs=v([V("instruction"),w("maxAmountIn"),w("amountOut")]),Yh=v([V("instruction"),V("nonce")]),lp=v([V("instruction"),V("nonce"),w("startTime")]),Fr=v([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),ae("swapBaseInAmount"),ae("swapQuoteOutAmount"),w("swapBase2QuoteFee"),ae("swapQuoteInAmount"),ae("swapBaseOutAmount"),w("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),w("lpReserve"),Z(w(),3,"padding")]),Hh=v([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),ae("swapBaseInAmount"),ae("swapQuoteOutAmount"),ae("swapQuoteInAmount"),ae("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),Z(w(),64,"padding")]),Bs=v([V("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide"),w("otherAmountMin")]),Is=v([V("instruction"),w("lpAmount"),w("baseAmountMin"),w("quoteAmountMin")]);var ul=v([w("fee")]);import{PublicKey as pp}from"@solana/web3.js";import vr from"decimal.js";import{TOKEN_PROGRAM_ID as fp}from"@solana/spl-token";import{PublicKey as mp}from"@solana/web3.js";var dp=ke("Raydium_liquidity_serum");function cl({programId:d,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=mp.createProgramAddressSync(i,d)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw dp.logWithError("unable to find a viable program address nonce","params",{programId:d,marketId:e}),new Error("unable to find a viable program address nonce")}function _r({programId:d}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],d);return e}function go({name:d,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(d,"utf-8")],e);return n}function yp({programId:d,marketId:e}){let{publicKey:t}=se([d.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],d);return t}function Ss({programId:d}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],d)}function Ks({version:d,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:u}){let s=go({name:"amm_associated_seed",programId:a,marketId:t}),c=go({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:l,nonce:m}=Ss({programId:a}),p=go({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=go({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=go({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=yp({programId:a,marketId:t}),g=go({name:"target_associated_seed",programId:a,marketId:t}),A=go({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=cl({programId:u,marketId:t});return{id:s,baseMint:n,quoteMint:o,lpMint:c,baseDecimals:i,quoteDecimals:r,lpDecimals:i,version:d,programId:a,authority:l,nonce:m,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:k,lookupTableAccount:pp.default,configId:_r({programId:a})}}var xs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Vr=d=>{let e={},t=fp.toBase58();return Object.keys(d).map(n=>{let o=d[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:ft({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:ft({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new vr(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new vr(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new vr(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:xs,week:xs,month:xs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:_r({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new vr(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:ft({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0,feeOn:"Both",hasDynamicFee:!1,tips:[],launchMigratePool:!1}}),e};import{ASSOCIATED_TOKEN_PROGRAM_ID as bp,TOKEN_PROGRAM_ID as Po}from"@solana/spl-token";import{PublicKey as mt,SystemProgram as gp,SYSVAR_RENT_PUBKEY as fB,TransactionInstruction as Xn}from"@solana/web3.js";import Er from"bn.js";var Dr=ke("Raydium_liquidity_instruction");function ll(d){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:u=so}=d,s=Buffer.alloc(Bs.span);Bs.encode({instruction:3,baseAmountIn:ce(o),quoteAmountIn:ce(i),otherAmountMin:ce(a),fixedSide:r==="base"?J:ot},s);let c=[K({pubkey:Po,isWritable:!1}),K({pubkey:new mt(e.id)}),K({pubkey:new mt(t.authority),isWritable:!1}),K({pubkey:new mt(t.openOrders),isWritable:!1}),K({pubkey:new mt(t.targetOrders)}),K({pubkey:new mt(e.lpMint.address)}),K({pubkey:new mt(t.vault.A)}),K({pubkey:new mt(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(K({pubkey:u})),c.push(K({pubkey:new mt(e.marketId),isWritable:!1}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:new mt(t.marketEventQueue),isWritable:!1})),new Xn({programId:new mt(e.programId),keys:c,data:s})}function Cs(d){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=so}=d,u=vt(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let c=Buffer.alloc(Is.span);Is.encode({instruction:4,lpAmount:ce(o),baseAmountMin:ce(i),quoteAmountMin:ce(r)},c);let l=[K({pubkey:Po,isWritable:!1}),K({pubkey:u.id}),K({pubkey:u.authority,isWritable:!1}),K({pubkey:u.openOrders}),K({pubkey:u.targetOrders}),K({pubkey:u.mintLp.address}),K({pubkey:u.vault.A}),K({pubkey:u.vault.B})];return s===5?l.push(K({pubkey:a})):(l.push(K({pubkey:u.id})),l.push(K({pubkey:u.id}))),l.push(K({pubkey:u.marketProgramId,isWritable:!1}),K({pubkey:u.marketId}),K({pubkey:u.marketBaseVault}),K({pubkey:u.marketQuoteVault}),K({pubkey:u.marketAuthority,isWritable:!1}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:u.marketEventQueue}),K({pubkey:u.marketBids}),K({pubkey:u.marketAsks})),new Xn({programId:u.programId,keys:l,data:c})}return new Xn({programId:u.programId,keys:[]})}function Rs({programId:d,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:r,coinVault:a,pcVault:u,withdrawQueue:s,ammTargetOrders:c,poolTempLp:l,marketProgramId:m,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:h,pcAmount:P,ammConfigId:T,feeDestinationId:I}){let x=v([V("instruction"),V("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),S=[{pubkey:Po,isSigner:!1,isWritable:!1},{pubkey:bp,isSigner:!1,isWritable:!1},{pubkey:gp.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:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:I,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:A,openTime:k,coinAmount:h,pcAmount:P},B),{instruction:new Xn({keys:S,programId:d,data:B}),instructionType:X.AmmV4CreatePool}}function Pp({poolKeys:d,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=so},i){let r=vt(d),a=Buffer.alloc(Ts.span);Ts.encode({instruction:9,amountIn:ce(t),minAmountOut:ce(n)},a);let u=[K({pubkey:Po,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders})];return i===4&&u.push(K({pubkey:r.targetOrders})),u.push(K({pubkey:r.vault.A}),K({pubkey:r.vault.B})),i===5&&u.push(K({pubkey:o})),u.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Xn({programId:r.programId,keys:u,data:a})}function Ap({poolKeys:d,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=so},i){let r=vt(d),a=Buffer.alloc(hs.span);hs.encode({instruction:11,maxAmountIn:ce(t),amountOut:ce(n)},a);let u=[K({pubkey:Po,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders}),K({pubkey:r.targetOrders}),K({pubkey:r.vault.A}),K({pubkey:r.vault.B})];return i===5&&u.push(K({pubkey:o})),u.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Xn({programId:r.programId,keys:u,data:a})}function wp(d,e,t,n,o,i,r,a,u,s){let c=v([V("instructionId"),w("amountIn"),w("minAmountOut")]),l=Buffer.alloc(c.span);c.encode({instructionId:16,amountIn:u,minAmountOut:s},l);let m=[{pubkey:Po,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Xn({programId:d,keys:m,data:l})}function kp(d,e,t,n,o,i,r,a,u,s){let c=v([V("instructionId"),w("maxAmountIn"),w("amountOut")]),l=Buffer.alloc(c.span);c.encode({instructionId:17,maxAmountIn:u,amountOut:s},l);let m=[{pubkey:Po,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Xn({programId:d,keys:m,data:l})}function Wr(d){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=d;if(t===4){if(r==="in")return wp(new mt(e.programId),new mt(e.id),new mt(e.authority),new mt(e.vault.A),new mt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Er(o.toString()),new Er(i.toString()));if(r==="out")return kp(new mt(e.programId),new mt(e.id),new mt(e.authority),new mt(e.vault.A),new mt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Er(o.toString()),new Er(i.toString()));Dr.logWithError("invalid params","params",d)}throw Dr.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function qr(d){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=d;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return Pp(_(N({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Ap(_(N({},a),{maxAmountIn:o,amountOut:i}),t);Dr.logWithError("invalid params","params",d)}throw Dr.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var wo=5e4,Tp=v([w("x"),w("y"),w("price")]),hp=v([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),Z(Tp,wo,"DataElement")]);function Bp(d,e){return[0,wo-2]}function Ip(d){return[0,wo-2]}function xp(d){return[0,wo-2]}function Sp(d,e,t){let[n,o]=Bp(e,t),i=n,r=o,a=0,u=e*d.multiplier/t;for(;i<=r;){if(a=Math.floor((r+i)/2),a===0||a>=wo-2)return[a,a,!1];let s=d.DataElement[a].x*d.multiplier/d.DataElement[a].y,c=d.DataElement[a-1].x*d.multiplier/d.DataElement[a-1].y,l=d.DataElement[a+1].x*d.multiplier/d.DataElement[a+1].y;if(u===s)return[a,a,!0];if(u===c)return[a-1,a-1,!0];if(u===l)return[a+1,a+1,!0];if(u<c)r=a-1;else{if(u>c&&u<s)return[a-1,a,!0];if(u>s&&u<l)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ls(d,e,t){let[n,o,i]=Sp(d,e,t);if(!i)return 0;if(n===o){let r=d.DataElement[n].x;return e*d.multiplier/r}else{let r=d.DataElement[n].x,a=d.DataElement[n].y,u=d.DataElement[o].x,s=d.DataElement[o].y,c=t*(u*a-r*s),l=r*c,m=(u-r)*(e*a-r*t)*s,p=l+m;return e*d.multiplier*c/p}}function Ao(d,e,t){return e*d.multiplier/t}function ml(d,e,t){return e*t/d.multiplier}function Kp(d,e){let[t,n]=Ip(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>wo-2)return[r,r,!1];let u=d.DataElement[r].x,s=d.DataElement[r-1].x,c=d.DataElement[r+1].x;if(a===u)return[r,r,!0];if(a===s)return[r-1,r-1,!0];if(a===c)return[r+1,r+1,!0];if(a<s)i=r-1;else{if(a>s&&a<u)return[r-1,r,!0];if(a>u&&a<c)return[r,r+1,!0];o=r+1}}return[r,r,!1]}function Cp(d,e){let[t,n]=xp(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=wo-2)return[r,r,!1];let u=d.DataElement[r].y,s=d.DataElement[r-1].y,c=d.DataElement[r+1].y;if(a===u)return[r,r,!0];if(a===s)return[r-1,r-1,!0];if(a===c)return[r+1,r+1,!0];if(a<c)o=r+1;else{if(a<s&&a>u)return[r-1,r,!0];if(a<u&&a>c)return[r,r+1,!0];i=r-1}}return[r,r,!1]}function dl(d,e,t,n){let o=n?e+t:e-t,[i,r,a]=Kp(d,o);if(!a)return[0,0,!1,a];if(i===r)return[d.DataElement[r].price,d.DataElement[r].y,!1,a];{let u=d.DataElement[i].x,s=d.DataElement[r].x,c=d.DataElement[i].price,l=d.DataElement[r].price,m=d.DataElement[i].y,p=d.DataElement[r].y;if(e>=u&&e<=s)return n?[l,p,!0,a]:[c,m,!0,a];{let f,y;return n?(f=c+(l-c)*(e-u)/(s-u),y=m-(o-u)*d.multiplier/l):(f=c+(l-c)*(e-u)/(s-u),y=p+(s-o)*d.multiplier/c),[f,y,!1,a]}}}function Rp(d,e,t,n){let o=n?e-t:e+t,[i,r,a]=Cp(d,o);if(!a)return[0,0,!1,a];if(i===r)return[d.DataElement[r].price,d.DataElement[r].x,!1,a];{let u=d.DataElement[i].x,s=d.DataElement[r].x,c=d.DataElement[i].price,l=d.DataElement[r].price,m=d.DataElement[i].y,p=d.DataElement[r].y;if(e>=p&&e<=m)return n?[l,s,!0,a]:[c,u,!0,a];{let f,y;return n?(f=c+(l-c)*(m-e)/(m-p),y=u+l*(m-o)/d.multiplier):(f=c+(l-c)*(m-e)/(m-p),y=s-c*(o-p)/d.multiplier),[f,y,!1,a]}}}function Lp(d,e){let t=dl(d,e,0,!1);return t[3]?t[0]:0}function pl(d,e,t,n){let o=Ls(d,e,t),i=Ao(d,e,o),r=Ao(d,t,o),a=Ao(d,n,o),u=!0,[s,c,l,m]=dl(d,i,a,u);if(!m)return 0;if(l)return n*d.multiplier/s;{let p=r-c;return ml(d,p,o)}}function fl(d,e,t,n){let o=Ls(d,e,t),i=Ao(d,e,o),r=Ao(d,t,o),a=Ao(d,n,o),u=!1,[s,c,l,m]=Rp(d,r,a,u);if(!m)return 0;if(l)return n*s/d.multiplier;{let p=i-c;return ml(d,p,o)}}function Op(d){let e=hp.decode(d);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 yl(d,e,t,n){let o=Lp(d,Ao(d,e,Ls(d,e,t)))/d.multiplier;return n?o:1/o}var Ur=class{constructor({connection:e,modelDataPubKey:t=so}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=Op(e==null?void 0:e.data))}}};import{ASSOCIATED_TOKEN_PROGRAM_ID as Gr,TOKEN_2022_PROGRAM_ID as qp,TOKEN_PROGRAM_ID as Up}from"@solana/spl-token";import{SystemProgram as Kt,TransactionInstruction as dt}from"@solana/web3.js";import zo from"bn.js";var Np=Buffer.from("vault_auth_seed","utf8"),Mp=Buffer.from("global_config","utf8"),Fp=Buffer.from("pool_vesting","utf8"),vp=Buffer.from("platform_config","utf8"),_p=Buffer.from("platform_fee_vault_auth_seed","utf8"),Vp=Buffer.from("creator_fee_vault_auth_seed","utf8"),VB=Buffer.from("platform_global_access","utf8"),Ep=Buffer.from("platform_allow_config","utf8"),Dp=Buffer.from("platform_curve_rule","utf8");function Vt(d){return se([Np],d)}function Os(d,e,t,n){return se([Mp,e.toBuffer(),Wp(t),Br(n)],d)}function Uo(d,e,t){return se([Ir,e.toBuffer(),t.toBuffer()],d)}function Ns(d,e,t){return se([as,e.toBuffer(),t.toBuffer()],d)}function ko(d){return se([Buffer.from("__event_authority","utf8")],d)}function Wp(d){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,d),new Uint8Array(e)}function Ms(d,e){return se([vp,e.toBuffer()],d)}function Go(d,e,t){return se([Fp,e.toBuffer(),t.toBuffer()],d)}function pn(d,e,t){return se([e.toBuffer(),t.toBuffer()],d)}function Fs(d){return se([_p],d)}function fn(d,e,t){return se([e.toBuffer(),t.toBuffer()],d)}function vs(d){return se([Vp],d)}function vi(d,e,t){return se([Ep,e.toBuffer(),t.toBuffer()],d)}function _s(d,e,t){return se([Dp,e.toBuffer(),t.toBuffer()],d)}var pt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106]),createPlatformAllowConfig:Buffer.from([69,71,168,7,214,250,107,102]),closePlatformAllowConfig:Buffer.from([82,205,36,216,16,6,240,215]),createPlatformCurveRule:Buffer.from([148,71,180,136,122,144,59,21]),updatePlatformCurveRule:Buffer.from([90,100,206,196,54,117,120,139]),removePlatformCurveRule:Buffer.from([236,77,154,138,32,145,127,219]),closePlatformCurveRule:Buffer.from([194,114,82,45,136,88,169,159])};function bl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I){let x=v([V("decimals"),Dt("name"),Dt("symbol"),Dt("uri")]),S=v([w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod"),V("cpmmCreatorFeeOn")]),B=v([V("index"),w("supply"),w("totalFundRaisingB"),V("migrateType")]),R=v([V("index"),w("supply"),w("totalSellA"),w("totalFundRaisingB"),V("migrateType")]),L=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Up,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:Kt.programId,isSigner:!1,isWritable:!1},{pubkey:Ot,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];T&&L.push({pubkey:T,isSigner:!1,isWritable:!1}),I&&L.push({pubkey:I,isSigner:!1,isWritable:!1});let O=Buffer.alloc(Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+Buffer.from(b,"utf-8").length+4*3+1),C=Buffer.alloc(S.span),M=Buffer.alloc(g.type==="ConstantCurve"?R.span:B.span);return x.encode({decimals:p,name:f,symbol:y,uri:b},O),g.type==="ConstantCurve"?R.encode(_(N({index:0},g),{migrateType:g.migrateType==="amm"?0:1}),M):g.type==="FixedCurve"?B.encode(_(N({index:1},g),{migrateType:g.migrateType==="amm"?0:1}),M):g.type==="LinearCurve"&&B.encode(_(N({index:2},g),{migrateType:g.migrateType==="amm"?0:1}),M),S.encode({totalLockedAmount:A,cliffPeriod:k,unlockPeriod:h,cpmmCreatorFeeOn:P},C),new dt({keys:L,programId:d,data:Buffer.from([...pt.initializeV2,...O,...M,...C])})}function gl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k,h,P,T,I){let x=v([V("decimals"),Dt("name"),Dt("symbol"),Dt("uri")]),S=v([w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod"),V("cpmmCreatorFeeOn"),V("transferFeeExtensionParamsOption"),v([ve("transferFeeBasePoints"),w("maxinumFee")]).replicate("transferFeeExtensionParams")]),B=v([V("index"),w("supply"),w("totalFundRaisingB"),V("migrateType")]),R=v([V("index"),w("supply"),w("totalSellA"),w("totalFundRaisingB"),V("migrateType")]),L=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:qp,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Kt.programId,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];T&&L.push({pubkey:T,isSigner:!1,isWritable:!1}),I&&L.push({pubkey:I,isSigner:!1,isWritable:!1});let O=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(S.span),M=Buffer.alloc(b.type==="ConstantCurve"?R.span:B.span);return x.encode({decimals:m,name:p,symbol:f,uri:y},O),b.type==="ConstantCurve"?R.encode(_(N({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),M):b.type==="FixedCurve"?B.encode(_(N({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),M):b.type==="LinearCurve"&&B.encode(_(N({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),M),S.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:h,transferFeeExtensionParamsOption:P?1:0,transferFeeExtensionParams:P!=null?P:{transferFeeBasePoints:0,maxinumFee:new zo(0)}},C),new dt({keys:L,programId:d,data:Buffer.from([...pt.initializeWithToken2022,...O,...M,...C])})}function _i(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountB"),w("minAmountA"),w("shareFeeRate")]),P=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Kt.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new zo(0)},T),new dt({keys:P,programId:d,data:Buffer.from([...pt.buyExactIn,...T])})}function Pl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountA"),w("maxAmountB"),w("shareFeeRate")]),P=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Kt.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new zo(0)},T),new dt({keys:P,programId:d,data:Buffer.from([...pt.buyExactOut,...T])})}function zr(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountA"),w("minAmountB"),w("shareFeeRate")]),P=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Kt.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new zo(0)},T),new dt({keys:P,programId:d,data:Buffer.from([...pt.sellExactIn,...T])})}function Al(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f,y,b,g,A,k){let h=v([w("amountB"),w("maxAmountA"),w("shareFeeRate")]),P=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ko(d).publicKey,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1}];k&&P.push({pubkey:k,isSigner:!1,isWritable:!0}),P.push({pubkey:Kt.programId,isSigner:!1,isWritable:!1}),P.push({pubkey:f,isSigner:!1,isWritable:!0}),P.push({pubkey:y,isSigner:!1,isWritable:!0});let T=Buffer.alloc(h.span);return h.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new zo(0)},T),new dt({keys:P,programId:d,data:Buffer.from([...pt.sellExactOut,...T])})}function Vs(d,e,t,n,o,i,r,a,u){let s=v([]),c=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:Kt.programId,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(s.span);return s.encode({},l),new dt({keys:c,programId:d,data:Buffer.from([...pt.claimVestedToken,...l])})}function Es(d,e,t,n,o,i){let r=v([w("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(r.span);return r.encode({shareAmount:i},u),new dt({keys:a,programId:d,data:Buffer.from([...pt.createVestingAccount,...u])})}function Ds(d,e,t,n,o,i,r,a,u){let s=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!0},{pubkey:Gr,isSigner:!1,isWritable:!0}];return new dt({keys:s,programId:d,data:pt.claimPlatformFee})}function wl(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){let y=v([w("platformScale"),w("creatorScale"),w("burnScale"),w("feeRate"),Dt("name"),Dt("web"),Dt("img"),w("creatorFeeRate"),w("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(p,"utf-8").length+4*3);return y.encode({platformScale:u.platformScale,creatorScale:u.creatorScale,burnScale:u.burnScale,feeRate:s,name:l,web:m,img:p,creatorFeeRate:c,platformVestingScale:f},g),new dt({keys:b,programId:d,data:Buffer.from([...pt.createPlatformConfig,...g])})}function kl(d,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],i;if(n.type==="updateClaimFeeWallet"){let r=v([V("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=v([V("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=v([V("index"),w("platformScale"),w("creatorScale"),w("burnScale")]);i=Buffer.alloc(r.span),r.encode(N({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=v([V("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:3,value:n.value},i)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let r=v([V("index"),Dt("value")]);i=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?r.encode({index:4,value:n.value},i):n.type==="updateWeb"?r.encode({index:5,value:n.value},i):n.type==="updateImg"&&r.encode({index:6,value:n.value},i)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let r=v([V("index")]);i=Buffer.alloc(r.span),r.encode({index:7},i)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let r=v([V("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),w("platformScale"),w("creatorScale"),w("burnScale"),w("feeRate"),Dt("name"),Dt("web"),Dt("img"),F("transferFeeExtensionAuth"),w("creatorFeeRate"),w("platformVestingScale"),F("platformVestingWallet")]);i=Buffer.alloc(1+32+32+32+8*5+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),r.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformVestingWallet:n.value.platformVestingWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate,platformVestingScale:n.value.platformVestingScale},i)}else if(n.type==="updateVestingWallet"){let r=v([V("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:9,value:n.value},i)}else if(n.type==="updatePlatformVestingScale"){let r=v([V("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:10,value:n.value},i)}else if(n.type==="updatePlatformCpCreator"){let r=v([V("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:11,value:n.value},i)}else if(n.type==="updateRestrictGlobalConfig"){let r=v([V("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:12,value:n.value},i)}else if(n.type==="updateRestrictCurveParam"){let r=v([V("index"),w("value")]);i=Buffer.alloc(r.span),r.encode({index:13,value:n.value},i)}else if(n.type==="updateCurveRuleManager"){let r=v([V("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:14,value:n.value},i)}else throw Error("updateInfo params type error");return new dt({keys:o,programId:d,data:Buffer.from([...pt.updatePlaformConfig,...i])})}function Ws(d,e,t,n,o,i,r,a){let u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Kt.programId,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}];return new dt({keys:u,programId:d,data:pt.claimPlatformFeeFromVault})}function qs(d,e,t,n,o,i,r){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Kt.programId,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1}];return new dt({keys:a,programId:d,data:pt.claimCreatorFee})}var HB=new zo("18446744073709551615");function Tl(d,e,t,n,o,i){let r=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1}];return new dt({keys:r,programId:d,data:pt.createPlatformVestingAccount})}function hl(d,e,t,n,o){let i=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1}];return new dt({keys:i,programId:d,data:pt.createPlatformAllowConfig})}function Bl(d,e,t,n,o){let i=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0}];return new dt({keys:i,programId:d,data:pt.closePlatformAllowConfig})}function Gp(d){let e=v([V("field"),V("op"),ae("value")]),t=Buffer.alloc(4+d.length*e.span);return t.writeUInt32LE(d.length,0),d.forEach((n,o)=>{e.encode(n,t,4+o*e.span)}),t}function Il(d,e,t,n,o){let i=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1}];return new dt({keys:i,programId:d,data:pt.createPlatformCurveRule})}function xl(d,e,t,n,o,i,r){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(ve().span);return ve().encode(i,u),new dt({keys:a,programId:d,data:Buffer.from([...pt.updatePlatformCurveRule,...u,...Gp(r)])})}function Sl(d,e,t,n,o,i){let r=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Kt.programId,isSigner:!1,isWritable:!1}],a=Buffer.alloc(ve().span);return ve().encode(i,a),new dt({keys:r,programId:d,data:Buffer.from([...pt.removePlatformCurveRule,...a])})}function Kl(d,e,t,n,o){let i=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0}];return new dt({keys:i,programId:d,data:pt.closePlatformCurveRule})}var Yn=v([w(),w("epoch"),V("curveType"),ve("index"),w("migrateFee"),w("tradeFeeRate"),w("maxShareFeeRate"),w("minSupplyA"),w("maxLockRate"),w("minSellRateA"),w("minMigrateRateA"),w("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),Z(w(),16)]),zp=v([w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod"),w("startTime"),w("totalAllocatedShare")]),yn=v([w(),w("epoch"),V("bump"),V("status"),V("mintDecimalsA"),V("mintDecimalsB"),V("migrateType"),w("supply"),w("totalSellA"),w("virtualA"),w("virtualB"),w("realA"),w("realB"),w("totalFundRaisingB"),w("protocolFee"),w("platformFee"),w("migrateFee"),zp.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),V("mintProgramFlag"),V("cpmmCreatorFeeOn"),w("platformVestingShare"),Z(V(),54)]),jB=v([w(),w("epoch"),F("poolId"),F("beneficiary"),w("claimedAmount"),w("tokenShareAmount"),Z(w(),8)]),Xp=v([V("migrateType"),V("migrateCpmmFeeOn"),w("supply"),w("totalSellA"),w("totalFundRaisingB"),w("totalLockedAmount"),w("cliffPeriod"),w("unlockPeriod")]),JB=v([w("epoch"),V("index"),F("configId"),Xp.replicate("bondingCurveParam"),Z(w(),50)]),bn=v([w(),w("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),w("platformScale"),w("creatorScale"),w("burnScale"),w("feeRate"),Z(V(),64,"name"),Z(V(),256,"web"),Z(V(),256,"img"),F("cpConfigId"),w("creatorFeeRate"),F("transferFeeExtensionAuth"),F("platformVestingWallet"),w("platformVestingScale"),F("platformCpCreator"),V("restrictGlobalConfig"),V("restrictCurveParam"),F("curveRuleManager"),Z(V(),78)]),Yp=v([V("field"),V("op"),ae("value")]),Hp=v([ve("groupId"),w("epoch"),Oa(Yp,"constraints")]),Xr=v([w(),V("bump"),V("version"),F("platformId"),F("configId"),w("epoch"),Z(w(),8),Oa(Hp,"groups")]);import{TOKEN_2022_PROGRAM_ID as Us,TOKEN_PROGRAM_ID as Qp}from"@solana/spl-token";function Zp(d,e){return d>>e&1?Us:Qp}function Yr(d){return Zp(d,0)}function Cl({mintAProgram:d,mintBProgram:e}){return(d.equals(Us)?1<<0:0)|(e.equals(Us)?1<<1:0)}import $p from"bn.js";var pI=new $p(1e6);import Hr from"bn.js";import Vi from"decimal.js";var Hn=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var Qr=class extends Hn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Vi(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Vi(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Vi(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Vi(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Vi(e.virtualB.add(e.realB.add(i)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new Hr(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new Hr(0)))throw Error("tfMinusMf <= 0");let u=a.mul(n).mul(n).div(r),s=a.mul(n).div(r).sub(t),c=u.div(s),l=t.mul(t).div(s);if(c.lt(new Hr(0))||l.lt(new Hr(0)))throw Error("invalid input 0");return{a:c,b:l,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return To(o,i)}};import zt from"bn.js";import Ll from"decimal.js";import Zr from"bn.js";import Ei from"decimal.js";var $r=class extends Hn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Ei(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Ei(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Ei(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Ei(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Ei(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new Zr(0)))throw Error("invalid input 1");let a=new Zr(2).mul(t).sub(i),s=t.mul(r).div(a);if(s.lt(new Zr(0))||t.lt(new Zr(0)))throw Error("invalid input 0");return{a:s,b:t,c:s}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return To(o,n)}};import Gt from"bn.js";import ho from"decimal.js";import Rl from"bn.js";import Gs from"decimal.js";var Di=class{static _multipler(e){return new Gs(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new Gs(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new Rl(o.mul(this._Q64).toFixed(0))}};Di._Q64=new Gs(new Rl(1).shln(64).toString());var jr=class extends Hn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new ho(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new ho(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new ho(e.virtualA.mul(e.realA).toString()).div(Di._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new ho(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new ho(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new Gt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Gt(3)).sub(i),s=t.mul(new Gt(2)).mul(r).div(a),c=s.mul(s),l=t.mul(new Gt(2)).mul(Oe).div(c);if(!l.gt(new Gt(0)))throw Error("a need gt 0");if(!wn.gt(l))throw Error("a need lt u64 max");if(l.lt(new Gt(0))||s.lt(new Gt(0)))throw Error("invalid input 0");return{a:l,b:new Gt(0),c:s}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Gt(2).mul(n).mul(Oe).div(e.virtualA);return new Gt(new ho(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return To(e.virtualA.mul(o),new Gt(2).mul(Oe)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=To(e.virtualA.mul(o),new Gt(2).mul(Oe));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Gt(2).mul(n).mul(Oe).div(e.virtualA),i=new Gt(new ho(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Ct=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a,decimalA:u,decimalB:s}){if(t<3)throw Error("point count < 3");let c=this.getCurve(e),l=c.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),m=c.getPoolInitPriceByInit(_(N({},l),{decimalA:u,decimalB:s})),p=o.div(new zt(t-1)),f=new zt(0),y=[{price:m,totalSellSupply:0}],{a:b,b:g}=l,A=f,k=f;for(let h=1;h<t;h++){let P=h!==t-1?p:o.sub(k),T=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:o,totalSellA:i},amountB:P,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,transferFeeConfigB:void 0,slot:0});A=A.add(T.amountA.amount),k=k.add(T.amountB);let I=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:u,decimalB:s,curveType:e});y.push({price:I,totalSellSupply:new Ll(A.toString()).div(10**u).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:i}){return this.getCurve(i).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(Ye).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new zt(10**i))))throw Error("supply lt min supply");let s=e.mul(r.minSellRateA).div(Ye);if(n.lt(s))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let c=e.sub(n).sub(o),l=e.mul(r.minMigrateRateA).div(Ye);if(c.lt(l))throw Error("migrate lt min migrate amoount");let m=e.sub(n).sub(o),p=new zt(new Ll(m.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new zt(10).pow(new zt(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new zt(100);if(p.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){var x;let l=Wi(t,s,c),m=t.sub((x=l.fee)!=null?x:new zt(0)),p=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),f=this.calculateFee({amount:m,feeRate:p}),y=m.sub(f),b=this.getCurve(i),g=b.buyExactIn({poolInfo:e,amount:y}),A=e.totalSellA.sub(e.realA),k,h,P,T;if(g.gt(A)){k=A;let S=b.buyExactOut({poolInfo:e,amount:k}),B=this.calculatePreFee({postFeeAmount:S,feeRate:p});P=B.sub(S);let R=Xo(B,s,c);h=R.amount,T=R.fee}else k=g,h=t,P=f,T=l.fee;let I=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Wi(k,u,c),amountB:h,splitFee:I,transferFeeB:T}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){let l=e.totalSellA.sub(e.realA),m=Xo(t,u,c),p=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(p=l);let y=this.getCurve(i).buyExactOut({poolInfo:e,amount:p}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),g=this.calculatePreFee({postFeeAmount:y,feeRate:b}),A=g.sub(y),k=Xo(g,s,c),h=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:k.amount,splitFee:h,transferFeeB:k.fee}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){var k;let l=this.getCurve(i),m=Wi(t,u,c),p=m.fee?m.amount.sub(m.fee):m.amount,f=l.sellExactIn({poolInfo:e,amount:p}),y=this.calculateFee({amount:f,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),b=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),g=f.sub(y),A=Wi(g,s,c);return{amountA:m,amountB:g.sub((k=A.fee)!=null?k:new zt(0)),splitFee:b,transferFeeB:A.fee}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:u,transferFeeConfigB:s,slot:c}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=Xo(t,s,c),p=m.amount,f=this.calculatePreFee({postFeeAmount:p,feeRate:l});if(e.realB.lt(f))throw Error("Insufficient liquidity");let y=f.sub(p),g=Ct.getCurve(i).sellExactOut({poolInfo:e,amount:f});if(g.gt(e.realA))throw Error();let A=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Xo(g,u,c),amountB:t,splitFee:A,transferFeeB:m.fee}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new zt(0):e.mul(n).div(r),u=r.isZero()?new zt(0):e.mul(o).div(r),s=r.isZero()?new zt(0):e.mul(i).div(r),c=e.sub(a).sub(u).sub(s);return{platformFee:a,shareFee:u,protocolFee:c,creatorFee:s}}static calculateFee({amount:e,feeRate:t}){return Mi(e,t,Ye)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Ye),o=Ye.sub(t);return n.add(o).sub(new zt(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new zt(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return Qr;case 1:return $r;case 2:return jr}throw Error("find curve error")}};import{NATIVE_MINT as Bn,TOKEN_2022_PROGRAM_ID as In,TOKEN_PROGRAM_ID as It,createAssociatedTokenAccountIdempotentInstruction as Xt,createSyncNativeInstruction as jp,getTransferFeeConfig as qi,unpackMint as Ui}from"@solana/spl-token";import ue from"bn.js";import{PublicKey as Gi,SystemProgram as Jp}from"@solana/web3.js";import $t from"decimal.js";var Jr={initPriceX64:new ue("515752397214619"),supply:new ue(1e15),totalSellA:new ue(7931e11),totalFundRaisingB:new ue(85e9),totalFundRaisingBUSD:new ue(125e8),totalLockedAmount:new ue("0"),cliffPeriod:new ue("0"),unlockPeriod:new ue("0"),decimals:6,virtualA:new ue("1073471847374405"),virtualB:new ue("30050573465"),realA:new ue(0),realB:new ue(0),protocolFee:new ue(0),platformId:new Gi("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ue(0),cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)}},Qn=new ue(1e4);var zi=class extends $e{constructor(e){super(e)}async getMintBTokenInfo({mintB:e,mintBProgram:t,transferFeeConfigB:n,skipCheckMintB:o}){if(e.equals(Bn))return{mintBProgram:It,transferFeeConfigB:void 0};if(n)return{mintBProgram:t!=null?t:In,transferFeeConfigB:n};if(o||(t==null?void 0:t.equals(It)))return{mintBProgram:t!=null?t:It,transferFeeConfigB:void 0};let i=await this.scope.connection.getAccountInfo(e);return!i||!i.owner.equals(In)?{mintBProgram:t!=null?t:It,transferFeeConfigB:void 0}:{mintBProgram:i.owner,transferFeeConfigB:qi(Ui(e,i,i.owner))||void 0}}async createLaunchpad(M){var D=M,{programId:e=Ee,authProgramId:t,platformId:n=Jr.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:u,uri:s,migrateType:c,configId:l,configInfo:m,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:A,slippage:k,associatedOnly:h=!0,checkCreateATAOwner:P=!1,extraSigners:T,token2022:I,transferFeeExtensionParams:x,creatorFeeOn:S=0,platformAllowConfig:B,mintBProgram:R,transferFeeConfigB:L,skipCheckMintB:O}=D,C=Ue(D,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","platformAllowConfig","mintBProgram","transferFeeConfigB","skipCheckMintB"]);var tu,nu,ou,iu,ru,au,su,uu,cu,lu,mu;let E=this.createTxBuilder(b);t=t!=null?t:Vt(e).publicKey,I=!!x,I&&(c="cpmm");let z=m;if(!z&&l){let Sn=await this.scope.connection.getAccountInfo(l);Sn&&(z=Yn.decode(Sn.data))}z||this.logAndCreateError("config not found");let Q=z.mintB,Y=z.curveType,{mintBProgram:ee,transferFeeConfigB:ne}=await this.getMintBTokenInfo({mintB:Q,mintBProgram:R,transferFeeConfigB:L,skipCheckMintB:O}),{publicKey:$}=Uo(e,o,Q),{publicKey:pe}=Ns(e,$,o),{publicKey:oe}=Ns(e,$,Q),{publicKey:be}=Nn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${Q.toBase58()}, decimals A:${i}/B:${r}, config:${l.toBase58()}`),u.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),s||this.logAndCreateError("uri should not empty");let Be=(await this.scope.api.fetchLaunchConfigs()).find(Sn=>Sn.key.pubKey===l.toBase58()),fe=(tu=C==null?void 0:C.supply)!=null?tu:new ue(Be.defaultParams.supplyInit),ie=(nu=C==null?void 0:C.totalSellA)!=null?nu:new ue(Be.defaultParams.totalSellA),Te=(ou=C==null?void 0:C.totalFundRaisingB)!=null?ou:new ue(Be.defaultParams.totalFundRaisingB),Rt=(iu=C==null?void 0:C.totalLockedAmount)!=null?iu:new ue(0),He=await this.scope.connection.getAccountInfo(n);He||this.logAndCreateError("platform id not found:",n.toString());let an=bn.decode(He.data),Io=an.platformVestingScale,Jo=an.feeRate,ei=Ct.getCurve(z.curveType).getInitParam({supply:fe,totalFundRaising:Te,totalSell:ie,totalLockedAmount:Rt,migrateFee:z.migrateFee}),Mt;try{Mt=await this.scope.token.getTokenInfo(Q)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let sn={epoch:new ue(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(ru=Mt==null?void 0:Mt.decimals)!=null?ru:r,supply:fe,totalSellA:ie,mintA:new Gi(o),mintB:Q,virtualA:ei.a,virtualB:ei.b,realA:Jr.realA,realB:Jr.realB,migrateFee:z.migrateFee,migrateType:c==="amm"?0:1,protocolFee:Jr.protocolFee,platformFee:Jo,platformId:n,configId:l,vaultA:pe,vaultB:oe,creator:this.scope.ownerPubKey,totalFundRaisingB:Te,vestingSchedule:{totalLockedAmount:Rt,cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)},mintProgramFlag:Cl({mintAProgram:I?In:It,mintBProgram:ee}),cpmmCreatorFeeOn:S,platformVestingShare:Io!=null?Io:new ue(0)},Jl=Ct.getCurve(z.curveType),{c:em}=Jl.getInitParam({supply:sn.supply,totalFundRaising:sn.totalFundRaisingB,totalLockedAmount:Rt,totalSell:z.curveType===0?sn.totalSellA:new ue(0),migrateFee:z.migrateFee});try{Ct.checkParam({supply:sn.supply,totalFundRaising:sn.totalFundRaisingB,totalSell:em,totalLockedAmount:Rt,decimals:sn.mintDecimalsA,config:z,migrateType:c}),this.logDebug("check init params success")}catch(Sn){this.logAndCreateError(`check create mint params failed, ${Sn.message}`)}let eu=an.restrictCurveParam?_s(e,n,l).publicKey:void 0;E.addInstruction({instructions:[I?gl(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,l,n,t,$,o,Q,pe,oe,ee,i,a,u,s||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ie,migrateType:c,supply:fe,totalFundRaisingB:Te},Rt,(au=C==null?void 0:C.cliffPeriod)!=null?au:new ue(0),(su=C==null?void 0:C.unlockPeriod)!=null?su:new ue(0),S,x,B?vi(e,n,l).publicKey:void 0,eu):bl(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,l,n,t,$,o,Q,pe,oe,be,ee,i,a,u,s||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ie,migrateType:c,supply:fe,totalFundRaisingB:Te},Rt,(uu=C==null?void 0:C.cliffPeriod)!=null?uu:new ue(0),(cu=C==null?void 0:C.unlockPeriod)!=null?cu:new ue(0),S,B?vi(e,n,l).publicKey:void 0,eu)]});let pa=I?await this.scope.connection.getEpochInfo():void 0,er=x?{epoch:BigInt((pa==null?void 0:pa.epoch)||0),maximumFee:BigInt((lu=x==null?void 0:x.maxinumFee.toString())!=null?lu:0),transferFeeBasisPoints:(mu=x==null?void 0:x.transferFeeBasePoints)!=null?mu:0}:void 0,fa={amountA:{amount:new ue(0),fee:void 0,expirationTime:void 0},amountB:new ue(0),splitFee:{platformFee:new ue(0),shareFee:new ue(0),protocolFee:new ue(0),creatorFee:new ue(0)},transferFeeB:void 0},ya;if(T!=null&&T.length&&E.addInstruction({signers:T}),!C.createOnly){let{builder:Sn,extInfo:tm}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:I?In:void 0,mintA:o,mintB:Q,mintBProgram:ee,transferFeeConfigB:ne,skipCheckMintB:!0,poolInfo:sn,buyAmount:g,minMintAAmount:A,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:z,platformFeeRate:Jo,slippage:k,associatedOnly:h,checkCreateATAOwner:P,skipCheckMintA:!er,transferFeeConfigA:er?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:er,newerTransferFee:er}:void 0,fromCreate:!0});E.addInstruction(N({},Sn.AllTxData)),fa=N({},tm),ya=(this.scope.cluster==="devnet"||p===1)&&C.shareFeeReceiver?[Sn.allInstructions[0]]:void 0}return E.addTipInstruction(y),p===0?E.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:fa,splitIns:ya,address:_(N({},sn),{poolId:$})}):E.sizeCheckBuild({computeBudgetConfig:f,swapInfo:fa,splitIns:ya,address:_(N({},sn),{poolId:$})})}async buyToken({programId:e=Ee,authProgramId:t,mintA:n,mintAProgram:o=It,mintB:i=Bn,poolInfo:r,configInfo:a,platformFeeRate:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:h=!1,transferFeeConfigA:P,skipCheckMintA:T=!1,mintBProgram:I,transferFeeConfigB:x,skipCheckMintB:S=!1}){var ie,Te,Rt;p.lte(new ue(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let B=this.createTxBuilder(m),{publicKey:R}=Uo(e,n,i);t=t!=null?t:Vt(e).publicKey;let L=P;if(!T)if(L)o=In;else{let He=await this.scope.connection.getAccountInfo(n);if(He&&He.owner.equals(In)){o=He.owner;let an=Ui(n,He,o);L=qi(an)||void 0}}let{mintBProgram:O,transferFeeConfigB:C}=await this.getMintBTokenInfo({mintB:i,mintBProgram:I,transferFeeConfigB:x,skipCheckMintB:S}),M=this.scope.account.getAssociatedTokenAccount(n,o),D=i.equals(Bn),E=h&&D,z=E?this.scope.account.getAssociatedTokenAccount(i,O):null,Q=D;if(B.addInstruction({instructions:[Xt(this.scope.ownerPubKey,M,this.scope.ownerPubKey,n,o),...E?[Xt(this.scope.ownerPubKey,z,this.scope.ownerPubKey,i,O),Jp.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:z,lamports:BigInt(p.toString())}),jp(z)]:[]]}),!E){let{account:He,instructionParams:an}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O,mint:i,owner:this.scope.ownerPubKey,createInfo:Q?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!Q,notUseTokenAccount:Q,associatedOnly:Q?!1:A,checkCreateATAOwner:k});He&&(z=He),B.addInstruction(an||{})}z||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Y=r;if(!Y){let He=await this.scope.connection.getAccountInfo(R,{commitment:"processed"});He||this.logAndCreateError("cannot found pool:",R.toBase58()),Y=yn.decode(He.data)}let ee=a,ne=await Me(this.scope.connection,[ee?void 0:Y.configId,Y.platformId].filter(Boolean).map(He=>({pubkey:He})));if(!ee){let He=ne.find(an=>an.pubkey.equals(Y.configId));(!He||!He.accountInfo)&&this.logAndCreateError("config not found: ",Y.configId.toBase58()),ee=Yn.decode(He.accountInfo.data)}let $=ne.find(He=>He.pubkey.equals(Y.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",Y.configId.toBase58());let pe=bn.decode($.accountInfo.data);u=u||pe.feeRate;let oe=Ct.buyExactIn({poolInfo:Y,amountB:p,protocolFeeRate:ee.tradeFeeRate,platformFeeRate:u,curveType:ee.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:L,transferFeeConfigB:C,slot:await this.scope.connection.getSlot()}),be=new $t(oe.amountA.amount.toString()).sub((Te=(ie=oe.amountA.fee)==null?void 0:ie.toString())!=null?Te:0),Ke=y?new $t(Qn.sub(y).toNumber()/Qn.toNumber()).clampedTo(0,1):new $t(1),Be=f!=null?f:y?new ue(be.mul(Ke).toFixed(0)):oe.amountA.amount.sub((Rt=oe.amountA.fee)!=null?Rt:new ue(0));oe.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${oe.amountA.toString()}, input ${i.toBase58()} amount: ${oe.amountB.toString()}`);let fe=g?te(g,i,O).publicKey:void 0;return fe&&B.addInstruction({instructions:[Xt(this.scope.ownerPubKey,fe,g,i,O)]}),B.addInstruction({instructions:[_i(e,this.scope.ownerPubKey,t,Y.configId,Y.platformId,R,M,z,Y.vaultA,Y.vaultB,n,i,o,O,pn(e,Y.platformId,i).publicKey,fn(e,Y.creator,i).publicKey,oe.amountB.lt(p)?oe.amountB:p,Be,b,fe)]}),B.addCustomComputeBudget(c),B.addTipInstruction(l),B.versionBuild({txVersion:s,extInfo:_(N({},oe),{decimalOutAmount:be,minDecimalOutAmount:new $t(Be.toString())})})}async buyTokenExactOut({programId:e=Ee,authProgramId:t,mintA:n,mintAProgram:o=It,mintB:i=Bn,poolInfo:r,configInfo:a,transferFeeConfigA:u,platformFeeRate:s,txVersion:c,computeBudgetConfig:l,txTipConfig:m,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new ue(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:h=!1,skipCheckMintA:P=!1,mintBProgram:T,transferFeeConfigB:I,skipCheckMintB:x=!1}){y.lte(new ue(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let S=this.createTxBuilder(p),{publicKey:B}=Uo(e,n,i);t=t!=null?t:Vt(e).publicKey;let R=r;if(!R){let fe=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});fe||this.logAndCreateError("cannot found pool:",B.toBase58()),R=yn.decode(fe.data)}let L=a,O=await Me(this.scope.connection,[L?void 0:R.configId,R.platformId].filter(Boolean).map(fe=>({pubkey:fe})));if(!L){let fe=O.find(ie=>ie.pubkey.equals(R.configId));(!fe||!fe.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),L=Yn.decode(fe.accountInfo.data)}let C=O.find(fe=>fe.pubkey.equals(R.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let M=bn.decode(C.accountInfo.data);s=s||M.feeRate;let D=u;if(!P)if(D)o=In;else{let fe=await this.scope.connection.getAccountInfo(n);if(fe&&fe.owner.equals(In)){o=fe.owner;let ie=Ui(n,fe,o);D=qi(ie)||void 0}}let{mintBProgram:E,transferFeeConfigB:z}=await this.getMintBTokenInfo({mintB:i,mintBProgram:T,transferFeeConfigB:I,skipCheckMintB:x}),Q=Ct.buyExactOut({poolInfo:R,amountA:y,protocolFeeRate:L.tradeFeeRate,platformFeeRate:s,curveType:L.curveType,shareFeeRate:g,creatorFeeRate:M.creatorFeeRate,transferFeeConfigA:D,transferFeeConfigB:z,slot:await this.scope.connection.getSlot()}),Y=new $t(Q.amountB.toString()),ee=b?new $t(Qn.add(b).toNumber()/Qn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new $t(1),ne=(f!=null?f:b)?new ue(Y.mul(ee).toFixed(0)):Q.amountB,$=this.scope.account.getAssociatedTokenAccount(n,o),pe=null,oe=i.equals(Bn);S.addInstruction({instructions:[Xt(this.scope.ownerPubKey,$,this.scope.ownerPubKey,n,o)]});let{account:be,instructionParams:Ke}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:E,mint:i,owner:this.scope.ownerPubKey,createInfo:oe?{payer:this.scope.ownerPubKey,amount:Q.amountB}:void 0,skipCloseAccount:!oe,notUseTokenAccount:oe,associatedOnly:oe?!1:k,checkCreateATAOwner:h});be&&(pe=be),S.addInstruction(Ke||{}),pe===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let Be=A?te(A,i,E).publicKey:void 0;return Be&&S.addInstruction({instructions:[Xt(this.scope.ownerPubKey,Be,A,i,E)]}),S.addInstruction({instructions:[Pl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,$,pe,R.vaultA,R.vaultB,n,i,o,E,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,y,ne,g,Be)]}),S.addCustomComputeBudget(l),S.addTipInstruction(m),S.versionBuild({txVersion:c,extInfo:{maxSpentAmount:ne,outAmount:y}})}async sellToken({programId:e=Ee,authProgramId:t,mintAProgram:n=It,mintA:o,mintB:i=Bn,poolInfo:r,configInfo:a,platformFeeRate:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:h=!1,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I=!1}){t=t!=null?t:Vt(e).publicKey;let x=this.createTxBuilder(m);p.lte(new ue(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:S}=Uo(e,o,i),B;if(!h){let ie=await this.scope.connection.getAccountInfo(o);if(ie&&ie.owner.equals(In)){n=ie.owner;let Te=Ui(o,ie,n);B=qi(Te)||void 0}}let{mintBProgram:R,transferFeeConfigB:L}=await this.getMintBTokenInfo({mintB:i,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I}),O=null,C=null,M=i.equals(Bn),{account:D,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});D&&(O=D),x.addInstruction(E||{}),O===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R,mint:i,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,notUseTokenAccount:M,associatedOnly:M?!1:A,checkCreateATAOwner:k});z&&(C=z),x.addInstruction(Q||{}),C||this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",{userTokenAccountB:C});let Y=r;if(!Y){let ie=await this.scope.connection.getAccountInfo(S,{commitment:"processed"});ie||this.logAndCreateError("cannot found pool",S.toBase58()),Y=yn.decode(ie.data)}let ee=a,ne=await Me(this.scope.connection,[ee?void 0:Y.configId,Y.platformId].filter(Boolean).map(ie=>({pubkey:ie})));if(!ee){let ie=ne.find(Te=>Te.pubkey.equals(Y.configId));(!ie||!ie.accountInfo)&&this.logAndCreateError("config not found: ",Y.configId.toBase58()),ee=Yn.decode(ie.accountInfo.data)}let $=ne.find(ie=>ie.pubkey.equals(Y.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",Y.configId.toBase58());let pe=bn.decode($.accountInfo.data);u=u||pe.feeRate;let oe=Ct.sellExactIn({poolInfo:Y,amountA:p,protocolFeeRate:ee.tradeFeeRate,platformFeeRate:u,curveType:ee.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,transferFeeConfigB:L,slot:await this.scope.connection.getSlot()}),be=new $t(oe.amountB.toString()),Ke=y?new $t(Qn.sub(y).toNumber()/Qn.toNumber()).clampedTo(0,1):new $t(1),Be=f!=null?f:y?new ue(be.mul(Ke).toFixed(0)):oe.amountB;Be.lte(new ue(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let fe=g?te(g,i,R).publicKey:void 0;return fe&&x.addInstruction({instructions:[Xt(this.scope.ownerPubKey,fe,g,i,R)]}),x.addInstruction({instructions:[zr(e,this.scope.ownerPubKey,t,Y.configId,Y.platformId,S,O,C,Y.vaultA,Y.vaultB,o,i,n,R,pn(e,Y.platformId,i).publicKey,fn(e,Y.creator,i).publicKey,oe.amountA.amount.lt(p)?oe.amountA.amount:p,Be,b,fe)]}),x.addCustomComputeBudget(c),x.addTipInstruction(l),x.versionBuild({txVersion:s,extInfo:{outAmount:Be}})}async sellTokenExactOut({programId:e=Ee,authProgramId:t,mintAProgram:n=It,mintA:o,mintB:i=Bn,poolInfo:r,configInfo:a,platformFeeRate:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:h=!1,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I=!1}){t=t!=null?t:Vt(e).publicKey;let x=this.createTxBuilder(m);f!=null&&f.lte(new ue(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:S}=Uo(e,o,i),B;if(!h){let ie=await this.scope.connection.getAccountInfo(o);if(ie&&ie.owner.equals(In)){n=ie.owner;let Te=Ui(o,ie,n);B=qi(Te)||void 0}}let{mintBProgram:R,transferFeeConfigB:L}=await this.getMintBTokenInfo({mintB:i,mintBProgram:P,transferFeeConfigB:T,skipCheckMintB:I}),O=null,C=null,M=i.equals(Bn),{account:D,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});D&&(O=D),x.addInstruction(E||{}),O===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:z,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R,mint:i,owner:this.scope.ownerPubKey,createInfo:M?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!M,notUseTokenAccount:M,associatedOnly:M?!1:A,checkCreateATAOwner:k});z&&(C=z),x.addInstruction(Q||{}),C===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let Y=r;if(!Y){let ie=await this.scope.connection.getAccountInfo(S,{commitment:"processed"});ie||this.logAndCreateError("cannot found pool",S.toBase58()),Y=yn.decode(ie.data)}let ee=a,ne=await Me(this.scope.connection,[ee?void 0:Y.configId,Y.platformId].filter(Boolean).map(ie=>({pubkey:ie})));if(!ee){let ie=ne.find(Te=>Te.pubkey.equals(Y.configId));(!ie||!ie.accountInfo)&&this.logAndCreateError("config not found: ",Y.configId.toBase58()),ee=Yn.decode(ie.accountInfo.data)}let $=ne.find(ie=>ie.pubkey.equals(Y.platformId));(!$||!$.accountInfo)&&this.logAndCreateError("platform info not found: ",Y.configId.toBase58());let pe=bn.decode($.accountInfo.data);u=u||pe.feeRate;let oe=Ct.sellExactOut({poolInfo:Y,amountB:p,protocolFeeRate:ee.tradeFeeRate,platformFeeRate:u,curveType:ee.curveType,shareFeeRate:b,creatorFeeRate:pe.creatorFeeRate,transferFeeConfigA:B,transferFeeConfigB:L,slot:await this.scope.connection.getSlot()}),be=new $t(oe.amountA.amount.toString()),Ke=y?new $t(Qn.add(y).toNumber()/Qn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new $t(1),Be=(f!=null?f:y)?new ue(be.mul(Ke).toFixed(0)):oe.amountA.amount,fe=g?te(g,i,R).publicKey:void 0;return fe&&x.addInstruction({instructions:[Xt(this.scope.ownerPubKey,fe,g,i,R)]}),x.addInstruction({instructions:[Al(e,this.scope.ownerPubKey,t,Y.configId,Y.platformId,S,O,C,Y.vaultA,Y.vaultB,o,i,n,R,pn(e,Y.platformId,i).publicKey,fn(e,Y.creator,i).publicKey,p,Be,b,fe)]}),x.addCustomComputeBudget(c),x.addTipInstruction(l),x.versionBuild({txVersion:s,extInfo:{maxSellAmount:Be}})}async createPlatformConfig({programId:e=Ee,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:i,cpConfigId:r,migrateCpLockNftScale:a,transferFeeExtensionAuth:u,creatorFeeRate:s,feeRate:c,name:l,web:m,img:p,platformVestingScale:f=new ue(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:A}){let k=this.createTxBuilder(A),{publicKey:h}=Ms(e,t);return k.addInstruction({instructions:[wl(e,t,n,o,i,h,r,u,a,c,s,l,m,p,f)]}),k.addCustomComputeBudget(b),k.addTipInstruction(g),k.versionBuild({txVersion:y,extInfo:{platformId:h}})}async updatePlatformConfig({programId:e=Ee,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=n!=null?n:Ms(e,t).publicKey;return s.addInstruction({instructions:[kl(e,t,c,o)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async createPlatformVestingAccount({programId:e=Ee,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:i,vestingRecord:r,txVersion:a,computeBudgetConfig:u,txTipConfig:s,feePayer:c}){let l=this.createTxBuilder(c),m=r!=null?r:Go(e,i,n).publicKey;return l.addInstruction({instructions:[Tl(e,t,n,o,i,m)]}),l.addCustomComputeBudget(u),l.addTipInstruction(s),l.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=Ee,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m}){var A;let p=this.createTxBuilder(m);t=t!=null?t:Vt(e).publicKey;let f=r,y=a;if(!f){let k=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});k||this.logAndCreateError("cannot found pool:",o.toBase58());let h=yn.decode(k.data),P=await this.scope.connection.getAccountInfo(h.configId,{commitment:"processed"});P||this.logAndCreateError("cannot found config:",h.configId.toBase58()),f=Yn.decode(P.data).mintB,y=y!=null?y:h.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(A=y==null?void 0:y.toBase58())!=null?A:"");let{mintBProgram:b}=await this.getMintBTokenInfo({mintB:f,mintBProgram:u}),g=te(this.scope.ownerPubKey,f,b).publicKey;return p.addInstruction({instructions:[Xt(this.scope.ownerPubKey,g,this.scope.ownerPubKey,f,b)]}),p.addInstruction({instructions:[Ds(e,i,t,o,n,y,g,f,b)]}),p.addCustomComputeBudget(c),p.addTipInstruction(l),p.versionBuild({txVersion:s})}async claimAllPlatformFee({programId:e=Ee,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u);t=t!=null?t:Vt(e).publicKey;let l=(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:yn.span},{memcmp:{offset:yn.offsetOf("platformId"),bytes:n.toString()}}]})).map(f=>({poolId:f.pubkey,pool:yn.decode(f.account.data)})).filter(({pool:f})=>f.platformFee.gt(new ue(0))),m={},p=[...new Set(l.map(({pool:f})=>f.mintB.toBase58()))];return p.length&&(await Me(this.scope.connection,p.map(y=>({pubkey:new Gi(y)})))).forEach(y=>{var b,g;m[y.pubkey.toBase58()]=(g=(b=y.accountInfo)==null?void 0:b.owner)!=null?g:It}),l.forEach(({poolId:f,pool:y})=>{var A;let b=(A=m[y.mintB.toBase58()])!=null?A:It,g=te(this.scope.ownerPubKey,y.mintB,b).publicKey;s.addInstruction({instructions:[Xt(this.scope.ownerPubKey,g,this.scope.ownerPubKey,y.mintB,b)]}),s.addInstruction({instructions:[Ds(e,o,t,f,n,y.vaultB,g,y.mintB,b)]})}),s.addTipInstruction(a),i===0?s.sizeCheckBuildV0({computeBudgetConfig:r}):s.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=Ee,poolId:t,beneficiary:n,shareAmount:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=await this.getRpcPoolInfo({poolId:t});o.add(c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let l=Go(e,t,n).publicKey;return s.addInstruction({instructions:[Es(e,this.scope.ownerPubKey,n,t,l,o)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=Ee,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=this.createTxBuilder(r);n.length===0&&this.logAndCreateError("beneficiaryList is null");let u=await this.getRpcPoolInfo({poolId:t});return n.reduce((c,l)=>c.add(l.shareAmount),u.vestingSchedule.totalAllocatedShare).gt(u.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(c=>{let l=Go(e,t,c.wallet).publicKey;a.addInstruction({instructions:[Es(e,this.scope.ownerPubKey,c.wallet,t,l,c.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=Ee,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=Vt(e).publicKey,l=o||Go(e,t,this.scope.ownerPubKey).publicKey,m=n;if(!m){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),m=yn.decode(f.data)}let p=te(this.scope.ownerPubKey,m.mintA,It).publicKey;return s.addInstruction({instructions:[Xt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,m.mintA)]}),s.addInstruction({instructions:[Vs(e,this.scope.ownerPubKey,c,t,l,p,m.vaultA,m.mintA,It)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=Ee,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let u=this.createTxBuilder(a),s=N({},n),c=Vt(e).publicKey,l=t.filter(m=>!s[m.toBase58()]);if(l.length){let m=await this.getRpcPoolsInfo({poolIdList:l});s=N(N({},s),m.poolInfoMap)}return t.forEach(m=>{let p=m.toBase58(),f=s[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||Go(e,m,this.scope.ownerPubKey).publicKey,b=te(this.scope.ownerPubKey,f.mintA,It).publicKey;u.addInstruction({instructions:[Xt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),u.addInstruction({instructions:[Vs(e,this.scope.ownerPubKey,c,m,y,b,f.vaultA,f.mintA,It)]})}),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=Ee,platformId:t,mintB:n,mintBProgram:o,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:u,feePayer:s}){let c=this.createTxBuilder(s),l=pn(e,t,n).publicKey,m=Fs(e).publicKey,{mintBProgram:p}=await this.getMintBTokenInfo({mintB:n,mintBProgram:o}),f=this.scope.account.getAssociatedTokenAccount(n,p);return c.addInstruction({instructions:[Xt(this.scope.ownerPubKey,f,this.scope.ownerPubKey,n,p),Ws(e,t,i!=null?i:this.scope.ownerPubKey,m,l,f,n,p)]}),c.addCustomComputeBudget(a),c.addTipInstruction(u),c.versionBuild({txVersion:r})}async claimMultipleVaultPlatformFee({programId:e=Ee,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:i,feePayer:r,associatedOnly:a=!0,checkCreateATAOwner:u=!1}){let s=this.createTxBuilder(r),c={};return t.forEach(async l=>{var b,g,A;let m=Fs(e).publicKey,p=pn(e,l.id,l.mintB).publicKey,f=l.mintB.equals(Bn)&&n,y=c[l.mintB.toBase58()];if(!y){let{account:k,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:(b=l.mintBProgram)!=null?b:It,mint:l.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:u});k&&(y=k),s.addInstruction(h||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${l.id.toBase58()} mintB(${l.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}s.addInstruction({instructions:[Ws(e,l.id,(g=l.claimFeeWallet)!=null?g:this.scope.ownerPubKey,m,p,y,l.mintB,(A=l.mintBProgram)!=null?A:It)]})}),o===0?s.sizeCheckBuildV0({computeBudgetConfig:i}):s.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=Ee,mintB:t,mintBProgram:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=this.createTxBuilder(a),s=fn(e,this.scope.ownerPubKey,t).publicKey,c=vs(e).publicKey,{mintBProgram:l}=await this.getMintBTokenInfo({mintB:t,mintBProgram:n}),m=this.scope.account.getAssociatedTokenAccount(t,l);return u.addInstruction({instructions:[Xt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,l),qs(e,this.scope.ownerPubKey,c,s,m,t,l)]}),u.addCustomComputeBudget(i),u.addTipInstruction(r),u.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=Ee,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=this.createTxBuilder(i);return t.forEach(a=>{var p;let u=a.pubKey,s=(p=a.programId)!=null?p:It,c=fn(e,this.scope.ownerPubKey,u).publicKey,l=vs(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(u,s);r.addInstruction({instructions:[Xt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,u,s),qs(e,this.scope.ownerPubKey,l,c,m,u,s)]})}),n==0?r.sizeCheckBuildV0({computeBudgetConfig:o}):r.sizeCheckBuild({computeBudgetConfig:o})}async createPlatformAllowConfig({programId:e=Ee,platformAdmin:t,platformId:n,configInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),{publicKey:c}=Os(e,new Gi(o.mintB),o.curveType,o.index),{publicKey:l}=vi(e,n,c);return s.addInstruction({instructions:[hl(e,t,n,c,l)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i,extInfo:{platformId:n}})}async closePlatformAllowConfig({programId:e=Ee,platformAdmin:t,platformId:n,configInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),{publicKey:c}=Os(e,new Gi(o.mintB),o.curveType,o.index),{publicKey:l}=vi(e,n,c);return s.addInstruction({instructions:[Bl(e,t,n,c,l)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i,extInfo:{platformAllowConfig:l}})}async createPlatformCurveRule({programId:e=Ee,curveRuleAuthority:t,platformId:n,configId:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),{publicKey:c}=_s(e,n,o);return s.addInstruction({instructions:[Il(e,t!=null?t:this.scope.ownerPubKey,n,o,c)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i,extInfo:{platformCurveRuleId:c}})}async updatePlatformCurveRule({programId:e=Ee,curveRuleAuthority:t,platformCurveRuleId:n,groupId:o,constraints:i,txVersion:r,computeBudgetConfig:a,txTipConfig:u,feePayer:s}){let c=this.createTxBuilder(s),l=await this.scope.connection.getAccountInfo(n);if(!l)throw new Error(`platformCurveRule ${n} not found`);let m=Xr.decode(l.data);return c.addInstruction({instructions:[xl(e,t!=null?t:this.scope.ownerPubKey,m.platformId,m.configId,n,o,i)]}),c.addCustomComputeBudget(a),c.addTipInstruction(u),c.versionBuild({txVersion:r})}async removePlatformCurveRule({programId:e=Ee,curveRuleAuthority:t,platformCurveRuleId:n,groupId:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:u}){let s=this.createTxBuilder(u),c=await this.scope.connection.getAccountInfo(n);if(!c)throw new Error(`platformCurveRule ${n} not found`);let l=Xr.decode(c.data);return s.addInstruction({instructions:[Sl(e,t!=null?t:this.scope.ownerPubKey,l.platformId,l.configId,n,o)]}),s.addCustomComputeBudget(r),s.addTipInstruction(a),s.versionBuild({txVersion:i})}async closePlatformCurveRule({programId:e=Ee,curveRuleAuthority:t,platformCurveRuleId:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=this.createTxBuilder(a),s=await this.scope.connection.getAccountInfo(n);if(!s)throw new Error(`platformCurveRule ${n} not found`);let c=Xr.decode(s.data);return u.addInstruction({instructions:[Kl(e,t!=null?t:this.scope.ownerPubKey,c.platformId,c.configId,n)]}),u.addCustomComputeBudget(i),u.addTipInstruction(r),u.versionBuild({txVersion:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Me(this.scope.connection,e.map(u=>({pubkey:u})),t),o={},i=[];for(let u=0;u<e.length;u++){let s=n[u];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+e[u].toBase58());let c=yn.decode(s.accountInfo.data);o[e[u].toBase58()]=_(N({},c),{poolId:e[u],programId:s.accountInfo.owner}),i.push(c.configId)}let r=await Me(this.scope.connection,i.map(u=>({pubkey:u})),t),a={};for(let u=0;u<i.length;u++){let s=r[u];if(s===null||!s.accountInfo)throw Error("fetch config info error: "+i[u].toBase58());let c=Yn.decode(s.accountInfo.data);a[i[u].toBase58()]=_(N({},c),{configId:s.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((u,s)=>_(N({},u),{[s]:_(N({},o[s]),{configInfo:a[o[s].configId.toBase58()]})}),{})}}};var Ol={[Va.toBase58()]:3},Nl={3:Va};var zs=v([Ae(5),Ae(8),F("ownAddress"),w("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),F("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]),Ml={3:zs};import{PublicKey as Fl}from"@solana/web3.js";var ea=ke("Serum"),ta=class{static getProgramId(e){let t=Nl[e];return t||ea.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ol[t];return n||ea.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ml[e];return t||ea.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()],o=0,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Fl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return ea.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Fl.default,nonce:o}}};import{ASSOCIATED_TOKEN_PROGRAM_ID as ef,TOKEN_2022_PROGRAM_ID as tf,TOKEN_PROGRAM_ID as nf}from"@solana/spl-token";import{PublicKey as me,SystemProgram as of,TransactionInstruction as rf}from"@solana/web3.js";import Zn from"bn.js";function af(d,e,t,n,o,i,r,a,u,s,c,l,m,p,f){var T;let y=[],b=[K({pubkey:nf,isWritable:!1}),K({pubkey:tf,isWritable:!1}),K({pubkey:ef,isWritable:!1}),K({pubkey:of.programId,isWritable:!1}),K({pubkey:e,isSigner:!0})];b.push(K({pubkey:t})),b.push(K({pubkey:o}));let g=[u,s],A=[c,l],k=[i,r,a];for(let I=0;I<g.length;I++){let x=g[I],S=k[I]===x.mintA.address;if(b.push(K({pubkey:new me(x.programId),isWritable:!1})),I===g.length-1?b.push(K({pubkey:o})):b.push(K({pubkey:n})),b.push(K({pubkey:new me(k[I])})),b.push(K({pubkey:new me(k[I+1])})),x.version===6){let B=A[I];b.push(K({pubkey:new me(B.config.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(S?B.vault.A:B.vault.B)})),b.push(K({pubkey:new me(S?B.vault.B:B.vault.A)})),b.push(K({pubkey:new me(x.observationId)})),b.push(K({pubkey:un})),b.push(K({pubkey:De(new me(x.programId),new me(x.id)).publicKey})),y.push(sf(x.sqrtPriceX64.toString(),S));for(let R of(T=f[I])!=null?T:[])b.push(K({pubkey:new me(R)}))}else if(x.version===5){let B=A[I];b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.authority),isWritable:!1})),b.push(K({pubkey:new me(B.marketProgramId)})),b.push(K({pubkey:new me(B.marketAuthority)})),b.push(K({pubkey:Uu,isWritable:!1})),b.push(K({pubkey:new me(B.openOrders)})),b.push(K({pubkey:new me(B.vault.A)})),b.push(K({pubkey:new me(B.vault.B)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.marketId)})),b.push(K({pubkey:new me(B.marketBids)})),b.push(K({pubkey:new me(B.marketAsks)})),b.push(K({pubkey:new me(B.marketEventQueue)})),b.push(K({pubkey:new me(B.marketBaseVault)})),b.push(K({pubkey:new me(B.marketQuoteVault)}))}else if(x.version===4){let B=A[I],R=x.status!==1;b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(B.authority),isWritable:!1})),b.push(K({pubkey:new me(R?B.id:B.marketProgramId)})),b.push(K({pubkey:new me(R?B.id:B.marketAuthority)})),b.push(K({pubkey:new me(R?B.id:B.openOrders)})),b.push(K({pubkey:new me(B.vault.A)})),b.push(K({pubkey:new me(B.vault.B)})),b.push(K({pubkey:new me(R?B.id:B.marketId)})),b.push(K({pubkey:new me(R?B.id:B.marketBids)})),b.push(K({pubkey:new me(R?B.id:B.marketAsks)})),b.push(K({pubkey:new me(R?B.id:B.marketEventQueue)})),b.push(K({pubkey:new me(R?B.id:B.marketBaseVault)})),b.push(K({pubkey:new me(R?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=A[I];b.push(K({pubkey:new me(B.authority)})),b.push(K({pubkey:new me(B.config.id)})),b.push(K({pubkey:new me(B.id)})),b.push(K({pubkey:new me(S?B.vault.A:B.vault.B)})),b.push(K({pubkey:new me(S?B.vault.B:B.vault.A)})),b.push(K({pubkey:new me(x.observationId)}))}else throw Error("pool type error")}let h=v([V("insId"),w("amountIn"),w("amountOut"),Z(ae(),y.length,"clmmPriceLimit")]),P=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:m,amountOut:p,clmmPriceLimit:y},P),new rf({keys:b,programId:d,data:P})}function sf(d,e){if(d)if(e){let t=new Zn(d).div(new Zn(25));return t.gt(wt.add(ot))?t:wt.add(ot)}else{let t=new Zn(d).mul(new Zn(25));return t.lt(kt.sub(ot))?t:kt.sub(ot)}else return e?wt.add(ot):kt.sub(ot)}function vl({routeProgram:d,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,u,s,c,l,m;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],f=vt(p),y=t.equals(f.mintA.address)?wt.add(ot):kt.sub(ot);return ye.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:f.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:f.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new Zn(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],f=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[qo(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,f?p.vaultA:p.vaultB,f?p.vaultB:p.vaultA,f?p.mintProgramA:p.mintProgramB,f?p.mintProgramB:p.mintProgramA,new me(p[f?"mintA":"mintB"].address),new me(p[f?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[f?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?qr({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new Zn(0)),fixedSide:"in"}):Wr({poolKeys:p,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=(s=n.minAmountOut.fee)==null?void 0:s.raw)!=null?c:new Zn(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=n.poolInfo[0],f=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[af(d,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,f,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((m=(l=n.minAmountOut.fee)==null?void 0:l.raw)!=null?m:new Zn(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(g=>g!==void 0),address:{}}}else throw Error("route type error")}var xt=new Pe(0);function $n(d,e){var n,o,i,r,a;let t=(n=d.extensions)==null?void 0:n.feeConfig;if(!!t)return{transferFeeConfigAuthority:de.default,withdrawWithheldAuthority:de.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((i=(o=t.olderTransferFee.epoch)!=null?o:e)!=null?i:0),maximumFee:BigInt(t.olderTransferFee.maximumFee),transferFeeBasisPoints:t.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((a=(r=t.newerTransferFee.epoch)!=null?r:e)!=null?a:0),maximumFee:BigInt(t.newerTransferFee.maximumFee),transferFeeBasisPoints:t.newerTransferFee.transferFeeBasisPoints}}}function na(d){return d.programId?new de(d.programId):_e}var Xi=class extends $e{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let u=ce(t);for(let s=0;s<r.length;s++)u.gte(r[s].amount)?(a.addInstruction({instructions:[Cn({tokenAccount:r[s].publicKey,destination:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(r[s].amount)):a.addInstruction({instructions:[Cn({tokenAccount:r[s].publicKey,destination:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let u=this.createTxBuilder(a),s=e.amountIn,c=e.amountOut,l=s.amount.token.mint.equals(j),m=c.amount.token.mint.equals(j),p=s.amount.token.mint,f=c.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:s.amount.token.isToken2022?Yo:_e,mint:p,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:s.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&u.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!m)g=this.scope.account.getAssociatedTokenAccount(f,c.amount.token.isToken2022?Yo:_e);else{let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Yo:_e,mint:f,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=P,T&&u.addInstruction(T)}m&&u.addInstruction({endInstructions:[Cn({owner:this.scope.ownerPubKey,destination:this.scope.ownerPubKey,tokenAccount:g,programId:_e})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let P=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?Yo:_e)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),h=vl({routeProgram:i,inputMint:p,swapInfo:_(N({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let P=this.createTxBuilder(),T=s.amount.token.isToken2022?uf(y,s.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),s.amount.token.decimals,[],Yo):Vl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());P.addInstruction({instructions:[T],instructionTypes:[X.TransferAmount]}),P.addInstruction(h);let{transactions:I}=r===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();I.length<2&&u.addInstruction({instructions:[Vl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return u.addInstruction(h),r===0?u.sizeCheckBuildV0({computeBudgetConfig:o,address:h.address}):u.sizeCheckBuild({computeBudgetConfig:o,address:h.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:u=new Pe(0),shareFeeReceiver:s,launchPlatformInfo:c,slot:l,mintInfo:m,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g,blockTimestamp:A}){let k=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,h=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:P,clmmComputeAmount:{maxClmmAmountIn:T,clmmAmountOut:I,remainingAccounts:x},launchPoolInfo:S,launchAuthProgramId:B,launchSwapInfo:R,launchMintProgramB:L,outAmount:O,minOutAmount:C}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:h,shareFeeRate:u,launchPlatformInfo:c,slot:l,mintInfo:m,blockTimestamp:A}),M=e.toString()===P.poolInfo.mintA.address,D=f.useSOLBalance&&P.poolInfo.mintA.address===j.toBase58(),E=f.useSOLBalance&&P.poolInfo.mintB.address===j.toBase58(),z={},Q;!r||r.equals(new xe(0))?Q=M?wt.add(new Pe(1)):kt.sub(new Pe(1)):Q=re.priceToSqrtPriceX64(r,P.poolInfo.mintA.decimals,P.poolInfo.mintB.decimals);let Y=this.createTxBuilder(k),[ee,ne]=[new de(P.poolInfo.mintA.address),new de(P.poolInfo.mintB.address)],[$,pe]=[new de(P.poolInfo.mintA.programId),new de(P.poolInfo.mintB.programId)],oe=this.scope.account.getAssociatedTokenAccount(ee,$),be=this.scope.account.getAssociatedTokenAccount(ne,pe);Y.addInstruction({instructions:[Ho(this.scope.ownerPubKey,oe,this.scope.ownerPubKey,ee,$),Ho(this.scope.ownerPubKey,be,this.scope.ownerPubKey,ne,pe)]}),(M&&D||!M&&E)&&Y.addInstruction({instructions:[_l.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:M?oe:be,lamports:BigInt(T.toString())}),El(M?oe:be)]}),z[P.poolInfo.mintA.address]=oe,z[P.poolInfo.mintB.address]=be,(!oe||!be)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:oe,ownerTokenAccountB:be}),Y.addInstruction(n?ye.makeSwapBaseOutInstructions({poolInfo:P.poolInfo,poolKeys:P.poolKeys,observationId:P.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:oe,tokenAccountB:be},outputMint:M?ne:ee,amountOut:I,amountInMax:T,sqrtPriceLimitX64:Q,remainingAccounts:x}):ye.makeSwapBaseInInstructions({poolInfo:P.poolInfo,poolKeys:P.poolKeys,observationId:P.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:oe,tokenAccountB:be},inputMint:new de(e),amountIn:t,amountOutMin:I,sqrtPriceLimitX64:Q,remainingAccounts:x}));let Ke=Yr(S.mintProgramFlag),Be=this.scope.account.getAssociatedTokenAccount(S.mintA,Ke),fe=z[S.mintB.toBase58()];if(Y.addInstruction({instructions:[Ho(this.scope.ownerPubKey,Be,this.scope.ownerPubKey,S.mintA,Ke)]}),!fe){let ie=S.mintB.equals(j),{account:Te,instructionParams:Rt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L,mint:S.mintB,notUseTokenAccount:ie,owner:this.scope.ownerPubKey,skipCloseAccount:!ie,createInfo:ie?{payer:this.scope.ownerPubKey,amount:I}:void 0,associatedOnly:!1,checkCreateATAOwner:y});fe=Te,Rt&&Y.addInstruction(Rt)}return Y.addInstruction({instructions:[_i(S.programId,this.scope.ownerPubKey,B,S.configId,S.platformId,new de(i),Be,fe,S.vaultA,S.vaultB,S.mintA,S.mintB,Ke,L,pn(S.programId,S.platformId,S.mintB).publicKey,fn(S.programId,S.creator,S.mintB).publicKey,R.amountB.lt(I)?R.amountB:I,C,u,s)]}),Y.addCustomComputeBudget(b),Y.versionBuild({txVersion:g,extInfo:{routes:[{mint:new de(e),amount:n?T:t,decimal:P.poolInfo[M?"mintA":"mintB"].decimals},{mint:M?ne:ee,amount:I,decimal:P.poolInfo[M?"mintB":"mintA"].decimals},{mint:S.mintA,amount:O,decimal:S.mintDecimalsA}],outAmount:O,minOutAmount:C}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:u=new Pe(0),clmmPoolData:s,launchPoolInfo:c,launchPlatformInfo:l,slot:m,mintInfo:p,blockTimestamp:f}){var E,z;let y=r>0?new xe(r).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():r,b=s!=null?s:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==b.poolInfo.mintA.address&&e.toString()!==b.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let g=e.toString()===b.poolInfo.mintA.address,A=b.poolInfo[g?"mintB":"mintA"],k=c;if(k||(k=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(i)})),A.address!==k.mintB.toBase58())throw new Error(`clmm swap mint(${A.address}) != launch pool mintB(${k.mintB.toBase58()})`);let h=n?await lt.computeAmountIn({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountOut:t,baseMint:new de(b.poolInfo[g?"mintB":"mintA"].address),slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:f}):await lt.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountIn:t,tokenOut:A,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:f}),P=l;if(!P){let Q=await this.scope.connection.getAccountInfo(k.platformId);P=bn.decode(Q.data)}let T=p!=null?p:await this.scope.token.getTokenInfo(k.mintA),I=Vt(k.programId).publicKey,x=$n(T,a==null?void 0:a.epoch),S=na(A),B=$n(A,a==null?void 0:a.epoch),R=n?t:h.minAmountOut.amount.raw,L=Ct.buyExactIn({poolInfo:k,amountB:R,protocolFeeRate:k.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:k.configInfo.curveType,shareFeeRate:u,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:x,transferFeeConfigB:B,slot:m!=null?m:await this.scope.connection.getSlot()}),O=L.amountA.amount.sub((E=L.amountA.fee)!=null?E:new Pe(0)),C=new xe(O.toString()),M=new Pe(1e4),D=y?new xe(M.sub(new Pe(y*1e4)).toNumber()/M.toNumber()).clampedTo(0,1):new xe(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:n?h.maxAmountIn.amount:t,clmmAmountOut:R,remainingAccounts:h.remainingAccounts},clmmComputeInfo:h,launchPoolInfo:k,launchAuthProgramId:I,launchMintTransferFeeConfig:x,launchMintProgramB:S,launchMintTransferFeeConfigB:B,launchSwapInfo:L,outAmount:L.amountA.amount.sub((z=L.amountA.fee)!=null?z:new Pe(0)),minOutAmount:new Pe(C.mul(D).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new Pe(0),shareFeeReceiver:a,ownerInfo:u={useSOLBalance:!0},checkCreateATAOwner:s=!1,computeBudgetConfig:c,txVersion:l,blockTimestamp:m}){let p=(u==null?void 0:u.feePayer)||this.scope.ownerPubKey,f=await this.scope.fetchEpochInfo(),{clmmPoolData:y,clmmComputeAmount:{remainingAccounts:b},launchPoolInfo:g,launchAuthProgramId:A,launchSwapInfo:k,launchMintProgramB:h,minLaunchOutAmount:P,outAmount:T,minOutAmount:I}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:f,shareFeeRate:r,blockTimestamp:m}),x=this.createTxBuilder(p),S={},B=Yr(g.mintProgramFlag),{account:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:g.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:s});if(!R)throw new Error(`do not have launch mint(${g.mintA.toString()}) token account`);let L=g.mintB.equals(j),{account:O,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:h,mint:g.mintB,notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:s});if(C&&x.addInstruction(C),!O)throw new Error(`do not have launch mint(${g.mintA.toString()}) token account`);S[g.mintB.toBase58()]=O,x.addInstruction({instructions:[zr(g.programId,this.scope.ownerPubKey,A,g.configId,g.platformId,new de(n),R,O,g.vaultA,g.vaultB,g.mintA,g.mintB,B,h,pn(g.programId,g.platformId,g.mintB).publicKey,fn(g.programId,g.creator,g.mintB).publicKey,k.amountA.amount.lt(e)?k.amountA.amount:e,P,r,a)]});let M=g.mintB.toString()===y.poolInfo.mintA.address,D=u.useSOLBalance&&y.poolInfo.mintA.address===j.toBase58(),E=u.useSOLBalance&&y.poolInfo.mintB.address===j.toBase58(),z;!o||o.equals(new xe(0))?z=M?wt.add(new Pe(1)):kt.sub(new Pe(1)):z=re.priceToSqrtPriceX64(o,y.poolInfo.mintA.decimals,y.poolInfo.mintB.decimals);let[Q,Y]=[new de(y.poolInfo.mintA.address),new de(y.poolInfo.mintB.address)],[ee,ne]=[new de(y.poolInfo.mintA.programId),new de(y.poolInfo.mintB.programId)],$=D?void 0:this.scope.account.getAssociatedTokenAccount(Q,ee),pe=E?void 0:this.scope.account.getAssociatedTokenAccount(Y,ne);if(!$){let{account:oe,instructionParams:be}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ee,mint:Q,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:u.feePayer||this.scope.ownerPubKey,amount:M?e:0},associatedOnly:!1,checkCreateATAOwner:s});$=oe,be&&x.addInstruction(be)}if(!pe){let{account:oe,instructionParams:be}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ne,mint:Y,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:u.feePayer||this.scope.ownerPubKey,amount:M?0:e},associatedOnly:!1,checkCreateATAOwner:s});pe=oe,be&&x.addInstruction(be)}return S[y.poolInfo.mintA.address]=$,S[y.poolInfo.mintB.address]=pe,(!$||!pe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:$,ownerTokenAccountB:pe}),x.addInstruction(ye.makeSwapBaseInInstructions({poolInfo:y.poolInfo,poolKeys:y.poolKeys,observationId:y.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:$,tokenAccountB:pe},inputMint:new de(y.poolKeys[M?"mintA":"mintB"].address),amountIn:P,amountOutMin:I,sqrtPriceLimitX64:z,remainingAccounts:b})),x.addCustomComputeBudget(c),x.versionBuild({txVersion:l,extInfo:{routes:[{mint:g.mintA,amount:e,decimal:g.mintDecimalsA},{mint:g.mintB,amount:P,decimal:g.mintDecimalsB},{mint:new de(y.poolKeys[M?"mintB":"mintA"].address),amount:T,decimal:y.poolKeys[M?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:I}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new Pe(0),clmmPoolData:a,launchPoolInfo:u,launchPlatformInfo:s,blockTimestamp:c}){let l=o>0?new xe(o).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():o,m=u;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(n)}));let p=m.mintB,f=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(p.toString()!==f.poolInfo.mintA.address&&p.toString()!==f.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=p.toString()===f.poolInfo.mintA.address,b=f.poolInfo[y?"mintB":"mintA"],g=f.poolInfo[y?"mintA":"mintB"],A=s;if(!A){let M=await this.scope.connection.getAccountInfo(m.platformId);A=bn.decode(M.data)}let k=await this.scope.token.getTokenInfo(m.mintA),h=Vt(m.programId).publicKey,P=$n(k,i==null?void 0:i.epoch),T=na(g),I=$n(g,i==null?void 0:i.epoch),x=Ct.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:P,transferFeeConfigB:I,slot:await this.scope.connection.getSlot()}),S=x.amountB,B=new xe(S.toString()),R=new Pe(1e4),L=l?new xe(R.sub(new Pe(l*1e4)).toNumber()/R.toNumber()).clampedTo(0,1):new xe(1),O=new Pe(B.mul(L).toFixed(0)),C=await lt.computeAmountOutFormat({poolInfo:f.computePoolInfo,tickarrayBitmapExtension:f.computePoolInfo.exBitmapInfo,tickArrayCache:f.tickData[t.toString()],amountIn:O,tokenOut:b,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo(),blockTimestamp:c});return{clmmPoolData:f,clmmComputeAmount:C,launchPoolInfo:m,launchAuthProgramId:h,launchMintTransferFeeConfig:P,launchMintProgramB:T,launchMintTransferFeeConfigB:I,launchSwapInfo:x,minLaunchOutAmount:O,outAmount:C.amountOut.amount.raw,minOutAmount:C.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:i,slippage:r=.01,shareFeeRate:a=new Pe(0),shareFeeReceiver:u,launchPlatformInfo:s,slot:c,mintInfo:l,epochInfo:m,ownerInfo:p={useSOLBalance:!0},checkCreateATAOwner:f=!1,computeBudgetConfig:y,txVersion:b}){let g=(p==null?void 0:p.feePayer)||this.scope.ownerPubKey,A=m!=null?m:await this.scope.fetchEpochInfo(),{computePoolInfo:k,poolKeys:h}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:P,cpmmPoolData:T,launchPoolInfo:I,launchAuthProgramId:x,launchSwapInfo:S,launchMintProgramB:B,outAmount:R,minOutAmount:L}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:k,launchPoolId:o,slippage:r,epochInfo:A,shareFeeRate:a,launchPlatformInfo:s,slot:c,mintInfo:l}),O=e.toString()===T.mintA.address,C=p.useSOLBalance&&T.mintA.address===j.toBase58(),M=p.useSOLBalance&&T.mintB.address===j.toBase58(),D={},E=this.createTxBuilder(g),[z,Q]=[new de(T.mintA.address),new de(T.mintB.address)],[Y,ee]=[new de(T.mintA.programId),new de(T.mintB.programId)],ne=this.scope.account.getAssociatedTokenAccount(z,Y),$=this.scope.account.getAssociatedTokenAccount(Q,ee);E.addInstruction({instructions:[Ho(this.scope.ownerPubKey,ne,this.scope.ownerPubKey,z,Y),Ho(this.scope.ownerPubKey,$,this.scope.ownerPubKey,Q,ee)]}),(O&&C||!O&&M)&&E.addInstruction({instructions:[_l.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:O?ne:$,lamports:BigInt(P.amountIn.toString())}),El(O?ne:$)]}),D[T.mintA.address]=ne,D[T.mintB.address]=$,(!ne||!$)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ne,ownerTokenAccountB:$});let pe=i!=null?i:h;E.addInstruction({instructions:[qo(T.programId,this.scope.ownerPubKey,new de(pe.authority),new de(pe.config.id),T.id,O?ne:$,O?$:ne,new de(pe.vault[O?"A":"B"]),new de(pe.vault[O?"B":"A"]),new de(O?Y:ee!=null?ee:_e),new de(O?ee:Y!=null?Y:_e),O?z:Q,O?Q:z,bo(T.programId,T.id).publicKey,t,P.swapResult.outputAmount)]});let oe=Yr(I.mintProgramFlag),be=this.scope.account.getAssociatedTokenAccount(I.mintA,oe),Ke=D[I.mintB.toBase58()];if(E.addInstruction({instructions:[Ho(this.scope.ownerPubKey,be,this.scope.ownerPubKey,I.mintA,oe)]}),!Ke){let Be=I.mintB.equals(j),{account:fe,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:I.mintB,notUseTokenAccount:Be,owner:this.scope.ownerPubKey,skipCloseAccount:!Be,createInfo:Be?{payer:this.scope.ownerPubKey,amount:P.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:f});Ke=fe,ie&&E.addInstruction(ie)}return E.addInstruction({instructions:[_i(I.programId,this.scope.ownerPubKey,x,I.configId,I.platformId,new de(o),be,Ke,I.vaultA,I.vaultB,I.mintA,I.mintB,oe,B,pn(I.programId,I.platformId,I.mintB).publicKey,fn(I.programId,I.creator,I.mintB).publicKey,S.amountB.lt(P.minAmountOut)?S.amountB:P.minAmountOut,L,a,u)]}),E.addCustomComputeBudget(y),E.versionBuild({txVersion:b,extInfo:{routes:[{mint:new de(e),amount:t,decimal:T[O?"mintDecimalA":"mintDecimalB"]},{mint:O?Q:z,amount:P.minAmountOut,decimal:T[O?"mintB":"mintA"].decimals},{mint:I.mintA,amount:R,decimal:I.mintDecimalsA}],outAmount:R,minOutAmount:L}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:i,epochInfo:r,shareFeeRate:a=new Pe(0),cpmmPoolData:u,launchPoolInfo:s,launchPlatformInfo:c,slot:l,mintInfo:m}){var M,D;let p=i>0?new xe(i).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():i,f=u!=null?u:(await this.scope.cpmm.getPoolInfoFromRpc(n.toString())).computePoolInfo;if(e.toString()!==f.mintA.address&&e.toString()!==f.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=e.toString()===f.mintA.address,b=f[y?"mintB":"mintA"],g=s;if(g||(g=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(o)})),b.address!==g.mintB.toBase58())throw new Error(`clmm swap mint(${b.address}) != launch pool mintB(${g.mintB.toBase58()})`);let A=c;if(!A){let E=await this.scope.connection.getAccountInfo(g.platformId);A=bn.decode(E.data)}let k=m!=null?m:await this.scope.token.getTokenInfo(g.mintA),h=Vt(g.programId).publicKey,P=$n(k,r==null?void 0:r.epoch),T=na(b),I=$n(b,r==null?void 0:r.epoch),x=await this.scope.cpmm.computeSwapAmount({pool:f,amountIn:t,outputMint:new de(b.address),slippage:p}),S=x.minAmountOut,B=Ct.buyExactIn({poolInfo:g,amountB:S,protocolFeeRate:g.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:g.configInfo.curveType,shareFeeRate:a,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:P,transferFeeConfigB:I,slot:l!=null?l:await this.scope.connection.getSlot()}),R=B.amountA.amount.sub((M=B.amountA.fee)!=null?M:new Pe(0)),L=new xe(R.toString()),O=new Pe(1e4),C=p?new xe(O.sub(new Pe(p*1e4)).toNumber()/O.toNumber()).clampedTo(0,1):new xe(1);return{cpmmPoolData:f,cpmmComputInfo:x,launchPoolInfo:g,launchAuthProgramId:h,launchMintTransferFeeConfig:P,launchMintProgramB:T,launchMintTransferFeeConfigB:I,launchSwapInfo:B,outAmount:B.amountA.amount.sub((D=B.amountA.fee)!=null?D:new Pe(0)),minOutAmount:new Pe(L.mul(C).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:u=new Pe(0),cpmmPoolData:s,clmmPoolData:c,launchPoolInfo:l,launchPlatformInfo:m,slot:p,mintInfo:f,blockTimestamp:y}){var $,pe;let b=r>0?new xe(r).div(2).toDecimalPlaces(4,xe.ROUND_DOWN).toNumber():r,g=c!=null?c:await this.scope.clmm.getPoolInfoFromRpc(n.toString());if(e.toString()!==g.poolInfo.mintA.address&&e.toString()!==g.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let A=e.toString()===g.poolInfo.mintA.address,k=g.poolInfo[A?"mintB":"mintA"],h=l;if(h||(h=await this.scope.launchpad.getRpcPoolInfo({poolId:new de(i)})),k.address!==h.mintB.toBase58())throw new Error(`clmm swap mint(${k.address}) != launch pool mintB(${h.mintB.toBase58()})`);let P=m;if(!P){let oe=await this.scope.connection.getAccountInfo(h.platformId);P=bn.decode(oe.data)}let T=f!=null?f:await this.scope.token.getTokenInfo(h.mintA),I=Vt(h.programId).publicKey,x=$n(T,a==null?void 0:a.epoch),S=na(k),B=$n(k,a==null?void 0:a.epoch),R=await lt.computeAmountOutFormat({poolInfo:g.computePoolInfo,tickArrayCache:g.tickData[n.toString()],amountIn:t,tokenOut:k,slippage:b,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:y,tickarrayBitmapExtension:g.computePoolInfo.exBitmapInfo}),L=s!=null?s:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,O=await this.scope.cpmm.computeSwapAmount({pool:L,amountIn:t,outputMint:new de(k.address),slippage:b}),[C,M]=[R.minAmountOut.amount.raw,O.minAmountOut],D=C.gte(M)?"clmm":"cpmm",E=C.gte(M)?C:M,z=Ct.buyExactIn({poolInfo:h,amountB:E,protocolFeeRate:h.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:h.configInfo.curveType,shareFeeRate:u,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:x,transferFeeConfigB:B,slot:p!=null?p:await this.scope.connection.getSlot()}),Q=z.amountA.amount.sub(($=z.amountA.fee)!=null?$:new Pe(0)),Y=new xe(Q.toString()),ee=new Pe(1e4),ne=b?new xe(ee.sub(new Pe(b*1e4)).toNumber()/ee.toNumber()).clampedTo(0,1):new xe(1);return{clmmPoolData:g,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:E,remainingAccounts:R.remainingAccounts},clmmComputeInfo:R,cpmmComputInfo:O,swapPoolType:D,launchPoolInfo:h,launchAuthProgramId:I,launchMintTransferFeeConfig:x,launchMintProgramB:S,launchMintTransferFeeConfigB:B,launchSwapInfo:z,outAmount:z.amountA.amount.sub((pe=z.amountA.fee)!=null?pe:new Pe(0)),minOutAmount:new Pe(Y.mul(ne).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=mr,clmm:n=Rn,cpmm:o=Un}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Fr.offsetOf("baseMint"),length:64}}),r=v([F("baseMint"),F("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),u=v([F("mintA"),F("mintB")]),c=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:lo.span}],dataSlice:{offset:lo.offsetOf("mintA"),length:64}})).map(p=>{let f=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),m=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Rr.offsetOf("mintA"),length:64}})).map(p=>{let f=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:c,ammPools:a,cpmmPools:m}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===de.default.toString()?j:e,t=t.toString()===de.default.toString()?j:t;let r={},a={},u={},s=[],c={};for(let m of n!=null?n:[]){if((m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(s.push(m),a[m.id.toString()]=m),m.mintA.equals(e)){let p=m.mintB.toString();c[p]===void 0&&(c[p]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[p].in.push(m)}if(m.mintB.equals(e)){let p=m.mintA.toString();c[p]===void 0&&(c[p]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[p].in.push(m)}if(m.mintA.equals(t)){let p=m.mintB.toString();c[p]===void 0&&(c[p]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[p].out.push(m)}if(m.mintB.equals(t)){let p=m.mintA.toString();c[p]===void 0&&(c[p]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[p].out.push(m)}}let l=[];for(let m of o)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(s.push(m),r[m.id.toBase58()]=m,l.push(m)),m.mintA.equals(e)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].out.push(m));for(let m of i)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(s.push(m),u[m.id.toBase58()]=m),m.mintA.equals(e)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(c[m.mintB.toBase58()]===void 0&&(c[m.mintB.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(c[m.mintA.toBase58()]===void 0&&(c[m.mintA.toBase58()]={mintProgram:_e,in:[],out:[],mDecimals:0}),c[m.mintA.toBase58()].out.push(m));for(let m of Object.keys(c)){if(c[m].in.length===1&&c[m].out.length===1&&c[m].in[0].id.equals(c[m].out[0].id)){delete c[m];continue}if(c[m].in.length===0||c[m].out.length===0){delete c[m];continue}let p=c[m];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&r[f.id.toString()]===void 0&&(r[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&u[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:s,addLiquidityPools:l,routePathDict:c,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=Vr(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new de(y.mintA.address),programId:_e,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new de(y.mintB.address),programId:_e,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(u).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(_e)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(_e)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let s=await io({connection:this.scope.connection,mints:Array.from(o).map(y=>new de(y))});a=N(N({},a),s);let c=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let l=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:m,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:l,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>_(N({},y),{[b]:_(N({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>r[g.id.toBase58()]||m[g.id.toBase58()]||c[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>r[g.id.toBase58()]||m[g.id.toBase58()]||c[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:l,computeClmmPoolInfo:m,computePoolTickData:p,computeCpmmData:c,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:u,epochInfo:s,feeConfig:c,blockTimestamp:l}){var A,k,h,P,T,I,x,S,B;let m=c===void 0?new Pe(0):e.raw.mul(new Pe(c.feeBps.toNumber())).div(new Pe(1e4)),p=e.raw.sub(m),f=new Re(e.token,p),y=c===void 0?void 0:{feeAmount:m,feeAccount:c.feeAccount},b=_(N({},t),{address:St(t.address).toString()}),g=[];for(let R of n)try{g.push(_(N({},this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:u,epochInfo:s,slippage:a,outputToken:b,amountIn:f,blockTimestamp:l})),{feeConfig:y}))}catch(L){this.logDebug("direct error",R.version,R.id.toString(),L.message)}this.logDebug("direct done");for(let[R,L]of Object.entries(o)){let O={chainId:101,address:R,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},C=L.in.map(D=>{try{return{pool:D,data:this.computeAmountOut({itemPool:D,tickCache:r,simulateCache:i,chainTime:u,epochInfo:s,slippage:a,outputToken:O,amountIn:f,blockTimestamp:l})}}catch(E){this.logDebug("route in error",D.version,D.id.toString(),E.message);return}}).sort((D,E)=>{var Y,ee,ne,$;let z=D===void 0?xt:D.data.amountOut.amount.raw.sub((ee=(Y=D.data.amountOut.fee)==null?void 0:Y.raw)!=null?ee:xt),Q=E===void 0?xt:E.data.amountOut.amount.raw.sub(($=(ne=E.data.amountOut.fee)==null?void 0:ne.raw)!=null?$:xt);return z.lt(Q)?1:-1})[0];if(C===void 0)continue;let M=new Re(Ai(O),C.data.amountOut.amount.raw.sub((k=(A=C.data.amountOut.fee)==null?void 0:A.raw)!=null?k:xt));for(let D of L.out)try{let E=this.computeAmountOut({itemPool:D,tickCache:r,simulateCache:i,chainTime:u,epochInfo:s,slippage:a,outputToken:b,amountIn:M,blockTimestamp:l});g.push(_(N({},E),{allTrade:!!(C.data.allTrade&&E.allTrade),amountIn:C.data.amountIn,amountOut:E.amountOut,minAmountOut:E.minAmountOut,currentPrice:void 0,executionPrice:new xe(new Ft({baseToken:C.data.amountIn.amount.token,denominator:C.data.amountIn.amount.raw,quoteToken:E.amountOut.amount.token,numerator:E.amountOut.amount.raw.sub((P=(h=E.amountOut.fee)==null?void 0:h.raw)!=null?P:xt)}).toFixed()),priceImpact:new xe(C.data.priceImpact.add(E.priceImpact).toFixed()),fee:[C.data.fee[0],E.fee[0]],routeType:"route",poolInfoList:[C.pool,D],remainingAccounts:[C.data.remainingAccounts[0],E.remainingAccounts[0]],minMiddleAmountFee:(T=E.amountOut.fee)!=null&&T.raw?new Re(C.data.amountOut.amount.token,((x=(I=C.data.amountOut.fee)==null?void 0:I.raw)!=null?x:xt).add((B=(S=E.amountOut.fee)==null?void 0:S.raw)!=null?B:xt)):void 0,middleToken:C.data.amountOut.amount.token,poolReady:C.data.poolReady&&E.poolReady,poolType:[C.data.poolType,E.poolType],feeConfig:y,expirationTime:Fn(C.data.expirationTime,E.expirationTime)}))}catch(E){this.logDebug("route out error",D.version,D.id.toString(),E.message)}}return g.filter(R=>(R.allTrade||this.logDebug(`pool ${R.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),R.allTrade)).sort((R,L)=>R.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(xt)?-1:1)}getAllRouteComputeAmountIn({outputTokenAmount:e,directPath:t,routePathDict:n,simulateCache:o,tickCache:i,slippage:r,chainTime:a,epochInfo:u,blockTimestamp:s,feeConfig:c}){var p,f,y,b,g,A,k,h,P;let l=ft({address:St(e.token.mint).toBase58(),decimals:e.token.decimals,programId:e.token.isToken2022?Yo.toBase58():_e.toBase58(),extensions:{}}),m=[];for(let T of t)try{let I=this.computeAmountIn({itemPool:T,tickCache:i,simulateCache:o,chainTime:a,epochInfo:u,slippage:r,outputToken:l,amountOut:e.raw,blockTimestamp:s}),x=c===void 0?new Pe(0):I.amountIn.amount.raw.mul(new Pe(c.feeBps.toNumber())).div(new Pe(1e4));m.push(_(N({},I),{feeConfig:c===void 0?void 0:{feeAmount:x,feeAccount:c.feeAccount}}))}catch(I){this.logDebug("direct error",T.version,T.id.toString(),I.message)}this.logDebug("direct done");for(let[T,I]of Object.entries(n)){let x={chainId:101,address:T,programId:I.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:I.mDecimals,tags:[],extensions:{}},S=I.out.map(R=>{try{return{pool:R,data:this.computeAmountIn({itemPool:R,tickCache:i,simulateCache:o,chainTime:a,epochInfo:u,slippage:r,outputToken:l,amountOut:e.raw,blockTimestamp:s})}}catch(L){this.logDebug("route in error",R.version,R.id.toString(),L.message);return}}).sort((R,L)=>{var M,D,E,z;let O=R===void 0?xt:R.data.amountIn.amount.raw.add((D=(M=R.data.amountIn.fee)==null?void 0:M.raw)!=null?D:xt),C=L===void 0?xt:L.data.amountIn.amount.raw.add((z=(E=L.data.amountIn.fee)==null?void 0:E.raw)!=null?z:xt);return O.lt(C)?-1:1})[0];if(S===void 0)continue;let B=new Re(Ai(x),S.data.amountIn.amount.raw.add((f=(p=S.data.amountIn.fee)==null?void 0:p.raw)!=null?f:xt));for(let R of I.in)try{let L=this.computeAmountIn({itemPool:R,tickCache:i,simulateCache:o,chainTime:a,epochInfo:u,slippage:r,outputToken:x,amountOut:B.raw,blockTimestamp:s}),O=c===void 0?new Pe(0):L.amountIn.amount.raw.mul(new Pe(c.feeBps.toNumber())).div(new Pe(1e4));m.push(_(N({},L),{allTrade:!!(L.allTrade&&S.data.allTrade),amountIn:L.amountIn,amountOut:S.data.amountOut,maxAmountIn:L.maxAmountIn,currentPrice:void 0,executionPrice:new xe(new Ft({baseToken:S.data.amountIn.amount.token,denominator:S.data.amountIn.amount.raw,quoteToken:L.amountOut.amount.token,numerator:L.amountOut.amount.raw.sub((b=(y=L.amountOut.fee)==null?void 0:y.raw)!=null?b:xt)}).toFixed()),priceImpact:new xe(S.data.priceImpact.add(L.priceImpact).toFixed()),fee:[L.fee[0],S.data.fee[0]],routeType:"route",poolInfoList:[S.pool,R],remainingAccounts:[S.data.remainingAccounts[0],L.remainingAccounts[0]],minMiddleAmountFee:(g=L.amountOut.fee)!=null&&g.raw?new Re(S.data.amountOut.amount.token,((k=(A=S.data.amountOut.fee)==null?void 0:A.raw)!=null?k:xt).add((P=(h=L.amountOut.fee)==null?void 0:h.raw)!=null?P:xt)):void 0,middleToken:S.data.amountOut.amount.token,poolReady:S.data.poolReady&&L.poolReady,poolType:[S.data.poolType,L.poolType],feeConfig:c===void 0?void 0:{feeAmount:O,feeAccount:c.feeAccount},expirationTime:Fn(S.data.expirationTime,L.expirationTime)}))}catch(L){this.logDebug("route out error",R.version,R.id.toString(),L.message)}}return m.filter(T=>(T.allTrade||this.logDebug(`pool ${T.poolInfoList.map(I=>I.id.toString()).join(",")} filter out since not all trade`),T.allTrade)).sort((T,I)=>I.amountIn.amount.raw.sub(T.amountIn.amount.raw).gt(xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:u,blockTimestamp:s}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:p,expirationTime:f,currentPrice:y,executionPrice:b,priceImpact:g,fee:A,remainingAccounts:k,executionPriceX64:h}=lt.computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0,blockTimestamp:s});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:p,currentPrice:new xe(y.toFixed()),executionPrice:new xe(b.toFixed()),priceImpact:new xe(g.toFixed()),fee:[A],remainingAccounts:[k],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[h],expirationTime:Fn(l.expirationTime,f)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:p,priceImpact:f,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:r});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ut(_(N({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ut(_(N({},a),{amount:p})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:f,fee:[new Re(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:p,priceImpact:f,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ut(_(N({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ut(_(N({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:p,priceImpact:f,fee:[new Re(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}computeAmountIn({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,amountOut:a,outputToken:u,blockTimestamp:s}){let c=u.address===e.mintB.address?e.mintA:e.mintB;if(e.version===6){let{allTrade:l,realAmountOut:m,amountIn:p,maxAmountIn:f,expirationTime:y,currentPrice:b,executionPrice:g,priceImpact:A,fee:k,remainingAccounts:h}=lt.computeAmountIn({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountOut:a,baseMint:new de(c.address),slippage:r,epochInfo:i,blockTimestamp:s});return{allTrade:l,amountOut:{amount:ut(_(N({},u),{amount:m.amount})),fee:m.fee?ut(_(N({},u),{amount:m.fee})):void 0,expirationTime:void 0},amountIn:{amount:ut(_(N({},c),{amount:p.amount})),fee:p.fee?ut(_(N({},c),{amount:p.fee})):void 0,expirationTime:p.expirationTime},maxAmountIn:{amount:ut(_(N({},c),{amount:f.amount})),fee:f.fee?ut(_(N({},c),{amount:f.fee})):void 0,expirationTime:f.expirationTime},currentPrice:new xe(b.toFixed()),executionPrice:new xe(g.toFixed()),priceImpact:new xe(A.toFixed()),fee:[ut(_(N({},c),{amount:k}))],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[fo(g)],expirationTime:Fn(m.expirationTime,y)}}else if(e.version===7){let{allTrade:l,executionPrice:m,amountIn:p,amountOut:f,priceImpact:y,fee:b}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:u.address,amountIn:a,swapBaseIn:!1,slippage:r});return{allTrade:l,amountOut:{amount:ut(_(N({},u),{amount:f})),fee:void 0,expirationTime:void 0},amountIn:{amount:ut(_(N({},c),{amount:p})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:ut(_(N({},c),{amount:p.mul(new Pe((1+r)*1e4)).div(new Pe(1e4))})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:m,priceImpact:y,fee:[ut(_(N({},c),{amount:b}))],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountIn:l,maxAmountIn:m,currentPrice:p,executionPrice:f,priceImpact:y}=this.scope.liquidity.computeAmountIn({poolInfo:n[e.id.toString()],amountOut:a,mintIn:c.address,mintOut:u.address,slippage:r});return{amountOut:{amount:ut(_(N({},u),{amount:a})),fee:void 0,expirationTime:void 0},amountIn:{amount:ut(_(N({},c),{amount:l})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:ut(_(N({},c),{amount:m})),fee:void 0,expirationTime:void 0},currentPrice:p,executionPrice:f,priceImpact:y,fee:[ut(_(N({},c),{amount:J}))],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(s=>s.version===6&&!t[s.id.toString()]).map(s=>s.id.toString()));if(o.size>0){let s=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(s).forEach(c=>{t[c]=s[c]})}let i=new Set(e.filter(s=>s.version===4&&!n[s.id.toString()]).map(s=>s.id.toString()));if(i.size>0){let s=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(s).forEach(c=>{n[c]=s[c]})}let r=new Set(e.filter(s=>s.version===4).map(s=>s.marketId)),a={};r.size>0&&(await Me(this.scope.connection,Array.from(r).map(c=>({pubkey:new de(c)})))).forEach(c=>{if(!c.accountInfo)return;let l=zs.decode(c.accountInfo.data);a[c.pubkey.toBase58()]={marketId:c.pubkey.toString(),marketProgramId:c.accountInfo.owner.toString(),marketAuthority:ta.getAssociatedAuthority({programId:c.accountInfo.owner,marketId:c.pubkey}).publicKey.toString(),marketBaseVault:l.baseVault.toString(),marketQuoteVault:l.quoteVault.toString(),marketBids:l.bids.toString(),marketAsks:l.asks.toString(),marketEventQueue:l.eventQueue.toString()}});let u=[];return e.forEach(s=>{if(s.version===6){let c=t[s.id.toString()],l={programId:s.programId.toBase58(),id:s.id.toBase58(),mintA:s.mintA,mintB:s.mintB,openTime:String(s.startTime),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},config:_(N({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:s.observationId.toBase58(),exBitmapAccount:s.exBitmapAccount.toBase58()};u.push(l)}else if(s.version===4){let c=n[s.id.toString()],l=N({programId:s.programId,id:s.id,mintA:s.mintA,mintB:s.mintB,openTime:String(s.openTime),vault:{A:c.baseVault.toBase58(),B:c.quoteVault.toBase58()},authority:Ss({programId:new de(s.programId)}).publicKey.toString(),openOrders:c.openOrders.toBase58(),targetOrders:c.targetOrders.toBase58(),mintLp:s.lpMint},a[s.marketId]||{marketProgramId:c.marketProgramId.toBase58(),marketId:c.marketId.toBase58(),marketAuthority:de.default.toBase58(),marketBaseVault:de.default.toBase58(),marketQuoteVault:de.default.toBase58(),marketBids:de.default.toBase58(),marketAsks:de.default.toBase58(),marketEventQueue:de.default.toBase58()});u.push(l)}else s.version===7&&u.push({observationId:s.observationId.toBase58(),programId:s.programId.toBase58(),id:s.id.toBase58(),mintA:s.mintA,mintB:s.mintB,openTime:String(s.openTime),authority:yo(s.programId).publicKey.toBase58(),vault:{A:s.vaultA.toBase58(),B:s.vaultB.toBase58()},mintLp:ft({address:s.mintLp.toBase58(),programId:_e.toBase58(),decimals:s.lpDecimals}),config:_(N({id:s.configId.toBase58()},s.configInfo),{protocolFeeRate:s.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:s.configInfo.tradeFeeRate.toNumber(),fundFeeRate:s.configInfo.fundFeeRate.toNumber(),createPoolFee:s.configInfo.createPoolFee.toString()})})}),u}};import{PublicKey as cf,Transaction as Xs,TransactionInstruction as lf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mf}from"@solana/spl-token";import Dl from"bn.js";var Nt=class extends $e{static getPdaPoolId(e,t){return se([Nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return se([Nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Dl(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let r=n.map(c=>Nt.getPdaPoolId(t,c).publicKey),a=[];for(let c=0;c<Nt.VERSION_PROJECT.length;c++)a.push(...r.map(l=>Nt.getPdaOwnerId(t,l,o,c).publicKey));let u=await gt(e,[...r,...a]),s=[];for(let c=0;c<u.length;c++){let l=Math.floor(c/n.length),m=c%n.length,p=r[m],f=a[c],y=u[m],b=u[n.length+c];if(!(y&&b)||y.data.length!==Nt.POOL_LAYOUT.span||b.data.length!==Nt.OWNER_LAYOUT.span)continue;let g=Nt.POOL_LAYOUT.decode(y.data),A=Nt.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),h=g.endTime.toNumber(),P=A.tokenInfo.map(x=>x.debtAmount.gt(new Dl(0))).filter(x=>!x).length!==3,T=i>k&&i<h&&g.status===1,I=P&&T;s.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:Nt.VERSION_PROJECT[l],openTime:k,endTime:h,canClaim:I,canClaimErrorType:P?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,S)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:A.tokenInfo[S].debtAmount.add(A.tokenInfo[S].claimedAmount)}))})}return s}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let s of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:s.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:s.mintAddress.equals(Ge.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!s.mintAddress.equals(Ge.WSOL.mint),associatedOnly:s.mintAddress.equals(Ge.WSOL.mint)?!1:t.associatedOnly});l&&o.addInstruction(l),r.push(c)}o.addInstruction({instructions:[Nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:u}=o.build();return[{transaction:a,signer:u}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ge.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(Ge.WSOL.mint),associatedOnly:m.mintAddress.equals(Ge.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[m.mintAddress.toString()]=p,l.push(p))}o.addInstruction({instructions:[Nt.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:a,signers:u}=o.build(),s=o.allInstructions;return Ha(s,[i,...u.map(c=>c.publicKey)])?[{transaction:a,signer:u}]:[{transaction:new Xs().add(...s.slice(0,o.AllTxData.instructions.length-1)),signer:u},{transaction:new Xs().add(...s.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Xs().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:mf,isSigner:!1,isWritable:!1}],r=Buffer.alloc(o.span);o.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new lf({keys:i,programId:e,data:a})}},on=Nt;on.CLAIMED_NUM=3,on.POOL_LAYOUT=v([Ae(8),V("bump"),V("status"),w("openTime"),w("endTime"),F("ammId"),Z(v([V("mintDecimals"),F("mintAddress"),F("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),Nt.CLAIMED_NUM,"tokenInfo"),Z(w(),10,"padding")]),on.OWNER_LAYOUT=v([Ae(8),V("bump"),V("version"),F("poolId"),F("owner"),w("lpAmount"),Z(v([F("mintAddress"),w("debtAmount"),w("claimedAmount")]),Nt.CLAIMED_NUM,"tokenInfo"),Z(w(),4,"padding")]),on.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new cf(e)),on.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},on.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{TOKEN_PROGRAM_ID as Gl}from"@solana/spl-token";import{PublicKey as Yi}from"@solana/web3.js";import Hi from"bn.js";import{SystemProgram as Bo,SYSVAR_RENT_PUBKEY as pf,Transaction as Wl,TransactionInstruction as ff}from"@solana/web3.js";import{createInitializeAccountInstruction as ql,TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";function df(d="accountFlags"){let e=new sr(d);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ys=v([Ae(5),df("accountFlags"),F("ownAddress"),w("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),F("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),Ae(7)]);function yf({programId:d,marketInfo:e}){let t=v([V("version"),ze("instruction"),w("baseLotSize"),w("quoteLotSize"),ve("feeRateBps"),w("vaultSignerNonce"),w("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:pf,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}:[]),o=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},o),new ff({keys:n,programId:d,data:o})}async function oa({connection:d,wallet:e,marketInfo:t}){var r,a,u,s,c,l,m,p;let n=new Wl,o=await d.getMinimumBalanceForRentExemption(165);n.add(Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:Ul}),Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:Ul}),ql(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ql(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await d.getMinimumBalanceForRentExemption(Ys.span),space:Ys.span,programId:t.programId}));let i=new Wl;return i.add(Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await d.getMinimumBalanceForRentExemption((r=t.requestQueueSpace)!=null?r:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await d.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:t.lowestFeeMarket?11308:(s=t.eventQueueSpace)!=null?s:262144+12,programId:t.programId}),Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await d.getMinimumBalanceForRentExemption((c=t.orderbookQueueSpace)!=null?c:65536+12),space:t.lowestFeeMarket?14524:(l=t.orderbookQueueSpace)!=null?l:65536+12,programId:t.programId}),Bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await d.getMinimumBalanceForRentExemption((m=t.orderbookQueueSpace)!=null?m:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),yf({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:[X.CreateAccount,X.CreateAccount,X.InitAccount,X.InitAccount]},{transaction:i,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var Qo=class extends $e{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:u,lowestFeeMarket:s,assignSeed:c,txVersion:l,computeBudgetConfig:m,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=c?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${c}`:void 0,g=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),A=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),k=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),h=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),P=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),T=Je({fromPublicKey:y,programId:Gl,assignSeed:b&&`${b}-baseVault`}),I=Je({fromPublicKey:y,programId:Gl,assignSeed:b&&`${b}-quoteVault`}),x=0,S=new Hi(100);function B(){let E=new Hi(0);for(;;)try{return{vaultOwner:Yi.createProgramAddressSync([g.publicKey.toBuffer(),E.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:E}}catch{if(E.iaddn(1),E.gt(new Hi(25555)))throw Error("find vault owner error")}}let{vaultOwner:R,vaultSignerNonce:L}=B(),O=new Hi(Math.round(10**e.decimals*n)),C=new Hi(Math.round(n*10**t.decimals*o));if(O.eq(J))throw Error("lot size is too small");if(C.eq(J))throw Error("tick size or lot size is too small");let M=await oa({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:T,quoteVault:I,vaultOwner:R,requestQueue:A,eventQueue:k,bids:h,asks:P,feeRateBps:x,quoteDustThreshold:S,vaultSignerNonce:L,baseLotSize:O,quoteLotSize:C,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:u,lowestFeeMarket:s}}),D=this.createTxBuilder(f);D.addInstruction({instructions:M[0].transaction.instructions,signers:M[0].signer});for await(let E of M.slice(1,M.length))D.addInstruction({instructions:E.transaction.instructions,signers:E.signer,instructionTypes:E.instructionTypes});return l===0?D.sizeCheckBuildV0({computeBudgetConfig:m,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:h.publicKey,asks:P.publicKey,baseVault:T.publicKey,quoteVault:I.publicKey,baseMint:new Yi(e.mint),quoteMint:new Yi(t.mint)}}):D.sizeCheckBuild({computeBudgetConfig:m,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:h.publicKey,asks:P.publicKey,baseVault:T.publicKey,quoteVault:I.publicKey,baseMint:new Yi(e.mint),quoteMint:new Yi(t.mint)}})}};var KC=new jn(2),CC=new jn(3),RC=new jn(5),wa=new jn(10),LC=new jn(100),OC=new jn(1e3),NC=new jn(1e4);function Sa(d){return wa.pow(ce(d))}function ia(d,e){let t=d.divmod(e);return t.mod.isZero()?t.div:d.isNeg()===e.isNeg()?t.div.iaddn(1):t.div}function Mi(d,e,t){return d.mul(e).add(t).sub(new jn(1)).div(t)}function Nr(d,e,t){return d.mul(e).div(t)}function Pa(d,e=1,t=[]){let n=[...d];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var gn=class{constructor(e){this._owner=e}get publicKey(){return gn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return gn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return gn.isKeyPair(this._owner)}get isPublicKey(){return gn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!gn.isKeyPair(e)}};import We from"bn.js";var xn=1e4;function bt(d,e,t,n){if(e===void 0)return{amount:d,fee:void 0,expirationTime:void 0};let o=_(N({},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}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,r=new We(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===xn){let u=new We(i.maximumFee.toString());return{amount:d.add(u),fee:u,expirationTime:a}}else{let u=Jn(d.mul(new We(xn)),new We(xn-i.transferFeeBasisPoints)),s=new We(i.maximumFee.toString()),c=u.sub(d).gt(s)?d.add(s):u,l=Jn(c.mul(new We(i.transferFeeBasisPoints)),new We(xn)),m=l.gt(r)?r:l;return{amount:c,fee:m,expirationTime:a}}else{let u=Jn(d.mul(new We(i.transferFeeBasisPoints)),new We(xn)),s=u.gt(r)?r:u;return{amount:d,fee:s,expirationTime:a}}}function Fn(d,e){return d===void 0?e:e===void 0?d:Math.min(d,e)}function Jn(d,e){let{div:t,mod:n}=d.divmod(e);return n.gt(new We(0))?t.add(new We(1)):t}function To(d,e){if(d.isZero())return new We(0);let t=d.div(e);return t.isZero()?new We(1):d.mod(e).gt(new We(0))?t.add(new We(1)):t}function Wi(d,e,t){if(e===void 0)return{amount:d,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Jn(d.mul(new We(o.transferFeeBasisPoints)),new We(xn)),u=a.gt(i)?i:a;return{amount:d,fee:u,expirationTime:r}}function Xo(d,e,t){if(e===void 0)return{amount:d,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===xn){let a=new We(o.maximumFee.toString());return{amount:d.add(a),fee:a,expirationTime:r}}else{let a=Jn(d.mul(new We(xn)),new We(xn-o.transferFeeBasisPoints)),u=new We(o.maximumFee.toString()),s=a.sub(d).gt(u)?d.add(u):a,c=Jn(s.mul(new We(o.transferFeeBasisPoints)),new We(xn)),l=c.gt(i)?i:c;return{amount:s,fee:l,expirationTime:r}}}var je={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",TEMP_HOST:"https://temp-api-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",CLMM_DYNAMIC_CONFIG:"/main/clmm-dynamic-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://lite-api.jup.ag/tokens/v2/tag?query=verified",POOL_LIST:"/pools/info/list-v2",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/list-v2",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_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",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",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},zl=_(N({},je),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",TEMP_HOST:"https://temp-api-v1-devnet.raydium.io",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var Xl="ray_tab_hash",Hs="ray_req_hash",bf=()=>{if(typeof window===void 0)return"";let d=sessionStorage.getItem(Xl);return d||(d=`ray-${Date.now()}`,sessionStorage.setItem(Xl,d)),d},ra=async n=>{var o=n,{logCount:d=1e3,removeLastLog:e}=o,t=Ue(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(Hs)||"[]").slice(0,d-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(_(N({},t),{time:Date.now(),session:bf()}));try{localStorage.setItem(Hs,JSON.stringify(i))}catch{if(e){let r=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!r;){i.pop();let u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(Hs,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(u=>u())}return ra(_(N({},t),{logCount:d,removeLastLog:!0}))}};var aa=ke("Raydium_Api"),Qs=new Map,Zs=new Map;var sa=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=Yl.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?zl.BASE_HOST:je.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:u,url:s}=r;return aa.debug(`${a==null?void 0:a.toUpperCase()} ${u}${s}`),r},r=>(aa.error("Request failed"),Promise.reject(r))),this.api.interceptors.response.use(r=>{let{config:a,data:u,status:s}=r,{method:c,baseURL:l,url:m}=a;return n&&ra({status:s,url:`${l}${m}`,params:a.params,data:u,logCount:this.logCount}),aa.debug(`${c==null?void 0:c.toUpperCase()} ${l}${m}  ${s}`),u},r=>{let{config:a,response:u={}}=r,{status:s}=u,{method:c,baseURL:l,url:m}=a;return n&&ra({status:s,url:`${l}${m}`,params:a.params,data:r.message,logCount:this.logCount}),aa.error(`${c.toUpperCase()} ${l}${m} ${s||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||je.CLMM_CONFIG)).data}async getClmmDynamicConfigs(){return(await this.api.get(this.urlConfigs.CLMM_DYNAMIC_CONFIG||je.CLMM_DYNAMIC_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||je.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_POSITION_LINE||je.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Yl.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||je.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||je.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||je.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||je.JUP_TOKEN_LIST})).map(t=>_(N({},t),{chainId:101,programId:t.tokenProgram,address:t.id,logoURI:t.icon,extensions:{},freeze_authority:null,permanent_delegate:null,mint_authority:t.mintAuthority||null,minted_at:Date.now().toString()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||je.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",showFarms:i=!1,nextPageId:r,pageSize:a=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||je.POOL_LIST)+`?size=${a}&hasReward=${i}${t&&t!=="all"?`&poolType=${t}`:""}${n?`&sortField=${n}`:""}${o?`&sortType=${o}`:""}${r?`&nextPageId=${r}`:""}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||je.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>Qs.has(r)?(n.push(Qs.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||je.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Qs.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i,order:r="desc",nextPageId:a}=e,[u,s]=[t&&St(t).toBase58(),n&&n!=="undefined"?St(n).toBase58():""],[c,l]=s&&u>s?[s,u]:[u,s];if(!u&&!s)throw new Error("not search mints provided");return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||je.POOL_SEARCH_MINT)+`?size=100&mint1=${c}${l?`&mint2=${l}`:""}${o&&o!=="all"?`&poolType=${o}`:""}${i?`&sortField=${i}`:""}${r?`&sortType=${r}`:""}${a?`&nextPageId=${a}`:""}`)).data}async fetchPoolByLpMints(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_LP||je.POOL_SEARCH_LP)+`?lps=${t}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||je.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||je.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||je.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=Zs.get(this.cluster))!=null&&t.length)return Zs.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return Zs.set(this.cluster,e.data.data),e.data.data}async fetchFarmPositions(e=""){return(await this.api.get(`${this.urlConfigs.OWNER_BASE_HOST||je.OWNER_BASE_HOST}`+(this.urlConfigs.OWNER_STAKE_FARMS||je.OWNER_STAKE_FARMS).replace("{owner}",e))).data}async fetchCpmmLockInfo(e){return await this.api.get(`${this.urlConfigs.CPMM_LOCK||je.CPMM_LOCK}?id=${e.toString()}`)}};var ua="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Hl="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as ca,SystemProgram as gf}from"@solana/web3.js";import{AccountLayout as Zo,createAssociatedTokenAccountIdempotentInstruction as $s,TOKEN_PROGRAM_ID as eo,TOKEN_2022_PROGRAM_ID as Pf}from"@solana/spl-token";var Qi=class extends $e{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=i!=null?i:!0,this._clientOwnedToken=!!(n||o)}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 te(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<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=N(N({},{}),t),[i,r,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:eo},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pf},o.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:s}=_u({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:r.context,value:[...r.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=s,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(c=>c({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:u,tokenAccountRawInfos:s}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=eo,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),r=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!o||o&&r.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:r,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:s=!1,assignSeed:c}=t,l=new ca(t.tokenProgram||eo),m=this.getAssociatedTokenAccount(n,new ca(l)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!i||k.pubkey.equals(m))).sort((k,h)=>k.accountInfo.amount.lt(h.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let k=$s(o.payer||r,m,r,n,l),h=this.tokenAccountRawInfos.find(P=>P.pubkey.equals(m));if(s){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(P.owner.equals(l)&&Zo.decode(P.data).mint.equals(n)&&Zo.decode(P.data).owner.equals(r)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else h===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(j)&&o.amount){let P=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:u});f.instructions.push(...P.instructions||[]),f.endInstructions.push(...P.endInstructions||[]),f.instructionTypes.push(...P.instructionTypes||[]),f.endInstructionTypes.push(...P.endInstructionTypes||[]),o.amount&&(f.instructions.push(Vu({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:eo})),f.instructionTypes.push(X.TransferAmount))}return!u&&h===void 0&&(f.endInstructions.push(Cn({owner:r,destination:r,tokenAccount:m,programId:l})),f.endInstructionTypes.push(X.CloseAccount)),{account:m,instructionParams:f}}else{let k=Je({fromPublicKey:r,programId:l,assignSeed:c}),h=await this.scope.connection.getMinimumBalanceForRentExemption(Zo.span),P=gf.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:k.seed,newAccountPubkey:k.publicKey,lamports:h+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:Zo.span,programId:l});return f.instructions.push(P,_a({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:l})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),u||(f.endInstructions.push(Cn({owner:r,destination:r,tokenAccount:k.publicKey,programId:l})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=eo,autoUnwrapWSOLToSOL:o}){var u;await this.fetchWalletTokenAccounts();let i=(u=this.scope.account.tokenAccounts.find(({mint:s})=>(s==null?void 0:s.toBase58())===t.toBase58()))==null?void 0:u.publicKey,r=this.scope.ownerPubKey,a={};if(!i){let s=this.getAssociatedTokenAccount(t,n),c=await $s(r,s,r,t,n);a.instructions=[c],a.instructionTypes=[X.CreateATA],i=s}return o&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Cn({owner:r,destination:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:r=eo,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:s,skipCloseAccount:c,checkCreateATAOwner:l}=t,m=this.getAssociatedTokenAccount(i,r);if(new ca(j).equals(i)){let p=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:o,skipCloseAccount:c});return N({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!m.equals(a)&&!s){let p=[],f=$s(this.scope.ownerPubKey,m,this.scope.ownerPubKey,i,r);if(l){let y=await this.scope.connection.getAccountInfo(m);if(y===null)p.push(f);else if(!(y.owner.equals(eo)&&Zo.decode(y.data).mint.equals(i)&&Zo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${m.toString()}`)}else p.push(f);return{tokenAccount:m,instructions:p,instructionTypes:[X.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=eo,amount:i,useSOLBalance:r,handleTokenAccount:a,feePayer:u}=t,s,c=this.createTxBuilder(u);if(n.equals(new ca(j))&&r){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=l,f=Ue(l,["tokenAccount"]);s=p,c.addInstruction(f)}else if(s=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!s&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Ue(m,["tokenAccount"]);s=p,c.addInstruction(f)}return N({tokenAccount:s},c.AllTxData)}};import{PublicKey as Se,SystemProgram as Af}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Ql}from"@solana/spl-token";import to from"decimal.js";import no from"bn.js";var Zi=class extends $e{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Pt)){let n=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Qa(_(N({},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:o=ri,txVersion:i,feePayer:r,lockProgram:a}){var I,x;this.checkDisabled(),this.scope.checkOwner();let s={lpMint:new Se(e.lpMint.address),lockInfo:{lockMint:(I=a==null?void 0:a.mint)!=null?I:Xu,lockVault:(x=a==null?void 0:a.vault)!=null?x:Yu},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(r),l=n!=null?n:this.scope.ownerPubKey,m=Je({fromPublicKey:l,programId:s.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(ci.span);c.addInstruction({instructions:[Af.createAccountWithSeed({fromPubkey:l,basePubkey:l,seed:m.seed,newAccountPubkey:m.publicKey,lamports:p,space:ci.span,programId:s.programId})]});let{publicKey:f,nonce:y}=ic({programId:new Se(s.programId),poolId:m.publicKey}),b=di({programId:s.programId,poolId:m.publicKey,mint:s.lpMint,type:"lpVault"}),g=[],A=[];for(let S of s.rewardInfos){S.openTime>=S.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",S.openTime.toString()),isNaN(Gn[S.rewardType])&&this.logAndCreateError("rewardType error",S.rewardType),Number(S.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",S.perSecond),g.push(rc(S));let{rewardPubKey:B,newInstruction:R}=await this._getUserRewardInfo({rewardInfo:S,payer:l});R&&c.addInstruction(R),B||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=S.mint.equals(Pt)?new Se(Lt.address):S.mint;A.push({rewardMint:L,rewardVault:di({programId:s.programId,poolId:m.publicKey,mint:L,type:"rewardVault"}),userRewardToken:B})}let{account:k,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new Se(s.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:T}=uc({farmId:m.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:s.lpMint,lockVault:s.lockInfo.lockVault,lockMint:s.lockInfo.lockMint,lockUserAccount:k,programId:s.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return c.addInstruction({instructions:[P],instructionTypes:[T]}).versionBuild({txVersion:i,extInfo:{farmId:m.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=Yt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=vt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),u={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let s=t||this.scope.ownerPubKey,c=n.mint.equals(Pt)?new Se(Lt.address):n.mint,l=u.rewardInfos.findIndex(A=>new Se(A.mint.address).equals(c)),m=a.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let p=(g=m.vault)!=null?g:Pt,f=this.createTxBuilder(i),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:s});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[Za({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:u,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var l;let r=Yt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=vt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),u={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let s=t||this.scope.ownerPubKey,c=this.createTxBuilder(i);for(let m of n){let p=m.mint.equals(Pt)?new Se(Lt.address):m.mint,f=u.rewardInfos.findIndex(h=>new Se(h.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(l=y.vault)!=null?l:Pt,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:m,payer:s});A&&c.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=Za({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:u,rewardInfo:m});c.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return c.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=Yt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let u=vt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),s=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(r),l=o.mint.equals(Pt)?new Se(Lt.address):o.mint,m=di({programId:new Se(n.programId),poolId:new Se(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:s});return f&&c.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,c.addInstruction({instructions:[$a({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:u,rewardVault:m,rewardInfo:o})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=Yt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let u=vt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),s=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(r);for(let l of o){let m=l.mint.equals(Pt)?new Se(Lt.address):l.mint,p=di({programId:new Se(n.programId),poolId:new Se(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:s});y&&c.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=$a({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:u,rewardVault:p,rewardInfo:_(N({},l),{mint:m})});c.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:r,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:s,computeBudgetConfig:c,txTipConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:p}=n,f=Yt[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Da(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Se(n.programId),new Se(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],A=jt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(i);k.addCustomComputeBudget(c),k.addTipInstruction(l);let h={};for(let C of this.scope.account.tokenAccounts)if(a){let M=te(this.scope.ownerPubKey,C.mint,C.programId).publicKey;C.publicKey&&M.equals(C.publicKey)&&(h[C.mint.toString()]=C.publicKey)}else h[C.mint.toString()]=C.publicKey;let P=g.lpMint,T=h[P.address];T||this.logAndCreateError("you don't have any lp","lp zero",h);let I=[];for(let C of m){let M=r&&C.mint.address===j.toString(),D=h[C.mint.address];if(!D){let{account:E,instructionParams:z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Se(C.mint.address),notUseTokenAccount:M,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!M,associatedOnly:M?!1:a,checkCreateATAOwner:u});D=E,z&&k.addInstruction(z)}h[C.mint.address]=D,I.push(D)}let x,S=await this.scope.connection.getAccountInfo(A);if(S&&(x=pi(f).decode(S.data)),n.programId!==ri.toString()&&n.programId!==ln.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:C,instructionType:M}=yi({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[C],instructionTypes:[M]})}let B=Wa({version:f,rewardInfos:m,rewardTokenAccountsPublicKeys:I});B&&this.logAndCreateError(B);let R={amount:ce(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:s==null?void 0:s.map(C=>new Se(C))},L=f===6?pc(R):f===5?dc(R):mc(R),O={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[L],instructionTypes:[O[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:r,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l,txTipConfig:m}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=Yt[n.programId];Da(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(l),b.addTipInstruction(m);let g={};for(let B of this.scope.account.tokenAccounts)if(u){let R=te(this.scope.ownerPubKey,B.mint).publicKey;B.publicKey&&R.equals(B.publicKey)&&(g[B.mint.toString()]=B.publicKey)}else g[B.mint.toString()]=B.publicKey;if(f!==4){let B=jt({programId:new Se(n.programId),poolId:new Se(n.id),owner:this.scope.ownerPubKey,version:f}),R=await this.scope.connection.getAccountInfo(B);if(R)pi(f).decode(R.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:O}=yi({id:new Se(y.id),programId:new Se(y.programId),version:f,ledger:B,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[O]})}}i&&i.isZero()&&!(c||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=r&&A===j.toString(),h=g[A.toString()];if(!h){let{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Se(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:u,checkCreateATAOwner:s});h=B,R&&b.addInstruction(R)}g[A.toString()]=h;let P=[];for(let B of p){let R=r&&B.mint.address===j.toString(),L=g[B.mint.address];if(!L){let{account:O,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B.mint.programId,mint:new Se(B.mint.address),notUseTokenAccount:R,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:s});L=O,C&&b.addInstruction(C)}g[B.mint.address]=L,P.push(L)}let T=Wa({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:P});T&&this.logAndCreateError(T);let I={amount:ce(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:h,rewardAccounts:P,userAuxiliaryLedgers:c==null?void 0:c.map(B=>new Se(B))},x=f===6?bi(I):f===5?gi(I):f===4?lc(I):Pi(I),S={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[S[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:i,feePayer:r}){var y;this.scope.checkOwner();let a=vt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),u=Yt[e.programId];u!==6&&this.logAndCreateError("invalid farm version",u);let s=a.rewardInfos.find(b=>St(b.mint.address).equals(St(t)));s||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(y=s==null?void 0:s.vault)!=null?y:Pt,l=this.createTxBuilder(r),m;if(t.equals(Pt)||t.equals(Se.default)){let b=await qn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Qa(_(N({},s),{openTime:s.openTime,endTime:s.endTime,perSecond:new to(s.perSecond).mul(10**s.mint.decimals).toString()}))});m=b.addresses.newAccount,l.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?m=b:(m=await this.scope.account.getAssociatedTokenAccount(t),l.addInstruction({instructions:[Ql(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=cc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:c,userRewardToken:m,owner:this.scope.ownerPubKey});return l.addCustomComputeBudget(o),l.addTipInstruction(i),l.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:s}=e,c=this.createTxBuilder(o),l={};for(let f of this.scope.account.tokenAccounts)if(i){let y=te(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(l[f.mint.toString()]=f.publicKey)}else l[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>_(N({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=Yt[y],h=b.address,P=n&&h===j.toString(),T=l[h];if(!T){let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Se(h),notUseTokenAccount:P,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:i,checkCreateATAOwner:r});T=L,O&&c.addInstruction(O)}l[h.toString()]=T;let I=[];for(let L of g){let O=n&&L.mint.address===j.toString(),C=l[L.mint.address];if(!C)if(O){let{account:M,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Se(L.mint.address),notUseTokenAccount:O,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!O,associatedOnly:O?!1:i,checkCreateATAOwner:r});C=M,D&&c.addInstruction(D)}else{let M=new Se(L.mint.address);C=this.scope.account.getAssociatedTokenAccount(M),c.addInstruction({instructions:[Ql(this.scope.ownerPubKey,C,this.scope.ownerPubKey,M)]})}l[L.mint.address]=C,I.push(C)}let x=p[A],S={amount:J,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:T,rewardAccounts:I,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Se(L))},B=k===6?bi(S):k===5?gi(S):Pi(S),R={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};c.addInstruction({instructions:[B],instructionTypes:[R[k]]})}return u===1?c.sizeCheckBuild({computeBudgetConfig:s}):c.sizeCheckBuildV0({computeBudgetConfig:s})}async fetchFarmBalances(){let e=await this.scope.api.fetchFarmPositions(this.scope.ownerPubKey.toBase58()),t=new Map,n=new Map;Object.keys(e||{}).forEach(s=>{var c,l;Object.keys(e[s]).forEach(m=>{Object.keys(e[s][m]).forEach(p=>{var g,A,k,h,P,T;let f=_(N({},e[s][m][p]),{farmId:m,lpMint:s,userVault:p}),y=t.get(s);t.set(s,{lpMint:s,hasAmount:(y==null?void 0:y.hasAmount)||new to(f.lpAmount||0).gt(0),hasV1Data:(y==null?void 0:y.hasV1Data)||f.version==="V1",totalLpAmount:new to((g=y==null?void 0:y.totalLpAmount)!=null?g:0).add(f.lpAmount||0).toString(),totalV1LpAmount:f.version==="V1"?new to((A=y==null?void 0:y.totalV1LpAmount)!=null?A:0).add(f.lpAmount||0).toString():(k=y==null?void 0:y.totalV1LpAmount)!=null?k:"0",data:[...(y==null?void 0:y.data)||[],f]});let b=n.get(m);f.programId,n.set(m,{lpMint:s,hasAmount:(b==null?void 0:b.hasAmount)||new to(f.lpAmount||0).gt(0),hasV1Data:(b==null?void 0:b.hasV1Data)||f.version==="V1",totalLpAmount:new to((h=b==null?void 0:b.totalLpAmount)!=null?h:0).add(f.lpAmount||0).toString(),totalV1LpAmount:f.version==="V1"?new to((P=b==null?void 0:b.totalV1LpAmount)!=null?P:0).add(f.lpAmount||0).toString():(T=b==null?void 0:b.totalV1LpAmount)!=null?T:"0",data:[...(b==null?void 0:b.data)||[],f]})})}),t.set(s,_(N({},t.get(s)),{totalLpAmount:new to((l=(c=t.get(s))==null?void 0:c.totalLpAmount)!=null?l:0).toString()}))});let o=Array.from(n).map(s=>s[1].data).flat(),i=await this.scope.api.fetchFarmInfoById({ids:o.map(s=>s.farmId).join(",")}),r=await gt(this.scope.connection,o.map(s=>new Se(s.userVault)));return(await gt(this.scope.connection,o.map(s=>new Se(s.farmId)))).map((s,c)=>{var g;if(!s||!r[c])return;let l=Yt[o[c].programId];if(!fr[l]||!ui[l])return;let m=ui[l].decode(r[c].data),p=fr[l].decode(s.data),f;p.version===6?f=(g=p.rewardMultiplier)!=null?g:new no(10).pow(new no(9)):f=p.rewardInfos.length===1?new no(10).pow(new no(9)):new no(10).pow(new no(15));let y=i[c],b=p?p.rewardInfos.map((A,k)=>{var T;let h=m.rewardDebts[k],P=m.deposited.mul((p==null?void 0:p.version)===6?A.accRewardPerShare:A.perShareReward).div(f).sub(h);return P.lt(new no(0))&&(P=new no(0)),{mint:(T=y.rewardInfos[k])==null?void 0:T.mint,amount:P.toString()}}):[];return _(N(N({},m),p),{farmInfo:y,pendingRewards:b})}).filter(Boolean)}};import{PublicKey as nt}from"@solana/web3.js";import{AccountLayout as wf,MintLayout as Zl,NATIVE_MINT as la,TOKEN_PROGRAM_ID as oo}from"@solana/spl-token";import Ve from"bn.js";import Fe from"decimal.js";var $i=class extends $e{constructor(t){super(t);this.stableLayout=new Ur({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:ln.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let r=new Ve(new Fe(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Ai(t[i?"mintB":"mintA"]),[u,s]=[new Ve(new Fe(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ve(new Fe(t.mintAmountB).mul(10**t.mintB.decimals).toString())],c=new Ve(new Fe(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,Fe.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",s.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",r.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",s.toString());let l=i?"base":"quote";this.logDebug("input side:",l);let m=J;r.isZero()||(m=l==="base"?ia(r.mul(s),u):ia(r.mul(u),s)),this.logDebug("amountRaw:",m.toString(),"lpAmount:",c.toString());let p=ia(r.mul(c),l==="base"?u:s);this.logDebug("liquidity:",p.toString());let f=new At(new Ve(1)).add(o),y=new At(new Ve(1)).sub(o),b=f.mul(m).quotient,g=y.mul(m).quotient,A=new Re(a,m),k=new Re(a,b),h=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:h,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:r,otherAmountMin:a,fixedSide:u,config:s,txVersion:c,computeBudgetConfig:l,txTipConfig:m,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",r),(i.isZero()||r.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:r.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),[g,A]=[i.token,r.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),h=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!h&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let P=await f.getCreatedTokenAccount({mint:new nt(n.lpMint.address)}),T=[g,A],I=[k,h],x=[i.raw,r.raw],S=i.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",u),S==="quote"?(T.reverse(),I.reverse(),x.reverse(),B=u==="a"?"quote":"base"):S==="base"&&(B=u==="a"?"base":"quote");let[R,L]=T,[O,C]=I,[M,D]=x,E=o!=null?o:await this.getAmmPoolKeys(n.id),z=this.createTxBuilder(p),oe=await f.handleTokenAccount({side:"in",amount:M,mint:R.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:Q}=oe,Y=Ue(oe,["tokenAccount"]);z.addInstruction(Y);let be=await f.handleTokenAccount({side:"in",amount:D,mint:L.mint,tokenAccount:C,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ee}=be,ne=Ue(be,["tokenAccount"]);z.addInstruction(ne);let Ke=await f.handleTokenAccount({side:"out",amount:0,mint:new nt(n.lpMint.address),tokenAccount:P,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:$}=Ke,pe=Ue(Ke,["tokenAccount"]);return z.addInstruction(pe),z.addInstruction({instructions:[ll({poolInfo:n,poolKeys:E,userKeys:{baseTokenAccount:Q,quoteTokenAccount:ee,lpTokenAccount:$,owner:this.scope.ownerPubKey},baseAmountIn:M,quoteAmountIn:D,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:E.lookupTableAccount?[E.lookupTableAccount]:[]}),z.addCustomComputeBudget(l),z.addTipInstruction(m),c===0?await z.buildV0():z.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:i,baseAmountMin:r,quoteAmountMin:a,config:u,txVersion:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new nt(n.mintA.address),new nt(n.mintB.address),new nt(n.lpMint.address)];this.logDebug("lpAmount:",i),this.logDebug("baseAmountMin:",r),this.logDebug("quoteAmountMin:",a),i.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",i.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),h=await g.getCreatedTokenAccount({mint:y}),P=this.createTxBuilder(m),{bypassAssociatedCheck:T,checkCreateATAOwner:I}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:T,checkCreateATAOwner:I}),{tokenAccount:x}=L,S=Ue(L,["tokenAccount"]);P.addInstruction(S);let O=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:h,bypassAssociatedCheck:T,checkCreateATAOwner:I}),{tokenAccount:B}=O,R=Ue(O,["tokenAccount"]);return P.addInstruction(R),P.addInstruction({instructions:[Cs({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:x,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity]}),P.addCustomComputeBudget(c),P.addTipInstruction(l),s===0?await P.buildV0():P.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:r,userFarmLpAmount:a,base:u,computeBudgetConfig:s,payer:c,userAuxiliaryLedgers:l,tokenProgram:m=oo,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:y,feePayer: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 g=this.createTxBuilder(b),A={};for(let E of this.scope.account.tokenAccountRawInfos)(A[E.accountInfo.mint.toString()]===void 0||te(this.scope.ownerPubKey,E.accountInfo.mint,oo).publicKey.equals(E.pubkey))&&(A[E.accountInfo.mint.toString()]=E.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let h=o.add(a!=null?a:new Ve(0)),P=t.mintA.address===Ge.WSOL.mint.toString(),T=t.mintB.address===Ge.WSOL.mint.toString(),{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new nt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(x||{}),I===void 0)throw new Error("base token account not found");let{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new nt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),S===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=I,A[t.mintB.address]=S,r!==void 0&&!(a!=null&&a.isZero())){let E=Yt[r.programId],z=jt({programId:new nt(r.programId),poolId:new nt(r.id),owner:this.scope.ownerPubKey,version:E}),Q,Y=await this.scope.connection.getAccountInfo(z);if(Y&&(Q=pi(E).decode(Y.data)),E!==6&&!Q){let{instruction:Ke,instructionType:Be}=yi({id:new nt(r.id),programId:new nt(r.programId),version:E,ledger:z,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Ke],instructionTypes:[Be]})}let ee=[];for(let Ke of r.rewardInfos){let Be=Ke.mint.address===Ge.WSOL.mint.toString();if(A[Ke.mint.address])ee.push(A[Ke.mint.address]);else{let{account:fe,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({mint:new nt(Ke.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Be,createInfo:{payer:c||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});fe||this.logAndCreateError("farm reward account not found:",Ke.mint.address),ie&&g.addInstruction(ie),ee.push(fe)}}let ne=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],$={userAuxiliaryLedgers:l,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ne,lpAccount:k,rewardAccounts:ee},pe=Yt[r.programId],oe=pe===6?bi($):pe===5?gi($):Pi($),be={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[oe],instructionTypes:[be[pe]]})}let R=await this.getAmmPoolKeys(t.id),L=Cs({poolInfo:t,poolKeys:R,userKeys:{lpTokenAccount:k,baseTokenAccount:I,quoteTokenAccount:S,owner:this.scope.ownerPubKey},lpAmount:h,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]});let[O,C]=t.mintA.address===n.mintA.address?[I,S]:[S,I],M=await this.scope.clmm.getClmmPoolKeys(n.id),D=await ye.openPositionFromBaseInstructions(_(N({poolInfo:n,poolKeys:M,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:O,tokenAccountB:C},withMetadata:"create"},i),{liquidity:new Ve(0),base:u,getEphemeralSigners:f}));return g.addInstruction({instructions:[...D.instructions],signers:D.signers,instructionTypes:[...D.instructionTypes],lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:s}):g.sizeCheckBuild({computeBudgetConfig:s})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:r,quoteAmount:a,startTime:u,ownerInfo:s,associatedOnly:c=!1,checkCreateATAOwner:l=!1,tokenProgram:m,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var C;let A=s.feePayer||((C=this.scope.owner)==null?void 0:C.publicKey),k=s.useSOLBalance&&o.mint.equals(la),h=s.useSOLBalance&&i.mint.equals(la),P=this.createTxBuilder(g),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:l});P.addInstruction(I||{});let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:A,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:c,checkCreateATAOwner:l});if(P.addInstruction(S||{}),T===void 0||x===void 0)throw Error("you don't has some token account");let B=Ks({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:f},{instruction:L,instructionType:O}=Rs(_(N({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:x,userLpVault:te(this.scope.ownerPubKey,B.lpMint,m).publicKey,nonce:B.nonce,openTime:u,coinAmount:r,pcAmount:a}));return P.addInstruction({instructions:[L],instructionTypes:[O]}),P.addCustomComputeBudget(y),P.addTipInstruction(b),P.versionBuild({txVersion:p,extInfo:{address:R}})}async createMarketAndPoolV4({programId:t=mr,marketProgram:n=qu,feeDestinationId:o=Gu,tokenProgram:i,baseMintInfo:r,quoteMintInfo:a,baseAmount:u,quoteAmount:s,startTime:c,ownerInfo:l,lowestFeeMarket:m,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:h,feePayer:P}){var Jo,da,ei;let T=this.scope.ownerPubKey,I=l.feePayer||((Jo=this.scope.owner)==null?void 0:Jo.publicKey),x=l.useSOLBalance&&r.mint.equals(la),S=l.useSOLBalance&&a.mint.equals(la),B=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,R=Je({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-market`}),L=Je({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-request`}),O=Je({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-event`}),C=Je({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-bids`}),M=Je({fromPublicKey:T,programId:n,assignSeed:B&&`${B}-asks`}),D=Je({fromPublicKey:T,programId:oo,assignSeed:B&&`${B}-baseVault`}),E=Je({fromPublicKey:T,programId:oo,assignSeed:B&&`${B}-quoteVault`}),z=0,Q=new Ve(100);function Y(){let Mt=new Ve(0);for(;;)try{return{vaultOwner:nt.createProgramAddressSync([R.publicKey.toBuffer(),Mt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Mt}}catch{if(Mt.iaddn(1),Mt.gt(new Ve(25555)))throw Error("find vault owner error")}}let{vaultOwner:ee,vaultSignerNonce:ne}=Y(),$=new Ve(Math.round(10**r.decimals*b)),pe=new Ve(Math.round(b*10**a.decimals*g));if($.eq(J))throw Error("lot size is too small");if(pe.eq(J))throw Error("tick size or lot size is too small");let oe=await oa({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ee,baseMint:r.mint,quoteMint:a.mint,id:R,baseVault:D,quoteVault:E,requestQueue:L,eventQueue:O,bids:C,asks:M,feeRateBps:z,quoteDustThreshold:Q,vaultSignerNonce:ne,baseLotSize:$,quoteLotSize:pe,lowestFeeMarket:m}}),be=this.createTxBuilder(P);be.addInstruction({instructions:oe[0].transaction.instructions,signers:oe[0].signer});for await(let Mt of oe.slice(1,oe.length))be.addInstruction({instructions:Mt.transaction.instructions,signers:Mt.signer,instructionTypes:Mt.instructionTypes});let{account:Ke,instructionParams:Be}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:I,amount:u}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&B?`${B}-wsol`:void 0});be.addInstruction(Be||{});let{account:fe,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:I,amount:s}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:y,assignSeed:S&&B?`${B}-wsol`:void 0});if(be.addInstruction(ie||{}),Ke===void 0)throw Error("you don't has base token account");if(fe===void 0)throw Error("you don't has quote token account");let Te=Ks({version:4,marketVersion:3,marketId:R.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Rt={programId:t,ammId:Te.id,ammAuthority:Te.authority,ammOpenOrders:Te.openOrders,lpMint:Te.lpMint,coinMint:Te.baseMint,pcMint:Te.quoteMint,coinVault:Te.baseVault,pcVault:Te.quoteVault,withdrawQueue:Te.withdrawQueue,ammTargetOrders:Te.targetOrders,poolTempLp:Te.lpVault,marketProgramId:Te.marketProgramId,marketId:Te.marketId,ammConfigId:Te.configId,feeDestinationId:o},{instruction:He,instructionType:an}=Rs(_(N({},Rt),{userWallet:this.scope.ownerPubKey,userCoinVault:Ke,userPcVault:fe,userLpVault:te(this.scope.ownerPubKey,Te.lpMint,i).publicKey,nonce:Te.nonce,openTime:c,coinAmount:u,pcAmount:s}));be.addInstruction({instructions:[He],instructionTypes:[an]});let Io=x||S?[((da=Be==null?void 0:Be.instructions)==null?void 0:da[0])||((ei=ie==null?void 0:ie.instructions)==null?void 0:ei[0])].filter(Mt=>!!Mt):void 0;return A===0?be.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:Io,address:N({requestQueue:L.publicKey,eventQueue:O.publicKey,bids:C.publicKey,asks:M.publicKey,baseVault:D.publicKey,quoteVault:E.publicKey,baseMint:new nt(r.mint),quoteMint:new nt(a.mint)},Rt)}):be.sizeCheckBuild({computeBudgetConfig:k,splitIns:Io,address:N({requestQueue:L.publicKey,eventQueue:O.publicKey,bids:C.publicKey,asks:M.publicKey,baseVault:D.publicKey,quoteVault:E.publicKey,baseMint:new nt(r.mint),quoteMint:new nt(a.mint)},Rt)})}async getCreatePoolFee({programId:t}){let n=_r({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return ul.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:r}){let[a,u]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:s,quoteReserve:c}=t,l=[s,c],m=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(l.reverse(),m.reverse());let[f,y]=l,[b,g]=m,A=t.version===4,k;if(A)k=new Fe(y.toString()).div(10**g).div(new Fe(f.toString()).div(10**b));else{let O=yl(this.stableLayout.stableModelData,s.toNumber(),c.toNumber(),!1);p==="quote"?k=new Fe(1e6).div(O*1e6):k=new Fe(O*1e6).div(1e6)}let h=n,P=new Ve(0),T=new Ve(0);if(!h.isZero())if(A){T=Jn(h.mul(ks),Mr);let O=h.sub(T),C=f.add(O);P=y.mul(O).div(C)}else{T=h.mul(new Ve(2)).div(new Ve(1e4));let O=h.sub(T);p==="quote"?P=new Ve(pl(this.stableLayout.stableModelData,c.toNumber(),s.toNumber(),O.toNumber())):P=new Ve(fl(this.stableLayout.stableModelData,c.toNumber(),s.toNumber(),O.toNumber()))}let I=new Ve(new Fe(P.toString()).mul(1-r).toFixed(0)),x=P,S=I,B=new Fe(P.toString()).div(new Fe(h.sub(T).toString()).toFixed(0));!h.isZero()&&!P.isZero()&&(B=new Fe(P.toString()).div(10**g).div(new Fe(h.sub(T).toString()).div(10**b)));let R=k.sub(B).div(k).mul(100);return{amountOut:x,minAmountOut:S,currentPrice:k,executionPrice:B,priceImpact:R,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:r}){let{baseReserve:a,quoteReserve:u}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",u.toString());let s=o.toString()===t.mintA.address,[c,l]=s?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",l.symbol||l.address),this.logDebug("amountOut:",new Fe(n.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString(),c.symbol||c.address),this.logDebug("slippage:",`${r*100}%`);let m=[a,u],p=s?"quote":"base";p==="base"&&m.reverse(),this.logDebug("output side:",p);let[f,y]=m,b=new Fe(y.toString()).div(10**t[s?"mintB":"mintA"].decimals).div(new Fe(f.toString()).div(10**t[s?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${c.symbol||c.address} \u2248 ${b.toString()} ${l.symbol||l.address}`),this.logDebug("currentPrice invert:",`1 ${l.symbol||l.address} \u2248 ${new Fe(1).div(b).toString()} ${c.symbol||c.address}`);let g=new Ve(0),A=n,k=new Ve(0);if(!A.isZero()){A.gt(y)&&(A=y.sub(new Ve(1)));let B=y.sub(A),R=f.mul(A).div(B);g=R.mul(Mr).div(Mr.sub(ks)),k=g.sub(R)}let h=new Ve(new Fe(g.toString()).mul(1+r).toFixed(0)),P=g,T=h;this.logDebug("amountIn:",new Fe(P.toString()).div(10**c.decimals).toDecimalPlaces(c.decimals).toString()),this.logDebug("maxAmountIn:",new Fe(T.toString()).div(10**c.decimals).toDecimalPlaces(c.decimals).toString());let I=null;!g.isZero()&&!A.isZero()&&(I=new Fe(A.toString()).div(10**l.decimals).div(new Fe(g.toString()).div(10**c.decimals)),this.logDebug("executionPrice:",`1 ${l.symbol||l.address} \u2248 ${I.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${c.symbol||c.address}`),this.logDebug("executionPrice invert:",`1 ${l.symbol||l.address} \u2248 ${new Fe(1).div(I).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${c.symbol||c.address}`));let x=b.mul(P.toString()),S=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${S.toString()}%`),{amountIn:P,maxAmountIn:T,currentPrice:b,executionPrice:I,priceImpact:S,fee:k}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:r,fixedSide:a,txVersion:u,config:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m}){let p=this.createTxBuilder(m),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=s||{},[g,A]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===j.toBase58(),h=b&&A.address===j.toBase58(),{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new nt(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(T||{}),P||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:P,inputTokenUseSolBalance:k,associatedOnly:f});let{account:I,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:oo,mint:new nt(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:f});p.addInstruction(x||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:I,outputTokenUseSolBalance:h,associatedOnly:f});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),p.addInstruction({instructions:[B===4?Wr({version:B,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):qr({version:B,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[B===4?X.AmmV4SwapBaseIn:X.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(c),p.addTipInstruction(l),p.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Me(this.scope.connection,t.map(c=>({pubkey:new nt(c)})),n),i={},r=[];for(let c=0;c<t.length;c++){let l=o[c];if(l===null||!l.accountInfo)throw Error("fetch pool info error: "+String(t[c]));let m=Fr.decode(l.accountInfo.data);i[String(t[c])]=_(N({},m),{programId:l.accountInfo.owner}),r.push(m.baseVault,m.quoteVault)}let a={},u=await Me(this.scope.connection,r.map(c=>({pubkey:new nt(c)})),n);for(let c=0;c<r.length;c++){let l=u[c].accountInfo;if(l===null)throw Error("fetch vault info error: "+r[c]);a[String(r[c])]=new Ve(wf.decode(l.data).amount.toString())}let s={};for(let[c,l]of Object.entries(i)){let m=a[l.baseVault.toString()].sub(l.baseNeedTakePnl),p=a[l.quoteVault.toString()].sub(l.quoteNeedTakePnl);s[c]=_(N({},l),{baseReserve:m,mintAAmount:a[l.baseVault.toString()],mintBAmount:a[l.quoteVault.toString()],quoteReserve:p,poolPrice:new Fe(p.toString()).div(new Fe(10).pow(l.quoteDecimal.toString())).div(new Fe(m.toString()).div(new Fe(10).pow(l.baseDecimal.toString())))})}return s}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Vr({[t]:n}),i=o[t],r=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:r[0]}}async fetchPoolBalances(){await this.scope.account.fetchWalletTokenAccounts({forceUpdate:!0});let t=this.scope.account.tokenAccounts.filter(a=>!a.mint.equals(nt.default)&&!a.amount.isZero()).map(a=>a.mint),i=(await gt(this.scope.connection,t)).map((a,u)=>a&&a.data.length===Zl.span?_(N({},Zl.decode(a.data)),{address:t[u]}):void 0).filter(Boolean).filter(a=>this.scope.cluster==="devnet"?a:sl.has(a.mintAuthority.toString())),r=await this.scope.api.fetchPoolByLpMints({ids:i.map(a=>a.address.toBase58()).join(",")});return i.map((a,u)=>{var s,c;return{mintData:a,address:a.address,poolInfo:r[u],balance:(c=(s=this.scope.account.tokenAccounts.find(l=>l.mint.equals(a.address)))==null?void 0:s.amount)!=null?c:new Ve(0)}})}};import{PublicKey as W}from"@solana/web3.js";import{AccountLayout as kf,NATIVE_MINT as $o,TOKEN_2022_PROGRAM_ID as $l,TOKEN_PROGRAM_ID as Et,createAssociatedTokenAccountIdempotentInstruction as jo}from"@solana/spl-token";import qe from"bn.js";import rn from"decimal.js";var ji=class extends $e{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Me(this.scope.connection,e.map(l=>({pubkey:new W(l)}))),o={},i=new Set,r=[];for(let l=0;l<e.length;l++){let m=n[l];if(m.accountInfo===null)throw Error("fetch pool info error: "+String(e[l]));let p=Rr.decode(m.accountInfo.data);o[String(e[l])]=_(N({},p),{programId:m.accountInfo.owner}),i.add(String(p.configId)),r.push(p.vaultA,p.vaultB)}let a={};if(t){let l=[...i],m=await Me(this.scope.connection,l.map(p=>({pubkey:new W(p)})));for(let p=0;p<l.length;p++){let f=m[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+l[p]);a[l[p]]=Qc.decode(f.data)}}let u={},s=await Me(this.scope.connection,r.map(l=>({pubkey:new W(l)})));for(let l=0;l<r.length;l++){let m=s[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+r[l]);u[String(r[l])]=new qe(kf.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(o)){let p=u[m.vaultA.toString()].sub(m.protocolFeesMintA).sub(m.fundFeesMintA).sub(m.creatorFeesMintA),f=u[m.vaultB.toString()].sub(m.protocolFeesMintB).sub(m.fundFeesMintB).sub(m.creatorFeesMintB);c[l]=_(N({},m),{baseReserve:p,quoteReserve:f,vaultAAmount:u[m.vaultA.toString()],vaultBAmount:u[m.vaultB.toString()],configInfo:a[m.configId.toString()],poolPrice:new rn(f.toString()).div(new rn(10).pow(m.mintDecimalB)).div(new rn(p.toString()).div(new rn(10).pow(m.mintDecimalA)))})}return c}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var u,s,c,l;let i=e[o],[r,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return _(N({},n),{[o]:_(N({},i),{id:new W(o),configInfo:i.configInfo,version:7,authority:yo(i.programId).publicKey,mintA:ft({address:r,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[r])!=null&&u.feeConfig?An((s=t[r])==null?void 0:s.feeConfig):void 0}}),mintB:ft({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(c=t[a])!=null&&c.feeConfig?An((l=t[a])==null?void 0:l.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await io({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=ft({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?An(n[t.mintA.toBase58()].feeConfig):void 0}}),i=ft({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?An(n[t.mintB.toBase58()].feeConfig):void 0}}),r=ft({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:r,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new rn(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new rn(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,feeOn:"",hasDynamicFee:!1,launchMigratePool:!1,tips:[]},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:yo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:bo(t.programId,new W(e)).publicKey.toBase58()},rpcData:t,computePoolInfo:_(N({},t),{id:new W(e),configInfo:t.configInfo,version:7,authority:yo(t.programId).publicKey,mintA:o,mintB:i})}}async createPool(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:u,feeConfig:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,addSupportMintExt:p}=b,f=Ue(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","addSupportMintExt"]);var Q,Y,ee;let g=i.feePayer||((Q=this.scope.owner)==null?void 0:Q.publicKey),A=new qe(new W(f.mintA.address).toBuffer()).lte(new qe(new W(f.mintB.address).toBuffer())),[k,h]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[P,T]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],I=i.useSOLBalance&&k.address===$o.toBase58(),x=i.useSOLBalance&&h.address===$o.toBase58(),[S,B]=[new W(k.address),new W(h.address)],R=this.createTxBuilder(m),{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:g,amount:P}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:r,checkCreateATAOwner:a});R.addInstruction(O||{});let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new W(h.address),tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:T}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(R.addInstruction(M||{}),L===void 0||C===void 0)throw Error(`you don't has some token account, userVaultA: ${L==null?void 0:L.toBase58()}, userVaultB: ${C==null?void 0:C.toBase58()}`);let D=fs({poolId:e,programId:t,configId:new W(s.id),mintA:S,mintB:B}),E=[],z=[];return p&&(k.programId===$l.toBase58()&&z.push(ys(t,new W(k.address)).publicKey),h.programId===$l.toBase58()&&z.push(ys(t,new W(h.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(z)).forEach(($,pe)=>{$&&E.push(z[pe])})),R.addInstruction({instructions:[jc(t,this.scope.ownerPubKey,new W(s.id),D.authority,D.poolId,S,B,D.lpMint,L,C,te(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,n,new W((Y=k.programId)!=null?Y:Et),new W((ee=h.programId)!=null?ee:Et),D.observationId,P,T,o,E)],instructionTypes:[X.CpmmCreatePool]}),R.addCustomComputeBudget(c),R.addTipInstruction(l),R.versionBuild({txVersion:u,extInfo:{address:_(N({},D),{mintA:k,mintB:h,programId:t,poolFeeAccount:n,feeConfig:s})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:r,computeResult:a,computeBudgetConfig:u,txTipConfig:s,config:c,txVersion:l,feePayer:m}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:_(N({},t),{lpAmount:new rn(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new At(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new rn(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=k.amount,P=t.mintA.address===$o.toString(),T=t.mintB.address===$o.toString(),I=this.createTxBuilder(m),[x,S]=[new W(t.mintA.address),new W(t.mintB.address)],{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new W(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:y});I.addInstruction(R||{});let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new W(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!1,checkCreateATAOwner:y});I.addInstruction(O||{}),!B&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let C=await p.getCreatedTokenAccount({mint:new W(t.lpMint.address)}),Q=await p.handleTokenAccount({side:"out",amount:0,mint:new W(t.lpMint.address),tokenAccount:C,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:M}=Q,D=Ue(Q,["tokenAccount"]);I.addInstruction(D);let E=n!=null?n:await this.getCpmmPoolKeys(t.id),z=new At(new qe(1)).sub(r);return I.addInstruction({instructions:[Jc(new W(t.programId),this.scope.ownerPubKey,new W(E.authority),new W(t.id),M,B,L,new W(E.vault.A),new W(E.vault.B),x,S,new W(t.lpMint.address),a?a==null?void 0:a.liquidity:z.mul(g).quotient,i?A.amount:h,i?h:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:E.lookupTableAccount?[E.lookupTableAccount]:[]}),I.addCustomComputeBudget(u),I.addTipInstruction(s),I.versionBuild({txVersion:l,lookupTableAddress:E.lookupTableAccount?[E.lookupTableAccount]:void 0})}async withdrawLiquidity(e){var D,E;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:r,txTipConfig:a,txVersion:u,feePayer:s,closeWsol:c=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let l=new At(new qe(1)).sub(i),m=await this.getRpcPoolInfo(t.id),[p,f]=[l.mul(o.mul(m.baseReserve).div(m.lpAmount)).quotient,l.mul(o.mul(m.quoteReserve).div(m.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[bt(p,t.mintA.extensions.feeConfig,y,!1),bt(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(s),[h,P]=[new W(t.mintA.address),new W(t.mintB.address)],T=h.equals(j),I=P.equals(j),x,S,{account:B,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new W(t.mintA.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(T&&c),associatedOnly:!T,checkCreateATAOwner:!1});x=B,R&&k.addInstruction(R);let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new W(t.mintB.address),notUseTokenAccount:I,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(I&&c),associatedOnly:!I,checkCreateATAOwner:!1});S=L,O&&k.addInstruction(O),(!x||!S)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let C=await A.getCreatedTokenAccount({mint:new W(t.lpMint.address)});C||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let M=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[el(new W(t.programId),this.scope.ownerPubKey,new W(M.authority),new W(t.id),C,x,S,new W(M.vault.A),new W(M.vault.B),h,P,new W(t.lpMint.address),o,p.sub((D=b.fee)!=null?D:new qe(0)),f.sub((E=g.fee)!=null?E:new qe(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:[]}),k.addCustomComputeBudget(r),k.addTipInstruction(a),k.versionBuild({txVersion:u,lookupTableAddress:M.lookupTableAccount?[M.lookupTableAccount]:void 0})}async swap(e){var R,L,O,C,M,D;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:r,swapResult:a,slippage:u=0,config:s,computeBudgetConfig:c,txTipConfig:l,txVersion:m,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},s),g=this.createTxBuilder(p),[A,k]=[new W(t.mintA.address),new W(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new qe((1+u)*1e4)).div(new qe(1e4)):a.outputAmount=a.outputAmount.mul(new qe((1-u)*1e4)).div(new qe(1e4));let h=t.mintA.address===j.toBase58(),P=t.mintB.address===j.toBase58(),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new W((R=t.mintA.programId)!=null?R:Et),owner:this.scope.ownerPubKey,createInfo:h||!o?{payer:p||this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});I&&g.addInstruction(I);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new W((L=t.mintB.programId)!=null?L:Et),owner:this.scope.ownerPubKey,createInfo:P||o?{payer:p||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:b,checkCreateATAOwner:y});S&&g.addInstruction(S),(!T||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:T,mintBTokenAcc:x,mintAUseSOLBalance:h,mintBUseSOLBalance:P,associatedOnly:b});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?tl(new W(t.programId),this.scope.ownerPubKey,new W(B.authority),new W(B.config.id),new W(t.id),o?T:x,o?x:T,new W(B.vault[o?"A":"B"]),new W(B.vault[o?"B":"A"]),new W((M=t[o?"mintA":"mintB"].programId)!=null?M:Et),new W((D=t[o?"mintB":"mintA"].programId)!=null?D:Et),o?A:k,o?k:A,bo(new W(t.programId),new W(t.id)).publicKey,a.inputAmount,a.outputAmount):qo(new W(t.programId),this.scope.ownerPubKey,new W(B.authority),new W(B.config.id),new W(t.id),o?T:x,o?x:T,new W(B.vault[o?"A":"B"]),new W(B.vault[o?"B":"A"]),new W((O=t[o?"mintA":"mintB"].programId)!=null?O:Et),new W((C=t[o?"mintB":"mintA"].programId)!=null?C:Et),o?A:k,o?k:A,bo(new W(t.programId),new W(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?X.CpmmSwapBaseOut:X.ClmmSwapBaseIn]}),g.addCustomComputeBudget(c),g.addTipInstruction(l),g.versionBuild({txVersion:m,lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:void 0})}async lockLp(e){var m,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:i,txVersion:r,feePayer:a,feeNftOwner:u}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(a),c=(m=e.poolKeys)!=null?m:await this.getCpmmPoolKeys(t.id),l=await nl({poolInfo:t,poolKeys:c,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:u!=null?u:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:si,lockAuthProgram:(y=e.authProgram)!=null?y:pr,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(l),s.addCustomComputeBudget(o),s.addTipInstruction(i),s.versionBuild({txVersion:r,extInfo:l.address,lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:void 0})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=si,authProgram:r=pr,cpmmProgram:a,computeBudgetConfig:u,txTipConfig:s,txVersion:c,closeWsol:l=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let m=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(m),[f,y]=[new W(t.mintA.address),new W(t.mintB.address)],b=f.equals(j),g=y.equals(j),A,k,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new W(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&l),associatedOnly:!b,checkCreateATAOwner:!1});A=h,P&&p.addInstruction(P);let{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new W(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&l),associatedOnly:!g,checkCreateATAOwner:!1});k=T,I&&p.addInstruction(I),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let x=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:S}=te(m,o,Et),{publicKey:B}=Wo(i,o),{publicKey:R}=te(r,new W(t.lpMint.address),Et);return p.addInstruction({instructions:[Ps({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:S,lockPda:B,poolId:new W(t.id),mintLp:new W(x.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new W(x.vault.A),poolVaultB:new W(x.vault.B),mintA:f,mintB:y,lockLpVault:R,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[X.CpmmCollectLockFee]}),p.addCustomComputeBudget(u),p.addTipInstruction(s),p.versionBuild({txVersion:c,lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:void 0})}async harvestMultiLockLp(e){var p;let{lockInfo:t,programId:n=si,authProgram:o=pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:u=!0}=e,s=e.feePayer||this.scope.ownerPubKey,c=this.createTxBuilder(s),l={},m=[];for(let f of t){let{poolInfo:y,lpFeeAmount:b,nftMint:g}=f;if(b.isZero())continue;let[A,k]=[new W(y.mintA.address),new W(y.mintB.address)],h=A.equals(j),P=k.equals(j),T=l[y.mintA.address],I=l[y.mintB.address];if(!T)if(h){let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new W(y.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!u,associatedOnly:!1,checkCreateATAOwner:!1});T=L,O&&c.addInstruction(O),l[y.mintA.address]=L}else{let L=new W(y.mintA.address);T=this.scope.account.getAssociatedTokenAccount(L,new W(y.mintA.programId)),c.addInstruction({instructions:[jo(this.scope.ownerPubKey,T,this.scope.ownerPubKey,L,new W(y.mintA.programId))]}),l[y.mintA.address]=T}if(!I)if(P){let{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new W(y.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!u,associatedOnly:!1,checkCreateATAOwner:!1});I=L,O&&c.addInstruction(O),l[y.mintB.address]=L}else{let L=new W(y.mintB.address);I=this.scope.account.getAssociatedTokenAccount(L,new W(y.mintB.programId)),c.addInstruction({instructions:[jo(this.scope.ownerPubKey,I,this.scope.ownerPubKey,L,new W(y.mintB.programId))]}),l[y.mintB.address]=I}(!T||!I)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:T,tokenAccountB:I});let x=(p=f.poolKeys)!=null?p:await this.getCpmmPoolKeys(y.id);x.lookupTableAccount&&m.push(x.lookupTableAccount);let{publicKey:S}=te(s,g,Et),{publicKey:B}=Wo(n,g),{publicKey:R}=te(o,new W(y.lpMint.address),Et);c.addInstruction({instructions:[Ps({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:g,nftAccount:S,lockPda:B,poolId:new W(y.id),mintLp:new W(x.mintLp.address),userVaultA:T,userVaultB:I,poolVaultA:new W(x.vault.A),poolVaultB:new W(x.vault.B),mintA:A,mintB:k,lockLpVault:R,lpFeeAmount:b,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?c.sizeCheckBuildV0({computeBudgetConfig:r,lookupTableAddress:m}):c.sizeCheckBuild({computeBudgetConfig:r})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:u,feeConfig:s,computeBudgetConfig:c,txTipConfig:l,feePayer:m,feeOn:p}=b,f=Ue(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var E,z,Q;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((E=this.scope.owner)==null?void 0:E.publicKey),A=new qe(new W(f.mintA.address).toBuffer()).lte(new qe(new W(f.mintB.address).toBuffer())),[k,h]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[P,T]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],I=i.useSOLBalance&&k.address===$o.toBase58(),x=i.useSOLBalance&&h.address===$o.toBase58(),[S,B]=[new W(k.address),new W(h.address)],R=this.createTxBuilder(m),{account:L,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:g,amount:P}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:r,checkCreateATAOwner:a});R.addInstruction(O||{});let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new W(h.address),tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:T}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(R.addInstruction(M||{}),L===void 0||C===void 0)throw Error("you don't has some token account");let D=fs({poolId:e,programId:t,configId:new W(s.id),mintA:S,mintB:B});return R.addInstruction({instructions:[il(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new W(s.id),D.authority,D.poolId,S,B,D.lpMint,L,C,te(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,n,new W((z=k.programId)!=null?z:Et),new W((Q=h.programId)!=null?Q:Et),D.observationId,$c(t,this.scope.ownerPubKey).publicKey,P,T,o,p)],instructionTypes:[X.CpmmCreatePool]}),R.addCustomComputeBudget(c),R.addTipInstruction(l),R.versionBuild({txVersion:u,extInfo:{address:_(N({},D),{mintA:k,mintB:h,programId:t,poolFeeAccount:n,feeConfig:s})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=Un,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=a||this.scope.ownerPubKey,s=this.createTxBuilder(u),c=t!=null?t:await this.getCpmmPoolKeys(e.id),[l,m,p,f]=[new W(e.mintA.address),new W(e.mintB.address),new W(e.mintA.programId),new W(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(l,p),b=this.scope.account.getAssociatedTokenAccount(m,f);return s.addInstruction({instructions:[jo(this.scope.ownerPubKey,y,this.scope.ownerPubKey,l,new W(e.mintA.programId)),jo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,m,new W(e.mintB.programId))]}),s.addInstruction({instructions:[As(n,this.scope.ownerPubKey,new W(c.authority),new W(c.id),new W(c.config.id),new W(c.vault.A),new W(c.vault.B),l,m,y,b,p,f)],instructionTypes:[]}),s.addCustomComputeBudget(i),s.addTipInstruction(r),s.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,poolKeyList:t,programId:n=Un,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=r||this.scope.ownerPubKey,u=this.createTxBuilder(a),s={},c=t!=null?t:[];if(!c.length){let m=e.map(b=>b.id),p=95,f=[];for(let b=0;b<m.length;b+=p)f.push(m.slice(b,b+p));c=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let l=c.reduce((m,p)=>_(N({},m),{[p.id]:p}),{});for(let m of e){let p=l[m.id]||await this.getCpmmPoolKeys(m.id),[f,y,b,g]=[new W(m.mintA.address),new W(m.mintB.address),new W(m.mintA.programId),new W(m.mintB.programId)],A=s[m.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),k=s[m.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);s[m.mintA.address]=A,s[m.mintB.address]=k,u.addInstruction({instructions:[As(n,this.scope.ownerPubKey,new W(p.authority),new W(p.id),new W(p.config.id),new W(p.vault.A),new W(p.vault.B),f,y,A,k,b,g)],instructionTypes:[]})}return o===0?u.sizeCheckBuildV0({computeBudgetConfig:i,lookupTableAddress:c.map(m=>m.lookupTableAccount).filter(Boolean),insCountLimit:6}):u.sizeCheckBuild({computeBudgetConfig:i})}async collectCreatorFeesPermissionless({poolInfo:e,poolKeys:t,programId:n=Un,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let u=a||this.scope.ownerPubKey,s=this.createTxBuilder(u),c=t!=null?t:await this.getCpmmPoolKeys(e.id),[l,m,p,f]=[new W(e.mintA.address),new W(e.mintB.address),new W(e.mintA.programId),new W(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(l,p),b=this.scope.account.getAssociatedTokenAccount(m,f);return s.addInstruction({instructions:[jo(this.scope.ownerPubKey,y,this.scope.ownerPubKey,l,new W(e.mintA.programId)),jo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,m,new W(e.mintB.programId))]}),s.addInstruction({instructions:[ol(n,u,this.scope.ownerPubKey,new W(c.authority),new W(c.id),new W(c.config.id),new W(c.vault.A),new W(c.vault.B),l,m,y,b,p,f)],instructionTypes:[]}),s.addCustomComputeBudget(i),s.addTipInstruction(r),s.versionBuild({txVersion:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o,swapBaseIn:i=!0}){let r=n.toString()===e.mintB.address,a=e.feeOn===0||e.feeOn===2,u=i?Fi.swapBaseInput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a):Fi.swapBaseOutput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a),s=new rn(u.outputAmount.toString()).div(u.inputAmount.toString()),c=u.outputAmount.mul(new qe((1-o)*1e4)).div(new qe(1e4));return{allTrade:i?u.inputAmount.eq(t):u.outputAmount.eq(t),amountIn:i?t:u.inputAmount,amountOut:u.outputAmount,minAmountOut:c,executionPrice:s,fee:u.tradeFee,priceImpact:e.poolPrice.sub(s).div(e.poolPrice),swapResult:u}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var h,P,T,I,x,S,B,R,L;let u=1-Number(i.toSignificant())/100,s=new qe(new rn(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),c=bt(s,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),l=s.sub((h=c.fee)!=null?h:new qe(0)),m=new qe(new rn(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,rn.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",s.toString(),"amountInFee:",(T=(P=c.fee)==null?void 0:P.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=l.mul(m).div(p==="base"?t:n),y={amount:J,fee:void 0,expirationTime:void 0};if(!l.isZero()){let O=Tf(f,t,n,m);this.logDebug("lpAmountData:",{amountA:O.amountA.toString(),amountB:O.amountB.toString()}),y=bt(O[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new At(new qe(1)).add(i),g=new At(new qe(1)).sub(i),A=bt(b.mul(y.amount.sub((I=y.fee)!=null?I:new qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),k=bt(g.mul(y.amount.sub((x=y.fee)!=null?x:new qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(B=(S=y.fee)==null?void 0:S.toString())!=null?B:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(L=(R=A.fee)==null?void 0:R.toString())!=null?L:0),{inputAmountFee:c,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}async fetchCpmmLockBalances(){await this.scope.account.fetchWalletTokenAccounts({forceUpdate:!0});let e=this.scope.account.tokenAccountRawInfos.filter(a=>a.accountInfo.amount.eq(new qe(1))),t=e.map(a=>Wo(this.scope.cluster==="mainnet"?si:ln.LOCK_CPMM_PROGRAM,a.accountInfo.mint).publicKey),n=await Me(this.scope.connection,t.map(a=>({pubkey:a}))),o=new Map,i=n.filter((a,u)=>(o.set(a.pubkey.toString(),e[u].accountInfo.mint.toString()),!!a.accountInfo)).map(a=>a.pubkey);return(await Promise.all(i.map(a=>this.scope.api.fetchCpmmLockInfo(a)))).map((a,u)=>_(N({},a),{nftMint:new W(o.get(i[u].toString()))}))}};function Tf(d,e,t,n){let o=d.mul(e).div(n);!o.isZero()&&!d.mul(e).mod(n).isZero()&&(o=o.add(new qe(1)));let i=d.mul(t).div(n);return!i.isZero()&&!d.mul(t).mod(n).isZero()&&(i=i.add(new qe(1))),{amountA:o,amountB:i}}import{PublicKey as jl}from"@solana/web3.js";import{getTransferFeeConfig as hf,MintLayout as Bf,TOKEN_2022_PROGRAM_ID as js,TOKEN_PROGRAM_ID as Js,unpackMint as If}from"@solana/spl-token";var Ji=class extends $e{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;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:o="strict"}=t||{},{mintList:i,blacklist:r,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(r),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(En.address,En),this._mintGroup.official.add(En.address),i.forEach(s=>{var c;this._blackTokenMap.has(s.address)||(this._tokenMap.set(s.address,_(N({},s),{type:"raydium",priority:2,programId:(c=s.programId)!=null?c:s.tags.includes("token-2022")?js.toBase58():Js.toBase58()})),this._mintGroup.official.add(s.address))}),u.forEach(s=>{var c;this._blackTokenMap.has(s.address)||this._tokenMap.has(s.address)||(this._tokenMap.set(s.address,_(N({},s),{type:"jupiter",priority:1,programId:(c=s.programId)!=null?c:s.tags.includes("token-2022")?js.toBase58():Js.toBase58(),tags:s.freezeAuthority?[...s.tags||[],"hasFreeze"]:s.tags})),this._mintGroup.jup.add(s.address))}),this._extraTokenList.forEach(s=>{this._blackTokenMap.has(s.address)||this._tokenMap.has(s.address)||(this._tokenMap.set(s.address,_(N({},s),{type:"extra",priority:1,programId:s.programId||s.tags.includes("token-2022")?js.toBase58():Js.toBase58()})),this._mintGroup.extra.add(s.address))}),this._tokenList=Array.from(this._tokenMap).map(s=>s[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(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return En;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,_(N({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new jl(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=Bf.decode(r.data),u=n.toString().substring(0,6),s=hf(If(new jl(t),r,r.owner)),c={chainId:101,address:n,programId:r.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:s?{feeConfig:An(s)}:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var ma=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:r,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:s="confirmed",loopMultiTxStatus:c}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new gn(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=s,this.loopMultiTxStatus=c,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=ke("Raydium"),this.farm=new Zi({scope:this,moduleName:"Raydium_Farm"}),this.account=new Qi({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new $i({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ji({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Xi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Ci({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new ji({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new on({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Qo({scope:this,moduleName:"Raydium_marketV2"}),this.launchpad=new zi({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:r||Date.now()-a,offset:a}})}static async load(e){var c;let t=xf({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,u=new sa({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),s=new ma(_(N({},t),{api:u}));return await s.fetchAvailabilityStatus((c=e.disableFeatureCheck)!=null?c:!0),e.disableLoadToken||await s.token.load({type:e.jupTokenType}),s}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(ua);return this._owner.publicKey}setOwner(e){return this._owner=e?new gn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Hl);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 console.error(ua),new Error(ua)}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){if(this.cluster==="devnet")return[];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(o=>_(N({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.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{ma as Raydium};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=raydium.mjs.map