@ninsei-labs/sdk 0.50.0 → 0.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +18 -0
- package/assets/vendors/atomic/atomic-browser.js +24 -0
- package/assets/vendors/monero/monero-js-browser.js +58 -0
- package/assets/vendors/monero-js/LICENSE +9 -0
- package/assets/vendors/sdk/sdk-browser.js +14 -0
- package/assets/vendors/walletconnect/wc-browser.js +6202 -0
- package/engine/atomic/order-worker.js +129 -0
- package/engine/core/config.js +3 -1
- package/engine/sdk/bridge.js +3 -3
- package/index.d.ts +69 -2
- package/package.json +4 -2
- package/src/adapters/monero-wallet.mjs +26 -0
- package/src/config.mjs +9 -0
- package/src/index.mjs +2 -0
- package/src/public/networks.d.ts +2 -0
- package/src/public/recovery.d.ts +16 -0
- package/src/quotes.mjs +67 -1
- package/src/recovery-key.mjs +101 -13
- package/src/swaps.mjs +17 -4
- package/src/sweep-half.mjs +14 -0
- package/src/sweep-restore.mjs +4 -1
- package/src/sweep.mjs +85 -5
- package/src/version.mjs +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var A0=Object.defineProperty;var Q=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var ge=(e,t)=>{for(var n in t)A0(e,n,{get:t[n],enumerable:!0})};var te={};ge(te,{ALLOWED_PROVIDERS:()=>ud,API:()=>Ke,APP:()=>Er,ASYNC_ROUTE_PROVIDERS:()=>wo,CHAINS:()=>bt,DEFAULT_CHAIN:()=>at,DEMO:()=>At,DEX_ASSETS:()=>dd,DEX_CHAINS:()=>I0,DEX_HUBS:()=>O0,DEX_PRICE_GATE:()=>_0,DEX_ROUTES:()=>R0,ENDPOINTS:()=>ho,EVM:()=>wn,KNOWN_FACTORY_CODES:()=>fd,MONERO:()=>fe,SCENARIO_LABELS:()=>H0,SIGNING_DOMAIN:()=>B0,SIGNING_GUARDS:()=>Ar,SWEEP:()=>hi,TEST_CLAIMER:()=>D0,TIMING:()=>ct,XMR_NETWORKS:()=>ki,allowedProvidersFor:()=>wi,chainByChainId:()=>gi,chainById:()=>Me,knownFactoryCodesFor:()=>yi,knownImplementationCodesFor:()=>bi,nativeOf:()=>pd,sweepOrigin:()=>P0,tokenById:()=>F0,tokensOf:()=>xi,wrappedNativeOf:()=>C0});function wi(e){let t=typeof e=="string"?e:e&&e.id,n=ud[t];return!Array.isArray(n)||n.length===0?null:n.map(r=>String(r).toLowerCase())}function yi(e){let t=typeof e=="string"?e:e&&e.id,n=fd[t];return!Array.isArray(n)||n.length===0?null:n.map(r=>String(r).toLowerCase())}function bi(e){let t=typeof e=="string"?e:e&&e.id,n=bt.find(o=>o.id===t)||Me(t),r=n&&n.escrow?n.escrow.implementationCodeHash:null;return typeof r!="string"||!/^0x[0-9a-fA-F]{64}$/.test(r)?null:[r.toLowerCase()]}function Me(e){return bt.find(t=>t.id===e)||bt.find(t=>t.id===at)||bt[0]}function gi(e){return bt.find(t=>t.chainId===Number(e))||null}function xi(e){let t=Me(e);return[pd(e),...t.tokens]}function pd(e){let t=Me(e);return{symbol:t.native.symbol,label:t.native.symbol,address:null,decimals:t.native.decimals,usd:t.native.usd,cls:"ar-token-eth",native:!0}}function C0(e){return(Me(e).tokens||[]).find(n=>n&&n.peg==="native")||null}function F0(e,t){let n=e,r=t;typeof e=="string"&&e.includes(":")&&([n,r]=e.split(":"));let o=xi(n);return o.find(s=>s.symbol===String(r).toUpperCase())||o[0]}function P0(){let e=typeof location<"u"?location.hostname:"";return/^(localhost|127\.0\.0\.1|\[::1\])$/.test(e)||/\.local$/.test(e)?hi.localOrigin:hi.origin}var Un,Wn,mi,ho,T0,B0,Er,I0,dd,O0,_0,Ar,R0,wo,bt,at,ud,fd,D0,fe,Ke,ki,hi,wn,ct,At,H0,qe=Q(()=>{Un=typeof window<"u"&&window.NINSEI_DEPLOY?window.NINSEI_DEPLOY:null,Wn=typeof process<"u"&&process.env?process.env:null,mi=Object.freeze({moneroNode:"http://127.0.0.1:38081",evmRpc:"http://127.0.0.1:8545",sweepOrigin:"http://localhost:5195"}),ho=Object.freeze({moneroNode:Un&&Un.moneroNode||Wn&&Wn.NINSEI_MONERO_NODE||mi.moneroNode,evmRpc:Un&&Un.evmRpc||Wn&&Wn.NINSEI_EVM_RPC||mi.evmRpc,sweepOrigin:Un&&Un.sweepOrigin||Wn&&Wn.NINSEI_SWEEP_ORIGIN||mi.sweepOrigin}),T0=typeof location<"u"?location.origin:"",B0=Object.freeze({name:"NinseiEscrowFactory",version:"1"}),Er={name:"NinseiSwap",version:"0.1.0",demo:!0,storageKey:"ninsei.demo.v1"},I0=["arbitrum-sepolia","arbitrum","mainnet"],dd=["USDT","USDC","DAI","USDS","USDe","PyUSD"],O0=["USDC","USDT","DAI"],_0={maxDeviationPct:2,stableBandPct:1,stables:dd},Ar={minReadyLeadSec:600,minClaimWindowSec:600,maxDeadlineSec:259200,readyLeadWarnSec:600},R0={"arbitrum-sepolia":{USDC:{steps:[{to:"WETH",fee:3e3,pool:"0x66eeab70ac52459dd74c6ad50d578ef76a441bbf",verified:{at:"2026-09-23",block:311900041}}]}},arbitrum:{USDT:{steps:[{to:"WETH",fee:500,pool:"0x641c00a822e8b671738d32a431a4fb6074e5c79d",verified:{at:"2026-09-23",block:508125577}}]},USDC:{steps:[{to:"WETH",fee:100,pool:"0x6f38e884725a116c9c7fbf208e79fe8828a2595f",verified:{at:"2026-09-23",block:508125577}}]},DAI:{steps:[{to:"WETH",fee:3e3,pool:"0xa961f0473da4864c5ed28e00fcc53a3aab056c1b",verified:{at:"2026-09-23",block:508125577}}]},USDe:{steps:[{to:"USDC",fee:100,pool:"0x3223859e24d5413947761cb79d3094f21be69bfa",verified:{at:"2026-09-23",block:508125577}},{to:"WETH",fee:100,pool:"0x6f38e884725a116c9c7fbf208e79fe8828a2595f",verified:{at:"2026-09-23",block:508125577}}]},WETH:{steps:[],unwrap:!0}},mainnet:{USDT:{steps:[{to:"WETH",fee:500,pool:"0x11b815efb8f581194ae79006d24e0d814b7697f6",verified:{at:"2026-09-23",block:26040283}}]},USDC:{steps:[{to:"WETH",fee:100,pool:"0xe0554a476a092703abdb3ef35c80e0d76d32939f",verified:{at:"2026-09-23",block:26040283}}]},DAI:{steps:[{to:"WETH",fee:500,pool:"0x60594a405d53811d3bc4766596efd80fd545a270",verified:{at:"2026-09-23",block:26040283}}]},USDe:{steps:[{to:"USDC",fee:100,pool:"0xe6d7ebb9f1a9519dc06d557e03c522d53520e76a",verified:{at:"2026-09-23",block:26040283}},{to:"WETH",fee:100,pool:"0xe0554a476a092703abdb3ef35c80e0d76d32939f",verified:{at:"2026-09-23",block:26040283}}]},USDS:{steps:[{to:"USDC",fee:3e3,pool:"0xa66a2770bc0e0c65b63b5a3bb4560e90f95d6146",verified:{at:"2026-09-23",block:26040283}},{to:"WETH",fee:100,pool:"0xe0554a476a092703abdb3ef35c80e0d76d32939f",verified:{at:"2026-09-23",block:26040283}}]},PyUSD:{steps:[{to:"USDC",fee:100,pool:"0x13394005c1012e708fce1eb974f1130fdc73a5ce",verified:{at:"2026-09-23",block:26040283}},{to:"WETH",fee:100,pool:"0xe0554a476a092703abdb3ef35c80e0d76d32939f",verified:{at:"2026-09-23",block:26040283}}]},WETH:{steps:[],unwrap:!0}}},wo={cowswap:{venue:"CoWSwap",shape:"async",settles:"native",networks:{1:{slug:"mainnet",orderbook:"https://api.cow.fi/mainnet"},100:{slug:"xdai",orderbook:"https://api.cow.fi/xdai"},42161:{slug:"arbitrum_one",orderbook:"https://api.cow.fi/arbitrum_one"},8453:{slug:"base",orderbook:"https://api.cow.fi/base"},56:{slug:"bnb",orderbook:"https://api.cow.fi/bnb"},11155111:{slug:"sepolia",orderbook:"https://api.cow.fi/sepolia"}}},kyberswap:{venue:"KyberSwap Limit Order",shape:"async",settles:"wrapped",networks:{1:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},10:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},56:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},137:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},250:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},324:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},5e3:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},8453:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},42161:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},43114:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},59144:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},534352:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"},81457:{orderbook:"https://limit-order.kyberswap.com",contract:"0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C"}}},uniswapx:{venue:"UniswapX",shape:"async",settles:"native",networks:{1:{orderbook:"https://api.uniswap.org/v2",reactor:"0x00000011F84B9aa48e5f8aA8B9897600006289Be",submitter:"/api/uniswapx/order"}}},uniswaprelay:{venue:"Uniswap Relay",shape:"async",settles:"native",networks:{1:{reactor:"0x0000000000A4e21E2597DCac987455c48b12edBF",universalRouter:"0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD"}}}},bt=[{id:"arbitrum-sepolia",name:"Arbitrum Sepolia",vm:"evm",chainId:421614,caip2:"eip155:421614",testnet:!0,native:{symbol:"ETH",decimals:18,usd:3212.4},rpcUrl:ho.evmRpc,priceFeed:{address:"0xd30e2101a97dcbAeBCBC04F14C3f624E67A35165",pair:"ETH / USD",decimals:8,min:100,max:2e4},explorerTx:"https://sepolia.arbiscan.io/tx/",explorerAddr:"https://sepolia.arbiscan.io/address/",explorerName:"arbiscan (sepolia)",gasUsd:.01,routeType:"atomic",escrow:{address:"0x1029D6bC53f6b9919F8ec6Ac922327F7e5A3DdF2",mode:"live",cashier:"0x7E84035B4f42219F3fCE22855c6Dd7D36942B019",implementationCodeHash:"0xfd1ef12c1d96d3ee7060bd5901e06108723783403fad00c9630dcdeb6193674b"},tokens:[{symbol:"USDC",address:"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"WETH",address:"0x980B62Da83eFf3D4576C647993b0c1D7faf17c73",decimals:18,cls:"ar-token-eth",peg:"native",hidden:!0}],uniswap:{factory:"0x248ab79bbb9bc29bb72f7cd42f17e054fc40188e",quoter:"0x2779a0CC1c3e0E44D2542EC3e79e3864Ae93Ef0B",router:"0x101F443B4d1b059569D643917553c771E1b9663E",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3",wrapped:{symbol:"WETH",name:"Wrapped Ether",address:"0x980B62Da83eFf3D4576C647993b0c1D7faf17c73",decimals:18},feeTiers:[100,500,3e3,1e4]},dexPriceGate:"tolerated"},{id:"local-anvil",name:"Local (anvil)",hidden:!0,vm:"evm",chainId:31337,caip2:"eip155:31337",testnet:!0,native:{symbol:"ETH",decimals:18,usd:3212.4},rpcUrl:"http://127.0.0.1:8545",priceFeed:null,explorerTx:"",explorerAddr:"",explorerName:"",gasUsd:1e-4,routeType:"atomic",escrow:{address:"0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc",mode:"live",cashier:"0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20f",implementationCodeHash:"0xfd1ef12c1d96d3ee7060bd5901e06108723783403fad00c9630dcdeb6193674b"},tokens:[]},{id:"arbitrum",name:"Arbitrum One",vm:"evm",chainId:42161,caip2:"eip155:42161",native:{symbol:"ETH",decimals:18,usd:3212.4},rpcUrl:"https://arb1.arbitrum.io/rpc",priceFeed:{address:"0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612",pair:"ETH / USD",decimals:8,min:100,max:2e4},explorerTx:"https://arbiscan.io/tx/",explorerAddr:"https://arbiscan.io/address/",explorerName:"arbiscan",gasUsd:.21,routeType:"atomic",escrow:{address:null,mode:"simulated"},tokens:[{symbol:"USDC",address:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"USDT",onChainSymbol:"USD\u20AE0",address:"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",decimals:6,usd:1,cls:"ar-token-usdt"},{symbol:"DAI",address:"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",decimals:18,usd:1,cls:"ar-token-dai"},{symbol:"USDe",address:"0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34",decimals:18,usd:1,cls:"ar-token-usde"},{symbol:"WETH",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",decimals:18,cls:"ar-token-eth",peg:"native",hidden:!0}],uniswap:{factory:"0x1F98431c8aD98523631AE4a59f267346ea31F984",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",wrapped:{symbol:"WETH",name:"Wrapped Ether",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",decimals:18},feeTiers:[100,500,3e3,1e4]}},{id:"mainnet",name:"Ethereum",vm:"evm",chainId:1,caip2:"eip155:1",native:{symbol:"ETH",decimals:18,usd:3212.4},rpcUrl:"https://ethereum-rpc.publicnode.com",priceFeed:{address:"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419",pair:"ETH / USD",decimals:8,min:100,max:2e4},explorerTx:"https://etherscan.io/tx/",explorerAddr:"https://etherscan.io/address/",explorerName:"etherscan",gasUsd:3.4,routeType:"atomic",escrow:{address:null,mode:"simulated"},tokens:[{symbol:"USDC",address:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"USDT",address:"0xdAC17F958D2ee523a2206206994597C13D831ec7",decimals:6,usd:1,cls:"ar-token-usdt"},{symbol:"DAI",address:"0x6B175474E89094C44Da98b954EedeAC495271d0F",decimals:18,usd:1,cls:"ar-token-dai"},{symbol:"USDe",address:"0x4c9EDD5852cd905f086C759E8383e09bff1E68B3",decimals:18,usd:1,cls:"ar-token-usde"},{symbol:"USDS",address:"0xdC035D45d973E3EC169d2276DDab16f1e407384F",decimals:18,usd:1,cls:"ar-token-usds"},{symbol:"PyUSD",address:"0x6c3ea9036406852006290770BEdFcAbA0e23A0e8",decimals:6,usd:1,cls:"ar-token-pyusd"},{symbol:"WETH",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",decimals:18,cls:"ar-token-eth",peg:"native",hidden:!0}],uniswap:{factory:"0x1F98431c8aD98523631AE4a59f267346ea31F984",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",wrapped:{symbol:"WETH",name:"Wrapped Ether",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",decimals:18},feeTiers:[100,500,3e3,1e4]}},{id:"base",name:"Base",vm:"evm",chainId:8453,caip2:"eip155:8453",native:{symbol:"ETH",decimals:18,usd:3212.4},rpcUrl:"https://mainnet.base.org",priceFeed:{address:"0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70",pair:"ETH / USD",decimals:8,min:100,max:2e4},explorerTx:"https://basescan.org/tx/",explorerAddr:"https://basescan.org/address/",explorerName:"basescan",gasUsd:.08,routeType:"atomic",escrow:{address:null,mode:"simulated"},tokens:[{symbol:"USDC",address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"USDT",address:"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2",decimals:6,usd:1,cls:"ar-token-usdt"},{symbol:"DAI",address:"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb",decimals:18,usd:1,cls:"ar-token-dai"},{symbol:"USDe",address:"0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34",decimals:18,usd:1,cls:"ar-token-usde"}]},{id:"bsc",name:"BNB Chain",vm:"evm",chainId:56,caip2:"eip155:56",native:{symbol:"BNB",decimals:18,usd:612.5},rpcUrl:"https://bsc-dataseed.binance.org",explorerTx:"https://bscscan.com/tx/",explorerAddr:"https://bscscan.com/address/",explorerName:"bscscan",gasUsd:.05,routeType:"atomic",escrow:{address:null,mode:"simulated"},tokens:[{symbol:"USDT",address:"0x55d398326f99059fF775485246999027B3197955",decimals:18,usd:1,cls:"ar-token-usdt"},{symbol:"USDC",address:"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",decimals:18,usd:1,cls:"ar-token-usdc"}]},{id:"bitcoin",name:"Bitcoin",vm:"bitcoin",chainId:0,caip2:"bip122:000000000019d6689c085ae165831e93",native:{symbol:"BTC",decimals:8,usd:96e3},rpcUrl:"https://blockstream.info/api",explorerTx:"https://mempool.space/tx/",explorerAddr:"https://mempool.space/address/",explorerName:"mempool.space",gasUsd:1.2,routeType:"atomic",tokens:[],escrow:null,settlement:"native-atomic-swap"},{id:"tron",name:"Tron",vm:"tron",chainId:728126428,caip2:"tron:0x2b6653dc",native:{symbol:"TRX",decimals:6,usd:.28},rpcUrl:"https://api.trongrid.io",explorerTx:"https://tronscan.org/#/transaction/",explorerAddr:"https://tronscan.org/#/address/",explorerName:"tronscan",gasUsd:.35,routeType:"atomic",escrow:null,tokens:[{symbol:"USDT",address:"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",decimals:6,usd:1,cls:"ar-token-usdt"}]},{id:"solana",name:"Solana",vm:"solana",chainId:101,caip2:"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d",native:{symbol:"SOL",decimals:9,usd:198.4},rpcUrl:"https://api.mainnet-beta.solana.com",explorerTx:"https://solscan.io/tx/",explorerAddr:"https://solscan.io/account/",explorerName:"solscan",gasUsd:.002,routeType:"atomic",escrow:null,tokens:[{symbol:"USDC",address:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"USDT",address:"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",decimals:6,usd:1,cls:"ar-token-usdt"}]},{id:"monad",name:"Monad",vm:"evm",unsupported:!0,chainId:143,caip2:"eip155:143",native:{symbol:"MON",decimals:18,usd:.03},rpcUrl:"https://rpc.monad.xyz",explorerTx:"https://monadscan.com/tx/",explorerAddr:"https://monadscan.com/address/",explorerName:"monadscan",gasUsd:.01,routeType:"atomic",escrow:{address:null,mode:"simulated"},tokens:[{symbol:"USDC",address:"0x754704Bc059F8C67012fEd69BC8A327a5aafb603",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"USDT",onChainSymbol:"USDT0",address:"0xe7cd86e13AC4309349F30B3435a9d337750fC82D",decimals:6,usd:1,cls:"ar-token-usdt"}]},{id:"hyperevm",name:"Hyperliquid EVM",vm:"evm",unsupported:!0,chainId:999,caip2:"eip155:999",native:{symbol:"HYPE",decimals:18,usd:38.5},rpcUrl:"https://rpc.hyperliquid.xyz/evm",explorerTx:"https://hyperevmscan.io/tx/",explorerAddr:"https://hyperevmscan.io/address/",explorerName:"hyperevmscan",gasUsd:.01,routeType:"atomic",escrow:{address:null,mode:"simulated"},tokens:[{symbol:"USDC",address:"0xb88339CB7199b77E23DB6E890353E22632Ba630f",decimals:6,usd:1,cls:"ar-token-usdc"},{symbol:"USDT",onChainSymbol:"USD\u20AE0",address:"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",decimals:6,usd:1,cls:"ar-token-usdt"}]}],at="arbitrum-sepolia",ud={"local-anvil":["0x60af2ad4963c738aa6ac16d6cb0af1982508ba21"]};fd={};D0="0xc14C7841C7d6350859474dD6DF8dC9672047A6A0",fe={networkType:"stagenet",confirmTarget:10,blockTimeSim:12e4,blockTimeReal:12e4,node:ho.moneroNode,nodePollMs:3e4},Ke={base:"/api",xmrSource:"app",pollMs:5e3,maxProviders:5,timeoutMs:6e4},ki={app:"stagenet",mock:"stagenet",fakechain:"fakechain"};hi={origin:ho.sweepOrigin,localOrigin:"http://localhost:5195"},wn={projectId:"18c13c05b6c0ab011ffff7cee0700e2d",metadata:{name:"NinseiSwap",description:"Non-custodial XMR <-> EVM atomic swap. Demo build: real wallet, real balances, no real funds move.",url:T0,icons:[]}},ct={quoteValid:12e3,quoteRefresh:5e3,fundingMined:6e3,makerLock:3e4,xmrConfirm:fe.blockTimeSim,readyWindow:60*6e4,makerClaim:45e3,sweep:3e4,t0Refund:20*6e4,t1Refund:40*6e4,watchtowerGrace:5*6e4,makerReclaim:10*6e4},At={speeds:[1,20,60,300],defaultSpeed:60,scenarios:["happy","maker_no_lock","user_no_ready","maker_stall"],defaultScenario:"happy",chainModes:["mock","live"],defaultChainMode:"live",xmrSources:["app","mock"],defaultXmrSource:"app",defaultChain:at},H0={happy:"happy path",maker_no_lock:"maker never locks XMR",user_no_ready:"user never confirms",maker_stall:"maker stalls after ready"}});var ie={};ge(ie,{allowanceVerdict:()=>j0,counterpartyVerdict:()=>X0,deadlineVerdict:()=>vi,escrowPointsVerdict:()=>Si,escrowStateVerdict:()=>Ei,gasReserveVerdict:()=>U0,liveOrderSlotsVerdict:()=>V0,networkGateVerdict:()=>$0,payBalanceVerdict:()=>M0,quoteFreshnessVerdict:()=>W0,rangeVerdict:()=>L0,signingGateVerdict:()=>K0,signingGateWords:()=>Y0});function L0({size:e=null,unit:t=null,min:n=null,max:r=null,step:o=null,quoteUnit:s=null}={}){let i=String(t||s||"").toUpperCase(),a=String(s||"").toUpperCase();if(a&&i&&a!==i)return{ok:!1,checked:!0,blocks:!0,kind:"unit-mismatch",reason:`the size is measured in ${i} while the quote states its range in ${a} - the two cannot be compared`,size:e,min:n,max:r,step:o,unit:i,quoteUnit:a};let c=ve(e);if(c===null||c<=0)return{ok:!1,checked:!1,blocks:!1,kind:"size-unstated",reason:"the size is not entered, so the provider's range cannot be checked",size:null,min:ve(n),max:ve(r),step:ve(o),unit:i};let l=ve(n),d=ve(r),u=ve(o);if(l===null&&d===null)return{ok:!0,checked:!1,blocks:!1,kind:"range-unstated",reason:"the provider did not state a volume range (min/max), so the size could not be checked against it",size:c,min:null,max:null,step:u,unit:i};let f={size:c,min:l,max:d,step:u,unit:i,quoteUnit:a||i};if(l!==null&&c<l)return{ok:!1,checked:!0,blocks:!0,kind:"below-min",...f,reason:`the order size ${et(c)} ${i} is below the provider minimum ${et(l)} ${i} - short by ${et(l-c)} ${i}: the provider does not take this size`};if(d!==null&&c>d)return{ok:!1,checked:!0,blocks:!0,kind:"above-max",...f,reason:`the order size ${et(c)} ${i} is above the provider maximum ${et(d)} ${i} - over by ${et(c-d)} ${i}: the provider does not take this size`};if(u!==null&&u>0){let p=l!==null?l:0,h=(c-p)/u;if(Math.abs(h-Math.round(h))>1e-6)return{ok:!1,checked:!0,blocks:!0,kind:"off-step",...f,reason:`the order size ${et(c)} ${i} does not sit on the ${et(u)} ${i} step from ${et(p)} ${i}`}}return{ok:!0,checked:!0,blocks:!1,kind:"in-range",...f,reason:`the order size ${et(c)} ${i} is inside the provider range ${l===null?"?":et(l)}..${d===null?"?":et(d)} ${i}`}}function M0({payBalanceWei:e=null,payAmountWei:t=null,symbol:n=null,decimals:r=18}={}){let o=yn(e),s=yn(t);return s===null||s<=0n?{ok:!1,checked:!1,blocks:!1,kind:"amount-unstated",reason:"the amount to fund is not known, so the wallet balance cannot be checked against it"}:o===null?{ok:!1,checked:!1,blocks:!0,kind:"balance-unchecked",reason:"the wallet balance was not read, so it is unknown whether the wallet covers the order - signing is blocked"}:o<s?{ok:!1,checked:!0,blocks:!0,kind:"balance-short",haveWei:o.toString(),needWei:s.toString(),shortfallWei:(s-o).toString(),reason:`the wallet holds ${De(o,r)} ${n} but the order locks ${De(s,r)} ${n} - short by ${De(s-o,r)} ${n}`}:{ok:!0,checked:!0,blocks:!1,kind:"balance-enough",haveWei:o.toString(),needWei:s.toString(),reason:`the wallet holds ${De(o,r)} ${n} for the order's ${De(s,r)} ${n}`}}function U0({nativeBalanceWei:e=null,requiredNativeWei:t=null,gasReserveWei:n=null,symbol:r=null,decimals:o=18}={}){let s=yn(t),i=yn(n),a=yn(e);if(i===null||i<=0n)return{ok:!0,checked:!1,blocks:!1,kind:"reserve-unstated",reason:"the gas reserve was not measured, so the gas part of the funding could not be checked (the wallet will name any shortfall)"};if(s===null)return{ok:!1,checked:!1,blocks:!1,kind:"amount-unstated",reserveWei:i.toString(),reason:"the amount to fund is not known, so the native balance cannot be checked against amount + gas"};if(a===null)return{ok:!1,checked:!1,blocks:!0,kind:"native-unchecked",needWei:s.toString(),reserveWei:i.toString(),reason:"the native balance was not read, so it is unknown whether the wallet covers amount + gas - signing is blocked"};let c=s+i;return a<c?{ok:!1,checked:!0,blocks:!0,kind:"gas-short",haveWei:a.toString(),needWei:s.toString(),reserveWei:i.toString(),requiredTotalWei:c.toString(),shortfallWei:(c-a).toString(),reason:`funding needs ${De(s,o)} ${r} plus ${De(i,o)} ${r} of gas, but the wallet holds ${De(a,o)} ${r} - short by ${De(c-a,o)} ${r}`}:{ok:!0,checked:!0,blocks:!1,kind:"gas-enough",haveWei:a.toString(),needWei:s.toString(),reserveWei:i.toString(),requiredTotalWei:c.toString(),reason:`the wallet holds ${De(a,o)} ${r}: ${De(s,o)} for the order and ${De(i,o)} for gas`}}function W0({at:e=null,ttlMs:t=null,expiresAt:n=null,nowMs:r=null}={}){let o=ve(r)===null?Date.now():Number(r),s=ve(n);if(s!==null&&s<=o)return{ok:!1,checked:!0,blocks:!0,kind:"expired",expiresAt:s,nowMs:o,reason:`the order quote expired ${Math.round((o-s)/1e3)}s ago`};let i=ve(e);if(i===null)return{ok:!1,checked:!1,blocks:!1,kind:"untimed",reason:"the quote carries no timestamp, so its age could not be checked"};let a=ve(t),c=Math.max(0,o-i);return a===null||a<=0?{ok:!0,checked:!1,blocks:!1,kind:"no-ttl",at:i,ageMs:c,reason:`the provider did not state how long the quote lives, so only its age is known: said ${Math.round(c/1e3)}s ago`}:c>a?{ok:!1,checked:!0,blocks:!0,kind:"stale",at:i,ttlMs:a,ageMs:c,overMs:c-a,reason:`the quote is ${Math.round(c/1e3)}s old while it was valid for ${Math.round(a/1e3)}s - it expired ${Math.round((c-a)/1e3)}s ago`}:{ok:!0,checked:!0,blocks:!1,kind:"fresh",at:i,ttlMs:a,ageMs:c,reason:`the quote is ${Math.round(c/1e3)}s old and valid for ${Math.round(a/1e3)}s`}}function vi({nowSec:e=null,readyBy:t=null,t1:n=null,minReadyLeadSec:r=null,minClaimWindowSec:o=null,maxDeadlineSec:s=null}={}){let i=ve(e)===null?Math.floor(Date.now()/1e3):Number(e),a=ve(t),c=ve(n);if(a===null||c===null)return{ok:!1,checked:!1,blocks:!0,kind:"deadlines-unstated",reason:"the order's deadlines are not stated, so neither the ready window nor the claim window can be checked - signing is blocked"};if(a<=i)return{ok:!1,checked:!0,blocks:!0,kind:"ready-by-in-past",readyBy:a,nowSec:i,reason:`the order would be created already past its ready-by deadline (${a} is ${Math.round(i-a)}s ago): nothing could be claimed in it`};if(c<=a)return{ok:!1,checked:!0,blocks:!0,kind:"t1-not-after-ready-by",readyBy:a,t1:c,reason:`t1 (${c}) must be later than readyBy (${a}): an overlapping window lets claim and refund both be valid at once`};let l=ve(r),d=ve(o);if(l!==null&&a-i<l)return{ok:!1,checked:!0,blocks:!0,kind:"ready-window-too-short",readyBy:a,nowSec:i,minReadyLeadSec:l,reason:`the ready-by deadline is only ${Math.round(a-i)}s away while the mark-ready window needs at least ${l}s - XMR confirmations alone take minutes`};if(d!==null&&c-a<d)return{ok:!1,checked:!0,blocks:!0,kind:"claim-window-too-short",readyBy:a,t1:c,minClaimWindowSec:d,reason:`the claim window is ${Math.round(c-a)}s while at least ${d}s is needed to take the funds before the refund opens`};let u=ve(s);return u!==null&&c-i>u?{ok:!1,checked:!0,blocks:!0,kind:"deadline-too-far",readyBy:a,t1:c,nowSec:i,maxDeadlineSec:u,reason:`the order's deadline is ${Math.round(c-i)}s (${Math.round((c-i)/3600)}h) away while at most ${u}s (${Math.round(u/3600)}h) is allowed: a deposit locked that long could not be refunded until t1`}:{ok:!0,checked:!0,blocks:!1,kind:"deadlines-ok",readyBy:a,t1:c,nowSec:i,reason:`ready in ${Math.round(a-i)}s, claim window ${Math.round(c-a)}s`}}function Ei({status:e=null,error:t=null,address:n=null}={}){let r=n?" the escrow at "+n:" the escrow";return t?{ok:!1,checked:!1,blocks:!0,kind:"state-unchecked",error:String(t),reason:`the state of${r} could not be read (${String(t)}), so it is unknown whether this order already exists - signing is blocked`}:e?e.isClaimed?{ok:!1,checked:!0,blocks:!0,kind:"already-claimed",status:e,address:n||null,reason:`${r} is already claimed: the order is settled, a new signature would create a second order`}:e.isRefunded?{ok:!1,checked:!0,blocks:!0,kind:"already-refunded",status:e,address:n||null,reason:`${r} was already refunded: the order is closed, a new signature would create a second order`}:e.isFunded?{ok:!1,checked:!0,blocks:!0,kind:"already-funded",status:e,address:n||null,reason:`${r} is already funded: the contract refuses a second funding (AlreadyFunded) - top up that order instead of signing a new one`}:{ok:!0,checked:!0,blocks:!1,kind:"new",status:e,address:n||null,reason:`${r} exists but holds nothing: this is a new order`}:{ok:!0,checked:!0,blocks:!1,kind:"new",address:n||null,reason:n?`no escrow exists at ${n} yet: this is a new order`:"no escrow exists yet: this is a new order"}}function j0({tokenIsNative:e=!1,allowanceWei:t=null,amountWei:n=null,consent:r=!1,symbol:o=null,decimals:s=18}={}){if(e)return{ok:!0,checked:!0,blocks:!1,kind:"not-needed",reason:"the payment is the network's own coin: no ERC-20 approval and no pool are involved"};let i=yn(n),a=yn(t);return r!==!0?{ok:!1,checked:!1,blocks:!0,kind:"consent-missing",needWei:i===null?null:i.toString(),reason:`swapping ${o||"the token"} needs an ERC-20 approval for you to sign, and no consent was given for it`}:a===null?{ok:!1,checked:!1,blocks:!0,kind:"allowance-unchecked",reason:`the existing allowance for ${o||"the token"} was not read, so it is unknown whether the approval is needed - signing is blocked`}:i===null||i<=0n?{ok:!1,checked:!1,blocks:!1,kind:"amount-unstated",reason:"the amount to swap is not known, so the allowance cannot be checked against it"}:a<i?{ok:!1,checked:!0,blocks:!0,kind:"allowance-short",allowanceWei:a.toString(),needWei:i.toString(),reason:`the approved amount is ${De(a,s)} ${o||""} but the swap spends ${De(i,s)} ${o||""}: the approval must be raised first`}:{ok:!0,checked:!0,blocks:!1,kind:"allowed",allowanceWei:a.toString(),needWei:i.toString(),reason:`the approved amount ${De(a,s)} ${o||""} covers the swap of ${De(i,s)} ${o||""}`}}function $0({walletChainId:e=null,selectedChainId:t=null,settlementChainId:n=null,selectedChainName:r=null}={}){let o=ve(e),s=ve(t),i=ve(n);return o===null?{ok:!1,checked:!1,blocks:!0,kind:"wallet-unknown",reason:"the wallet's network is unknown, so balances and the funding transaction have no network - signing is blocked"}:s===null?{ok:!1,checked:!1,blocks:!0,kind:"network-unknown",reason:"the page's settlement network is unknown, so it cannot be compared with the wallet's - signing is blocked"}:o!==s?{ok:!1,checked:!0,blocks:!0,kind:"wallet-network",walletChainId:o,selectedChainId:s,reason:`the wallet is on chain ${o} while this page settles on chain ${s}${r?" ("+r+")":""}: balances and the funding transaction would come from another network`}:i!==null&&i!==s?{ok:!1,checked:!0,blocks:!0,kind:"settlement-network",walletChainId:o,selectedChainId:s,settlementChainId:i,reason:`the escrow contract sits on chain ${i} while the page is set to chain ${s}: the money would go to a network where this order's escrow does not exist`}:{ok:!0,checked:!0,blocks:!1,kind:"network-match",chainId:s,reason:`the wallet and the page agree on chain ${s}${r?" ("+r+")":""}`}}function X0({standIn:e=!1,liveChain:t=!1,network:n=null,chainId:r=null}={}){let o=(i,a,c)=>({ok:i,checked:!0,blocks:!i,kind:a,words:c,reason:c}),s=(n||"this network")+(r==null?"":" (chainId "+r+")");return e?t?o(!1,"standin-on-production",`${s} is a live network and the counterparty is a local stand-in: the proof would be checked against itself, so the signature stays locked until a real provider answers`):o(!0,"standin-on-testnet",`demo mode: the counterparty is a local stand-in and ${s} is a testnet (not a live network), the proof proves nothing by itself`):o(!0,"real-provider","counterparty is a real provider: the proof is checked against it")}function Si({role:e=null,what:t=null,point:n=null,onchainPoint:r=null,commit:o=null,onchainCommit:s=null,readError:i=null}={}){let a=t||(e?"the "+e+" point":"the point");if(i)return{ok:!1,checked:!1,blocks:!0,kind:"points-unchecked",reason:`${a} of the live escrow could not be read (${String(i)}): whether the order holds the points that DLEQ proved is unknown - signing is blocked`};let c=!1;if(Fe(n)){if(c=!0,!Fe(r))return{ok:!1,checked:!1,blocks:!0,kind:"points-unchecked",reason:`the live escrow did not return ${a}: the order may hold different points than the proof proved - signing is blocked`};if(Fe(n)!==Fe(r))return{ok:!1,checked:!0,blocks:!0,kind:"point-mismatch",reason:`${a} in the escrow (0x${Fe(r)}) is NOT the point DLEQ proved (0x${Fe(n)}): the Monero address would be assembled from other halves and the XMR could not be swept after claim`}}if(Fe(o)){if(c=!0,!Fe(s))return{ok:!1,checked:!1,blocks:!0,kind:"points-unchecked",reason:`the live escrow did not return ${a}: the order may hold a different half than we do - signing is blocked`};if(Fe(o)!==Fe(s))return{ok:!1,checked:!0,blocks:!0,kind:"commit-mismatch",reason:`${a} in the escrow (0x${Fe(s)}) is NOT the one we hold (0x${Fe(o)}): the reveal would not match the order`}}return c?{ok:!0,checked:!0,blocks:!1,kind:"points-match",reason:`${a} in the escrow matches what we hold${Fe(n)&&Fe(o)?" (point and commitment)":""}`}:{ok:!1,checked:!1,blocks:!0,kind:"points-unchecked",reason:`nothing to compare for ${a}: neither a point nor a commitment was recorded - signing is blocked`}}function V0({slots:e=null,expect:t=null,readError:n=null}={}){if(n||!e)return{ok:!1,checked:!1,blocks:!0,kind:"slots-unchecked",reason:`the live escrow slots could not be read (${String(n||"no answer")}): whether the order holds the points and halves we assembled is unknown - signing is blocked`};let r=[["edPointLocker","the locker spend point","point"],["edPointClaimer","the claimer spend point","point"],["edViewPointLocker","the locker view point","point"],["commitHalfLocker","the commitment of the locker half","commit"],["commitHalfClaimer","the commitment of the claimer half","commit"]],o=[],s=[];for(let[i,a,c]of r){if(!Fe(t&&t[i]))continue;if(!Fe(e[i])){s.push(a);continue}let l=Si(c==="point"?{what:a,point:t[i],onchainPoint:e[i]}:{what:a,commit:t[i],onchainCommit:e[i]});if(l.blocks)return{...l,fields:o.concat([i])};o.push(i)}return o.length?s.length?{ok:!1,checked:!0,blocks:!0,kind:"slots-unchecked",reason:`the live escrow did not return ${s.join(", ")}: the order may differ from what was proved - signing is blocked`}:{ok:!0,checked:!0,blocks:!1,kind:"slots-match",fields:o,reason:`the live escrow holds exactly what we assembled: ${o.join(", ")}`}:{ok:!1,checked:!1,blocks:!0,kind:"slots-unchecked",reason:"nothing to compare: the app recorded neither a point nor a commitment for this order - signing is blocked"}}function K0(e=[]){let t=(Array.isArray(e)?e:[]).filter(o=>o&&typeof o=="object"),n=t.filter(o=>o.blocks===!0),r=t.filter(o=>o.blocks!==!0&&o.checked===!1);return{ok:n.length===0,blocked:n.length>0,kind:n.length?n[0].kind:t.length?t[t.length-1].kind:"nothing-to-check",reason:n.length?n.map(o=>o.reason).filter(Boolean).join("; "):null,blockedBy:n.map(o=>o.kind),unchecked:r.map(o=>o.kind),checks:t}}function Y0(e){if(!e||!e.blocked)return null;let t=(e.checks||[]).find(r=>r.blocks===!0)||null;return"Signing is blocked: "+(t&&t.reason?t.reason:"the order cannot be checked")+" ("+e.kind+")"}var yn,et,ve,De,Fe,Ai=Q(()=>{yn=e=>{if(e==null||e==="")return null;try{let t=BigInt(e);return t>=0n?t:null}catch{return null}},et=e=>String(Number(Number(e).toFixed(4))),ve=e=>e==null||e===""?null:Number.isFinite(Number(e))?Number(e):null,De=(e,t=18)=>{let n=Number(e)/10**Number(t);return Number.isFinite(n)?String(Number(n.toFixed(6))):String(e)};Fe=e=>e==null?"":String(e).replace(/^0x/i,"").toLowerCase()});function yo(e=16){let t=new Uint8Array(e);return crypto.getRandomValues(t),Nt(t)}function Nt(e){let t=e instanceof Uint8Array?e:Uint8Array.from(e||[]);return Array.from(t,n=>n.toString(16).padStart(2,"0")).join("")}function Ni(){return yo(8)}var bo=Q(()=>{});var Mt={};ge(Mt,{PREFIX_BY_NETWORK:()=>bd,addressForNetwork:()=>J0,addressFromKeys:()=>bn,addressPayload:()=>Ed,checkAddress:()=>Ii,decodeMoneroBase58:()=>Sd,encodeMoneroBase58:()=>vd,formatCheck:()=>Bi,isStagenetShaped:()=>Z0,networkFromShape:()=>jn,prefixFor:()=>gd});function gd(e,t="primary"){let n=bd[e];if(!n)throw new Error("Unknown network: "+e);let r=n[t];if(r===void 0)throw new Error("Unknown address kind: "+t);return r}function Bi(e){let t=String(e||"").trim();return![95,106].includes(t.length)||!/^[1-9A-HJ-NP-Za-km-z]+$/.test(t)?!1:["4","5","7","8","9","A","B"].includes(t[0])}function jn(e){let t=String(e||"").trim();return Bi(t)?t[0]==="4"||t[0]==="8"?"mainnet":t[0]==="5"||t[0]==="7"?"stagenet":["9","A","B"].includes(t[0])?"testnet":null:null}function Z0(e){return jn(e)==="stagenet"}async function xd(){if(go)return go;if(hd)return null;try{let e=await import("/assets/vendors/monero/monero-js-browser.js?v=05c682ea");return go=e.default||e,go}catch{return hd=!0,null}}function wd(e){let t=0n;for(let r of e)t=t<<8n|BigInt(r);let n="";for(;t>0n;)n=kd[Number(t%58n)]+n,t/=58n;return n}function yd(e,t){let n=0n;for(let o of e){let s=Q0.get(o);if(s===void 0)throw new Error("Invalid Monero base58 character: "+o);n=n*58n+s}let r=new Uint8Array(t);for(let o=t-1;o>=0;o--)r[o]=Number(n&0xffn),n>>=8n;if(n!==0n)throw new Error("Base58 block does not fit in "+t+" bytes");return r}function Sd(e){let t=String(e),n=t.length,r=n%11,o=r===0?11:r,s=G0[o];if(!s)throw new Error("Invalid Monero base58 length");let i=[],a=n-o;for(let d=0;d<a;d+=11)i.push(yd(t.slice(d,d+11),8));i.push(yd(t.slice(a),s));let c=new Uint8Array(i.reduce((d,u)=>d+u.length,0)),l=0;for(let d of i)c.set(d,l),l+=d.length;return c}function vd(e){let t=Array.from(e),n=t.length,r=n%8,o=r===0?8:r,s=n-o,i="";for(let c=0;c<s;c+=8){let l=wd(t.slice(c,c+8));i+="1".repeat(Math.max(0,md[8]-l.length))+l}let a=wd(t.slice(s));return i+="1".repeat(Math.max(0,md[o]-a.length))+a,i}function Ed({network:e,kind:t="primary",spendPub:n,viewPub:r,paymentId:o}){let s=gd(e,t),i=Ti(n,32,"public spend key"),a=Ti(r,32,"public view key"),c=[s,...i,...a];if(t==="integrated"){let l=Ti(o,8,"payment id");c.push(...l)}return Uint8Array.from(c)}function Ti(e,t,n){let r=String(e||"").trim();if(!new RegExp("^[0-9a-fA-F]{"+t*2+"}$").test(r))throw new Error("Bad "+n+": expected "+t*2+" hex characters");let o=new Uint8Array(t);for(let s=0;s<t;s++)o[s]=parseInt(r.slice(s*2,s*2+2),16);return o}function bn({network:e,kind:t="primary",spendPub:n,viewPub:r,paymentId:o},s){if(!s?.keccak256)throw new Error("addressFromKeys needs { keccak256 }");let i=Ed({network:e,kind:t,spendPub:n,viewPub:r,paymentId:o}),a=Uint8Array.from(s.keccak256(s.Buffer?s.Buffer.from(i):i)),c=new Uint8Array(i.length+4);return c.set(i,0),c.set(a.slice(0,4),i.length),vd(c)}async function Ii(e,t={}){let n=String(e||"").trim();if(!Bi(n))return{ok:!1,reason:"Not a Monero address (expected 95 or 106 base58 characters)"};let r=jn(n);if(t.expectNetwork&&r&&r!==t.expectNetwork)return{ok:!1,reason:`This is a ${r} address, but the swap runs on ${t.expectNetwork}`};let o=await xd();if(!o)return{ok:!0,verified:!1,network:r,reason:"Format looks valid (checksum check unavailable: monero-js bundle is not built)"};try{let s=Sd(n),i=s.length-4;if(i<65)throw new Error("Address is too short");let a=s.slice(0,i),c=s.slice(i),l=Uint8Array.from(o.keccak256(o.Buffer.from(a)));if(!(c.length===4&&c.every((p,h)=>p===l[h])))return{ok:!1,reason:"Checksum mismatch: the address has a typo, is corrupted, or is a demo mock address (mock addresses have no checksum)"};let u=a[0],f=z0[u]||{network:"unknown",kind:"unknown"};return f.network==="unknown"?{ok:!1,reason:`Unsupported address prefix ${u}`}:t.expectNetwork&&f.network!==t.expectNetwork?{ok:!1,reason:`This is a ${f.network} address, but the swap runs on ${t.expectNetwork}`}:{ok:!0,verified:!0,network:f.network,kind:f.kind,bytes:s.length}}catch(s){return{ok:!1,reason:"Address decode failed: "+s.message}}}async function J0({network:e,kind:t="primary",spendPub:n,viewPub:r}){let o=await xd();if(!o)throw new Error("monero-js bundle is not available");return bn({network:e,kind:t,spendPub:n,viewPub:r},{keccak256:o.keccak256,Buffer:o.Buffer})}var md,G0,z0,bd,go,hd,kd,Q0,gn=Q(()=>{md={1:2,2:3,3:5,4:6,5:7,6:9,7:10,8:11},G0={2:1,3:2,5:3,6:4,7:5,9:6,10:7,11:8},z0={18:{network:"mainnet",kind:"primary"},19:{network:"mainnet",kind:"integrated"},42:{network:"mainnet",kind:"subaddress"},24:{network:"stagenet",kind:"primary"},25:{network:"stagenet",kind:"integrated"},36:{network:"stagenet",kind:"subaddress"},53:{network:"testnet",kind:"primary"},54:{network:"testnet",kind:"integrated"},63:{network:"testnet",kind:"subaddress"}},bd={mainnet:{primary:18,integrated:19,subaddress:42},stagenet:{primary:24,integrated:25,subaddress:36},testnet:{primary:53,integrated:54,subaddress:63}};go=null,hd=!1;kd="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Q0=(()=>{let e=new Map;return[...kd].forEach((t,n)=>e.set(t,BigInt(n))),e})()});async function Ad(){if(xo)return xo;if(ko)throw new Error(ko);try{let e=await import("/assets/vendors/monero/monero-js-browser.js?v=05c682ea");return xo=e.default||e,xo}catch(e){throw ko="monero-js unavailable: "+e.message+" (run npm run build:vendor; for CSP see the deploy notes)",new Error(ko)}}async function q0({mnemonic:e,network:t=fe.networkType}={}){let n=await Ad();await n.wallet.initEcc();let r;if(e){if(!n.mnemonic.isValid(e))throw new Error("the mnemonic failed its checksum check (file or form corrupted?)");r=String(e).trim()}else r=n.mnemonic.generateWithChecksum();let o=n.mnemonic.toSeed(r),s=n.wallet.fromSeed(o),i=t||"mainnet",a={keccak256:n.keccak256,Buffer:n.Buffer},c=Nt(s.publicSpendKey),l=Nt(s.publicViewKey),d=s.subaddress(1,0),u=bn({network:i,kind:"primary",spendPub:c,viewPub:l},a),f=bn({network:i,kind:"subaddress",spendPub:Nt(d.publicSpendKey),viewPub:Nt(d.publicViewKey)},a);return{source:"monero-js",library:"ebellocchia/monero-js (MIT)",network:i,mnemonic:r,mnemonicWords:r.split(" ").length,seedHex:Nt(o),privateSpendKey:Nt(s.privateSpendKey),privateViewKey:Nt(s.privateViewKey),publicSpendKey:c,publicViewKey:l,address:u,subaddress:f,addressMainnet:s.primaryAddress().encode(),createdAt:Date.now()}}async function So({network:e=fe.networkType,seed:t}={}){return q0({mnemonic:t,network:e})}async function Nd(){try{return await(await Ad()).wallet.initEcc(),{available:!0,info:"mnemonic + keys + addresses ("+fe.networkType+")"}}catch(e){return{available:!1,reason:e.message}}}function Td(e=fe.networkType){return{mainnet:"Monero mainnet",stagenet:"Monero stagenet",testnet:"Monero testnet"}[e]||e}var xo,ko,Oi=Q(()=>{qe();bo();gn();xo=null,ko=null});var Pe={};ge(Pe,{ALG_NONE:()=>Eo,ENVELOPE_VERSION:()=>Od,FILE_MAGIC:()=>Fi,PAYLOAD_VERSION:()=>ny,UNENCRYPTED_ENVELOPE_VERSION:()=>Di,buildPayload:()=>sy,createRecoveryFile:()=>ay,decryptFile:()=>Hi,encryptPayload:()=>Rd,envelopeAad:()=>Pi,isEncrypted:()=>iy,recoveryFileName:()=>cy,scanStartHeight:()=>oy,validatePayload:()=>Ao});function Ri(e){return btoa(String.fromCharCode(...new Uint8Array(e)))}function Ci(e){return Uint8Array.from(atob(e),t=>t.charCodeAt(0))}function Pi(e){let t=e.meta||{};return JSON.stringify([e.v,e.alg,e.iter,e.salt,e.iv,t.id??null,t.side??null,t.createdAt??null,t.termsHash??null])}async function _d(e,t,n){let r=await crypto.subtle.importKey("raw",vo.encode(e),_i.name,!1,["deriveKey"]);return crypto.subtle.deriveKey({name:_i.name,salt:t,iterations:n,hash:_i.hash},r,{name:Ut.name,length:Ut.keyBits},!1,["encrypt","decrypt"])}function oy({escrowBirthHeight:e=null,serverRestoreHeight:t=null,nodeHeight:n=null}={}){let r=[e,t,n].map(o=>Number(o)).filter(o=>Number.isFinite(o)&&o>0);return r.length===0?null:Math.max(1,Math.min(...r)-1)}function sy({swap:e,swapWallet:t,escrow:n,receiveAddress:r,restoreHeight:o=null}){return{magic:Fi,version:t&&t.spendHalf?3:2,swapId:e.id,termsHash:e.escrow&&e.escrow.termsHash||null,side:e.side,network:e.network,moneroNetwork:e.moneroNetwork,createdAt:e.createdAt,pay:{token:e.payToken,amount:e.payAmount},receive:{token:"XMR",amount:e.xmrAmount,address:r},rate:e.rate,maker:e.maker,quote:{signature:e.quoteSignature,nonce:e.quoteSignature?e.quoteSignature.slice(-8):null},escrow:n||e.escrow||null,moneroWallet:t?t.spendHalf?{source:"halves",library:t.library||null,network:t.network,address:t.address,subaddress:t.subaddress||null,spendHalf:t.spendHalf,viewHalf:t.viewHalf,otherSpendPoint:t.otherSpendPoint,otherViewPoint:t.otherViewPoint,otherViewHalf:t.otherViewHalf||null,escrowAddress:n&&n.address||e.escrow&&e.escrow.address||null,restoreHeight:Number.isFinite(o)?o:null}:{source:t.source,library:t.library||null,network:t.network,address:t.address,subaddress:t.subaddress||null,mnemonic:t.mnemonic||null,publicSpendKey:t.publicSpendKey,publicViewKey:t.publicViewKey,restoreHeight:Number.isFinite(o)?o:null}:null,deadlines:e.timeline,recoveryClient:"any standalone client implementing the Ninsei swap protocol (see litepaper \xA75.3)"}}function Ao(e){let t=s=>{throw new Error("Corrupt recovery file: "+s)};(!e||typeof e!="object")&&t("the content is not an object"),e.magic!==Fi&&t("foreign file (no Ninsei mark)"),Bd.includes(e.version)||t(`payload version ${e.version} is not supported (we support ${Bd.join(", ")})`),e.swapId||t("no deal id");let n=e.moneroWallet;if((!n||typeof n!="object")&&t("no Monero wallet data"),e.version>=3){for(let s of["spendHalf","viewHalf","otherSpendPoint","otherViewPoint","otherViewHalf"])n[s]||t("the halves file has no field "+s);n.mnemonic&&t("the halves file contains a mnemonic - the wallet was not built by the scheme")}else{n.mnemonic||t("no mnemonic - there is nothing that can restore the wallet");let s=String(n.mnemonic).trim().split(/\s+/).length;s!==25&&s!==13&&s!==24&&t(`the mnemonic does not look like a Monero phrase (${s} words)`)}n.address||t("no wallet address - nothing to check the restored one against");let r=n.network||e.moneroNetwork;ry.includes(r)||t(`unknown network "${r}"`),n.network&&e.moneroNetwork&&n.network!==e.moneroNetwork&&t(`the wallet network (${n.network}) does not match the deal network (${e.moneroNetwork})`);let o=[];return(!Number.isFinite(n.restoreHeight)||n.restoreHeight<=0)&&o.push("no restore height (restoreHeight): the wallet will scan history from zero, which is tens of hours - set the XMR lock height manually"),e.version===1&&o.push("an old-format file (v1): its keys were separate fields, the spend key is taken from the mnemonic"),{warnings:o}}async function Rd(e,t){let n=()=>({id:e.swapId,side:e.side,createdAt:e.createdAt,termsHash:e.termsHash||null});if(t==="")return{v:Di,alg:Eo,meta:n(),payload:e};if(typeof t!="string"||t.length<12)throw new Error("Passphrase must be at least 12 characters");let r=crypto.getRandomValues(new Uint8Array(16)),o=crypto.getRandomValues(new Uint8Array(12)),s=await _d(t,r,6e5),i={id:e.swapId,side:e.side,createdAt:e.createdAt,termsHash:e.termsHash||null},a={v:Od,alg:Id,iter:6e5,salt:Ri(r),iv:Ri(o)},c=await crypto.subtle.encrypt({name:Ut.name,iv:o,tagLength:Ut.tagLength,additionalData:vo.encode(Pi({...a,meta:i}))},s,vo.encode(JSON.stringify(e,Cd)));return{...a,ciphertext:Ri(c),meta:i}}function iy(e){return!!(e&&typeof e=="object"&&e.alg!==Eo)}async function Hi(e,t){if(!e||typeof e!="object")throw new Error("Not a recovery file (expecting JSON)");if(!ty.includes(e.v))throw new Error(`Unsupported recovery file version: ${e.v}`);if(e.v===Di){if(e.alg!==Eo)throw new Error(`Unknown algorithm: ${e.alg}`);if(!e.payload||typeof e.payload!="object")throw new Error('Recovery file is missing "payload"');return e.payload}if(e.alg!==Id)throw new Error(`Unknown algorithm: ${e.alg}`);for(let d of["salt","iv","ciphertext"])if(typeof e[d]!="string"||!e[d])throw new Error(`Recovery file is missing "${d}"`);let n=Number(e.iter);if(!Number.isInteger(n)||n<1e5)throw new Error(`Recovery file declares too few PBKDF2 iterations: ${e.iter} (minimum 100000)`);if(n>1e7)throw new Error(`Recovery file declares too many PBKDF2 iterations: ${n} (maximum 10000000)`);let r=Ci(e.salt),o=Ci(e.iv),s=await _d(t,r,n),i=e.v>=2?vo.encode(Pi(e)):void 0,a=i?{name:Ut.name,iv:o,tagLength:Ut.tagLength,additionalData:i}:{name:Ut.name,iv:o,tagLength:Ut.tagLength},c;try{c=await crypto.subtle.decrypt(a,s,Ci(e.ciphertext))}catch{throw new Error("Could not decrypt the file: wrong password or the file was altered")}let l;try{l=JSON.parse(ey.decode(c))}catch{throw new Error("It decrypted, but the content is not JSON - the file is corrupt")}if(Ao(l),e.meta&&e.meta.id!=null&&l.swapId!=null&&String(e.meta.id)!==String(l.swapId))throw new Error("The deal id in the header does not match the file content: the file was altered");return l}async function ay(e,t){let n=await Rd(e,t);return JSON.stringify(n,Cd,2)}function cy(e){let t=String(e||"").trim();return`ninsei-${(t&&t!=="pending"?t:"pending").toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}.json.enc`}var Id,Ut,_i,vo,ey,Fi,Od,Di,Eo,ty,ny,Bd,ry,Cd,Li=Q(()=>{Id="AES-GCM-256/PBKDF2-SHA256",Ut=Object.freeze({name:"AES-GCM",tagLength:128,keyBits:256}),_i=Object.freeze({name:"PBKDF2",hash:"SHA-256"}),vo=new TextEncoder,ey=new TextDecoder,Fi="NINSEI-SWAP-RECOVERY",Od=2,Di=3,Eo="NONE",ty=[1,2,3],ny=3,Bd=[1,2,3],ry=["mainnet","stagenet","testnet","fakechain"];Cd=(e,t)=>typeof t=="bigint"?"0x"+t.toString(16):t});function No({halves:e,addressFromKeys:t,deps:n,ownSpendHalf:r,ownViewHalf:o,otherSpendPoint:s,otherViewPoint:i,network:a}){if(!e||!t)throw new Error("halves and addressFromKeys are required");for(let[p,h]of Object.entries({ownSpendHalf:r,ownViewHalf:o,otherSpendPoint:s,otherViewPoint:i}))if(h==null||h==="")throw new Error("not set: "+p);let c=e.publicHalves(r).ed,l=e.publicHalves(o).ed,d=e.combinePublic(c,s),u=e.combinePublic(l,i);return{address:t({network:a,kind:"primary",spendPub:d,viewPub:u},n),spendPub:d,viewPub:u,ownSpendPub:c,ownViewPub:l}}function Fd({halves:e,ownViewHalf:t,otherViewHalf:n}){return"0x"+e.combineHalves(t,BigInt(n)).toString(16).padStart(64,"0")}var Mi=Q(()=>{});var Tt={};ge(Tt,{createHalves:()=>Ui});function Ui({ed25519:e,secp256k1:t,keccak256:n,randomBytes:r}){for(let[T,B]of[["ed25519",e],["secp256k1",t],["keccak256",n],["randomBytes",r]])if(!B)throw new Error("createHalves: not passed "+T);let o=e.Point.Fn.ORDER,s=t.Point.Fn.ORDER,i=o<s?o:s;function a(){for(let T=0;T<256;T++){let B=r(32),E=0n;for(let k of B)E=E<<8n|BigInt(k);if(E>0n&&E<i)return E}throw new Error("newHalf: could not get a scalar in 256 attempts")}let c="ninsei-order-half-v1",l="ninsei-order-view-v1";function d(T,B,E=c){if(!T||T.length<16)throw new Error("halfFromSeed: secret shorter than 16 bytes");if(!B)throw new Error("halfFromSeed: order binding not set");let k=new TextEncoder().encode(E+"|"+String(B)+"|");for(let m=0;m<256;m++){let A=new Uint8Array(k.length+T.length+4);A.set(k,0),A.set(T,k.length),A[k.length+T.length]=m>>>24&255,A[k.length+T.length+1]=m>>>16&255,A[k.length+T.length+2]=m>>>8&255,A[k.length+T.length+3]=m&255;let x=n(A),N=0n;for(let D of x)N=N<<8n|BigInt(D);if(N>0n&&N<i)return N}throw new Error("halfFromSeed: could not get a scalar in 256 attempts")}function u(T,B){return T.fromHex(B.startsWith("0x")?B.slice(2):B)}function f(T){if(typeof T=="bigint")return T;if(typeof T=="string"){let B=T.trim().replace(/^0x/,"");if(!/^[0-9a-fA-F]{1,64}$/.test(B))throw new Error("half does not look like a number: "+T.slice(0,12));return BigInt("0x"+B)}if(typeof T=="number")return BigInt(T);throw new Error("half of unknown type: "+typeof T)}function p(T){return T.toHex()}function h(T){return{ed:p(e.Point.BASE.multiply(f(T))),secp:p(t.Point.BASE.multiply(f(T)))}}function w(T,B){return(f(T)+f(B))%o}function b(T,B){return p(u(e.Point,T).add(u(e.Point,B)))}return{LIMIT:i,ED_ORDER:o,SECP_ORDER:s,HALF_DOMAIN:c,VIEW_HALF_DOMAIN:l,newHalf:a,halfFromSeed:d,publicHalves:h,combineHalves:w,combinePublic:b}}var To=Q(()=>{});var Io={};ge(Io,{assertNoSecretsInShare:()=>Hd,restoreFromFile:()=>ly,restoreFromHalves:()=>Pd,restoreWalletFromPayload:()=>Dd,watchOnlyShareFromWallet:()=>Bo});async function Dd(e,t={}){let{warnings:n}=Ao(e),r=e.moneroWallet,o=r.network||e.moneroNetwork;if(e.version>=3)return await Pd(e,n,t);let s=await So({seed:r.mnemonic,network:o});if(s.address!==r.address)throw new Error("the address from the file does not match the one derived from the mnemonic: the file is corrupted or altered");for(let[i,a]of[["publicSpendKey",s.publicSpendKey],["publicViewKey",s.publicViewKey]])if(r[i]&&r[i]!==a)throw new Error(`key ${i} from the file does not match the one derived from the mnemonic: the file was altered`);return{wallet:s,payload:e,restoreHeight:Number.isFinite(r.restoreHeight)&&r.restoreHeight>0?r.restoreHeight:0,warnings:n}}async function Pd(e,t=[],n={}){let r=e.moneroWallet,o=r.network||e.moneroNetwork,s=n.halves&&n.addressFromKeys?{halves:n.halves,addressFromKeys:n.addressFromKeys,keccak256:n.keccak256}:await(async()=>{let l=await import("/assets/vendors/atomic/atomic-browser.js?v=2c038c56"),{createHalves:d}=await Promise.resolve().then(()=>(To(),Tt)),{addressFromKeys:u}=await Promise.resolve().then(()=>(gn(),Mt));return{halves:d({ed25519:l.ed25519,secp256k1:l.secp256k1,keccak256:l.keccak256,randomBytes:l.randomBytes}),addressFromKeys:u,keccak256:l.keccak256}})();if(!s.keccak256)throw new Error("no keccak256: the address cannot be checked without it");let i=No({halves:s.halves,addressFromKeys:s.addressFromKeys,deps:{keccak256:s.keccak256},ownSpendHalf:r.spendHalf,ownViewHalf:r.viewHalf,otherSpendPoint:r.otherSpendPoint,otherViewPoint:r.otherViewPoint,network:o});if(i.address!==r.address)throw new Error("the address from the file does not match the one built from the halves and counterparty points: the file is corrupted or altered");let a=Fd({halves:s.halves,ownViewHalf:r.viewHalf,otherViewHalf:r.otherViewHalf});return{wallet:{address:i.address,network:o,spendPub:i.spendPub,viewPub:i.viewPub,viewSeedHex:a,spendHalf:r.spendHalf,viewHalf:r.viewHalf,otherSpendPoint:r.otherSpendPoint,otherViewPoint:r.otherViewPoint,otherViewHalf:r.otherViewHalf,source:"halves",spendable:!1},payload:e,restoreHeight:Number.isFinite(r.restoreHeight)&&r.restoreHeight>0?r.restoreHeight:0,warnings:[...t,"this file describes the HALVES scheme: the view key sees arrivals, but spending needs the counterparty half, which is revealed on chain at the ETH claim"]}}async function ly(e,t,n={}){return Dd(await Hi(e,t),n)}function Hd(e,t){for(let r of["mnemonic","seed","seedHex","privateSpendKey","spendKey","subaddressKeys","spendHalf","viewHalf"])if(Object.hasOwn(e,r))throw new Error("the watch-only share must not contain "+r);let n=JSON.stringify(e);for(let[r,o]of[["spend key",t.privateSpendKey],["mnemonic",t.mnemonic],["seed",t.seedHex],["spend key half",t.spendHalf],["view key half",t.viewHalf]])if(o&&n.includes(o))throw new Error(`the watch-only share leaked a secret (${r})`);return e}function Bo({swapId:e=null,wallet:t,restoreHeight:n=null}={}){if(!t||!t.address||!t.privateViewKey)throw new Error("a watch-only wallet needs an address and a private view key");return Hd({swapId:e||null,network:t.network,address:t.address,privateViewKey:t.privateViewKey,restoreHeight:Number.isFinite(n)?n:null},t)}var Wi=Q(()=>{Oi();Li();Mi()});var Wt={};ge(Wt,{exportState:()=>my,loadState:()=>Ee,memoryStorage:()=>Ld,reset:()=>py,saveState:()=>Ye,setStorage:()=>uy,storage:()=>ji,update:()=>fy});function Ld(e=new Map){return{get:t=>e.has(t)?e.get(t):null,set:(t,n)=>e.set(t,String(n)),remove:t=>e.delete(t)}}function uy(e){if(!(e&&typeof e.get=="function"&&typeof e.set=="function"&&typeof e.remove=="function"))throw new Error("storage must support get/set/remove");return $n=e,$n}function Ee(){try{let e=$n.get(Er.storageKey);if(!e)return structuredClone(Oo);let t=JSON.parse(e);return{...structuredClone(Oo),...t,settings:{...Oo.settings,...t.settings||{}}}}catch{return structuredClone(Oo)}}function Ye(e){try{$n.set(Er.storageKey,JSON.stringify(e,Md))}catch(t){console.warn("state save failed",t)}return e}function fy(e){let t=Ee(),n=e(t)||t;return Ye(n),n}function py(){$n.remove(Er.storageKey)}function my(){return JSON.stringify(Ee(),Md,2)}var Oo,dy,$n,ji,Md,_o=Q(()=>{qe();Oo={version:1,settings:{speed:At.defaultSpeed,scenario:At.defaultScenario,chainMode:At.defaultChainMode,chain:At.defaultChain,payToken:""},wallet:{connected:!1,address:null,balances:{}},swaps:{},activeSwapId:null};dy=e=>{let t=typeof globalThis<"u"?globalThis[e]:void 0;return!t||typeof t.getItem!="function"?null:{get:n=>t.getItem(n),set:(n,r)=>t.setItem(n,String(r)),remove:n=>t.removeItem(n)}},$n=dy("localStorage")||Ld();ji=()=>$n;Md=(e,t)=>typeof t=="bigint"?"0x"+t.toString(16):t});function $i(e){return(e&&(e.code||e.data&&e.data.originalError&&e.data.originalError.code))===4001?!0:/rejected|denied|cancell?ed|closed by user/i.test(String(e&&e.message||e||""))}function wy(e){return e?e.isMetaMask?"MetaMask":e.isRabby?"Rabby":e.isCoinbaseWallet?"Coinbase Wallet":e.isBraveWallet?"Brave Wallet":e.isFrame?"Frame":"Browser wallet":null}function Nr({win:e=globalThis,timeoutMs:t=250}={}){let n=[],r=new Set,o=i=>{let a=i.rdns||i.uuid||i.name;r.has(a)||(r.add(a),n.push(i))},s=i=>{let a=i&&i.detail;!a||!a.provider||!a.info||o({uuid:a.info.uuid||null,name:a.info.name||"Browser wallet",icon:a.info.icon||null,rdns:a.info.rdns||null,provider:a.provider,source:"eip6963"})};return e&&typeof e.addEventListener=="function"&&(e.addEventListener(Ud,s),typeof e.dispatchEvent=="function"&&e.dispatchEvent(new Event(hy))),new Promise(i=>{let a=()=>{e&&typeof e.removeEventListener=="function"&&e.removeEventListener(Ud,s);let c=e&&e.ethereum;if(!n.length&&c){let l=Array.isArray(c.providers)&&c.providers.length?c.providers:[c];for(let d of l)o({name:wy(d),icon:null,rdns:null,provider:d,source:"legacy"})}i(n)};t>0&&typeof setTimeout=="function"?setTimeout(a,t):a()})}async function Wd(e){if(!e||typeof e.request!="function")throw new Error("This wallet does not support EIP-1193 (no request)");let t=await e.request({method:"eth_requestAccounts"}),n=Array.isArray(t)?t[0]:null,r=await e.request({method:"eth_chainId"});return{address:n||null,chainId:Number(r)||null}}async function jd(e){if(!e||typeof e.request!="function")return[];try{let t=await e.request({method:"eth_accounts"});return Array.isArray(t)?t:[]}catch{return[]}}function $d(e,t="Wallet"){let n=e&&(e.code||e.data&&e.data.originalError&&e.data.originalError.code),r=String(e&&e.message||e);return n===-32002||/already pending|already processing/i.test(r)?t+": the wallet already has a pending request, so a new window did not open. Open the extension, finish or cancel that request, then try again.":/no provider|not connected|provider is disconnected|undefined is not a function/i.test(r)?t+": the extension is not responding (the browser may have unloaded it, or the page is not where it works).":/user rejected|user denied|rejected by user/i.test(r)||n===4001?t+": the request was rejected in the wallet.":t+": "+r}var Ud,hy,Xi=Q(()=>{Ud="eip6963:announceProvider",hy="eip6963:requestProvider"});function he(e,t={},n=[]){let r=document.createElement(e);for(let[s,i]of Object.entries(t||{}))i==null||i===!1||(s==="class"?r.className=i:s==="html"?r.innerHTML=i:s==="text"?r.textContent=i:s==="style"?typeof i=="string"?r.style.cssText=i:Object.assign(r.style,i):s.startsWith("on")&&typeof i=="function"?r.addEventListener(s.slice(2).toLowerCase(),i):r.setAttribute(s,i===!0?"":String(i)));let o=Array.isArray(n)?n:[n];for(let s of o)s==null||s===!1||r.appendChild(typeof s=="string"||typeof s=="number"?document.createTextNode(String(s)):s);return r}function Xd(e,t=""){let n=document.getElementById("arToasts");if(!n)return;let r=he("div",{class:`ar-toast ${t?"ar-toast-"+t:""}`,text:e});n.appendChild(r),setTimeout(()=>{r.style.transition="opacity .25s",r.style.opacity="0",setTimeout(()=>r.remove(),260)},5200)}function Vd(e,t="Copied"){let n=()=>Xd(t,"ok");navigator.clipboard?.writeText?navigator.clipboard.writeText(e).then(n,()=>r()):r();function r(){let o=document.createElement("textarea");o.value=e,document.body.appendChild(o),o.select();try{document.execCommand("copy"),n()}catch{Xd("Copy failed","bad")}o.remove()}}var Kd=Q(()=>{});function Yd({title:e="Connect a wallet",subtitle:t="",hint:n=""}={}){let r={},o=he("div",{class:"ar-overlay"},[he("div",{class:"ar-modal"},[he("div",{class:"ar-modal-head"},[he("div",{class:"ar-modal-title",text:e}),r.closeBtn=he("button",{class:"ar-modal-close",type:"button",title:"Close",text:"\xD7"})]),r.subtitle=he("div",{class:"ar-modal-sub",text:t}),r.choices=he("div",{class:"ar-modal-choices"}),r.qrBox=he("div",{class:"ar-modal-qr",hidden:!0},[r.qr=he("img",{alt:"WalletConnect QR code"})]),r.uri=he("code",{class:"ar-modal-uri"}),r.status=he("div",{class:"ar-modal-status"}),he("div",{class:"ar-modal-actions"},[r.copyBtn=he("button",{class:"ar-btn-ghost",type:"button",text:"Copy link"}),r.cancelBtn=he("button",{class:"ar-btn-ghost",type:"button",text:"Cancel"})]),r.hint=he("div",{class:"ar-modal-hint",text:n})])]);document.body.appendChild(o);let s={value:!1},i=null;function a(){s.value||(s.value=!0,o.remove())}function c(){s.value||(a(),i&&i())}r.closeBtn.addEventListener("click",c),r.cancelBtn.addEventListener("click",c),r.copyBtn.addEventListener("click",()=>{r.uri.textContent&&Vd(r.uri.textContent,"WalletConnect link copied")}),o.addEventListener("click",d=>{d.target===o&&c()});function l(d){r.choices.innerHTML="",r.choices.hidden=!d||!d.length;for(let u of d||[]){let f=he("button",{class:"ar-modal-choice",type:"button"},[u.icon?he("img",{class:"ar-modal-choice-icon",src:u.icon,alt:""}):he("span",{class:"ar-modal-choice-icon ar-modal-choice-icon-empty"}),he("span",{class:"ar-modal-choice-text"},[he("span",{class:"ar-modal-choice-name",text:u.name}),u.hint?he("span",{class:"ar-modal-choice-hint",text:u.hint}):null])]);f.addEventListener("click",()=>{s.value||u.onClick()}),r.choices.appendChild(f)}return r.choices}return{closed:s,setChoices:l,close:a,cancel:c,setOnCancel(d){i=d},update({qrDataUrl:d,uri:u,status:f,subtitle:p,hint:h,error:w}={}){if(s.value)return;d&&(r.qr.src=d,r.qrBox.hidden=!1),u!==void 0&&(r.uri.textContent=u||""),p!==void 0&&(r.subtitle.textContent=p||""),h!==void 0&&(r.hint.textContent=h||"");let b=w||f;b!==void 0&&(r.status.className="ar-modal-status"+(w?" ar-modal-status-error":""),r.status.textContent=b||"")}}}var Gd=Q(()=>{Kd()});function zd(e,t){return Number(e)/10**t}function yy(e){let t=String(e);return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function by(e,t=6){let n=Number(e);if(!Number.isFinite(n)||n<=0)return 0;let r=Math.floor(n*10**t);return r>0?r/10**t:Math.floor(n*1e18)/1e18}function Zd(e,t=6){let n=by(e,t);if(!Number.isFinite(n)||n<=0)return"0";let r=n>=10**-t?t:18;return yy(n.toFixed(r))}var QE,Vi=Q(()=>{QE=[[12345678900n,6,12345.6789],[108275582n,6,108.275582],[10n**18n,18,1],[1500000000000000000n,18,1.5],[55000000000000n,18,55e-6],[55000n,18,55e-15],[3120000000000000000000n,18,3120],[0n,18,0]]});var Co={};ge(Co,{CLAIM_GAS_LIMIT:()=>Ki,CLAIM_TIP_FLOOR_WEI:()=>Qd,DEFAULT_GIFT_RESERVE_BPS:()=>qd,claimGasGiftWei:()=>gy,claimMaxFeePerGasWei:()=>Ro,claimRequiredWei:()=>Jd});function Ro({baseFeeWei:e,priorityFeeWei:t=0n,minTipWei:n=Qd}={}){let r=Xn(e);if(r===null||r<=0n)return null;let o=Xn(t),s=Xn(n),i=s===null||s<0n?0n:s,a=o!==null&&o>i?o:i;return r*2n+a}function Jd({gasLimit:e=Ki,maxFeePerGasWei:t}={}){let n=Xn(e),r=Xn(t);return n===null||n<=0n||r===null||r<=0n?null:n*r}function gy({baseFeeWei:e,priorityFeeWei:t,minTipWei:n,gasLimit:r=Ki,reserveBps:o=qd}={}){let s=Ro({baseFeeWei:e,priorityFeeWei:t,minTipWei:n}),i=Jd({gasLimit:r,maxFeePerGasWei:s});if(i===null)return null;let a=Xn(o),c=a===null||a<0n?0n:a;return i+i*c/10000n}var Ki,Qd,Xn,qd,Yi=Q(()=>{Ki=200000n,Qd=0n,Xn=e=>{if(e==null||e==="")return null;try{return BigInt(typeof e=="bigint"?e:String(e))}catch{return null}};qd=10000n});function Ue(){for(let e of Qi)try{e(jt())}catch(t){console.warn("wallet listener failed",t)}}function jt(){return{...X,balances:{...X.balances}}}function nu(e){return Qi.add(e),()=>Qi.delete(e)}function ru(){return jt()}function ze(){return X.status==="connected"&&!!X.address}function $t(){return X.address}function ou(){return X.chainId}function Tr(){return J}function su(e,t){let n=Me(e),r=X.balances[`${n.chainId}:${String(t).toUpperCase()}`];return r===void 0?0:r}async function iu(){return Gi||(Gi=await import("/assets/vendors/walletconnect/wc-browser.js?v=13fe06e5")),Gi}function ky(){let e={};for(let t of bt)e[t.chainId]=t.rpcUrl;return e}function Ge(e="idle",t=null){X.status=e,X.error=t,X.kind=null,X.label=null,X.address=null,X.chainId=null,X.balances={},J=null,Ue()}function qi(e){e.on("chainChanged",t=>{X.chainId=Number(t),X.error=null,Ue(),gt()}),e.on("accountsChanged",t=>{let n=t&&t[0]||null;if(!n){de&&de.close(),Ge("idle",null);return}X.address=n,Ue(),gt()}),e.on("disconnect",()=>{de&&de.close(),Ge("idle",null)}),e.on("session_delete",()=>{de&&de.close(),Ge("idle",null)})}async function Sy(){if(zi||X.status!=="connected"||X.kind!=="walletconnect"||!J)return;zi=!0;let e=J;try{await Promise.race([e.request({method:"eth_accounts"}),new Promise((t,n)=>setTimeout(()=>n(new Error("the relay did not answer in 4 s")),4e3))]),console.log("[wc] the connection is alive after returning to the page");return}catch(t){console.log("[wc] the relay does not answer after returning ("+t.message+") - raising the session again")}finally{zi=!1}J=null;try{let t=X.chainId||(bt.find(o=>o.escrow)||{}).chainId,r=await(await ea(t)).request({method:"eth_accounts"});if(!Array.isArray(r)||!r.length){console.log("[wc] no session left in storage - a new QR is needed"),Ge("idle",null);return}X.address=r[0],Ue(),await gt(),console.log("[wc] session raised again: "+X.address)}catch(t){console.log("[wc] could not raise the session: "+t.message),Ge("idle",null)}}async function ea(e){if(J)return J;let{EthereumProvider:t}=await iu();return J=await t.init({projectId:wn.projectId,chains:[e],optionalChains:bt.filter(n=>n.escrow).map(n=>n.chainId),showQrModal:!1,rpcMap:ky(),metadata:{...wn.metadata,url:location.origin}}),J.on("display_uri",n=>vy(n)),qi(J),J}async function vy(e){if(!(!de||de.closed.value))try{let{QRCode:t}=await iu(),n=await t.toDataURL(e,{margin:1,width:440,errorCorrectionLevel:"M",color:{dark:"#0a0d13",light:"#ffffff"}});de.update({qrDataUrl:n,uri:e,status:"Waiting for the wallet to approve..."})}catch(t){de.update({uri:e,status:"Scan failed to render, copy the link instead",error:!0}),console.warn("qr render failed",t)}}async function cu(){if(Ey())return Zi=!0,console.log("[wc] restore skipped: wallet disconnected manually"),jt();if(Zi||X.status==="connected")return jt();if(Zi=!0,wn.projectId)try{let e=Me(X.chainId||void 0),t=await ea(e.chainId),n=t&&t.accounts||[];n.length&&(X.kind="walletconnect",X.label="WalletConnect",X.address=n[0],X.chainId=Number(t.chainId)||e.chainId,X.status="connected",X.error=null,Ue(),await gt(),console.info("WalletConnect: session restored after reload",X.address))}catch(e){console.warn("WalletConnect: could not restore the session",e&&e.message?e.message:e)}return ze()?jt():ta()}async function ta({wallets:e}={}){if(ze())return jt();let t=e||await Nr();for(let n of t){let r=await jd(n.provider);if(r.length){J=n.provider,X.kind="injected",X.label=n.name||"Browser wallet",qi(J),X.address=r[0];try{X.chainId=Number(await J.request({method:"eth_chainId"}))||null}catch{X.chainId=null}return X.status="connected",X.error=null,Ue(),await gt(),console.info("Browser wallet restored without a prompt: "+X.address),jt()}}return jt()}async function na({wallet:e,chainSlug:t}={}){if(au(!1),!e||!e.provider)throw new Error("No wallet extension found in this browser");if(ze()&&X.kind==="injected"&&X.label===(e.name||null))return{address:X.address,chainId:X.chainId};let n=Me(t||X.chainId||void 0);J=e.provider,X.kind="injected",X.label=e.name||"Browser wallet",X.status="pairing",X.error=null,Ue(),qi(J);try{let r=await Wd(J);if(!r.address)throw new Error("The wallet returned no address");return X.address=r.address,X.chainId=r.chainId||n.chainId,X.status="connected",X.error=null,Ue(),X.chainId!==n.chainId&&await ra(n),await gt(),{address:X.address,chainId:X.chainId}}catch(r){let o=X.label||e.name||"Wallet",s=$d(r,o);if($i(r))return console.info("[wallet] user refusal: "+s),Ge("idle",null),null;throw console.warn("[wallet] connect did not happen: "+s,r),Ge("error",s),new Error(s)}}async function lu({chainSlug:e}={}){if(ze())return{address:X.address,chainId:X.chainId};let t=Me(e||X.chainId||void 0);X.status="pairing",X.error=null,Ue();let n=await Nr();n.length?console.info("[wallet] found in the browser: "+n.map(i=>i.name+" ["+i.source+(i.rdns?" "+i.rdns:"")+"]").join(", ")):console.info("[wallet] no browser wallets found (WalletConnect remains)"),de=Yd({title:"Connect a wallet",subtitle:`Requested network: ${t.name}. The QR below is a public WalletConnect link - nothing secret. This demo never moves real funds: there is no escrow contract on-chain yet.`,hint:"Browser wallets are detected in this browser (EIP-6963). WalletConnect works with mobile wallets by QR."});let r=await new Promise(i=>{de.setOnCancel(()=>i({type:"cancel"}));let a=n.map(c=>({key:c.rdns||c.name,name:c.name,icon:c.icon,hint:c.source==="eip6963"?null:"detected via window.ethereum",onClick:()=>i({type:"injected",wallet:c})}));wn.projectId&&a.push({key:"walletconnect",name:"WalletConnect",icon:null,hint:"QR code for a mobile wallet",onClick:()=>i({type:"walletconnect"})}),de.setChoices(a),de.update({status:n.length?"Choose a browser wallet above, or scan the QR code below.":"No browser wallet found in this browser - use the QR code below."})});if(r.type==="cancel")return Ge("idle",null),null;if(r.type==="injected")try{let i=await na({wallet:r.wallet,chainSlug:t.id});return de&&de.close(),i}catch(i){let a=String(i&&i.message||i);throw de&&de.update({error:a,status:"Try again, or use WalletConnect below."}),i}if(!wn.projectId)throw de&&de.close(),Ge("error","no-project-id"),new Error("WalletConnect projectId is not configured");de.update({status:"Preparing the session..."});let o=null,s=new Promise((i,a)=>{o=()=>a(new Error("Connection cancelled"))});de.setOnCancel(()=>{let i=J;J=null,i&&Promise.resolve(i.disconnect()).catch(()=>{}),Ge("idle",null),o&&o()});try{let i=await ea(t.chainId);return await Promise.race([i.connect({chains:[t.chainId]}),s]),X.kind="walletconnect",X.label="WalletConnect",X.address=i.accounts&&i.accounts[0]||null,X.chainId=Number(i.chainId),X.status="connected",X.error=null,de&&de.close(),Ue(),await gt(),{address:X.address,chainId:X.chainId}}catch(i){let a=i&&i.message?String(i.message):String(i);console.warn("WalletConnect connect failed:",a);let c=$i(i)||/cancell?ed/i.test(a);if(de&&de.close(),Ge(c?"idle":"error",c?null:a),!c)throw i;return null}}async function du(e){if(!J||X.status!=="connected")throw new Error("wallet not connected: signing is impossible");let t="0x"+Array.from(new TextEncoder().encode(String(e)),n=>n.toString(16).padStart(2,"0")).join("");return await J.request({method:"personal_sign",params:[t,X.address]})}async function uu(){au(!0);let e=J,t=X.kind;if(!e){Ge("idle",null);return}try{t==="injected"?typeof e.revokePermissions=="function"&&await e.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]}):await e.disconnect()}catch(n){console.warn("disconnect failed",n)}Ge("idle",null)}async function ra(e){let t=typeof e=="object"?e:Me(e);if(!J||!ze())return!1;let n=xy(t.chainId);try{await J.request({method:"wallet_switchEthereumChain",params:[{chainId:n}]})}catch(r){if(!((r&&(r.code||r.data&&r.data.originalError&&r.data.originalError.code))===4902||/unrecognized chain|not added/i.test(String(r&&r.message))))return/rejected|denied/i.test(String(r&&r.message))||(X.error=String(r&&r.message||r),Ue()),!1;try{await J.request({method:"wallet_addEthereumChain",params:[{chainId:n,chainName:t.name,nativeCurrency:{name:t.native.symbol,symbol:t.native.symbol,decimals:t.native.decimals},rpcUrls:[t.rpcUrl],blockExplorerUrls:[t.explorerAddr]}]})}catch(i){return/rejected|denied/i.test(String(i&&i.message))||(X.error=String(i&&i.message||i),Ue()),!1}}return X.chainId=t.chainId,Ue(),await gt(),!0}async function Xt({to:e,data:t}={}){if(!J)throw new Error("wallet not connected: nothing to read the contract with");if(!e)throw new Error("no contract address given");if(!t)throw new Error("no call data given");let n=await J.request({method:"eth_call",params:[{to:e,data:t},"latest"]});if(typeof n!="string"||!n.startsWith("0x"))throw new Error("unexpected answer to a contract call: "+String(n).slice(0,60));return n}async function Fo({address:e}={}){if(!J)throw new Error("wallet not connected: nothing to read the contract code with");if(!e||!/^0x[0-9a-fA-F]{40}$/.test(String(e)))throw new Error("not an address for reading code: "+String(e));return await J.request({method:"eth_getCode",params:[e,"latest"]})}async function oa({hash:e}={}){if(!J)throw new Error("wallet not connected: nothing to read the receipt with");if(!e)throw new Error("no transaction hash given");let t=await J.request({method:"eth_getTransactionReceipt",params:[e]});return!t||typeof t!="object"?null:t}async function sa({to:e,data:t,value:n="0x0",gas:r}={}){if(!J)throw new Error("wallet not connected: nothing to send with");if(!e)throw new Error("no contract address given");if(!t)throw new Error("no call data given");let o=$t();if(!o)throw new Error("wallet not connected: no sender address");let s={from:o,to:e,data:t,value:typeof n=="bigint"?"0x"+n.toString(16):n};r&&(s.gas=typeof r=="bigint"?"0x"+r.toString(16):r);try{let a=await J.request({method:"eth_getBlockByNumber",params:["latest",!1]}),c=a&&a.baseFeePerGas?BigInt(a.baseFeePerGas):0n,l=0n;try{let u=await J.request({method:"eth_gasPrice",params:[]});if(typeof u=="string"&&/^0x[0-9a-fA-F]+$/.test(u)){let f=BigInt(u)-c;f>0n&&(l=f)}}catch{}let d=Ro({baseFeeWei:c,priorityFeeWei:l});d!==null&&(s.maxPriorityFeePerGas="0x"+(d-c*2n).toString(16),s.maxFeePerGas="0x"+d.toString(16))}catch(a){console.warn("could not compute the fee, the wallet decides: "+(a&&a.message||a))}let i=await J.request({method:"eth_sendTransaction",params:[s]});if(typeof i!="string"||!/^0x[0-9a-fA-F]{64}$/.test(i))throw new Error("the wallet returned not a transaction hash: "+String(i).slice(0,60));return i}async function gt(){if(!ze()||!J)return;let e=gi(X.chainId);if(!e){X.error=`Wallet is on chain ${X.chainId}, which this demo does not support`,Ue();return}let t=X.address,n={},r=[[e.native.symbol,null,e.native.decimals,"eth_getBalance"]];for(let s of e.tokens)r.push([s.symbol,s.address,s.decimals,null]);let o=await Promise.all(r.map(async([s,i,a,c])=>{try{let l;if(c==="eth_getBalance")l=await J.request({method:c,params:[t,"latest"]});else{let d="0x70a08231"+t.replace(/^0x/,"").toLowerCase().padStart(64,"0");l=await J.request({method:"eth_call",params:[{to:i,data:d},"latest"]})}return[s,zd(BigInt(l),a)]}catch(l){return console.warn(`balance read failed for ${s}`,l),[s,void 0]}}));for(let[s,i]of o)i!==void 0&&(n[`${e.chainId}:${String(s).toUpperCase()}`]=i);X.balances={...X.balances,...n},X.lastRefresh=Date.now(),X.error=null,Ue()}var Qi,X,J,de,Gi,xy,zi,eu,tu,Zi,Ji,Ey,au,Do=Q(()=>{qe();Xi();Gd();Vi();Yi();Qi=new Set,X={status:"idle",kind:null,label:null,address:null,chainId:null,balances:{},error:null,lastRefresh:0},J=null,de=null,Gi=null;xy=e=>"0x"+Number(e).toString(16);zi=!1;eu=null,tu=()=>{clearTimeout(eu),eu=setTimeout(()=>{Sy()},400)};typeof window<"u"&&typeof document<"u"&&(window.addEventListener("pageshow",()=>tu()),document.addEventListener("visibilitychange",()=>{document.hidden||tu()}));Zi=!1,Ji="ninsei.wallet.optOut",Ey=()=>{try{return localStorage.getItem(Ji)==="1"}catch{return!1}},au=e=>{try{e?localStorage.setItem(Ji,"1"):localStorage.removeItem(Ji)}catch{}}});var Ho={};ge(Ho,{authedAddress:()=>pu,forgetSession:()=>la,loadServerSwaps:()=>Oy,saveServerSwap:()=>Iy,sessionStoreInUse:()=>By,setSessionStore:()=>Ty,signIn:()=>Kn,token:()=>Vt});function Ty(e){if(!(e&&typeof e.get=="function"&&typeof e.set=="function"&&typeof e.remove=="function"))throw new Error("session storage must support get/set/remove");return Vn=e,Vn}function fu(e){try{return Vn.get(e)}catch{return null}}function Po(e,t){try{t==null?Vn.remove(e):Vn.set(e,t)}catch{}}function Vt(){return fu(aa)}function pu(){return fu(ca)}function la(){Po(aa,null),Po(ca,null)}async function ia(e,t={}){let n=await fetch(e,t),r=null;try{r=await n.json()}catch{}return{status:n.status,body:r}}async function Kn(){if(!ze())throw new Error("connect the wallet first");let e=await ia("/api/auth/nonce");if(e.status!==200||!e.body||!e.body.message)throw new Error("the server did not issue a message to sign (response "+e.status+")");let t=await du(e.body.message),n=await ia("/api/auth/verify",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nonce:e.body.nonce,address:$t(),signature:t})});if(n.status!==200||!n.body||!n.body.token){let r=n.body&&n.body.error?n.body.error:"response "+n.status;throw new Error("login not accepted: "+r)}return Po(aa,n.body.token),Po(ca,n.body.address),n.body.address}async function da(e,t={},n=!0){let r=Vt(),o={...t.headers||{}};r&&(o.authorization="Bearer "+r);let s=await ia(e,{...t,headers:o});if(s.status===401&&n&&ze()){la();try{await Kn()}catch{return s}return da(e,t,!1)}return s}async function Iy(e,t){let n=e&&e.escrow&&e.escrow.address;if(!n)return{ok:!1,reason:"the record has no escrow address"};if(!ze())return{ok:!1,reason:"wallet not connected"};try{(!Vt()||pu()!==String($t()).toLowerCase())&&(la(),await Kn());let r=await da("/api/evm-swaps",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e.id,network:t||e.network||e.chain,escrow:n,quoteId:e.orderQuoteId||null,providerId:e.providerId||null,hashlock:e.escrow&&e.escrow.hashlock||e.hashlock||null,amount:e.escrow&&e.escrow.amountWei||e.amountWei||null,t0:e.escrow&&e.escrow.t0!=null?e.escrow.t0:null,t1:e.escrow&&e.escrow.t1!=null?e.escrow.t1:null})});return r.status===201||r.status===200?{ok:!0,orderBinding:r.body&&r.body.orderBinding||null}:{ok:!1,reason:r.body&&r.body.error?r.body.error:"response "+r.status}}catch(r){return{ok:!1,reason:String(r&&r.message||r)}}}async function Oy(){if(!ze())return{ok:!1,reason:"wallet not connected",swaps:[]};try{Vt()||await Kn();let e=await da("/api/evm-swaps");return e.status!==200||!e.body?{ok:!1,reason:"response "+e.status,swaps:[]}:{ok:!0,swaps:e.body.swaps||[]}}catch(e){return{ok:!1,reason:String(e&&e.message||e),swaps:[]}}}var aa,ca,Ay,Ny,Vn,By,ua=Q(()=>{Do();aa="ninsei.auth.token",ca="ninsei.auth.address",Ay=()=>{let e=typeof globalThis<"u"?globalThis.sessionStorage:void 0;return!e||typeof e.getItem!="function"?null:{get:t=>e.getItem(t),set:(t,n)=>e.setItem(t,String(n)),remove:t=>e.removeItem(t)}},Ny=()=>{let e=new Map;return{get:t=>e.has(t)?e.get(t):null,set:(t,n)=>e.set(t,String(n)),remove:t=>e.delete(t)}},Vn=Ay()||Ny();By=()=>Vn});function hu({poolSeen:e,soft:t=lt.softSec,hard:n=lt.hardSec}={}){let r=mu(t,lt.softSec),o=mu(n,lt.hardSec),s=Math.min(r,o);return e?s:o}var lt,mu,wu=Q(()=>{lt={softSec:600,hardSec:1200},mu=(e,t)=>{let n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):t}});function dt(){return Date.now()}function Bt(e,t=dt()){return Math.max(0,(t-e.realStart)*e.speed)}function xn(e,t){return e.simStartWall+t}var yu=Q(()=>{});var _r={};ge(_r,{getInfo:()=>Or,height:()=>fa,lastError:()=>gu,nodeUrl:()=>Py,snapshot:()=>Ir,startPolling:()=>Dy});async function Cy(e,t={},n="/json_rpc"){let r=new AbortController,o=setTimeout(()=>r.abort(),_y);try{let s=await fetch(bu+n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:"ninsei-demo",method:e,params:t}),signal:r.signal});if(!s.ok)throw new Error("HTTP "+s.status);let i=await s.json();if(i.error)throw new Error(i.error.message||"RPC error");return i.result}finally{clearTimeout(o)}}function Ir(){return Kt.data}function gu(){return Kt.error}async function fa(){let e=await Or();return e?e.height:null}async function Or({force:e=!1}={}){return Kt.data&&Date.now()-Kt.at<Ry&&!e?Kt.data:Br||(Br=Cy("get_info").then(n=>(Kt={at:Date.now(),data:Fy(n),error:null},Kt.data)).catch(n=>(Kt={at:Date.now(),data:null,error:n.message},null)).finally(()=>{Br=null}),Br)}function Fy(e){return{height:e.height,nettype:e.nettype||(e.mainnet?"mainnet":e.stagenet?"stagenet":"testnet"),offline:!!e.offline,busySyncing:!!e.busy_syncing,version:e.version,target:e.target,txPoolSize:e.tx_pool_size,outgoing:e.outgoing_connections_count,incoming:e.incoming_connections_count,databaseSizeGb:e.database_size?Math.round(e.database_size/1024**3):null,fetchedAt:Date.now()}}function Dy(e,t=3e4){Lo&&clearInterval(Lo);let n=async()=>{let r=await Or({force:!0});e&&e(r,gu())};return n(),Lo=setInterval(n,t),()=>clearInterval(Lo)}var bu,_y,Ry,Kt,Br,Lo,Py,Rr=Q(()=>{qe();bu=fe.node,_y=8e3,Ry=15e3,Kt={at:0,data:null,error:null},Br=null;Lo=null;Py=bu});function Yn(...e){let t=e.join("|"),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=n*16777619>>>0;return"0x"+n.toString(16).padStart(8,"0")+yo(28)}function Hy(e){return"0x"+Yn("escrow",e).slice(2,42)}function Ly(e){return"8"+Yn("xmrlock",e).slice(2,96)}function xu({swapId:e,ethAmountUsd:t,ethUsd:n}){return{mock:!0,txHash:Yn("fund",e),escrow:Hy(e),ethAmount:n>0?t/n:0,valueUsd:t,gasUsd:.21,method:"simulated funding (no real transaction)",confirmations:1}}function ku({swapId:e,xmrAmount:t}){return{mock:!0,txid:Yn("xmrtx",e),address:Ly(e),amount:t,viewKeyVerified:!0,unlocked:"1 of 2 spend key shares revealed (DLEQ bound)"}}function pa({swapId:e}){return{mock:!0,txid:Yn("sweep",e)}}function ma({swapId:e,by:t}){return{mock:!0,txHash:Yn("refund",e,t),by:t}}function Su(e,t){let n=e.timeline.confTarget;if(e.chainMode==="live"){let s=e.xmr&&e.xmr.lockHeight,i=Ir();return s&&i&&typeof i.height=="number"&&i.height>=s?Math.max(0,Math.min(n,i.height-s)):(e.xmr,0)}let r=e.timeline.lockAtSim;if(r===null||t<r)return 0;let o=Math.floor((t-r)/e.timeline.blockSim);return Math.max(0,Math.min(n,o))}var ha=Q(()=>{bo();Rr()});function ut(e=Ke.xmrSource){return e==="app"}function Wy(e=Ke.xmrSource){return ki[ut(e)?"app":"mock"]}function wa(){return $y||Ke.pollMs}async function vu(e,{method:t="GET",body:n,base:r,timeoutMs:o=Ke.timeoutMs,fetchImpl:s}={}){let i=r||jy||Ke.base,a=s||globalThis.fetch;if(typeof a!="function")return{ok:!1,status:0,error:"no fetch: backend unavailable"};let c=typeof AbortController=="function"?new AbortController:null,l=c?setTimeout(()=>c.abort(),o):null;try{let d=await a(i+e,{method:t,headers:n?{"Content-Type":"application/json"}:void 0,body:n?JSON.stringify(n):void 0,signal:c?c.signal:void 0}),u="";try{u=await d.text()}catch{u=""}let f=null;try{f=u?JSON.parse(u):null}catch{}if(!d.ok){let p=f&&(f.error||f.detail)||u.slice(0,200)||`HTTP ${d.status}`,h=f&&Array.isArray(f.problems)?": "+f.problems.join("; "):"";return{ok:!1,status:d.status,error:`${p}${h}`}}return{ok:!0,status:d.status,json:f}}catch(d){return{ok:!1,status:0,error:d&&d.name==="AbortError"?`backend did not answer within ${o} ms`:"backend unavailable: "+(d&&d.message||d)}}finally{l&&clearTimeout(l)}}function Eu(e){let t=e||{};return{id:t.id||null,status:t.status||xt.AWAITING,network:t.network||null,address:t.address||null,expectedAmountXmr:t.expectedAmountXmr??null,receivedXmr:t.receivedXmr??"0",receivedAtomic:t.receivedAtomic??"0",lockedXmr:t.lockedXmr??"0",lockedAtomic:t.lockedAtomic??"0",lockedUntil:t.lockedUntil||null,confirmations:Number(t.confirmations)||0,fundingTxids:Array.isArray(t.fundingTxids)?t.fundingTxids:[],nodeHeightAtSeen:t.nodeHeightAtSeen??null,sweepTxid:t.sweepTxid||null,updatedAt:t.updatedAt||null,at:Date.now()}}async function ya({swapId:e,share:t,expectedAmountXmr:n,chain:r,restoreHeight:o},s={}){let i=t||{},a=i.address||null,c=i.viewKey||i.privateViewKey||null;if(!a||!c)return{ok:!1,status:0,error:"the watch-only share has no address/viewKey - nothing to send to the backend"};let l=Number(n);if(!Number.isFinite(l)||l<=0){let p=(new Error("caller").stack||"").split(`
|
|
2
|
+
`).slice(1,4).map(h=>h.trim().split("/").pop()).join(" <- ");return console.warn("[chainSource] no expected amount, call from: "+p),{ok:!1,status:0,error:"the expected XMR amount is unknown ("+String(n)+"): without it no watch is created"}}let d={swapId:e||i.swapId||null,network:i.network||Wy(),address:a,viewKey:c,expectedAmountXmr:l,restoreHeight:Number.isFinite(Number(o))&&Number(o)>0?Number(o):Number(i.restoreHeight)||void 0,chain:r||void 0},u={};for(let p of Uy)d[p]!==void 0&&d[p]!==null&&(u[p]=d[p]);let f=await vu("/swaps",{method:"POST",body:u,...s});return f.ok?{ok:!0,status:f.status,created:f.json?.created!==!1,session:Eu(f.json)}:f}async function Au(e,t={}){let n=await vu(`/swaps/${encodeURIComponent(e)}`,t);return n.ok?{ok:!0,status:n.status,session:Eu(n.json)}:n}function Xy(e,t){let n=e.timeline&&e.timeline.confTarget||fe.confirmTarget,r=e.timeline?e.timeline.lockAtSim:0,o=r!==null&&t>=r,s=Su(e,t),i=o?s>=n?xt.READY:xt.FUNDED:xt.AWAITING,a=Number(e.xmr&&e.xmr.received),c=o?Number.isFinite(a)?a:e.xmrAmount:0;return{live:!1,status:i,received:c,unlocked:c,locked:0,lockedUntil:null,arrived:c,confirmations:s,confTarget:n,txids:e.xmr&&e.xmr.txid?[e.xmr.txid]:[],address:e.xmr&&e.xmr.address||null,sweepTxid:e.xmr&&e.xmr.sweepTxid||null,error:null}}function Vy(e){let t=e.timeline&&e.timeline.confTarget||fe.confirmTarget,n=e.xmrSession;return n?{live:!0,status:e.xmrSessionError?"error":n.status,received:Number(n.receivedXmr)||0,unlocked:Number(n.receivedXmr)||0,locked:Number(n.lockedXmr)||0,lockedUntil:n.lockedUntil||null,arrived:(Number(n.receivedXmr)||0)+(Number(n.lockedXmr)||0),confirmations:n.confirmations,confTarget:t,txids:n.fundingTxids,address:n.address||e.swapWallet&&e.swapWallet.address||null,sweepTxid:n.sweepTxid,error:e.xmrSessionError||null}:{live:!0,status:e.xmrSessionError?"error":"opening",received:0,unlocked:0,locked:0,lockedUntil:null,arrived:0,confirmations:0,confTarget:t,txids:[],address:e.swapWallet&&e.swapWallet.address||null,sweepTxid:null,error:e.xmrSessionError||null}}function Nu(e,t){return ut(e&&e.xmrSource)?Vy(e):Xy(e,t)}function Tu(e,t="stagenet"){return e?`https://${t==="mainnet"?"":t+"."}xmrchain.net/tx/${e}`:null}var xt,Uy,jy,$y,Bu=Q(()=>{qe();ha();xt={AWAITING:"awaiting_funding",FUNDED:"funded",LOCKED:"xmr_locked",READY:"ready",SWEPT:"swept",CLOSED:"closed"},Uy=["swapId","network","address","viewKey","expectedAmountXmr","restoreHeight","chain"];jy=null,$y=null});var we={};ge(we,{STEP_LABELS:()=>Ea,TERMINAL:()=>Sn,activeSwaps:()=>Ta,addServerSwaps:()=>Yy,allSwaps:()=>Cu,confirmReady:()=>Ia,createReverseSwap:()=>Na,createSwap:()=>Aa,dealSwapIds:()=>Ra,derive:()=>Cr,forgetSwap:()=>Ky,getSwap:()=>zn,halvesWalletOf:()=>Yt,onNotify:()=>eb,refundEth:()=>_a,refundHalfRevealed:()=>Pu,saveSwap:()=>Ba,serverRestoreHeightFor:()=>Ca,serverRowToSwap:()=>Fu,setLiveFocus:()=>Fa,startTicker:()=>tb,subscribe:()=>zy,sweepNow:()=>Oa,tick:()=>Mu,xmrAmountCheck:()=>Hu});function Aa(e){let t=Ee(),n=Date.now(),r={id:Ni(),side:e.side||"buy",scenario:e.scenario||"happy",speed:e.speed||60,network:e.network||at,moneroNetwork:fe.networkType,realStart:n,simStartWall:n,createdAt:new Date(n).toISOString(),payToken:e.payToken,payAmount:Number(e.payAmount),xmrAmount:Number(e.xmrAmount),rate:Number(e.rate),fee:Number(e.fee),maker:{id:e.makerId,name:e.makerName,spread:e.makerSpread},dexSpread:e.dexSpread,gasUsd:e.gasUsd,receiveAddress:e.receiveAddress,quoteSignature:e.quoteSignature,swapWallet:e.swapWallet||null,timeline:{fundAtSim:0,lockAtSim:e.scenario==="maker_no_lock"?null:ct.makerLock,blockSim:fe.blockTimeSim,confTarget:fe.confirmTarget,t0Sim:ct.t0Refund},chainMode:e.chainMode||At.defaultChainMode,xmrSource:e.xmrSource||Ke.xmrSource,xmrSession:null,xmrSessionError:null,events:[],escrow:null,xmr:null,settlement:null,log:[]};if(r.chainMode!=="live"){let o=xu({swapId:r.id,ethAmountUsd:r.payAmount,ethUsd:3212.4});r.escrow={address:o.escrow,fundTx:o.txHash,method:o.method,fundedAtSim:0,gasUsd:o.gasUsd},je(r,0,"Escrow funded",`eth escrow ${o.escrow}`)}else r.escrow={address:null,fundTx:null,method:null,fundedAtSim:0,gasUsd:e.gasUsd??null};return t.swaps[r.id]=r,t.activeSwapId=r.id,Ye(t),r}function Na(e={}){let t=Ee(),n=Date.now(),r=Number(e.xmrAmount),o={id:Ni(),side:"reverse",scenario:"happy",speed:Number(e.speed)||60,network:e.network||at,moneroNetwork:fe.networkType,realStart:n,simStartWall:n,createdAt:new Date(n).toISOString(),payToken:"XMR",payAmount:r,xmrAmount:r,rate:Number(e.rate)||0,fee:Number(e.fee)||0,maker:{id:e.providerId||null,name:e.providerName||null,spread:null},receiveAddress:e.claimer||null,quoteSignature:null,ticket:e.ticketId||null,timeline:{fundAtSim:0,lockAtSim:0,blockSim:fe.blockTimeSim,confTarget:fe.confirmTarget,t0Sim:ct.t0Refund},chainMode:e.chainMode||At.defaultChainMode,xmrSource:e.xmrSource||Ke.xmrSource,xmrSession:null,xmrSessionError:null,events:[],escrow:{address:e.escrowAddress||null,moneroAddress:e.moneroAddress||null,half:e.ownSpendHalf||null,viewHalf:e.ownViewHalf||null,counterViewHalf:e.counterViewHalf||null,counterViewPoint:e.counterViewPoint||null,counterSpendPoint:e.counterSpendPoint||null,moneroNetwork:fe.networkType,birthHeight:e.escrowBirthHeight||null,readyBy:e.readyBy||null,t1:e.t1||null,counterHalf:null},xmr:null,settlement:null,log:[]};return t.swaps[o.id]=o,t.activeSwapId=o.id,Ye(t),o}function je(e,t,n,r){e.log.push({atSim:t,wall:xn(e,t),title:n,detail:r||""}),console.log(`[swap ${e.id}] ${n}${r?" - "+r:""}`)}function Yt(e){let t=e&&e.escrow||{};return!t.half||!t.viewHalf||!t.counterViewHalf||!t.moneroAddress?null:{source:"halves",library:"monero-js",network:t.moneroNetwork||fe.networkType,address:t.moneroAddress,subaddress:null,spendHalf:t.half,viewHalf:t.viewHalf,otherSpendPoint:t.counterSpendPoint||t.edPointClaimer||null,otherViewPoint:t.counterViewPoint||null,otherViewHalf:t.counterViewHalf}}function Ky(e){let t=Ee();return t.swaps[e]?(delete t.swaps[e],Ye(t),!0):!1}function zn(e){return Ee().swaps[e]||null}function Cu(){let e=Ee();return Object.values(e.swaps).sort((t,n)=>t.realStart<n.realStart?1:-1)}function Fu(e){let t=String(e&&e.escrow||"").toLowerCase();return{id:String(e.id),network:e.network||null,chain:e.network||null,source:"server",status:"in_progress",escrow:{address:t,t0:e.t0!=null?Number(e.t0):null,t1:e.t1!=null?Number(e.t1):null,hashlock:e.hashlock||null,amountWei:e.amount!=null?String(e.amount):null,fromServer:!0},log:[],events:[]}}function Yy(e){if(!Array.isArray(e)||e.length===0)return 0;let t=Ee(),n=0;for(let r of e)!r||!r.id||!r.escrow||t.swaps[r.id]||(t.swaps[r.id]=Fu(r),n+=1);return n&&Ye(t),n}function Ta(){return Cu().filter(e=>!e.settlement)}function Ba(e){return Mo(e)}function Mo(e){let t=Ee();return t.swaps[e.id]=e,Ye(t),e}function Iu(e,t,n,r={}){return e.events.push({type:t,atSim:n,...r}),e}function Du(e,t){return e.events.find(n=>n.type===t)||null}function Ia(e){let t=zn(e);if(!t||t.settlement)return t;if(!Cr(t).can.ready)throw new Error("ready() is not available in this phase");let r=Bt(t);return Iu(t,"ready",r),je(t,r,"ready() called by you","maker may now claim the ETH escrow"),Du(t,"funded_note")||Iu(t,"funded_note",0),Mo(t)}function Pu(e){let t=e&&e.escrow||{};return t.revealedHalf||t.counterHalf||null}function Oa(e){let t=zn(e);if(!t||t.settlement&&!(t.settlement.kind==="refund_eth"&&t.side==="reverse"))return t;if(!Cr(t).can.sweep)throw new Error("sweep is not available in this phase");let r=Bt(t),o=pa({swapId:t.id});t.xmr=t.xmr||{},t.xmr.sweepTxid=o.txid;let s=!!(t.settlement&&t.settlement.kind==="refund_eth");return t.settlement={kind:"success",phase:Sn.success.phase,atSim:r,txid:o.txid,by:"you",...s?{recovered:!0}:{}},je(t,r,"XMR swept to your address",o.txid),Mo(t)}function _a(e,t="you"){let n=zn(e);if(!n||n.settlement)return n;if(!Cr(n).can.refund)throw new Error("refund is not available in this phase");let o=Bt(n),s=ma({swapId:n.id,by:t});return n.settlement={kind:"refund_eth",phase:Sn.refunded_eth.phase,atSim:o,txHash:s.txHash,by:t},je(n,o,`ETH refunded to your wallet (${t})`,s.txHash),Mo(n)}function Ou(e){return((Me(e&&e.network||at)||{}).escrow||{}).mode==="live"}function Hu(e,t){let n=Number(e&&e.xmrAmount),r=Number.isFinite(n)&&n>0,o=t&&t.arrived!==null&&t.arrived!==void 0?t.arrived:t?t.received:null,s=o!=null&&Number.isFinite(Number(o))?Number(o):null;return r?s===null?{ok:!1,checked:!0,expected:n,seen:null,why:"the amount of XMR on the address is not known ("+n+" XMR was quoted): ready stays closed until the sum is seen"}:s+_u<n?{ok:!1,checked:!0,expected:n,seen:s,why:"only "+s+" XMR arrived, the quote promised "+n+" XMR: ready is blocked - the escrow would pay out for less than agreed"}:s>n+_u?{ok:!1,checked:!0,expected:n,seen:s,why:s+" XMR arrived, but the record promises "+n+" XMR: the sum on the address does not match the quoted trade - ready is blocked until they agree (a node paying more than it quoted loses its spread)"}:{ok:!0,checked:!0,expected:n,seen:s,why:null}:{ok:!0,checked:!1,expected:null,seen:s,why:"the record has no quoted XMR amount, so the arrived sum cannot be compared - this is named, not assumed"}}function Cr(e,t=dt()){let n=Bt(e,t),r=e.timeline,s=(P=>Du(e,P))("ready"),i=ut(e.xmrSource),a=Nu(e,n),c=Number(a.arrived!==void 0&&a.arrived!==null?a.arrived:a.received||0),l=i?c>0?0:null:r.lockAtSim,d=a.confirmations,u=i?c>0:l!==null&&n>=l,f=s?s.atSim:null,p=e.escrow&&e.escrow.readyBy?Number(e.escrow.readyBy)*1e3:null,h=e.escrow&&e.escrow.t1?Number(e.escrow.t1)*1e3:null,w=Number(a.arrived!==void 0&&a.arrived!==null?a.arrived:a.received||0)>0,b=(()=>{if(e.side!=="reverse"||p===null)return null;let P=p-lt.hardSec*1e3,$=P+lt.softSec*1e3,C=hu({poolSeen:w,soft:lt.softSec,hard:lt.hardSec}),K=!w&&dt()>=$,Y=K?P+C*1e3:$;return{startMs:P,atMs:Y,leftMs:Y-dt(),seen:w,extended:K,softSec:lt.softSec,hardSec:lt.hardSec,windowSec:C}})(),T=f!==null&&e.scenario!=="maker_stall"?f+ct.makerClaim:null,B=T!==null?T+ct.sweep:null,E=l!==null?l+ct.readyWindow:null,k=E!==null?E+ct.makerReclaim:null,m=f!==null?f+ct.t1Refund:null,A=f===null&&k!==null&&n>=k,x={ready:!1,sweep:!1,refund:!1},N="xmr_locked",D="Waiting",O=null,H=null;if(e.settlement){if(N=e.settlement.phase,D=Object.values(Sn).find(P=>P.phase===e.settlement.phase)?.label||"Settled",e.settlement.kind==="refund_eth"&&e.side==="reverse"){let P=Pu(e),$=c>0;x.sweep=!!(P&&$&&Yt(e)),H=x.sweep?"The refund published the provider's half, so your XMR can be swept back from the swap's one-time address to your own wallet.":$?"The refund is done and your XMR is on the swap's one-time address, but the provider's half of the spend key is not published yet: sweeping needs both halves, so the button waits for the chain.":"The refund is done, but no XMR is on the swap's one-time address: there is nothing of yours to sweep back."}}else if(i&&f===null&&p!==null&&dt()>=p&&(h===null||dt()<h))N="dead_zone",D="Ready deadline passed - the refund is open",x.ready=!1,x.refund=!0,x.refundByAnyone=!0,H="The ready() deadline has passed without your confirmation, so the maker cannot claim - and the refund is open NOW, not at T1. It returns your ETH and publishes your half, so the maker can reclaim the XMR from Monero right away. "+(h!==null?"T1 closes the order for good: "+new Date(h).toISOString()+".":"");else if(i&&f===null)if(a.status===xt.LOCKED){N="xmr_unlock_pending",D="XMR is on your address but locked on-chain",x.ready=!1;let P=a.lockedUntil||{},$=P.untilHeight!==null&&P.untilHeight!==void 0?"block "+P.untilHeight:P.untilTime!==null&&P.untilTime!==void 0?new Date(Number(P.untilTime)*1e3).toISOString()+" UTC":"a time the sender set";H="The sender set the transaction's unlock_time: "+(a.locked||0)+" XMR is on your address but cannot be spent until "+$+". Ready stays closed until then - confirming now would let the maker take the ETH behind locked XMR."}else if(!a.received)N="maker_locking",D="Waiting for XMR to arrive",H=a.error?"Backend unavailable: "+a.error:"The backend watches your swap address with the view key only - it cannot spend your XMR.";else if(a.status===xt.READY){N="xmr_locked",D="XMR received and confirmed ("+d+"/"+r.confTarget+")";let P=Hu(e,a);x.ready=P.ok,x.readyAmount=P,H=P.ok?"Confirm that you see the XMR on your address (ready).":P.why}else a.status===xt.SWEPT?(N="success",D="XMR delivered"):(N="xmr_locked",D="XMR received, waiting for confirmations ("+d+"/"+r.confTarget+")",H="About "+Math.max(1,Math.round((r.confTarget-d)*r.blockSim/6e4))+" min left of confirmations.");else if(l===null)n>=r.t0Sim?(N="refund_available",D="Maker did not lock XMR",O=r.t0Sim,x.refund=!0,H="The maker never locked XMR. You can take your ETH back from the escrow - no permission needed."):(N="maker_locking",D="Waiting for the maker to lock XMR",H="If the maker does not lock XMR by T0, you get a refund button.");else if(!u)N="maker_locking",D="Maker is locking XMR";else if(A)N="xmr_reclaimed",D="XMR returned to the maker",O=k,x.refund=!0,H="You did not confirm (ready) in time, so the maker took the XMR back. Your ETH is still in escrow - refund it.";else if(f===null)N="xmr_locked",D=d<r.confTarget?`Waiting for Monero confirmations (${d}/${r.confTarget})`:"XMR locked and verified - waiting for you",x.ready=i?a.status===xt.READY:d>=r.confTarget,O=E,H=d<r.confTarget?`About ${Math.max(1,Math.round((r.confTarget-d)*r.blockSim/6e4))} min left of confirmations. You can close this tab.`:"Confirm that you see the lock with your view key (ready). Until you do, the maker keeps the XMR.";else if(T!==null&&n<T)N="ready_wait_claim",D="Waiting for the maker to claim ETH",H="The maker claims the escrow and reveals the secret; your swap wallet uses it to sweep the XMR.";else if(T!==null&&n>=T&&B!==null&&n>=B)N="success",D="XMR delivered",x.sweep=!0;else if(T!==null)N="claimed",D="Secret revealed - sweeping XMR",x.sweep=!0;else{N="refund_available",D="Maker did not claim in time",O=m;let P=e.escrow&&e.escrow.t0?e.escrow.t0*1e3:null,$=e.escrow&&e.escrow.t1?e.escrow.t1*1e3:null,C=dt();if($!==null)if(P!==null)x.refund=C>=P,x.refundByAnyone=C>=$;else{let K=e.escrow&&e.escrow.readyBy?Number(e.escrow.readyBy)*1e3:null,Y=K!==null&&C>=K&&f===null;x.refund=C>=$||Y,x.refundByAnyone=x.refund,Y&&C<$&&(O=null)}else Ou(e)?x.refund=!1:x.refund=n>=m;H=x.refund?x.refundByAnyone?"The claim deadline passed: the refund is open to anyone who can present the half of the depositor - that half is YOURS (it is in your recovery file), and the watchtower does not have it. Press Refund my ETH, or restore the file if you have lost this tab.":"The maker missed the claim deadline. You can take your ETH back from the escrow yourself.":P!==null?"This order predates the one-deadline rule: you could refund from T0, and from T1 anyone can.":"Waiting for T1: before it the ETH can only be claimed with the secret. From T1 the claim closes and the refund opens - and it always pays you, never the caller."}let M=d>=r.confTarget,W=T!==null&&n>=T,R=[{key:"funded",done:!0,atSim:0},{key:"maker_locking",done:u,active:!u&&!e.settlement&&l!==null,failed:l===null&&n>=r.t0Sim,atSim:l},{key:"xmr_locked",done:M&&!A,active:u&&!M,atSim:l},{key:"ready",done:f!==null,active:M&&f===null&&!A,atSim:f},{key:"claimed",done:W,active:f!==null&&!W,atSim:T},{key:"swept",done:!!e.settlement&&e.settlement.kind==="success",active:W&&!e.settlement,atSim:Gy(e)}];return{swap:e,sim:n,simWallTime:xn(e,n),phase:N,phaseLabel:D,note:H,conf:d,confTarget:r.confTarget,confProgress:r.confTarget?d/r.confTarget:0,deadlines:{t0:e.escrow&&e.escrow.t0?e.escrow.t0*1e3:e.escrow?null:xn(e,r.t0Sim),t0Sim:r.t0Sim,lockAtSim:l,readyBy:E!==null?xn(e,E):null,readyBySim:E,t1:e.escrow&&e.escrow.t1?e.escrow.t1*1e3:m!==null?xn(e,m):null,t1Sim:m,refundAfterSim:O,refundAfterWall:O!==null?xn(e,O):null},refundLeftSim:O!==null?O-n:null,xmr:{live:a.live,source:e.xmrSource,status:a.status,received:a.received,locked:a.locked||0,lockedUntil:a.lockedUntil||null,arrived:Number(a.arrived!==void 0&&a.arrived!==null?a.arrived:a.received||0),confirmations:a.confirmations,confTarget:a.confTarget,txids:a.txids,address:a.address,explorer:Tu(a.txids[0],e.xmrSession&&e.xmrSession.network||"stagenet"),error:a.error,sweepTxid:a.sweepTxid},simulated:{evm:!Ou(e),xmr:!a.live},can:x,readyDeadline:{atMs:p,soonMs:p!==null&&f===null?p-dt():null,soon:p!==null&&f===null&&p-dt()>0&&p-dt()<=Number(Ar.readyLeadWarnSec||0)*1e3},xmrAmount:{expected:(()=>{let P=Number(e.xmrAmount);return Number.isFinite(P)&&P>0?P:null})(),seen:a.received!==null&&a.received!==void 0?Number(a.received):null},steps:R,sellWindow:b,terminal:e.settlement,xmrReclaimed:A}}function Gy(e){return e.settlement&&e.settlement.kind==="success"?e.settlement.atSim:null}function zy(e){return ka.add(e),()=>ka.delete(e)}function Zy(){for(let e of ka)try{e()}catch(t){console.error(t)}}function kn(e,t){let n=Ee();n.swaps[e]&&(Object.assign(n.swaps[e],t),Ye(n))}function Ra(e){let t=new Set([String(e&&e.id||"")].filter(Boolean)),r=(()=>{try{return Yt(e)||{}}catch{return{}}})().address||e&&e.escrow&&e.escrow.moneroAddress||null;if(!r)return[...t];for(let o of Object.values((Ee()||{}).swaps||{})){if(!o||!o.id)continue;(()=>{try{return Yt(o)||{}}catch{return{}}})().address===r&&t.add(String(o.id))}return[...t]}function Qy(e){let n=(()=>{try{return Yt(e)||{}}catch{return{}}})().address||e&&e.escrow&&e.escrow.moneroAddress||e&&e.xmrSession&&e.xmrSession.address||null,r=Number(e&&e.xmrAmount)>0?Number(e.xmrAmount):null,o="own record";if(n&&r===null)for(let s of Object.values((Ee()||{}).swaps||{})){if(!s||s===e)continue;let i=(()=>{try{return Yt(s)||{}}catch{return{}}})();if(!(!i.address||i.address!==n)&&Number(s.xmrAmount)>0){r=Number(s.xmrAmount),o="another record of the same deal ("+String(s.id||"?")+")";break}}if(!n)for(let s of Object.values((Ee()||{}).swaps||{})){let i=(()=>{try{return Yt(s)||{}}catch{return{}}})();if(i.address&&Number(s.xmrAmount)>0){n=i.address,r=r||Number(s.xmrAmount),o="another record of the same deal";break}}return{address:n,amountXmr:r,source:o}}function Lu(e){let t=(()=>{try{return(Yt(e)||{}).address||null}catch{return null}})();return e&&e.escrow&&e.escrow.moneroAddress||e&&e.xmrSession&&e.xmrSession.address||e&&e.swapWallet&&e.swapWallet.address||t||null}async function Ca(e,{attempts:t=3,pauseMs:n=1200}={}){let r=Lu(e);if(!r)return null;for(let o=0;o<t;o++){try{let s=await fetch("/api/swaps",{headers:{accept:"application/json"}});if(s.ok){let i=await s.json(),c=(Array.isArray(i)?i:i.swaps||[]).find(d=>String(d&&d.address||"")===String(r)),l=Number(c&&c.restoreHeight);if(Number.isFinite(l)&&l>0)return l}}catch{}o<t-1&&await new Promise(s=>setTimeout(s,n))}return null}async function Jy(e){let t=Lu(e);if(!t)return null;if(xa.has(t))return xa.get(t);try{let n=await fetch("/api/swaps",{headers:{accept:"application/json"}});if(!n.ok)return null;let r=await n.json(),s=(Array.isArray(r)?r:r.swaps||[]).find(i=>String(i&&i.address||"")===String(t));return!s||!s.id?null:(xa.set(t,String(s.id)),String(s.id))}catch{return null}}function qy(e){if(ga.has(e))return;let t=Date.now(),n=Ru.get(e)||0;t-n<wa()||(Ru.set(e,t),ga.add(e),(async()=>{try{let r=Ee().swaps[e];if(!r||r.settlement)return;if(r.xmrSession){if(Date.now()-(r.xmrSession.at||0)>=wa()){let o=await Jy(r),s=await Au(o||e);if(s.ok)kn(e,{xmrSession:s.session,xmrSessionError:null});else if(o)kn(e,{xmrSessionError:s.error});else{let i=Bo({swapId:r.id,wallet:r.swapWallet}),a=await ya({swapId:r.id,share:i,expectedAmountXmr:Number(r.xmrAmount),chain:r.network});if(a.ok){kn(e,{xmrSession:a.session,xmrSessionError:null});let c=Ee();c.swaps[e]&&(je(c.swaps[e],Bt(c.swaps[e]),"Backend record re-linked by the Monero address",a.session.address||""),Ye(c))}else kn(e,{xmrSessionError:a.error})}}}else{let o=Qy(r),s=o.amountXmr;if(!Number.isFinite(s)||s<=0){je(r,Bt(r),"Backend session not opened yet: amount of XMR is unknown",String((r&&r.xmrAmount)??"no"));return}o.source!=="own record"&&je(r,Bt(r),"Amount of XMR taken from the deal's other record",o.source+", "+String(s));let i=Bo({swapId:r.id,wallet:r.swapWallet}),a=await ya({swapId:r.id,share:i,expectedAmountXmr:s,chain:r.network});if(a.ok){kn(e,{xmrSession:a.session,xmrSessionError:null});let c=Ee();c.swaps[e]&&(je(c.swaps[e],Bt(c.swaps[e]),"Backend session opened (watch-only: address + view key)",a.session.address||""),Ye(c))}else kn(e,{xmrSessionError:a.error})}}catch(r){kn(e,{xmrSessionError:"session did not open: "+r.message})}finally{ga.delete(e)}})())}function Fa(e){return Sa=new Set(Array.isArray(e)?e.map(String):[]),Sa.size}function Mu(){let e=Ee(),t=!1;for(let n of Object.values(e.swaps)){if(n.settlement)continue;ut(n.xmrSource)&&Sa.has(String(n.id))&&qy(n.id);let r=Cr(n);if(!ut(n.xmrSource)&&!n.xmr&&r.deadlines.lockAtSim!==null&&r.sim>=r.deadlines.lockAtSim){let o=ku({swapId:n.id,xmrAmount:n.xmrAmount});if(n.xmr={...o,reclaimed:!1,sweepTxid:null},n.chainMode==="live"){let i=Ir();n.xmr.lockHeight=i?i.height:null,n.xmr.lockHeight||Or({force:!0}).then(a=>{if(a&&!n.settlement){let c=Ee();c.swaps[n.id]&&(c.swaps[n.id].xmr.lockHeight=a.height,Ye(c))}})}je(n,r.sim,"Maker locked XMR on the shared address",o.txid);let s=n.id+":lock";tt.has(s)||(tt.add(s),Gn(n.xmrAmount.toFixed(4)+" XMR locked; view key verified","ok")),t=!0}if(ut(n.xmrSource)&&!n.xmr&&r.xmr&&r.xmr.received>0){n.xmr={mock:!1,txid:r.xmr.txids[0]||null,address:r.xmr.address,amount:r.xmr.received,confirmations:r.xmr.confirmations,status:r.xmr.status,explorer:r.xmr.explorer,reclaimed:!1,sweepTxid:null},je(n,r.sim,"XMR received (backend, "+(n.xmrSession&&n.xmrSession.network||"stagenet")+")",n.xmr.txid||"");let o=n.id+":xmr-in";tt.has(o)||(tt.add(o),Gn(r.xmr.received.toFixed(6)+" XMR received; confirmations "+r.xmr.confirmations+"/"+r.xmr.confTarget,"ok")),t=!0}if(ut(n.xmrSource)&&n.xmrSession&&n.xmrSession.status===xt.SWEPT&&!n.settlement){let o=r.sim;n.settlement={kind:"success",phase:Sn.success.phase,atSim:o,txid:n.xmrSession.sweepTxid||null,by:"your sweep wallet"},je(n,o,"XMR swept by you (backend reported)",n.settlement.txid||"");let s=n.id+":success";tt.has(s)||(tt.add(s),Gn("Swap "+n.id+" complete: XMR is on your address","ok")),t=!0;continue}if(!ut(n.xmrSource)&&r.can.sweep&&r.phase==="success"){let o=r.sim;n.xmr.sweepTxid=pa({swapId:n.id}).txid,n.settlement={kind:"success",phase:Sn.success.phase,atSim:o,txid:n.xmr.sweepTxid,by:"your swap wallet"},je(n,o,"XMR swept to your address",n.xmr.sweepTxid);let s=n.id+":success";tt.has(s)||(tt.add(s),Gn("Swap "+n.id+" complete: XMR is on your address","ok")),t=!0;continue}if(!ut(n.xmrSource)&&r.can.refund&&r.refundLeftSim!==null&&r.refundLeftSim<=-ct.watchtowerGrace){let o=r.sim,s=ma({swapId:n.id,by:"watchtower"});n.settlement={kind:"refund_eth",phase:Sn.refunded_eth.phase,atSim:o,txHash:s.txHash,by:"watchtower"},je(n,o,"Watchtower refunded your ETH",s.txHash);let i=n.id+":refund";tt.has(i)||(tt.add(i),Gn("Watchtower refunded the ETH escrow of swap "+n.id,"bad")),t=!0;continue}if(!ut(n.xmrSource)&&n.xmr&&r.xmrReclaimed&&!n.xmr.reclaimed){n.xmr.reclaimed=!0,je(n,r.sim,"Maker reclaimed the XMR",n.xmr.txid);let o=n.id+":reclaim";tt.has(o)||(tt.add(o),Gn("Maker took the XMR back: no ready() call in time","bad")),t=!0}}t&&Ye(e)}function eb(e){va.fn=e}function Gn(e,t){va.fn&&va.fn(e,t)}function tb(e=400){ba&&clearInterval(ba),ba=setInterval(()=>{try{Mu()}catch(t){console.error(t)}Zy()},e)}var Ea,Sn,_u,ba,ka,tt,ga,Ru,xa,Sa,va,Fr=Q(()=>{qe();wu();yu();_o();bo();ha();Rr();Bu();Wi();Ea=[["funded","Funded on-chain"],["maker_locking","Maker locking XMR"],["xmr_locked","XMR locked"],["ready","Verified by you"],["claimed","Claimed by maker"],["swept","Sent to your address"]],Sn={success:{phase:"success",label:"XMR delivered"},refunded_eth:{phase:"refunded_eth",label:"ETH refunded"}};_u=1e-6;ba=null,ka=new Set,tt=new Set;ga=new Set;Ru=new Map;xa=new Map;Sa=new Set;va={fn:null}});function pe(e,t=32){let n=String(e).trim(),r;if(/^0x[0-9a-fA-F]*$/.test(n))r=n.slice(2).toLowerCase(),r.length===0&&(r="0");else if(/^[0-9]+$/.test(n))r=BigInt(n).toString(16);else throw new Error("not a number and not hex: "+e);if(!/^[0-9a-f]*$/.test(r))throw new Error("not hex: "+e);if(r.length>t*2)throw new Error(`value does not fit in ${t} bytes: ${e}`);return r.padStart(t*2,"0")}function pb(e){for(let n of Pa)if(e[n]===void 0||e[n]===null||e[n]==="")throw new Error("the quote has no field: "+n);for(let n of ub)if(!/^(0x)?[0-9a-fA-F]{40}$/.test(String(e[n]).trim()))throw new Error("quote field "+n+" is not an address");for(let n of fb)if(!/^(0x)?[0-9a-fA-F]{64}$/.test(String(e[n]).trim()))throw new Error("quote field "+n+" is not bytes32");let t={provider:pe(e.provider,32),quoteKey:pe(e.quoteKey,32),registry:pe(e.registry,32),cashier:pe(e.cashier,32),locker:pe(e.locker,32),claimer:pe(e.claimer,32),amount:pe(e.amount,32),readyBy:pe(e.readyBy,32),t1:pe(e.t1,32),salt:pe(jo(e.salt),32),commitHalfClaimer:pe(jo(e.commitHalfClaimer),32),edPointClaimer:pe(jo(e.edPointClaimer),32),chainId:pe(e.chainId,32),feeBps:pe(e.feeBps,32),fee:pe(e.fee,32),feeRecipient:pe(e.feeRecipient,32),validUntil:pe(e.validUntil,32),nonce:pe(e.nonce,32),xmrAmount:pe(e.xmrAmount,32)};return Pa.map(n=>t[n]).join("")}function mb(e){let t=String(e||"").replace(/^0x/,"");if(!/^[0-9a-fA-F]{130}$/.test(t))throw new Error("the quote signature must be 65 bytes: "+String(e).slice(0,20));let n=t.slice(0,64),r=t.slice(64,128),o=parseInt(t.slice(128,130),16);return o<27&&(o+=27),pe("0x"+n,32)+pe("0x"+r,32)+pe(o,32)}function hb(e){return db.map(t=>{if(e[t]===void 0||e[t]===null||e[t]==="")throw new Error("the quote has no depositor field: "+t);return pe(jo(e[t]),32)}).join("")}function Gu(e){return pb(e)+mb(e.signature)+hb(e)}function Ma(e){return Ha.predict+Gu(e)}function Ua(e){return Ha.createOrderAndFund+Gu(e)}function Xo(e){let t=String(e||"").replace(/^0x/,"");if(t.length<64)throw new Error("short answer: "+e);return"0x"+t.slice(24,64)}function wb(e){let t=$o[e];if(typeof t!="string"||!/^0x[0-9a-f]{8}$/.test(t))throw new Error("no such factory read: "+e);return t}function zu(e){return Xo(e)}function Zu(e){let t=String(e||"").replace(/^0x/,"");if(t.length<64)throw new Error("short answer from implementationCodeHash(): "+e);return"0x"+t.slice(0,64).toLowerCase()}function Qu({implementation:e,implementationCodeHash:t,code:n,hashCode:r,policy:o}={}){if(!e||!/^0x[0-9a-fA-F]{40}$/.test(String(e)))return{ok:!1,why:"implementation-missing"};if(!t||!/^0x[0-9a-fA-F]{64}$/.test(String(t)))return{ok:!1,why:"code-hash-missing"};if(n==null||n==="0x"||n==="0x0")return{ok:!1,why:"implementation-has-no-code"};let s=String(t).toLowerCase();if(Array.isArray(o)&&o.length&&!o.map(i=>String(i).toLowerCase()).includes(s))return{ok:!1,why:"implementation-code-unknown",codeHash:s};if(typeof r=="function"){let i=String(r(n)).toLowerCase();if(i!==s)return{ok:!1,why:"implementation-code-mismatch",got:i,want:s}}return{ok:!0,codeHash:s}}async function yb({factory:e,read:t,code:n,policy:r=null,hashCode:o=null}={}){if(!e||!/^0x[0-9a-fA-F]{40}$/.test(String(e)))return{ok:!1,why:"factory-missing"};if(typeof t!="function")return{ok:!1,why:"no-chain-read"};if(typeof n!="function")return{ok:!1,why:"no-code-read"};let s,i;try{s=await t({to:e,data:$o.implementation}),i=await t({to:e,data:$o.implementationCodeHash})}catch{return{ok:!1,why:"implementation-unreadable",factory:String(e).toLowerCase()}}let a,c;try{a=zu(s),c=Zu(i)}catch{return{ok:!1,why:"implementation-unreadable",factory:String(e).toLowerCase()}}let l;try{l=await n(a)}catch{return{ok:!1,why:"implementation-code-unreadable",implementation:a}}return{...Qu({implementation:a,implementationCodeHash:c,code:l,hashCode:o,policy:r}),implementation:a,implementationCodeHash:c}}var Ha,La,Pa,db,ub,fb,jo,$o,Wa=Q(()=>{Ha={predict:"0x0824d205",createOrderAndFund:"0x4703a9d3"},La="0xa22cdabaed3cce4f51dde71626a108ffe9c7bc4216fd14d5e719f892e2fd8ab0",Pa=["provider","quoteKey","registry","cashier","locker","claimer","amount","readyBy","t1","salt","commitHalfClaimer","edPointClaimer","chainId","feeBps","fee","feeRecipient","validUntil","nonce","xmrAmount"],db=["commitHalfLocker","edPointLocker","edViewPointLocker"],ub=["provider","quoteKey","registry","cashier","locker","claimer","feeRecipient"],fb=["salt","commitHalfClaimer","edPointClaimer","commitHalfLocker","edPointLocker","edViewPointLocker"];jo=e=>{let t=String(e??"").trim();return/^[0-9a-fA-F]{64}$/.test(t)?"0x"+t.toLowerCase():t};$o={implementation:"0x5c60da1b",implementationCodeHash:"0xbc0a3981"}});var Zn={};ge(Zn,{ESCROW_METHODS:()=>Ot,decodeBytes32:()=>sf,decodeStatus:()=>Ko,decodeUint64:()=>af,encodeClaim:()=>qu,encodeMarkReady:()=>Ju,encodeRead:()=>of,encodeRefund:()=>tf,encodeStatus:()=>Vo,encodeT1:()=>nf,encodeTermsHash:()=>rf,orderTerms:()=>cf});function Ju(){return Ot.markReady}function qu(e){return Ot.claim+ef(e,"secret")}function ef(e,t){let n=String(e||"").replace(/^0x/i,"").toLowerCase();if(!/^[0-9a-f]{1,64}$/.test(n))throw new Error(t+" must be a number of up to 32 bytes: "+e);return n.padStart(64,"0")}function tf(e){return Ot.refund+ef(e,"half")}function Vo(){return Ot.status}function nf(){return Ot.t1}function rf(){return Ot.termsHash}function of(e){let t=Ot[e];if(typeof t!="string"||!/^0x[0-9a-f]{8}$/.test(t))throw new Error("no such escrow method: "+e);return t}function sf(e,t="value"){let n=String(e||"").replace(/^0x/,"");if(n.length<64)throw new Error("short answer "+t+": "+e);return"0x"+n.slice(0,64).toLowerCase()}function af(e,t="value"){let n=String(e||"").replace(/^0x/,"");if(n.length<64)throw new Error("short answer "+t+": "+e);let r=BigInt("0x"+n.slice(0,64));if(r>18446744073709551615n)throw new Error("answer "+t+" does not fit in uint64: "+r);return Number(r)}function Ko(e){let t=String(e||"").replace(/^0x/,"");if(t.length<256)throw new Error("short status() answer: "+e);let n=r=>t.slice(r*64,(r+1)*64);return{isFunded:BigInt("0x"+n(0))!==0n,isClaimed:BigInt("0x"+n(1))!==0n,isRefunded:BigInt("0x"+n(2))!==0n,balance:BigInt("0x"+n(3))}}function cf({locker:e,claimer:t,commitHalfLocker:n,commitHalfClaimer:r,edPointLocker:o,edPointClaimer:s,amount:i,readyBy:a,t1:c}){for(let[l,d]of Object.entries({locker:e,claimer:t,commitHalfLocker:n,commitHalfClaimer:r,edPointLocker:o,edPointClaimer:s,amount:i}))if(d==null||d==="")throw new Error("order term not set: "+l);if(Number(a)<=Math.floor(Date.now()/1e3))throw new Error("readyBy must be in the future: "+a);if(Number(c)<=Number(a))throw new Error("t1 must be later than readyBy");return{locker:e,claimer:t,commitHalfLocker:n,commitHalfClaimer:r,edPointLocker:o,edPointClaimer:s,amount:i,readyBy:a,t1:c}}var Ot,Yo=Q(()=>{Ot={markReady:"0x1ca087e7",claim:"0xbd66528a",refund:"0x7249fbb6",status:"0x200d2ed2",t1:"0xfb5343f3",readyBy:"0x53fc2f40",ready:"0x6defbf80",revealedHalf:"0x3f267bb6",edPointLocker:"0x8c03382b",edPointClaimer:"0xdd98c465",edViewPointLocker:"0x9a06a5fe",commitHalfLocker:"0x498b422e",commitHalfClaimer:"0x7d4c81f7",termsHash:"0xb311d9fd",fee:"0xddca3f43",feeBps:"0x24a9d853",feeRecipient:"0x46904840",feeOnTop:"0x2296cc23",registry:"0x7b103999",cashier:"0xed740e97",provider:"0x085d4883",quoteKey:"0x391d53ca",validUntil:"0xddac6654",nonce:"0xaffed0e0"}});function ja(e,t){let n=BigInt(e==null||e===""?0:e),r=BigInt(Number(t)||0);if(n<0n||r<0n)throw new Error("fee: negative amount or rate");return n*r/10000n}function df(e){if(!e||typeof e!="object")throw new Error("no signed quote: there is nowhere to take the fee and the registry address");let t=BigInt(String(e.amount)),n=Number(e.feeBps===void 0||e.feeBps===null?0:e.feeBps);if(!Number.isFinite(n)||n<0||n>200)throw new Error("fee rate outside the ceiling: "+e.feeBps);let r=ja(t,n);if(BigInt(String(e.fee===void 0||e.fee===null?0:e.fee))!==r)throw new Error("signed fee "+e.fee+" diverges from the formula amount * rate ("+r+") - signature not started");if(n!==0&&bb(e.feeRecipient))throw new Error("with a non-zero rate the fee recipient must be named");let o=lf(e.locker,e.provider),s=lf(e.claimer,e.provider);if(o===s)throw new Error("cannot tell who pays the fee: the provider is named neither as depositor nor as claimer");let i=s,a={bps:n,feeWei:r,totalWei:i?t+r:t,recipient:e.feeRecipient||null,feeOnTop:i,legacy:!1};return Qn=a,a}function uf(){return Qn}function ff(){return!Qn||!Number.isFinite(Number(Qn.bps))?null:Number(Qn.bps)/1e4}async function pf(){return Qn}var lf,bb,Qn,Go=Q(()=>{lf=(e,t)=>String(e||"").toLowerCase()===String(t||"").toLowerCase(),bb=e=>!e||/^0x0{40}$/i.test(String(e)),Qn=null});function zo(){let e=new Uint8Array(32);return crypto.getRandomValues(e),"0x"+Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}function mf({locker:e,claimer:t,commitHalfLocker:n,commitHalfClaimer:r,edPointLocker:o,edPointClaimer:s,edViewPointLocker:i,amountWei:a,salt:c,claimWindowSeconds:l=3600,readyWindowSeconds:d=14400,readyBy:u,t1:f}){for(let[E,k]of Object.entries({commitHalfLocker:n,commitHalfClaimer:r,edPointLocker:o,edPointClaimer:s,edViewPointLocker:i}))if(!k)throw new Error("order term not set: "+E);let p=Math.floor(Date.now()/1e3),h=u!=null&&u!=="",w=f!=null&&f!=="",b=h?Number(u):p+d,T=w?Number(f):b+l;if(!(T>b))throw new Error("the settlement deadline must be later than the readiness deadline: t1="+T+", readyBy="+b);let B=vi({nowSec:p,readyBy:b,t1:T,...Ar});if(B.blocks)throw new Error("order deadlines are not usable: "+B.reason);return{locker:e,claimer:t,commitHalfLocker:n,commitHalfClaimer:r,edPointLocker:o,edPointClaimer:s,edViewPointLocker:i,amount:String(a),readyBy:String(b),t1:String(T),salt:c}}function $a(e,t=18){let[n,r=""]=String(e).split("."),o=(r+"0".repeat(t)).slice(0,t);return BigInt(n||"0")*10n**BigInt(t)+BigInt(o||"0")}function wf(e){if(!e||!Array.isArray(e.logs))return null;for(let t of e.logs){let n=t.topics||[];if(String(n[0]).toLowerCase()!==La||n.length<2)continue;let r="0x"+String(n[1]).slice(26).toLowerCase();if(/^0x[0-9a-f]{40}$/.test(r)&&!/^0x0{40}$/.test(r))return r}return null}async function gb(e,t,{tries:n=12,delayMs:r=1500}={}){for(let o=0;o<n;o+=1){let s=await e({hash:t}).catch(()=>null);if(s)return s;await new Promise(i=>setTimeout(i,r))}return null}async function Xa({factory:e,locker:t,claimer:n,commitHalfLocker:r,commitHalfClaimer:o,edPointLocker:s,edPointClaimer:i,edViewPointLocker:a,salt:c,amountWei:l,amountLabel:d,claimWindowSeconds:u,readyWindowSeconds:f,readyBy:p,t1:h,quote:w,call:b,send:T,receipt:B,onStep:E}){if(!e)throw new Error("no escrow factory address set for this network");if(!t)throw new Error("no EVM wallet connected: there is nobody to deposit");if(!n)throw new Error("the order recipient (claimer) is not set");if(t.toLowerCase()===n.toLowerCase())throw new Error("locker and claimer must not coincide: the contract rejects such an order");if(!w||typeof w!="object")throw new Error("a signed quote is required: the factory takes a quote, not bare order terms");let k=c||zo(),m=mf({locker:t,claimer:n,commitHalfLocker:r,commitHalfClaimer:o,edPointLocker:s,edPointClaimer:i,edViewPointLocker:a,amountWei:l,salt:k,claimWindowSeconds:u,readyWindowSeconds:f,readyBy:p,t1:h});E?.("computing the escrow address");let A={...w,commitHalfLocker:m.commitHalfLocker,edPointLocker:m.edPointLocker,edViewPointLocker:m.edViewPointLocker};for(let S of["locker","claimer","amount","readyBy","t1","salt"])if(String(w[S]).toLowerCase()!==String(m[S]).toLowerCase())throw new Error("the quote and the order terms diverge on field "+S);let x=await b({to:e,data:Ma(A)}),N=Xo(x);if(!/^0x[0-9a-fA-F]{40}$/.test(N)||/^0x0{40}$/i.test(N))throw new Error("the factory returned an invalid escrow address: "+String(x).slice(0,40));E?.("checking the order is not already on chain");let D=null;try{let S=await b({to:N,data:Vo()});D=String(S||"").replace(/^0x/,"").length>=256?{status:Ko(S)}:{status:null}}catch(S){D={error:String(S&&S.message||S)}}let O=Ei({status:D.status,error:D.error,address:N});if(O.blocks)throw new Error("signature not started: "+O.reason);E?.("reading the escrow fee from the signed quote");let H=df(w),M=H.totalWei,W=H.feeWei>0n?" (order "+l+" + fee "+H.feeWei+")":"";E?.("locking "+(d||"funds")+W+" in one transaction - confirm in wallet");let R=Ua(A),P=await T({to:e,data:R,value:"0x"+M.toString(16),gas:hf}),$=null,C=null;if(typeof B=="function"){let S=await gb(B,P);$=wf(S),S&&Number.isFinite(Number(S.blockNumber))&&(C=Number(S.blockNumber)),S?$?$!==String(N).toLowerCase()&&(console.warn("[escrow] receipt address "+$+" != predicted "+N+" - using the receipt one"),E?.("receipt address differs from predicted - using the receipt one")):E?.("no OrderCreated in the receipt - using the predicted address"):E?.("no receipt yet - using the predicted address")}let K=$||N,Y=P;return{feeWei:H.feeWei,feeTotalWei:M,feeBps:H.bps,feeWasLegacyFactory:!!H.legacy,escrow:K,predictedEscrow:N,escrowMismatch:!!($&&$!==String(N).toLowerCase()),salt:k,birthBlock:C,terms:m,createHash:P,lockHash:Y}}var hf,Dr=Q(()=>{Wa();Yo();Go();Ai();qe();hf=700000n});var yf,Va,Pr,zt,bf,xb,kb,gf,Hr,Ya,xf,kf,Sb,Ka,Zo,Ga,vb,Sf,za,Qo=Q(()=>{qe();yf=["native","wrapped"],Va="native",Pr=Object.freeze({NATIVE:"native",WRAPPED:"wrapped"}),zt=[],bf=()=>zt.length===0?null:zt.length===1?zt[0]:zt,xb=(e=null)=>(Array.isArray(e)?zt=e.filter(Boolean):e&&typeof e=="object"?zt=[e]:zt=[],bf()),kb=()=>bf(),gf=e=>zt.filter(t=>t&&Number(t.chainId)===Number(e)),Hr=e=>e&&wo[e]||null,Ya=()=>Object.keys(wo).sort(),xf=e=>Object.keys((Hr(e)||{}).networks||{}).map(Number).filter(Number.isFinite).sort((t,n)=>t-n),kf=e=>{let t=Hr(e);return t?t.settles===void 0?null:t.settles:null},Sb=(e,t={})=>t.settles?t.settles:kf(e),Ka=(e,t,n,r={})=>{let o=Hr(e)||{};return{id:e,venue:r.venue||o.venue||e,shape:r.shape||o.shape||"async",chainId:Number(t),slug:n.slug===void 0?null:n.slug,orderbook:n.orderbook===void 0?null:n.orderbook,contract:n.contract===void 0?null:n.contract,settles:Sb(e,r)}},Zo=e=>{let t=Number(e),n=new Map;for(let r of Ya()){let o=Hr(r),s=o.networks&&o.networks[t];s&&n.set(r,Ka(r,t,s))}for(let r of gf(t))n.set(r.id,Ka(r.id,t,{slug:r.slug,orderbook:r.orderbook,contract:r.contract},{settles:r.settles,venue:r.venue,shape:r.shape}));return[...n.values()].sort((r,o)=>r.id.localeCompare(o.id))},Ga=(e,t=null)=>{let n=Number(e);if(t){let o=gf(n).find(s=>s.id===t);return o?Ka(o.id,n,{slug:o.slug,orderbook:o.orderbook,contract:o.contract},{settles:o.settles,venue:o.venue,shape:o.shape}):Zo(n).find(s=>s.id===t)||null}let r=Zo(n);return r.length?r[0]:null},vb=e=>xf(e||Ya()[0]||null),Sf=({chainId:e=null,providerId:t=null,need:n=Va}={})=>{let r=Number(e),o=Number.isFinite(r),s=yf.includes(n)?n:Va,i=o?Zo(r):[];if(!i.length)return{ok:!1,reason:"no-async-provider",chainId:o?r:null,need:s,provider:t||null,known:vb(t)};let a=null;if(t&&(a=i.find(p=>p.id===t)||null,!a))return{ok:!1,reason:"no-async-provider",chainId:r,need:s,provider:t,known:i.map(p=>p.id)};let c=a?[a]:i,l=c.filter(p=>p.settles===s);if(l.length){let p=l[0];return{ok:!0,kind:"single",...p,need:s,provider:p.id,legs:[p]}}let d=c.filter(p=>p.settles===Pr.WRAPPED),u=i.filter(p=>p.settles===Pr.NATIVE);if(s===Pr.NATIVE&&d.length&&u.length){let p=d[0],h=u[0];return{ok:!0,kind:"composition",need:s,chainId:r,provider:p.id,venue:p.venue,shape:"async",orderbook:p.orderbook,legs:[p,h]}}return{ok:!1,reason:s===Pr.NATIVE&&d.length&&!u.length?"no-native-async-provider":"no-async-provider",chainId:r,need:s,missing:s,provider:(a||d[0]||i[0]).id,known:i.map(p=>p.id)}},za=Sf});function Eb({owner:e,spender:t,value:n,deadline:r,signature:o}){if(!qo(e)||!qo(t))throw new Error("permit: owner and spender must be addresses");let s=ts(o);if(s.length!==130)throw new Error("permit: the signature must be 65 bytes, got "+s.length/2);let i=parseInt(s.slice(128,130),16);if(i<27&&(i+=27),i!==27&&i!==28)throw new Error("permit: v outside {27,28}: "+i);return Lr.permit.hex+es(e)+es(t)+Jo(n)+Jo(r)+Jo(i)+s.slice(0,64)+s.slice(64,128)}function Bb({code:e=null,domainSeparator:t=null,nonces:n=null,owner:r=null}={}){let o=ts(e);if(o.length===0)return{supported:null,kind:"no-code",reason:"no code at the token address - not a token, the allowance cannot be read"};if(!qo(r))return{supported:null,kind:"no-owner",reason:"no owner given - cannot read nonces(owner)"};let s=vf(t);if(s===null)return{supported:null,kind:"domain-unread",reason:"DOMAIN_SEPARATOR did not answer 32 bytes: could not read"};if(s!==32)return{supported:!1,kind:"domain-empty",reason:"DOMAIN_SEPARATOR returned "+s+" bytes instead of 32: no EIP-712 domain declared"};let i=vf(n);return i===null?{supported:null,kind:"nonces-unread",reason:"nonces(owner) did not answer: could not read"}:i!==32?{supported:!1,kind:"nonces-empty",reason:"nonces(owner) returned "+i+" bytes instead of 32: no EIP-2612 counter"}:o.toLowerCase().includes(Lr.permit.hex.slice(2))?{supported:!0,kind:"eip2612",reason:"the token declares an EIP-712 domain, a nonces counter and the permit selector"}:{supported:!1,kind:"permit-selector-absent",reason:"the token bytecode has no permit selector: no signature allowance"}}function Ib({orchestrator:e=null,permitSupported:t=null,token:n=null,nativeBalanceWei:r=null,gasNeedWei:o=null,asyncProvider:s=null,chainId:i=null}={}){let a=Ef(o),c=s&&typeof s=="object"?s:i==null?null:za({chainId:i}),l=!!(c&&c.ok===!0),d=c&&c.ok===!1&&c.reason?String(c.reason):"no-async-provider";if(a!==null&&a>0n){let u=Ef(r);if(u===null)return{ok:!1,blocked:!1,checked:!1,kind:"balance-unread",path:null,gasNeedWei:a.toString(),reason:"the wallet's native balance was not read, so it is unknown which path fits - read the balance before choosing"};if(u>=a)return{ok:!0,blocked:!1,checked:!0,kind:"own-gas",path:"sync",nativeBalanceWei:u.toString(),gasNeedWei:a.toString(),reason:"the wallet's own native covers the gas this deal needs, so the ordinary synchronous path is taken"};let f={checked:!0,nativeBalanceWei:u.toString(),gasNeedWei:a.toString(),shortfallWei:(a-u).toString()};return l?{ok:!0,blocked:!1,...f,kind:"async-route",path:"async",provider:c.provider??null,venue:c.venue??null,reason:"the wallet's own native does not cover the gas this deal needs, but an asynchronous provider serves this network: the swap settles first and the escrow is funded after it, so the deposit's gas is paid later"}:{ok:!1,blocked:!0,...f,kind:"no-async-provider",path:null,reason:"the wallet's own native does not cover the gas this deal needs and no asynchronous provider serves this network ("+d+"): there is no path for a purchase without own native coin here"}}return qo(e)?t===!1?{ok:!1,blocked:!0,kind:"token-no-permit",reason:"the token has no signature allowance (EIP-2612): the allowance must be a separate approve, i.e. a separate transaction - the path does not assemble into one transaction"}:t!==!0?{ok:!1,blocked:!0,kind:"permit-unproven",reason:'unknown whether the token supports a signature allowance: "not checked" is not "possible". The capability must be read from the chain before assembling the path'}:{ok:!0,blocked:!1,kind:"one-tx-possible",path:"sync",reason:"an executor is present and the token declares EIP-2612: the one-transaction path assembles"}:{ok:!1,blocked:!0,kind:"no-orchestrator",path:null,reason:"no executor contract: only a contract could pull a token by the user signature and deposit native into the escrow in one transaction, and this build has none"}}var Af,Lr,ts,qo,es,Jo,vf,Ef,Ab,Nb,Tb,Nf=Q(()=>{Qo();Af={approve:{hex:"0x095ea7b3",signature:"approve(address,uint256)"},allowance:{hex:"0xdd62ed3e",signature:"allowance(address,address)"},balanceOf:{hex:"0x70a08231",signature:"balanceOf(address)"}},Lr={permit:{hex:"0xd505accf",signature:"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"},nonces:{hex:"0x7ecebe00",signature:"nonces(address)"},DOMAIN_SEPARATOR:{hex:"0x3644e515",signature:"DOMAIN_SEPARATOR()"}},ts=e=>String(e??"").replace(/^0x/,""),qo=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),es=e=>ts(e).toLowerCase().padStart(64,"0"),Jo=e=>BigInt(e).toString(16).padStart(64,"0"),vf=e=>{let t=ts(e);return t.length===0||t.length%2?null:t.length/2},Ef=e=>{if(e==null||e==="")return null;try{return BigInt(typeof e=="bigint"?e:String(e))}catch{return null}};Ab=e=>Lr.nonces.hex+es(e),Nb=()=>Lr.DOMAIN_SEPARATOR.hex,Tb=({spender:e,amountWei:t})=>Af.approve.hex+es(e)+Jo(t)});async function ec({fetchImpl:e,url:t,method:n="GET",body:r=null,timeoutMs:o=2e4}){let s=e||(typeof fetch=="function"?fetch:null);if(!s)return ae("kyber-unreachable",{why:"no-fetch"});let i=null;try{let a={method:n,headers:r===null?void 0:{"content-type":"application/json"}};r!==null&&(a.body=JSON.stringify(r));let c=typeof AbortController=="function"?new AbortController:null;c&&(a.signal=c.signal,i=setTimeout(()=>c.abort(),o));let l=await s(t,a),d=null;try{d=await l.text()}catch{d=null}return{ok:!0,status:Number(l.status),text:d}}catch(a){return ae("kyber-unreachable",{why:String(a&&a.message||a)})}finally{i&&clearTimeout(i)}}function tc(e={}){let t=e.maker,n=e.receiver===void 0||e.receiver===null?t:e.receiver,r={chainId:String(e.chainId),makerAsset:e.makerAsset,takerAsset:e.takerAsset,maker:t,receiver:n,makingAmount:String(e.makingAmount),takingAmount:String(e.takingAmount),expiredAt:e.expiredAt};e.allowedSenders!==void 0&&e.allowedSenders!==null&&(r.allowedSenders=e.allowedSenders);let o=[];return Number.isInteger(Number(r.chainId))||o.push("chainId"),Mr(t)||o.push("maker"),Mr(r.makerAsset)||o.push("makerAsset"),Mr(r.takerAsset)||o.push("takerAsset"),Mr(r.receiver)||o.push("receiver"),Tf(r.makingAmount)||o.push("makingAmount"),Tf(r.takingAmount)||o.push("takingAmount"),Number.isInteger(Number(r.expiredAt))||o.push("expiredAt"),o.length?ae("kyber-bad-order",{missing:[...new Set(o)]}):{ok:!0,chainId:Number(r.chainId),params:r,expectedOutWei:String(r.takingAmount)}}async function nc({params:e,chainId:t=null,orderbook:n=null,fetchImpl:r=null,timeoutMs:o=2e4}={}){let s=Number(t!==null?t:e&&e.chainId),i=n?String(n).replace(/\/+$/,""):ns;if(!Number.isFinite(s))return ae("kyber-unknown-network",{chainId:null});if(!e||typeof e!="object")return ae("kyber-bad-order",{field:"params"});let a=await ec({fetchImpl:r,url:qa(i,Of),method:"POST",body:e,timeoutMs:o});if(!a.ok)return a;if(a.status>=400)return ae("kyber-refused",{status:a.status,stage:"sign-message",reason:null});let c=null;try{c=JSON.parse(a.text)}catch{c=null}let l=c&&c.data;if(!l||typeof l!="object")return ae("kyber-bad-response",{where:"sign-message"});let d=l.domain||{},u=l.message||{},f=l.types&&Array.isArray(l.types.Order)?l.types.Order.map(b=>(b?b.name:"")+":"+(b?b.type:"")).join(","):null,p=Qa.map(([b,T])=>b+":"+T).join(",");if(!(String(d.name)===Bf&&String(d.version)===If&&Number(d.chainId)===s&&String(d.verifyingContract||"").toLowerCase()===Za.toLowerCase()))return ae("kyber-bad-response",{where:"sign-message",field:"domain"});if(f!==p)return ae("kyber-bad-response",{where:"sign-message",field:"types"});let w=Qa.filter(([b])=>u[b]===void 0||u[b]===null||u[b]==="");return w.length?ae("kyber-bad-response",{where:"sign-message",missing:w.map(b=>b[0])}):{ok:!0,chainId:s,orderbook:i,contract:Za,salt:String(u.salt),message:u,typedData:{domain:d,types:l.types,primaryType:l.primaryType||"Order",message:u}}}async function rc({typedData:e,wallet:t=null,address:n=null}={}){if(!e||typeof e!="object")return ae("kyber-bad-order",{field:"typedData"});try{if(t&&typeof t.signTypedData=="function"){let o=await t.signTypedData(e);return Ja(o)?{ok:!0,signature:o}:ae("kyber-sign-failed",{why:"bad-signature-shape"})}let r=t&&typeof t.driver=="function"?t.driver():t;if(r&&typeof r.request=="function"){let o=n||(t&&typeof t.address=="function"?await t.address():null),s=await r.request({method:"eth_signTypedData_v4",params:[o,JSON.stringify(e)]});return Ja(s)?{ok:!0,signature:s}:ae("kyber-sign-failed",{why:"bad-signature-shape"})}return ae("kyber-sign-failed",{why:"no-wallet"})}catch(r){return ae("kyber-sign-failed",{why:String(r&&r.code||r&&r.message||r)})}}async function oc({params:e,salt:t,signature:n,orderbook:r=null,chainId:o=null,fetchImpl:s=null,timeoutMs:i=2e4}={}){let a=r?String(r).replace(/\/+$/,""):ns;if(!e||typeof e!="object")return ae("kyber-bad-order",{field:"params"});if(!Ja(n))return ae("kyber-bad-order",{field:"signature"});if(t==null||t==="")return ae("kyber-bad-order",{field:"salt"});let c={...e,salt:String(t),signature:n},l=await ec({fetchImpl:s,url:qa(a,_f),method:"POST",body:c,timeoutMs:i});if(!l.ok)return l;if(l.status>=400)return ae("kyber-refused",{status:l.status,stage:"submit",reason:null});let d=null;try{d=JSON.parse(l.text)}catch{d=null}let u=d&&d.data,f=u&&u.id;return!Number.isInteger(Number(f))||Number(f)<=0?ae("kyber-bad-response",{where:"submit",got:typeof f}):{ok:!0,id:Number(f),chainId:Number.isFinite(Number(o))?Number(o):null}}async function Hf({id:e,chainId:t,maker:n,orderbook:r=null,fetchImpl:o=null,timeoutMs:s=2e4}={}){let i=r?String(r).replace(/\/+$/,""):ns,a=Number(t);if(!Number.isInteger(Number(e))||Number(e)<=0)return ae("kyber-bad-order",{field:"id"});if(!Mr(n))return ae("kyber-bad-order",{field:"maker"});for(let c of Pf){let l=Rf+"?chainId="+a+"&maker="+n+"&status="+c,d=await ec({fetchImpl:o,url:qa(i,l),timeoutMs:s});if(!d.ok)return d;if(d.status>=400)return ae("kyber-refused",{status:d.status,stage:"orders"});let u=null;try{u=JSON.parse(d.text)}catch{u=null}let f=u&&u.data&&u.data.orders;if(!Array.isArray(f))return ae("kyber-bad-response",{where:"orders"});let p=f.find(h=>h&&Number(h.id)===Number(e))||null;if(p){let h=p.status;return typeof h!="string"||!Cf.includes(h)?ae("kyber-bad-response",{where:"status",got:typeof h=="string"?h:null}):{ok:!0,status:h,order:p,bucket:c}}}return ae("kyber-order-unknown",{id:Number(e),maker:n})}async function sc({id:e,chainId:t,maker:n,orderbook:r=null,fetchImpl:o=null,pollMs:s=5e3,timeoutMs:i=3e5,now:a=null,sleep:c=null,onTick:l=null}={}){if(!Number.isInteger(Number(e))||Number(e)<=0)return ae("kyber-bad-order",{field:"id"});let d=typeof a=="function"?a:()=>Date.now(),u=typeof c=="function"?c:b=>new Promise(T=>setTimeout(T,b)),f=Number.isFinite(s)&&s>0?s:5e3,p=Number.isFinite(i)&&i>0?i:3e5,h=d(),w=null;for(;;){let b=await Hf({id:e,chainId:t,maker:n,orderbook:r,fetchImpl:o});if(!b.ok)return b;if(w=b.status,typeof l=="function"&&l(w),Ff.includes(w))return{ok:!0,done:!0,settled:w===Df,status:w,id:Number(e)};if(d()-h>=p)return{...ae("kyber-not-settled",{id:Number(e),status:w,waitedMs:d()-h}),status:w,id:Number(e)};await u(f)}}var ns,Ob,Bf,If,Za,Qa,Of,_f,Rf,Cf,Ff,Df,_b,Pf,Rb,ae,Mr,Tf,Ja,qa,Cb,ic=Q(()=>{ns="https://limit-order.kyberswap.com",Ob=["KyberSwap","Limit","Order"].join(" "),Bf=["Kyber","DSLO","Protocol"].join(" "),If="1",Za="0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C",Qa=[["salt","uint256"],["makerAsset","address"],["takerAsset","address"],["maker","address"],["receiver","address"],["allowedSender","address"],["makingAmount","uint256"],["takingAmount","uint256"],["feeConfig","uint256"],["makerAssetData","bytes"],["takerAssetData","bytes"],["getMakerAmount","bytes"],["getTakerAmount","bytes"],["predicate","bytes"],["interaction","bytes"]],Of="/write/api/v1/orders/sign-message",_f="/write/api/v1/orders",Rf="/read-ks/api/v1/orders",Cf=["active","open","partially_filled","cancelling","closed","filled","cancelled","expired"],Ff=["filled","cancelled","expired"],Df="filled",_b=["open","partially_filled","cancelling"],Pf=["active","closed"],Rb=["kyber-unknown-network","kyber-bad-order","kyber-sign-failed","kyber-unreachable","kyber-order-unknown","kyber-refused","kyber-bad-response","kyber-not-settled"],ae=(e,t={})=>({ok:!1,code:e,params:t}),Mr=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),Tf=e=>{try{return BigInt(String(e))>0n}catch{return!1}},Ja=e=>/^0x[0-9a-fA-F]{130}$/.test(String(e||"")),qa=(e,t)=>String(e||"").replace(/\/+$/,"")+t;Cb=e=>{let t=e&&e.code?String(e.code):null;return{"kyber-unknown-network":"no KyberSwap liquidity provider serves this network","kyber-bad-order":"the swap intent is incomplete and was not sent","kyber-sign-failed":"the wallet did not sign the swap intent","kyber-unreachable":"the KyberSwap order book could not be reached","kyber-order-unknown":"the KyberSwap order book does not know this order","kyber-refused":"the KyberSwap order book did not accept the order","kyber-bad-response":"the KyberSwap order book answered in a shape we do not know","kyber-not-settled":"the swap did not settle in time"}[t]||t||"the liquidity leg stopped"}});function fc(e={}){let t=Number(e.chainId),n=uc(t,e.orderbook||null,e.providerId||null);if(!n)return Te("cow-unknown-network",{chainId:Number.isFinite(t)?t:null});let r=e.owner,o=e.receiver===void 0||e.receiver===null?r:e.receiver,s={sellToken:e.sellToken,buyToken:e.buyToken,receiver:o,sellAmount:Ur(e.sellAmountWei)===null?e.sellAmountWei:String(e.sellAmountWei),buyAmount:Ur(e.buyAmountWei)===null?e.buyAmountWei:String(e.buyAmountWei),validTo:e.validTo,appData:e.appData===void 0||e.appData===null?"0x"+"00".repeat(32):e.appData,feeAmount:e.feeAmountWei===void 0||e.feeAmountWei===null?"0":String(e.feeAmountWei),kind:e.kind===void 0||e.kind===null?"sell":e.kind,partiallyFillable:e.partiallyFillable===void 0||e.partiallyFillable===null?!1:e.partiallyFillable,sellTokenBalance:e.sellTokenBalance===void 0||e.sellTokenBalance===null?"erc20":e.sellTokenBalance,buyTokenBalance:e.buyTokenBalance===void 0||e.buyTokenBalance===null?"erc20":e.buyTokenBalance},i=[];for(let[a]of lc){let c=s[a];(c==null||c==="")&&i.push(a)}return rs(r)||i.push("owner"),Pb(s.appData)||i.push("appData"),(!rs(s.sellToken)||!rs(s.buyToken)||!rs(s.receiver))&&i.push("token"),(Ur(s.sellAmount)===null||Ur(s.buyAmount)===null)&&i.push("amount"),Ur(s.validTo)===null&&i.push("validTo"),(!dc.length||!["sell","buy"].includes(s.kind))&&i.push("kind"),i.length?{...Te("cow-bad-order",{missing:[...new Set(i)]}),orderbook:n}:{ok:!0,chainId:Number.isFinite(t)?t:null,orderbook:n,owner:r,order:s,typedData:Yf({order:s,chainId:t,settlement:e.settlement||cc})}}async function pc({typedData:e,wallet:t=null,address:n=null}={}){if(!e||typeof e!="object")return Te("cow-bad-order",{field:"typedData"});try{if(t&&typeof t.signTypedData=="function"){let o=await t.signTypedData(e);return ac(o)?{ok:!0,signature:o}:Te("cow-sign-failed",{why:"bad-signature-shape"})}let r=t&&typeof t.driver=="function"?t.driver():t;if(r&&typeof r.request=="function"){let o=n||(t&&typeof t.address=="function"?await t.address():null),s=await r.request({method:"eth_signTypedData_v4",params:[o,JSON.stringify(e)]});return ac(s)?{ok:!0,signature:s}:Te("cow-sign-failed",{why:"bad-signature-shape"})}return Te("cow-sign-failed",{why:"no-wallet"})}catch(r){return Te("cow-sign-failed",{why:String(r&&r.code||r&&r.message||r)})}}async function zf({fetchImpl:e,url:t,method:n="GET",body:r=null,timeoutMs:o=2e4}){let s=e||(typeof fetch=="function"?fetch:null);if(!s)return Te("cow-unreachable",{why:"no-fetch"});let i=null;try{let a={method:n,headers:r===null?void 0:{"content-type":"application/json"}};r!==null&&(a.body=JSON.stringify(r));let c=typeof AbortController=="function"?new AbortController:null;c&&(a.signal=c.signal,i=setTimeout(()=>c.abort(),o));let l=await s(t,a),d=null;try{d=await l.text()}catch{d=null}return{ok:!0,status:Number(l.status),text:d}}catch(a){return Te("cow-unreachable",{why:String(a&&a.message||a)})}finally{i&&clearTimeout(i)}}async function mc({orderbook:e,order:t,signature:n,owner:r,fetchImpl:o=null,timeoutMs:s=2e4,signingScheme:i="eip712",from:a=null}={}){let c=e?String(e).replace(/\/+$/,""):null;if(!c)return Te("cow-unknown-network",{});if(!ac(n))return Te("cow-bad-order",{field:"signature"});let l=await zf({fetchImpl:o,url:Kf(c,Mf),method:"POST",body:Gf({order:t,signature:n,owner:r,signingScheme:i,from:a}),timeoutMs:s});return l.ok?l.status>=400?Te("cow-refused",{status:l.status,reason:null}):typeof l.text!="string"||!Vf(l.text.trim())?Te("cow-bad-response",{where:"submit"}):{ok:!0,uid:l.text.trim()}:l}async function Zf({orderbook:e,uid:t,fetchImpl:n=null,timeoutMs:r=2e4}={}){let o=e?String(e).replace(/\/+$/,""):null;if(!o)return Te("cow-unknown-network",{});if(!Vf(t))return Te("cow-bad-order",{field:"uid"});let s=await zf({fetchImpl:n,url:Kf(o,Uf+t),timeoutMs:r});if(!s.ok)return s;if(s.status===404)return Te("cow-order-unknown",{uid:t});if(s.status>=400)return Te("cow-refused",{status:s.status});let i=null;try{i=JSON.parse(s.text)}catch{i=null}let a=i&&i.status;return typeof a!="string"||!dc.includes(a)?Te("cow-bad-response",{where:"status",got:typeof a=="string"?a:null}):{ok:!0,status:a,order:i}}async function hc({orderbook:e,uid:t,fetchImpl:n=null,pollMs:r=5e3,timeoutMs:o=3e5,now:s=null,sleep:i=null,onTick:a=null}={}){let c=typeof s=="function"?s:()=>Date.now(),l=typeof i=="function"?i:h=>new Promise(w=>setTimeout(w,h)),d=Number.isFinite(r)&&r>0?r:5e3,u=Number.isFinite(o)&&o>0?o:3e5,f=c(),p=null;for(;;){let h=await Zf({orderbook:e,uid:t,fetchImpl:n});if(!h.ok)return h;if(p=h.status,typeof a=="function"&&a(p),$f.includes(p))return{ok:!0,done:!0,settled:p===Xf,status:p,uid:t};if(c()-f>=u)return{...Te("cow-not-settled",{uid:t,status:p,waitedMs:c()-f}),status:p,uid:t};await l(d)}}function wc(e,t=""){let n=String(t||"").trim(),r={"async-plan":"Building the swap intent","async-sign":"Waiting for the wallet to sign the swap intent","async-submit":"Submitting the swap intent to the order book","async-wait":"Waiting for the swap to settle","async-settled":"Swap settled - now funding the escrow","async-swap":"Swapping your token for WETH","async-convert":"Converting WETH into native ETH","async-fund":"Funding the escrow with the settled native ETH"}[e]||null;return r?r+(n?": "+n:""):n||String(e||"")}function Qf({wethOutWei:e=null,leg2FeeWei:t="0",depositWei:n=null,reserveWei:r="0"}={}){let o=os(e),s=t==null||t===""?0n:os(t),i=os(n),a=r==null||r===""?0n:os(r);if(o===null||s===null||s<0n||i===null||a===null||a<0n)return{ok:!1,code:"composition-short",measured:!1,reason:"the composition's amounts or the deposit were not measured"};let c=i+a+s,l=o-s;return o<c?{ok:!1,code:"composition-short",measured:!0,wethOutWei:o.toString(),leg2FeeWei:s.toString(),depositWei:i.toString(),reserveWei:a.toString(),nativeOutWei:(l>0n?l:0n).toString(),needWei:c.toString(),shortfallWei:(c-o).toString(),reason:"the liquidity leg does not cover the escrow deposit, its reserve and the conversion fee"}:{ok:!0,measured:!0,wethOutWei:o.toString(),leg2FeeWei:s.toString(),nativeOutWei:l.toString(),needWei:c.toString(),depositWei:i.toString(),reserveWei:a.toString()}}async function Jf({route:e={},request:t={},wallet:n=null,fund:r=null,fetchImpl:o=null,pollMs:s=5e3,timeoutMs:i=3e5,now:a=null,sleep:c=null,onStep:l=null}={}){let d=(C,K)=>{typeof l=="function"&&l(C,K,wc(C,K))},u=Array.isArray(e.legs)?e.legs:[],f=u.find(C=>C&&C.settles==="wrapped")||null,p=u.find(C=>C&&C.settles==="native")||null;if(!f||!p){let C={ok:!1,code:"async-bad-composition",params:{legs:u.map(K=>K&&K.settles)}};return{ok:!1,stage:"plan",...C,words:Se(C)}}let h=e.chainId!==void 0&&e.chainId!==null?e.chainId:t.chainId,w=t.owner,b=t.wrappedToken,T=t.leg2FeeWei===void 0||t.leg2FeeWei===null?"0":t.leg2FeeWei;d("async-plan","token -> WETH -> native coin");let B=Qf({wethOutWei:t.wethOutWei,leg2FeeWei:T,depositWei:t.depositWei,reserveWei:t.reserveWei});if(!B.ok)return{ok:!1,stage:"plan",...B,words:Se(B)};let E=B.wethOutWei,k=f.orderbook||null,m=tc({chainId:h,maker:w,receiver:w,makerAsset:t.sellToken,takerAsset:b,makingAmount:t.sellAmountWei,takingAmount:E,expiredAt:t.expiredAt});if(!m.ok)return{ok:!1,stage:"swap",leg:"liquidity",...m,words:Se(m)};d("async-swap","building the liquidity intent");let A=await nc({params:m.params,chainId:h,orderbook:k,fetchImpl:o});if(!A.ok)return{ok:!1,stage:"swap",leg:"liquidity",...A,words:Se(A)};d("async-swap","waiting for the wallet to sign the swap intent");let x=await rc({typedData:A.typedData,wallet:n,address:w});if(!x.ok)return{ok:!1,stage:"swap",leg:"liquidity",...x,words:Se(x)};d("async-swap","submitting the liquidity order");let N=await oc({params:m.params,salt:A.salt,signature:x.signature,orderbook:k,chainId:h,fetchImpl:o});if(!N.ok)return{ok:!1,stage:"swap",leg:"liquidity",...N,words:Se(N)};d("async-swap","order "+N.id);let D=await sc({id:N.id,chainId:h,maker:w,orderbook:k,fetchImpl:o,pollMs:s,timeoutMs:i,now:a,sleep:c,onTick:C=>d("async-swap","status "+C)});if(!D.ok)return{ok:!1,stage:"swap",leg:"liquidity",...D,words:Se(D)};if(!D.settled){let C={ok:!1,code:"async-order-dead",params:{leg:"liquidity",id:N.id,status:D.status}};return{ok:!1,stage:"swap",leg:"liquidity",...C,words:Se(C)}}let O={provider:f.id,id:N.id,status:D.status};d("async-convert","building the conversion order");let H=fc({chainId:h,orderbook:p.orderbook||null,owner:w,sellToken:b,buyToken:Lf,receiver:w,sellAmountWei:E,buyAmountWei:B.nativeOutWei,validTo:t.validTo,feeAmountWei:B.leg2FeeWei,kind:"sell"});if(!H.ok)return{ok:!1,stage:"convert",leg:"native",...H,words:Se(H)};d("async-convert","waiting for the wallet to sign the conversion intent");let M=await pc({typedData:H.typedData,wallet:n,address:w});if(!M.ok)return{ok:!1,stage:"convert",leg:"native",...M,words:Se(M)};d("async-convert","submitting the conversion order");let W=await mc({orderbook:H.orderbook,order:H.order,signature:M.signature,owner:w,fetchImpl:o});if(!W.ok)return{ok:!1,stage:"convert",leg:"native",...W,words:Se(W)};d("async-convert","order "+String(W.uid).slice(0,12));let R=await hc({orderbook:H.orderbook,uid:W.uid,fetchImpl:o,pollMs:s,timeoutMs:i,now:a,sleep:c,onTick:C=>d("async-convert","status "+C)});if(!R.ok)return{ok:!1,stage:"convert",leg:"native",...R,words:Se(R)};if(!R.settled){let C={ok:!1,code:"async-order-dead",params:{leg:"native",uid:W.uid,status:R.status}};return{ok:!1,stage:"convert",leg:"native",...C,words:Se(C)}}let P={provider:p.id,uid:W.uid,status:R.status};if(d("async-fund","funding the escrow with the converted native coin"),typeof r!="function")return{ok:!1,stage:"fund",code:"async-no-fund",legs:[O,P],words:Se({code:"async-no-fund"})};let $=await r({kind:"composition",uid:W.uid,status:R.status,nativeOutWei:B.nativeOutWei,liquidity:O,native:P});return{ok:!0,kind:"composition",uid:W.uid,status:R.status,legs:[O,P],nativeOutWei:B.nativeOutWei,funded:$}}async function Hb({route:e={},request:t={},wallet:n=null,fund:r=null,fetchImpl:o=null,pollMs:s=5e3,timeoutMs:i=3e5,now:a=null,sleep:c=null,onStep:l=null}={}){let d=(B,E)=>{typeof l=="function"&&l(B,E,wc(B,E))};if(e&&(e.kind==="composition"||Array.isArray(e.legs)&&e.legs.length>1))return await Jf({route:e,request:t,wallet:n,fund:r,fetchImpl:o,pollMs:s,timeoutMs:i,now:a,sleep:c,onStep:l});let u=e.chainId!==void 0&&e.chainId!==null?e.chainId:t.chainId,f=uc(u,e.orderbook||t.orderbook||null,e.providerId||t.providerId||null);d("async-plan","");let p=fc({...t,chainId:u,orderbook:f});if(!p.ok)return{ok:!1,stage:"plan",...p,words:Se(p)};d("async-sign","");let h=await pc({typedData:p.typedData,wallet:n,address:t.owner});if(!h.ok)return{ok:!1,stage:"sign",...h,words:Se(h)};d("async-submit","");let w=await mc({orderbook:p.orderbook,order:p.order,signature:h.signature,owner:t.owner,fetchImpl:o});if(!w.ok)return{ok:!1,stage:"submit",...w,words:Se(w)};d("async-wait","order "+String(w.uid).slice(0,12));let b=await hc({orderbook:p.orderbook,uid:w.uid,fetchImpl:o,pollMs:s,timeoutMs:i,now:a,sleep:c,onTick:B=>d("async-wait","status "+B)});if(!b.ok)return{ok:!1,stage:"settle",uid:w.uid,...b,words:Se(b)};if(!b.settled){let B={ok:!1,code:"async-order-dead",params:{uid:w.uid,status:b.status}};return{ok:!1,stage:"settle",uid:w.uid,...B,words:Se(B)}}if(d("async-settled",""),typeof r!="function")return{ok:!1,stage:"fund",code:"async-no-fund",uid:w.uid,words:Se({code:"async-no-fund"})};d("async-fund","");let T=await r({uid:w.uid,status:b.status,order:p.order});return{ok:!0,uid:w.uid,status:b.status,funded:T}}var cc,Lf,Mf,Uf,Wf,jf,lc,dc,$f,Xf,Fb,Db,Te,rs,Pb,Vf,ac,Ur,Kf,uc,Yf,Gf,Se,os,qf=Q(()=>{Qo();ic();cc="0x9008D19f58AAbD9eD0D60971565AA8510560ab41",Lf="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",Mf="/api/v1/orders",Uf="/api/v1/orders/",Wf=["Gnosis","Protocol"].join(" "),jf="v2",lc=[["sellToken","address"],["buyToken","address"],["receiver","address"],["sellAmount","uint256"],["buyAmount","uint256"],["validTo","uint32"],["appData","bytes32"],["feeAmount","uint256"],["kind","string"],["partiallyFillable","bool"],["sellTokenBalance","string"],["buyTokenBalance","string"]],dc=["presignaturePending","open","fulfilled","cancelled","expired"],$f=["fulfilled","cancelled","expired"],Xf="fulfilled",Fb=["presignaturePending","open"],Db=["cow-unknown-network","cow-bad-order","cow-sign-failed","cow-unreachable","cow-order-unknown","cow-refused","cow-bad-response","cow-not-settled"],Te=(e,t={})=>({ok:!1,code:e,params:t}),rs=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),Pb=e=>/^(0x)?[0-9a-fA-F]{64}$/.test(String(e||"")),Vf=e=>/^0x[0-9a-fA-F]{112}$/.test(String(e||"")),ac=e=>/^0x[0-9a-fA-F]{130}$/.test(String(e||"")),Ur=e=>{if(e==null||e==="")return null;let t=String(e).trim();return/^0x[0-9a-fA-F]+$/.test(t)||/^[0-9]+$/.test(t)?t.replace(/^0x/,""):null},Kf=(e,t)=>String(e||"").replace(/\/+$/,"")+t,uc=(e,t=null,n=null)=>{if(t)return String(t).replace(/\/+$/,"");let r=Ga(e,n);return r&&r.orderbook?String(r.orderbook).replace(/\/+$/,""):null},Yf=({order:e,chainId:t,settlement:n=cc})=>({domain:{name:Wf,version:jf,chainId:Number(t),verifyingContract:n},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Order:lc.map(([r,o])=>({name:r,type:o}))},primaryType:"Order",message:{sellToken:e.sellToken,buyToken:e.buyToken,receiver:e.receiver,sellAmount:String(e.sellAmount),buyAmount:String(e.buyAmount),validTo:Number(e.validTo),appData:e.appData,feeAmount:String(e.feeAmount),kind:String(e.kind),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance),buyTokenBalance:String(e.buyTokenBalance)}});Gf=({order:e,signature:t,owner:n,signingScheme:r="eip712",from:o=null})=>({sellToken:e.sellToken,buyToken:e.buyToken,receiver:e.receiver,sellAmount:String(e.sellAmount),buyAmount:String(e.buyAmount),validTo:Number(e.validTo),appData:String(e.appData),feeAmount:String(e.feeAmount),kind:String(e.kind),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance),buyTokenBalance:String(e.buyTokenBalance),signingScheme:r,signature:t,from:o||n});Se=e=>{let t=e&&e.code?String(e.code):null;return{"cow-unknown-network":"no asynchronous provider serves this network","cow-bad-order":"the swap intent is incomplete and was not sent","cow-sign-failed":"the wallet did not sign the swap intent","cow-unreachable":"the order book could not be reached","cow-order-unknown":"the order book does not know this order","cow-refused":"the order book did not accept the order","cow-bad-response":"the order book answered in a shape we do not know","cow-not-settled":"the swap did not settle in time","async-order-dead":"the swap order was cancelled or expired - nothing was funded","kyber-unknown-network":"no KyberSwap liquidity provider serves this network","kyber-bad-order":"the liquidity swap intent is incomplete and was not sent","kyber-sign-failed":"the wallet did not sign the liquidity swap intent","kyber-unreachable":"the KyberSwap order book could not be reached","kyber-order-unknown":"the KyberSwap order book does not know this order","kyber-refused":"the KyberSwap order book did not accept the order","kyber-bad-response":"the KyberSwap order book answered in a shape we do not know","kyber-not-settled":"the liquidity swap did not settle in time","async-bad-composition":"this route is not a two-leg composition (a liquidity leg and a native leg are both required)","composition-short":"the swap does not cover the escrow deposit, its reserve and the conversion fee"}[t]||t||"the asynchronous route stopped"},os=e=>{if(e==null||e==="")return null;try{return BigInt(typeof e=="bigint"?e:String(e))}catch{return null}}});var _e={};ge(_e,{ASYNC_BUY_ETH_ADDRESS:()=>Lf,ASYNC_DEFAULT_NEED:()=>Va,ASYNC_DOMAIN_NAME:()=>Wf,ASYNC_DOMAIN_VERSION:()=>jf,ASYNC_FINAL_STATUSES:()=>$f,ASYNC_NEEDS:()=>yf,ASYNC_OPEN_STATUSES:()=>Fb,ASYNC_ORDER_FIELDS:()=>lc,ASYNC_ORDER_PATH:()=>Uf,ASYNC_REFUSAL_CODES:()=>Db,ASYNC_SETTLED_STATUS:()=>Xf,ASYNC_SETTLEMENT:()=>cc,ASYNC_SETTLES:()=>Pr,ASYNC_STATUSES:()=>dc,ASYNC_SUBMIT_PATH:()=>Mf,EIP2612_METHOD:()=>Lr,ERC20_METHOD:()=>Af,ESCROW_METHODS:()=>Ot,FACTORY_METHODS:()=>Ha,FACTORY_READS:()=>$o,GAS_CREATE_ORDER_AND_FUND:()=>hf,KYBER_LEG_CONTRACT:()=>Za,KYBER_LEG_CREATE_PATH:()=>_f,KYBER_LEG_DOMAIN_NAME:()=>Bf,KYBER_LEG_DOMAIN_VERSION:()=>If,KYBER_LEG_FINAL_STATUSES:()=>Ff,KYBER_LEG_MAKER_ORDERS_PATH:()=>Rf,KYBER_LEG_OPEN_STATUSES:()=>_b,KYBER_LEG_ORDERBOOK:()=>ns,KYBER_LEG_ORDER_FIELDS:()=>Qa,KYBER_LEG_REFUSAL_CODES:()=>Rb,KYBER_LEG_SETTLED_STATUS:()=>Df,KYBER_LEG_SIGN_MESSAGE_PATH:()=>Of,KYBER_LEG_STATUSES:()=>Cf,KYBER_LEG_STATUS_BUCKETS:()=>Pf,KYBER_LEG_VENUE:()=>Ob,ORDER_CREATED_TOPIC:()=>La,QUOTE_FIELDS:()=>Pa,address:()=>$t,asyncIntentVerdict:()=>fc,asyncOrderSubmission:()=>Gf,asyncOrderTypedData:()=>Yf,asyncOrderbookFor:()=>uc,asyncReadVerdict:()=>Zf,asyncRefusalWords:()=>Se,asyncRouteChains:()=>xf,asyncRouteChoice:()=>Sf,asyncRouteForChain:()=>Ga,asyncRouteInjection:()=>kb,asyncRouteProvider:()=>Hr,asyncRouteProviderIds:()=>Ya,asyncRouteProviderSettles:()=>kf,asyncRouteProvidersForChain:()=>Zo,asyncRouteVerdict:()=>za,asyncSettledVerdict:()=>hc,asyncSignVerdict:()=>pc,asyncStageWords:()=>wc,asyncSubmitVerdict:()=>mc,balanceOf:()=>su,chainIdOf:()=>ou,compositionVerdict:()=>Qf,connect:()=>lu,connectInjected:()=>na,currentProvider:()=>Tr,decodeAddress:()=>Xo,decodeBytes32:()=>sf,decodeImplementation:()=>zu,decodeImplementationCodeHash:()=>Zu,decodeStatus:()=>Ko,decodeUint64:()=>af,disconnect:()=>uu,encodeApprove:()=>Tb,encodeClaim:()=>qu,encodeCreateOrderAndFund:()=>Ua,encodeDomainSeparator:()=>Nb,encodeFactoryRead:()=>wb,encodeMarkReady:()=>Ju,encodeNonces:()=>Ab,encodePermit:()=>Eb,encodePredict:()=>Ma,encodeRead:()=>of,encodeRefund:()=>tf,encodeStatus:()=>Vo,encodeT1:()=>nf,encodeTermsHash:()=>rf,escrowFromReceipt:()=>wf,fundOrder:()=>Xa,fundOrderLive:()=>Ub,isConnected:()=>ze,kyberLegPlan:()=>tc,kyberLegRead:()=>Hf,kyberLegRefusalWords:()=>Cb,kyberLegSettled:()=>sc,kyberLegSign:()=>rc,kyberLegSubmit:()=>oc,kyberLegUnsigned:()=>nc,newSecret:()=>zo,orderTerms:()=>cf,permitSupportVerdict:()=>Bb,readCode:()=>Fo,readContract:()=>Xt,readReceipt:()=>oa,refreshBalances:()=>gt,restore:()=>cu,restoreInjected:()=>ta,runAsyncRoute:()=>Hb,runComposedRoute:()=>Jf,sendTransaction:()=>sa,setAsyncRouteInjection:()=>xb,simulateEscrowFunding:()=>Mb,status:()=>ru,subscribe:()=>nu,switchChain:()=>ra,testOrderTerms:()=>mf,toWei:()=>$a,usdcWithoutEthVerdict:()=>Ib,verifyFactoryImplementation:()=>Qu,verifyFactoryImplementationOnChain:()=>yb,wallets:()=>Lb,word:()=>pe});function Lb(){return Nr()}async function Mb(e){await new Promise(r=>setTimeout(r,900));let t=new Uint8Array(32);return crypto.getRandomValues(t),{hash:"0x"+Array.from(t,r=>r.toString(16).padStart(2,"0")).join(""),...e,simulated:!0}}async function Ub({factory:e,locker:t,claimer:n,commitHalfLocker:r,commitHalfClaimer:o,edPointLocker:s,edPointClaimer:i,edViewPointLocker:a,salt:c,amountWei:l,amountLabel:d,claimWindowSeconds:u=3600,readyWindowSeconds:f=14400,readyBy:p,t1:h,quote:w,onStep:b}){return Xa({factory:e,quote:w,locker:t,claimer:n,commitHalfLocker:r,commitHalfClaimer:o,edPointLocker:s,edPointClaimer:i,edViewPointLocker:a,salt:c,amountLabel:d,amountWei:l,claimWindowSeconds:u,readyWindowSeconds:f,readyBy:p,t1:h,call:Xt,send:sa,receipt:oa,onStep:b})}var yc=Q(()=>{Do();Xi();Dr();Wa();Yo();Dr();Nf();Qo();qf();ic();Do()});var $e={};ge($e,{DEX_METHOD:()=>_t,declaredRoutePath:()=>tp,decodeQuoteExactInput:()=>xc,dexLegVerdict:()=>kc,encodeGetPool:()=>ip,encodePath:()=>gc,encodeQuoteExactInput:()=>lp,encodeQuoteExactInputSingle:()=>sp,encodeQuoteExactOutputSingle:()=>ap,feeTierLabel:()=>qn,feeTierPct:()=>dp,noRouteWords:()=>wp,poolAddress:()=>up,poolState:()=>Yb,priceGateVerdict:()=>hp,quoteDexOut:()=>Sc,quoteExactOutPath:()=>cp,quoteExactOutSingle:()=>Xb,quotePath:()=>pp,quoteTier:()=>fp,resetDexCache:()=>$b,routeLabel:()=>np,routeSignature:()=>mp,routeSteps:()=>rp,unwrapLeg:()=>Gb});function tp({token:e,tokens:t=[],wrapped:n,route:r}){if(!e||!r||!Array.isArray(r.steps)||!r.steps.length)return null;let o=new Map((t||[]).map(d=>[String(d.symbol).toUpperCase(),d])),s=d=>{let u=String(d).toUpperCase();if(n&&u===String(n.symbol).toUpperCase())return n.address;let f=o.get(u);return f&&f.address?f.address:null},i=[e.symbol],a=[e.address],c=[],l=[];for(let d of r.steps){let u=s(d.to);if(!u)return{error:`declared route names a token that this network has no address for: ${d.to}`};a.push(u),i.push(String(d.to).toUpperCase()===String(n&&n.symbol).toUpperCase()?n.symbol:d.to),c.push(Number(d.fee)),l.push(d.pool||null)}return{tokens:a,symbols:i,fees:c,pools:l}}function np(e){if(!e||!e.symbols)return"";let t=e.symbols[0];for(let n=0;n<e.fees.length;n++)t+=" \u2192 "+e.symbols[n+1]+" "+qn(e.fees[n]);return t}function rp(e){return!e||!e.symbols?[]:e.fees.map((t,n)=>({from:e.symbols[n],to:e.symbols[n+1],fee:t,feeLabel:qn(t)}))}function jb(e){let t=bc.get(e);if(t&&Date.now()-t.at<Wb)return t.value}function ep(e,t){return bc.set(e,{at:Date.now(),value:t}),t}function $b(){bc.clear()}async function Zt(e,t,n=[],{timeoutMs:r=15e3}={}){if(!e||!e.rpcUrl)return{ok:!1,why:"network has no RPC endpoint"};let o=typeof AbortController=="function"?new AbortController:null,s=o?setTimeout(()=>o.abort(),r):null;try{let i=await fetch(e.rpcUrl,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:t,params:n}),signal:o?o.signal:void 0});if(!i.ok)return{ok:!1,why:t+": HTTP "+i.status};let a=await i.json();return a.error?{ok:!1,why:t+": "+String(a.error.message||"rpc error").slice(0,120)}:{ok:!0,result:a.result}}catch(i){let a=i&&i.name==="AbortError";return{ok:!1,why:t+": "+(a?"no answer in "+r+" ms":String(i&&i.message||i))}}finally{s&&clearTimeout(s)}}function Jn(e){let t=ss(e),n=[];for(let r=0;r+64<=t.length;r+=64)n.push(BigInt("0x"+t.slice(r,r+64)));return n}function sp({tokenIn:e,tokenOut:t,amountInWei:n,fee:r,sqrtPriceLimitX96:o=0}){return _t.quoteExactInputSingle.hex+Qt(e)+Qt(t)+nt(n)+nt(r)+nt(o)}function ip({tokenA:e,tokenB:t,fee:n}){return _t.getPool.hex+Qt(e)+Qt(t)+nt(n)}function ap({tokenIn:e,tokenOut:t,amountOutWei:n,fee:r,sqrtPriceLimitX96:o=0}){return _t.quoteExactOutputSingle.hex+Qt(e)+Qt(t)+nt(n)+nt(r)+nt(o)}async function Xb(e,{tokenIn:t,tokenOut:n,amountOutWei:r,fee:o},s={}){let i=e&&e.uniswap;if(!i||!i.quoter)return{ok:!1,why:"no verified QuoterV2 for this network"};let a=ap({tokenIn:t,tokenOut:n,amountOutWei:r,fee:o}),c=await Zt(e,"eth_call",[{to:i.quoter,data:a},"latest"],s);if(!c.ok)return{ok:!1,why:c.why};let l=Jn(c.result);return l.length?l[0]<=0n?{ok:!1,why:"pool cannot serve this output"}:{ok:!0,amountInWei:l[0].toString(),gasEstimate:l.length>1?l[l.length-1].toString():null}:{ok:!1,why:"quoter answered without data"}}async function cp(e,{route:t,amountOutWei:n},r={}){let o=e&&e.uniswap;if(!o||!o.quoter)return{ok:!1,why:"no verified QuoterV2 for this network"};if(!t||!Array.isArray(t.tokens)||t.tokens.length<2)return{ok:!1,why:"route has no path"};let s=t.tokens.slice().reverse(),i=(t.fees||[]).slice().reverse(),a=gc({tokens:s,fees:i}),c=_t.quoteExactOutput.hex+nt(64)+nt(n)+nt(a.bytes)+a.packed.padEnd(Math.ceil(a.packed.length/64)*64,"0"),l=await Zt(e,"eth_call",[{to:o.quoter,data:c},"latest"],r);if(!l.ok)return{ok:!1,why:l.why};let d=xc(l.result);return!d||d.amountOutWei<=0n?{ok:!1,why:"pool cannot serve exactly this output"}:{ok:!0,amountInWei:d.amountOutWei.toString(),gasEstimate:d.gasEstimate.toString(),shapeOk:d.sqrtPriceX96After.length===i.length,reversed:s.map(u=>u).length===i.length+1}}function gc({tokens:e,fees:t}){let n=[];for(let o=0;o<e.length;o++)n.push(ss(e[o]).toLowerCase().padStart(40,"0")),o<t.length&&n.push(ss(Number(t[o]).toString(16)).toLowerCase().padStart(6,"0"));let r=n.join("");return{packed:r,bytes:r.length/2}}function lp({tokens:e,fees:t,amountInWei:n}){let{packed:r,bytes:o}=gc({tokens:e,fees:t}),s=r.padEnd(Math.ceil(o/32)*64,"0");return _t.quoteExactInput.hex+op("0x40")+nt(n)+nt(o)+s}function dp(e){let t=Number(e);return Number.isFinite(t)?t/1e4:null}function qn(e){let t=dp(e);return t===null?String(e):String(Number(t.toFixed(4)))+"%"}async function up(e,{tokenIn:t,tokenOut:n,fee:r},o={}){let s=e&&e.uniswap;if(!s||!s.factory)return{ok:!1,why:"no verified Uniswap factory for this network"};let i=await Zt(e,"eth_call",[{to:s.factory,data:ip({tokenA:t,tokenB:n,fee:r})},"latest"],o);if(!i.ok)return{ok:!1,why:i.why};let a=Jn(i.result),c=Vb(a[0]);return!c||c===Kb?{ok:!0,pool:null}:{ok:!0,pool:c}}async function Yb(e,t,{tokenIn:n,tokenOut:r},o={}){if(!t)return null;let[s,i,a]=await Promise.all([Zt(e,"eth_call",[{to:t,data:_t.liquidity.hex},"latest"],o),Zt(e,"eth_call",[{to:n,data:_t.balanceOf.hex+Qt(t)},"latest"],o),Zt(e,"eth_call",[{to:r,data:_t.balanceOf.hex+Qt(t)},"latest"],o)]),c=l=>l.ok?Jn(l.result)[0]??null:null;return{liquidity:s.ok?BigInt(Jn(s.result)[0]??0n).toString():null,reserveInWei:i.ok&&c(i)!==null?c(i).toString():null,reserveOutWei:a.ok&&c(a)!==null?c(a).toString():null}}async function fp(e,{tokenIn:t,tokenOut:n,amountInWei:r,fee:o},s={}){let i=e&&e.uniswap;if(!i||!i.quoter)return{fee:o,ok:!1,why:"no verified QuoterV2 for this network"};let a=sp({tokenIn:t,tokenOut:n,amountInWei:r,fee:o}),c=await Zt(e,"eth_call",[{to:i.quoter,data:a},"latest"],s);if(!c.ok)return{fee:o,ok:!1,why:c.why};let l=Jn(c.result);if(l.length<4)return{fee:o,ok:!1,why:"quoter answered "+l.length+" words, expected 4"};let d=l[0];return d<=0n?{fee:o,ok:!1,why:"pool cannot serve this size"}:{fee:o,ok:!0,amountOutWei:d.toString(),gasEstimate:l[3].toString(),sqrtPriceX96After:l[1].toString(),initializedTicksCrossed:l[2].toString()}}function xc(e){let t=Jn(e);if(t.length<4)return null;let n=o=>Number(o)/32,r=o=>{let s=n(o);if(!Number.isInteger(s)||s<0||s>=t.length)return[];let i=Number(t[s]);return!Number.isInteger(i)||i<=0||s+1+i>t.length?[]:t.slice(s+1,s+1+i).map(String)};return{amountOutWei:t[0],sqrtPriceX96After:r(t[1]),initializedTicksCrossed:r(t[2]),gasEstimate:t[3]}}async function pp(e,{route:t,amountInWei:n},r={}){let o=e&&e.uniswap;if(!o||!o.quoter)return{...t,ok:!1,why:"no verified QuoterV2 for this network"};let s=lp({tokens:t.tokens,fees:t.fees,amountInWei:n}),i=await Zt(e,"eth_call",[{to:o.quoter,data:s},"latest"],r);if(!i.ok)return{...t,ok:!1,why:i.why};let a=xc(i.result);return a?a.amountOutWei<=0n?{...t,ok:!1,why:"pool cannot serve this size"}:{...t,ok:!0,amountOutWei:a.amountOutWei.toString(),gasEstimate:a.gasEstimate.toString(),sqrtPriceX96After:a.sqrtPriceX96After,initializedTicksCrossed:a.initializedTicksCrossed,hops:t.fees.length,shapeOk:a.sqrtPriceX96After.length===t.fees.length}:{...t,ok:!1,why:"quoter answered a shape that is not quoteExactInput"}}function mp(e){return!e||!Array.isArray(e.steps)||!e.steps.length?e&&e.unwrap?"unwrap":"none":e.steps.map(t=>String(t.to).toUpperCase()+":"+Number(t.fee)+(t.pool?":"+String(t.pool).toLowerCase():"")).join("+")}function hp({amountInWei:e=null,amountOutWei:t=null,inDecimals:n=null,outDecimals:r=null,tokenUsd:o=null,referenceUsd:s=null,stableSteps:i=[],tolerated:a=!1,gates:c=null}={}){let l=c&&Number.isFinite(Number(c.maxDeviationPct))&&Number(c.maxDeviationPct)>0?Number(c.maxDeviationPct):null,d=c&&Number.isFinite(Number(c.stableBandPct))&&Number(c.stableBandPct)>=0?Number(c.stableBandPct):null,u=[],f=(Array.isArray(i)?i:[]).map(x=>{let N={from:x.from,to:x.to,fee:x.fee,feeLabel:qn(x.fee),inWei:x.inWei||null,outWei:x.outWei||null,exactAmount:!!x.exact,quoted:!!x.ok,ok:!1,ratio:null,deviationPct:null,why:null};if(!x.ok)return N.why="the 1:1 step could not be quoted ("+(x.why||"no answer")+")",u.push(N.why),N;let D=Number(x.inWei)/10**Number(x.inDecimals),O=Number(x.outWei)/10**Number(x.outDecimals);return!(D>0)||!(O>0)?(N.why="the 1:1 step answered with a number that cannot be read",u.push(N.why),N):(N.ratio=O/D,N.deviationPct=Math.abs(1-N.ratio)*100,d===null?(N.why="the 1:1 band is not declared for this step, so this step cannot be checked",u.push(N.why),N):N.deviationPct>d?(N.why=`${N.from}\u2192${N.to} at ${N.feeLabel} pays ${N.ratio.toFixed(6)} ${N.to} per 1 ${N.from} - ${N.deviationPct.toFixed(2)}% off 1:1, and the band is ${d}%`,u.push(N.why),N):(N.ok=!0,N))}),p=Number.isFinite(Number(n))&&Number(e)>0?Number(e)/10**Number(n):null,h=Number.isFinite(Number(r))&&Number(t)>0?Number(t)/10**Number(r):null,w=p!==null&&Number(o)>0?p*Number(o):null,b=w!==null&&h!==null&&h>0?w/h:null,T=Number(s)>0?Number(s):null,B=b!==null&&T!==null?Math.abs(b-T)/T*100:null,E=B!==null&&l!==null&&B>l;E?u.push(`the route implies the native coin at $${b.toFixed(2)} while the reference price is $${T.toFixed(2)} - ${B.toFixed(1)}% apart, and the limit is ${l}%: this is not the market price`):B===null?u.push(T===null?"the reference price of the native coin is not known, so the price cannot be checked":"the price of the token being paid is not known, so the price cannot be checked"):l===null&&u.push("the price limit is not declared for this route, so the price cannot be checked");let k=B!==null&&l!==null,m=E||f.some(x=>!x.ok);return{checked:k,bad:m,tolerated:!!a,blocks:a?!1:m||!k,why:u.length?u.join("; "):null,impliedUsd:b,referenceUsd:T,deviationPct:B,maxDeviationPct:l,stableBandPct:d,tokenUsd:Number(o)>0?Number(o):null,stable:f}}function wp({paySymbol:e,wrappedSymbol:t,chainName:n,route:r=null}){let o=`no route from ${e} to ${t} on ${n}`,s=r&&r.why?String(r.why):null;return s?o+": "+s:o+": no route for "+e+" is declared - routes are declared by hand, not searched"}function kc(e,t=null){if(e&&e.unwrap)return{blocked:!1,kind:"unwrap",reason:null,price:null};if(!e)return{blocked:!0,kind:"unquoted",reason:"the swap leg has not been quoted yet",price:null};if(!e.ok)return{blocked:!0,kind:"no-route",reason:e.why||"no route",price:null};let n=e.price||null,r=!!(n&&n.bad),o=!!(n&&n.checked===!1),s=!!(n&&n.blocks&&(r||o)),i=t!=null&&Number(t)>0?BigInt(t):null,a=BigInt(e.amountOutWei),c=i===null?null:{needWei:i.toString(),getsWei:a.toString(),covers:a>=i,shortfallWei:(a>=i?0n:i-a).toString()},l={...c||{},price:n,routeLabel:e.routeLabel||null,decimals:e.wrapped?e.wrapped.decimals:null,wrappedSymbol:e.wrapped?e.wrapped.symbol:null};return s?{blocked:!0,...l,kind:r?"bad-price":"price-unchecked",reason:n.why}:c===null?{blocked:!0,...l,kind:"unchecked",reason:"the required escrow amount is not known yet, so coverage cannot be checked"}:c.covers?r?{blocked:!1,...l,kind:"bad-price-tolerated",reason:n.why}:{blocked:!1,...l,kind:"covers",reason:null}:{blocked:!0,...l,kind:"short",reason:"the declared route returns less than the order needs"}}async function Sc(e,{token:t,amountWei:n,requiredOutWei:r=null,route:o=null,tokens:s=[],referenceNativeUsd:i=null,gates:a=null}={},c={}){let l=e&&e.uniswap;if(!t||!t.address)return{ok:!1,why:t&&t.native?"paying the native coin needs no DEX leg":"no token address"};if(!l||!l.quoter||!l.wrapped)return{ok:!1,why:"no verified Uniswap addresses for "+(e&&e.name?e.name:"this network")};let d=BigInt(n||0);if(d<=0n)return{ok:!1,why:"amount not entered"};let u=l.wrapped,f=e&&e.name||e&&e.id||"this network";if(String(t.address).toLowerCase()===String(u.address).toLowerCase())return{ok:!1,why:"this is the wrapped native coin: no pool needed, it unwraps 1:1",unwrap:!0};let p=o||null,h=String(e&&e.dexPriceGate||"")==="tolerated",w=p?{steps:(Array.isArray(p.steps)?p.steps:[]).map(O=>({to:O.to,fee:O.fee,pool:O.pool||null,verified:O.verified||null})),why:p.why||null,unwrap:!!p.unwrap}:null;if(!p||!Array.isArray(p.steps)||!p.steps.length)return p&&p.unwrap?{ok:!1,why:"this is the wrapped native coin: no pool needed, it unwraps 1:1",unwrap:!0}:{ok:!1,why:wp({paySymbol:t.symbol,wrappedSymbol:u.symbol,chainName:f,route:p}),declared:!0,declaration:w,steps:[]};let b=tp({token:t,tokens:s,wrapped:u,route:p});if(!b||b.error)return{ok:!1,declared:!0,dataError:!0,declaration:w,why:"the declared route for "+t.symbol+" on "+f+" cannot be built: "+(b&&b.error||"unknown reason")};let T=new Map((Array.isArray(s)?s:[]).filter(O=>O&&O.address).map(O=>[String(O.address).toLowerCase(),O])),B=O=>{if(String(O).toLowerCase()===String(t.address).toLowerCase())return t.decimals;if(String(O).toLowerCase()===String(u.address).toLowerCase())return u.decimals;let H=T.get(String(O).toLowerCase());return H&&Number.isFinite(Number(H.decimals))?Number(H.decimals):null},E=[e.id,t.symbol,d.toString(),mp(p)].join("|"),k=jb(E);if(k===void 0){let O=await pp(e,{route:{tokens:b.tokens,fees:b.fees,symbols:b.symbols,via:null},amountInWei:d},c);if(!O.ok)return ep(E,{ok:!1,why:O.why,declared:!0});k={ok:!0,quote:O},ep(E,k)}if(!k.ok)return{...k,declaration:w};let m=k.quote;if(k.hops===void 0){let O=[];for(let H=0;H<b.fees.length;H++){let M=b.fees[H],W=b.tokens[H],R=b.tokens[H+1],P=p.steps&&p.steps[H]||{},$=await up(e,{tokenIn:W,tokenOut:R,fee:M},c),C=$.ok?$.pool:null,K=P.pool||null;O.push({step:H+1,from:b.symbols[H],to:b.symbols[H+1],fee:M,feeLabel:qn(M),decimals:[B(W),B(R)],pool:C,declaredPool:K,poolMatchesDeclared:C&&K?String(C).toLowerCase()===String(K).toLowerCase():null,verified:P.verified||null})}k.hops=O}let A=k.hops;if(k.stableSteps===void 0){let O=(a&&Array.isArray(a.stables)?a.stables:[]).map(M=>String(M).toUpperCase()),H=[];for(let M=0;M<b.fees.length;M++){let W=String(b.symbols[M]).toUpperCase(),R=String(b.symbols[M+1]).toUpperCase();if(!O.includes(W)||!O.includes(R))continue;let P=await fp(e,{tokenIn:b.tokens[M],tokenOut:b.tokens[M+1],amountInWei:d,fee:b.fees[M]},c);H.push({from:b.symbols[M],to:b.symbols[M+1],fee:b.fees[M],inWei:d.toString(),outWei:P.ok?P.amountOutWei:null,inDecimals:B(b.tokens[M]),outDecimals:B(b.tokens[M+1]),ok:!!P.ok,why:P.ok?null:P.why,exact:M===0})}k.stableSteps=H}let x=hp({amountInWei:d,amountOutWei:m.amountOutWei,inDecimals:t.decimals,outDecimals:u.decimals,tokenUsd:Number(t.usd)>0?Number(t.usd):null,referenceUsd:i,stableSteps:k.stableSteps,tolerated:h,gates:a}),N=null;if(r!=null&&Number(r)>0){let O=await cp(e,{route:m,amountOutWei:BigInt(r)},c);N=O.ok?{ok:!0,amountInWei:O.amountInWei,gasEstimate:O.gasEstimate,enough:BigInt(O.amountInWei)<=d,enteredWei:d.toString(),spareInWei:(BigInt(O.amountInWei)<=d?d-BigInt(O.amountInWei):0n).toString(),shortInWei:(BigInt(O.amountInWei)<=d?0n:BigInt(O.amountInWei)-d).toString()}:{ok:!1,why:O.why}}let D=r!=null&&Number(r)>0?(()=>{let O=BigInt(r),H=BigInt(m.amountOutWei);return{outWei:O.toString(),getsWei:H.toString(),covers:H>=O,shortfallWei:(H>=O?0n:O-H).toString()}})():null;return{ok:!0,leg:"pool",venue:"Uniswap v3",payToken:t.symbol,wrapped:u,declaredRoute:w,route:{symbols:m.symbols.slice(),fees:m.fees.slice(),pools:b.pools.slice(),via:null,hops:m.fees.length},routeLabel:np(m),steps:rp(m),fee:m.fees[m.fees.length-1],feeLabel:m.fees.map(O=>qn(O)).join(" / "),amountInWei:d.toString(),amountOutWei:m.amountOutWei,gasEstimate:m.gasEstimate,required:D,price:x,exactOut:N,hopsDetail:A,pool:A.length?A[0].pool:null,at:Date.now()}}function Gb(e){let t=e&&e.uniswap;if(!t||!t.wrapped)return{ok:!1,why:"no verified wrapped native coin for this network"};let n=t.wrapped;return{ok:!0,leg:"unwrap",venue:n.name||n.symbol,wrapped:n,rate:1,gasEstimate:null,why:null}}var _t,Wb,bc,ss,op,Qt,nt,Vb,Kb,vc=Q(()=>{_t={quoteExactOutputSingle:{hex:"0xbd21704a",signature:"quoteExactOutputSingle((address,address,uint256,uint24,uint160))"},quoteExactOutput:{hex:"0x2f80bb1d",signature:"quoteExactOutput(bytes,uint256)"},quoteExactInputSingle:{hex:"0xc6a5026a",signature:"quoteExactInputSingle((address,address,uint256,uint24,uint160))"},quoteExactInput:{hex:"0xcdca1753",signature:"quoteExactInput(bytes,uint256)"},getPool:{hex:"0x1698ee82",signature:"getPool(address,address,uint24)"},liquidity:{hex:"0x1a686502",signature:"liquidity()"},balanceOf:{hex:"0x70a08231",signature:"balanceOf(address)"},withdraw:{hex:"0x2e1a7d4d",signature:"withdraw(uint256)"}};Wb=2e4,bc=new Map;ss=e=>String(e||"").replace(/^0x/,""),op=e=>ss(e).toLowerCase().padStart(64,"0"),Qt=e=>op(e),nt=e=>{let t="",n=BigInt(e);for(;n>0n;)t=(n&0xffn).toString(16).padStart(2,"0")+t,n>>=8n;return t.padStart(64,"0")};Vb=e=>e==null?null:"0x"+e.toString(16).padStart(40,"0"),Kb="0x"+"0".repeat(40)});var is={};ge(is,{createOrderWorker:()=>Ec});function Ec(){if(typeof Worker>"u")throw new Error("workers are unavailable in this environment");let e=new Worker(new URL("./order-worker.js",import.meta.url),{type:"module"}),t=new Map,n=0;e.onmessage=o=>{let s=o.data||{},i=t.get(s.id);if(i){if(s.kind==="progress"){i.onProgress?.(s.stage,s.detail);return}t.delete(s.id),s.kind==="done"?i.resolve(s.result):i.reject(new Error(s.message||"worker returned an error"))}},e.onerror=o=>{let s=new Error("worker crashed: "+(o.message||"no message"));for(let[,i]of t)i.reject(s);t.clear()};let r=(o,s={},i)=>{let a=++n;return new Promise((c,l)=>{t.set(a,{resolve:c,reject:l,onProgress:i}),e.postMessage({id:a,type:o,...s})})};return{buildSide:(o,s)=>r("newSide",{orderContext:o},s),sealHalf:(o,s,i,a)=>r("seal",{orderContext:o,ownHalf:s,counterparty:{encPub:i}},a),verifyCounterparty:(o,s,i,a)=>r("verify",{orderContext:o,counterparty:s,sealedBytes:i},a),halfCommitment:o=>r("commit",{ownHalf:o}),pointOf:o=>r("pointOf",{ownHalf:o}),jointAddress:o=>r("jointAddress",{joint:o}),makerMaterial:()=>r("newMakerMaterial"),stop:()=>e.terminate()}}var Ac=Q(()=>{});function yp(e,t={readyWindowSeconds:14400,claimWindowSeconds:3600}){let n=Number(e&&e.costSec||0),r=Math.max(t.readyWindowSeconds,n+900);return{readyWindowSeconds:r,claimWindowSeconds:Math.max(t.claimWindowSeconds,r+3600)}}var bp=Q(()=>{});function Sp(e,t){let n=kp.get(e);if(n&&Date.now()-n.at<t)return n.value}function er(e,t){return kp.set(e,{at:Date.now(),value:t}),t}async function Wr(e,t,n=[]){let r=await fetch(e.rpcUrl,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:t,params:n})});if(!r.ok)throw new Error(t+": HTTP "+r.status);let o=await r.json();if(o.error)throw new Error(t+": "+(o.error.message||"RPC error"));return o.result}function Jb(e){let t=String(e||"");if(t.length<130)return"";let n=Number(BigInt("0x"+t.slice(66,130))),r=t.slice(130,130+n*2),o=new Uint8Array(r.length/2);for(let s=0;s<o.length;s++)o[s]=parseInt(r.slice(s*2,s*2+2),16);return new TextDecoder().decode(o)}async function vp(e,{force:t=!1}={}){let n=e&&e.priceFeed;if(!n||!n.address)return null;let r=e.id+":usd";if(!t){let o=Sp(r,zb);if(o!==void 0)return o}try{let[o,s]=await Promise.all([Wr(e,"eth_call",[{to:n.address,data:gp.description},"latest"]),Wr(e,"eth_call",[{to:n.address,data:gp.latestRoundData},"latest"])]),i=Jb(o),a=xp(s,1),c=Number(xp(s,3))*1e3,l=Number(n.decimals||8),d=Number(a)/10**l,u=c>0&&Date.now()-c<Qb,f=d>=(n.min||.01)&&d<=(n.max||1e7);return i!==n.pair||!u||!f?er(r,null):er(r,{usd:d,updatedAt:c,source:"chainlink",pair:i})}catch{return er(r,null)}}async function qb(e,{from:t=null,payToken:n=null,amountWei:r=null}={}){let o=e.id+":gas",s=Sp(o,Zb);if(s!==void 0)return s;let i=await vp(e);if(!i)return er(o,null);try{let a=BigInt(await Wr(e,"eth_gasPrice")),c=null,l=!1;try{let f=!!(n&&!n.native);if(f&&t){let p=String(t||"").replace(/^0x/,"").padStart(64,"0"),h=BigInt(r||1).toString(16).padStart(64,"0");c=BigInt(await Wr(e,"eth_estimateGas",[{from:t,to:n.address,data:"0xa9059cbb"+p+h}])),l=!0}else t?(c=BigInt(await Wr(e,"eth_estimateGas",[{from:t,to:t,value:"0x1"}])),l=!0):c=BigInt(e.gasLimitFallback||(f?65e3:21e3))}catch{c=BigInt(e.gasLimitFallback||(tokenTransfer?65e3:21e3))}let d=a*c,u=Number(d)/1e18*i.usd;return er(o,{usd:u,gasLimit:c.toString(),gasPrice:a.toString(),native:i,source:"rpc",measured:l})}catch{return er(o,null)}}async function Ep(e,t={}){if(!e||!e.rpcUrl)return{nativeUsd:null,gasUsd:null,source:"none"};let[n,r]=await Promise.all([vp(e),qb(e,t)]);return n&&Number.isFinite(n.usd)&&(e.native.usd=n.usd),{nativeUsd:n?n.usd:null,nativeUpdatedAt:n?n.updatedAt:null,gasUsd:r?r.usd:null,gasPriceWei:r?r.gasPrice:null,gasSource:r?r.source:null,gasMeasured:r?!!r.measured:!1,source:n?"chainlink":"demo"}}function Ap(e){if(!e||!e.source||e.source==="none"||e.source!=="chainlink")return"demo values";let t=e.nativeUpdatedAt?new Date(e.nativeUpdatedAt).toISOString().slice(11,16):"?";return(e.gasMeasured?"gas by RPC":"gas estimate")+", price by Chainlink at "+t+" UTC"}var gp,zb,Zb,Qb,kp,xp,Np=Q(()=>{gp={description:"0x7284e416",latestRoundData:"0xfeaf968c"},zb=6e4,Zb=3e4,Qb=1440*60*1e3,kp=new Map;xp=(e,t)=>BigInt("0x"+String(e).slice(2).slice(t*64,(t+1)*64))});function eg({gasPriceWei:e,readyGasLimit:t=Tp,refundGasLimit:n=Bp,depositGasLimit:r=0n,extraFeeWei:o=0n}={}){let s=kt(e);if(s===null||s<=0n)return null;let i=kt(t),a=kt(n),c=kt(r),l=kt(o);return i===null||a===null||c===null||l===null||i<=0n||a<=0n||c<0n||l<0n?null:s*(i+a+c)+l}function tg({reserveWei:e,nativeUsd:t,decimals:n=18}={}){let r=kt(e);if(r===null||r<=0n)return null;let o=Number(r)/10**n,s=Number.isFinite(Number(t))&&Number(t)>0?o*Number(t):null;return{native:o,usd:s}}function ng({nativeBalanceWei:e,reserveWei:t}={}){let n=kt(t);if(n===null||n<=0n)return{measured:!1,enough:null,show:!1,balanceUnread:!1};let r=kt(e);return r===null?{measured:!0,enough:!1,show:!0,balanceUnread:!0}:{measured:!0,enough:r>=n,show:r<n,balanceUnread:!1}}function Ip({gasPriceWei:e=null,nativeBalanceWei:t=null,nativeUsd:n=null,decimals:r=18,depositGasLimit:o=0n,extraFeeWei:s=0n}={}){let i=eg({gasPriceWei:e,depositGasLimit:o,extraFeeWei:s}),a=kt(o),c=kt(s),l=i===null?null:tg({reserveWei:i,nativeUsd:n,decimals:r}),d=ng({nativeBalanceWei:t,reserveWei:i});return{measured:i!==null,gasPriceWei:e==null?null:String(e),reserveWei:i===null?null:i.toString(),depositGasLimit:a===null?null:a.toString(),extraFeeWei:c===null?null:c.toString(),native:l?l.native:null,usd:l?l.usd:null,enough:d.enough,show:d.show,balanceUnread:!!d.balanceUnread}}var Tp,Bp,c2,kt,Op=Q(()=>{Tp=120000n,Bp=250000n,c2=Tp+Bp,kt=e=>{if(e==null||e==="")return null;try{return BigInt(typeof e=="bigint"?e:String(e))}catch{return null}}});var Cp={};ge(Cp,{STEP_LABELS:()=>Ea,activeSwaps:()=>Ta,amountInputValue:()=>Zd,cachedFeeRate:()=>ff,cachedFeeTerms:()=>uf,claimOrder:()=>lg,createOrderWorker:()=>Ec,createReverseSwap:()=>Na,createSwap:()=>Aa,createSwapWallet:()=>So,dealSwapIds:()=>Ra,dexLegVerdict:()=>kc,ensureFeeTerms:()=>pf,evm:()=>_e,feeWeiFor:()=>ja,markReadyOrder:()=>cg,moneroNode:()=>_r,networkFromShape:()=>jn,networkLabel:()=>Td,nodeHeight:()=>Og,orderDeadlines:()=>Ig,orderGasReservePlan:()=>Ip,orderStatus:()=>Bg,priceLabel:()=>Ap,probeMode:()=>Nd,quoteDexOut:()=>Sc,refreshChainPrices:()=>Ep,refundOrder:()=>dg,sdkAddressNetwork:()=>Pg,sdkAutoRefund:()=>ug,sdkBook:()=>gg,sdkBookSnapshot:()=>xg,sdkBookUse:()=>hg,sdkBundle:()=>Bc,sdkConfirmReady:()=>Rg,sdkCoreModules:()=>En,sdkForgetSwap:()=>Tg,sdkGetSwap:()=>Sg,sdkListSwaps:()=>kg,sdkOpenRecovery:()=>fg,sdkOrderQuote:()=>vg,sdkOrderTerms:()=>Ic,sdkProgress:()=>_g,sdkQuotesSnapshot:()=>mg,sdkRefundEth:()=>Cg,sdkSetDestination:()=>Dg,sdkStartSwap:()=>Eg,sdkSweepNow:()=>Fg,sdkSyncSwaps:()=>Ng,sdkWatchQuotes:()=>pg,sdkWatchSwap:()=>Ag,serverRestoreHeightFor:()=>Ca,setLiveFocus:()=>Fa,swapCore:()=>we,toWei:()=>$a,useStartSwap:()=>og});function og(e=null){return cs=typeof e=="function"?e:null,!!cs}async function Bc(){return Nc||(Nc=(async()=>{try{return await import(rg)}catch(e){return console.warn("[bridge] the built SDK core was not served to the page ("+(e&&e.message||e)+"): actions go by the previous engine call; see www/js/sdk/bridge.js"),null}})()),Nc}async function En(){let e=await Bc();return e?{actions:{createActions:e.createActions},wallet:{evmWallet:e.evmWallet},recovery:{createRecovery:e.createRecovery}}:null}async function sg(){let e=await Bc();return e?{factory:e.createNinsei}:null}function ig(e){return e&&e.escrow&&e.escrow.mode==="live"?"live":"sim"}function ag(e){return{settlement:{chain:e.id},xmrNetwork:fe.networkType,apiBase:"/api",assetsBase:"/",mode:ig(e),storage:ji(),serverAuth:async()=>{if(Vt())return Vt();try{await Kn()}catch{return null}return Vt()},evmCall:t=>Xt(t),evmCode:t=>Fo({address:t}),allowedProviders:wi(e),knownFactoryCodes:yi(e),knownImplementationCodes:bi(e)}}async function Be(e){let t=await sg();if(!t)return null;let n=Me(e||at);return Tc.has(n.id)||Tc.set(n.id,t.factory(ag(n))),{chain:n,sdk:Tc.get(n.id)}}function jr(e){let t=typeof Tr=="function"?Tr():null;return t?e.wallet.evmWallet(t):null}async function cg({escrow:e,expect:t}={}){let n=await En(),r=n?jr(n):null;if(!n||!r)throw new Error("[bridge] nothing to sign the readiness mark with: "+(n?"wallet not connected":"the SDK core was not served to the page"));return await n.actions.createActions({call:o=>Xt(o)}).markReady({escrow:e,expect:t},r)}async function lg({escrow:e,halfClaimer:t,expect:n}={}){let r=await En(),o=r?jr(r):null;if(!r||!o)throw new Error("[bridge] nothing to sign the claim with: "+(r?"wallet not connected":"the SDK core was not served to the page"));return await r.actions.createActions({call:s=>Xt(s)}).claim({escrow:e,halfClaimer:t,expect:n},o)}async function dg({escrow:e,halfLocker:t}={}){let n=await En(),r=n?jr(n):null;if(!n||!r)throw new Error("[bridge] nothing to sign the refund with: "+(n?"wallet not connected":"the SDK core was not served to the page"));return await n.actions.createActions({call:o=>Xt(o)}).refund({escrow:e,halfLocker:t},r)}async function ug(e){let t=await Be(e&&e.chain);if(!t)return null;let n={...e||{}};if(!n.nodes&&t.sdk.config&&typeof t.sdk.config.nodesFor=="function"&&(n.nodes=t.sdk.config.nodesFor(n.xmrNetwork||fe.networkType)),!n.wallet){let r=await En(),o=r?jr(r):null;o&&(n.wallet=o)}return t.sdk.swaps.refundIfXmrMissing(n)}async function fg(e,t){let n=await En();return n?await n.recovery.createRecovery().open(e,t):null}async function pg(e,t){let n=await Be(e&&e.chain);return n?n.sdk.quotes.watch(e,t):null}async function mg(e){let t=await Be(e);return t?t.sdk.quotes.snapshot():null}function hg(e){if(_p=e||null,vn=null,as=null,Jt=null,ft)try{ft()}catch{}ft=null}function Rp(e){let t=Number.isFinite(Number(e.at))?Number(e.at):null;return{providerId:e.providerId,displayName:e.displayName,pair:e.pair,asset:e.asset,currency:e.currency,assetNetwork:e.assetNetwork,currencyNetwork:e.currencyNetwork,networkStated:e.networkStated===!0,rateQuote:e.rateQuote,rate:e.rate,min:e.min,max:e.max,step:e.step,ttlMs:e.ttlMs,at:t,ageMs:t===null?null:Math.max(0,Date.now()-t),seq:e.seq,why:e.why,signature:e.signature,keyId:e.keyId,finality:e.finality,networksDerived:e.networksDerived===!0,networksUnnamed:e.networksUnnamed===!0}}function yg(e){return{...Rp(e),code:e.code,kind:wg[e.code]||e.code,why:e.why}}function bg(e){if(!e)return{ok:!1,error:null,data:null,at:0,fetching:!1};let t=(Array.isArray(e.offers)?e.offers:[]).map(Rp),n=(Array.isArray(e.refused)?e.refused:[]).map(yg),r=t.map(o=>o.at).filter(o=>Number.isFinite(o));return{ok:!e.error,error:e.error?String(e.error.code||"unknown"):null,at:e.at,fetching:!1,data:{offers:t,refused:n,quotes:t,best:e.best||null,seq:e.seq===void 0?null:e.seq,references:Array.isArray(e.references)?e.references:[],at:r.length?Math.max(...r):null}}}async function gg({chain:e,direction:t,token:n,size:r}={}){let o=_p,s="injected";if(!o){let l=await Be(e);if(!l){if(ft){try{ft()}catch{}ft=null}return as=null,Jt=null,vn=null,null}o=l.sdk.quotes,s=l.chain.id}let i=t==="sell"?"sell":"buy",a=s+"|"+i+"|"+String(n||"")+"|"+String(r??"");if(ft&&as===a)return vn;if(ft){try{ft()}catch{}ft=null}as=a,Jt=null;let c=new Promise(l=>{Jt=l});try{ft=o.watch({direction:i,token:n,size:r},l=>{if(vn=l,Jt){let d=Jt;Jt=null,d()}})}catch(l){return Jt=null,vn=null,console.warn("[bridge] the quote book was not served to the core ("+(l&&l.message||l)+"): there will be no offers; see www/js/sdk/bridge.js"),null}return await c,vn}function xg(){return bg(vn)}async function kg(e){let t=await Be(e);return t?t.sdk.swaps.list():null}async function Sg(e,t){let n=await Be(t);return n?n.sdk.swaps.get(e):null}function Ic({chain:e,amountWei:t,finality:n=null,salt:r=null,asset:o="XMR"}={}){let s=yp(n),i=Math.floor(Date.now()/1e3),a=e&&e.escrow||{};if(!a.cashier)throw new Error("no fee cashier set on this network (escrow.cashier) - the order cannot be assembled");return{chainId:e.chainId,factory:a.address,cashier:a.cashier,locker:$t(),amount:String(t),asset:String(o||"XMR"),readyBy:String(i+s.readyWindowSeconds),t1:String(i+s.claimWindowSeconds),salt:r||zo()}}async function vg({chain:e,providerId:t,amountWei:n,finality:r=null,salt:o=null,asset:s="XMR"}={}){let i=await Be(e);if(!i)return null;let a=Ic({chain:i.chain,amountWei:n,finality:r,salt:o,asset:s}),c=await i.sdk.quotes.firm({providerId:t,order:a});return{order:a,quote:c}}async function Eg(e){if(cs)return cs({...e||{}});let t=await Be(e&&e.chain);if(!t)return null;let n={...e||{}};if(!n.wallet){let r=await En(),o=r?jr(r):null;o&&(n.wallet=o)}if(n.wallet)try{t.sdk.wallet.use(n.wallet),await t.sdk.wallet.connect({chainId:t.chain.chainId})}catch{}return n.order||(n.order=Ic({chain:t.chain,amountWei:n.amountWei,finality:n.finality,salt:n.salt,asset:n.receiveAsset})),!n.orderQuote&&n.providerId&&(n.orderQuote=await t.sdk.quotes.firm({providerId:n.providerId,order:n.order})),n.orderQuote&&(n.orderQuote.claimer&&(n.order={...n.order,claimer:n.orderQuote.claimer}),n.orderQuote.id&&(n.quote={...n.quote||{},id:n.orderQuote.id}),n.counterparty||(n.counterparty=n.orderQuote)),n.quote={...n.quote||{},readyBy:Number(n.order.readyBy),t1:Number(n.order.t1)},t.sdk.swaps.start(n)}async function Ag(e){let t=await Be(e&&e.chain);return t?t.sdk.swaps.watch(e):null}async function Ng(e){let t=await Be(e);return t?t.sdk.swaps.sync():null}async function Tg(e,t){let n=await Be(t);return n?n.sdk.swaps.forget(e):null}async function Bg(e){let t=await Be(void 0);if(!t)throw new Error("[bridge] cannot read the order state: the SDK core was not served to the page");return t.sdk.order.status(e)}async function Ig(e){let t=await Be(void 0);if(!t)throw new Error("[bridge] cannot read the order deadlines: the SDK core was not served to the page");return t.sdk.order.deadlines(e)}async function Og(){return fa()}async function _g(e,t){let n=await Be(t);return n?n.sdk.swaps.progress(e):null}async function Rg(e){let t=await Be(void 0);return t?t.sdk.swaps.confirmReady(e):Ia(e)}async function Cg(e,t="you"){let n=await Be(void 0);return n?n.sdk.swaps.refundEth(e,t):_a(e,t)}async function Fg(e){let t=await Be(void 0);return t?t.sdk.swaps.sweepNow(e):Oa(e)}async function Dg(e,t){let n=await Be(void 0);if(n)return n.sdk.swaps.setDestination(e,t);let r=zn(e);return r?(r.receiveAddress=t,Ba(r)):null}async function Pg(e){let t=await Be(void 0);if(t)return t.sdk.swaps.addressNetwork(e);try{return jn(e)}catch{return null}}var rg,cs,Nc,Tc,ft,as,vn,Jt,_p,wg,Fp=Q(()=>{qe();_o();ua();yc();bp();Dr();Fr();Go();gn();Rr();Oi();Vi();Np();Op();vc();Dr();Go();Ac();Fr();Fr();Rr();rg=import.meta.url,cs=null;Nc=null;Tc=new Map;ft=null,as=null,vn=null,Jt=null,_p=null;wg={disabled:"off"}});var g=class extends Error{constructor(t,n={}){super(t),this.name="SdkError",this.code=t,this.params=n}toJSON(){return{code:this.code,params:this.params}}},U=(e,t)=>{throw new g(e,t)};function N0({createWallet:e,networkType:t,serverUri:n,password:r="ninsei-sweep-session",fields:o={}}){let s=typeof e=="function"?e:null,i=()=>{if(!a)throw new g("bad-input",{field:"wallet",state:"closed"})},a=null;return{async open(c){if(!s)throw new g("bad-input",{field:"createWallet"});a=await s({networkType:c.networkType||t,server:{uri:n},password:r,restoreHeight:Number(c.restoreHeight)||0,address:c.address,...o})},async sync(){i(),await a.sync()},async unlockedBalance(){return i(),await a.getUnlockedBalance()},async sweepUnlocked({address:c,relay:l}){return i(),await a.sweepUnlocked({address:c,relay:l})},async fee(c){i();let d=(Array.isArray(c)?c:[c])[0];if(!d||typeof d.getFee!="function")return null;let u=d.getFee();return u==null?null:String(u)},async relay(c){return i(),await a.relayTxs(c)},async close(){if(a){try{await a.close()}catch{}a=null}}}}qe();Ai();Wi();_o();ua();Fr();Li();To();var It={};ge(It,{ORDER_CONTEXT_VERSION:()=>Wu,orderContextString:()=>ob});var Wu="ninsei-order-v3",nb=e=>String(e??"").trim().toLowerCase(),rb=e=>{if(typeof e=="bigint")return e.toString(10);if(typeof e=="number")return String(Math.trunc(e));let t=nb(e);return t.startsWith("0x")?BigInt(t).toString(10):t},Uu=["chainId","factory","locker","claimer","amount","readyBy","t1","salt"];function ob(e){if(!e||typeof e!="object")throw new Error("order context needs an object with the order fields");let t=Uu.filter(n=>e[n]===void 0||e[n]===null||e[n]==="");if(t.length)throw new Error("order context is missing fields: "+t.join(", "));return Wu+"|"+Uu.map(n=>rb(e[n])).join("|")}var Wo={};ge(Wo,{createOrderBuilder:()=>lb});To();function ju(e,t,n){if(!t||!n)throw new Error("secp256k1 and keccak256 are required");let r=BigInt(e);if(r<=0n)throw new Error("the half must be a positive number");let s=t.Point.BASE.multiply(r).toBytes(!1).slice(1);return"0x"+Array.from(n(s),i=>i.toString(16).padStart(2,"0")).join("")}function $u({ed25519:e,secp256k1:t,keccak256:n,sha3_512:r,randomBytes:o}){if(typeof r!="function")throw new Error("createDleq2: sha3_512 is required (SHA3-512 from @noble/hashes)");let s=e.Point.Fn.ORDER,i=t.Point.Fn.ORDER,a=Math.min(s.toString(2).length,i.toString(2).length),c={A:{name:"secp256k1",P:t.Point,order:i,G:t.Point.BASE,Galt:t.Point.fromHex("0250929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0")},B:{name:"ed25519",P:e.Point,order:s,G:e.Point.BASE,Galt:e.Point.fromHex("8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94")}};c.A.Galt.precompute(8),c.B.Galt.precompute(8);let l=S=>{let y=String(S??""),v=[];for(let I=0;I<y.length;I++){let _=y.codePointAt(I);_>65535&&I++,_<128?v.push(_):_<2048?v.push(192|_>>6,128|_&63):_<65536?v.push(224|_>>12,128|_>>6&63,128|_&63):v.push(240|_>>18,128|_>>12&63,128|_>>6&63,128|_&63)}return new Uint8Array(v)},d=S=>typeof S=="string"?S:S.toHex?S.toHex():String(S);function u(S){let y=S.replace(/^0x/,""),v=new Uint8Array(y.length/2);for(let I=0;I<v.length;I++)v[I]=parseInt(y.substr(I*2,2),16);return v}let f=S=>S.toString(16).padStart(64,"0");function p(S){let y=0n;for(let v of S)y=y<<8n|BigInt(v);return y}function h(S){let y=0n;for(let v=S.length-1;v>=0;v--)y=y<<8n|BigInt(S[v]);return y}function w(S){let y=S.reduce((_,L)=>_+L.length,0),v=new Uint8Array(y),I=0;for(let _ of S)v.set(_,I),I+=_.length;return v}function b(S,y){let v=r(w(y.map(I=>typeof I=="string"?u(I):I)));if(v.length!==64)throw new Error("challenge: sha3_512 returned "+v.length+" bytes instead of 64");return h(v)%S.order}function T(S){let y=h(o(64))%S.order;return y===0n?1n:y}function B(S,y){return S>>BigInt(y)&1n}function E(S,y,v){let _=((typeof v=="bigint"?v:BigInt(v))%S.order+S.order)%S.order;return _===0n?S.P.ZERO:y===S.Galt?y.multiply(_):y.multiplyUnsafe(_)}function k(S,y,v){return E(S,v||S.G,typeof y=="bigint"?y:BigInt(y))}let m=(S,y)=>S.add(y),A=(S,y)=>S.subtract(y),x=S=>u(S.toHex()),N=S=>u(f(S));function D(S,y){let v=[],I=[],_=0n,L=1n;for(let F=0;F<a;F++){if(F===a-1){let V=O(L,S.order);v[F]=(S.order-_%S.order)*V%S.order}else v[F]=T(S),_=(_+v[F]*L)%S.order,L=L*2n%S.order;let j=B(y,F);I.push(m(k(S,j),k(S,v[F],S.Galt)))}return{rs:v,cs:I}}function O(S,y){let[v,I]=[S%y,y],[_,L]=[1n,0n];for(;I!==0n;){let F=v/I;[v,I]=[I,v-F*I],[_,L]=[L,_-F*L]}if(v!==1n)throw new Error("modInv: not invertible");return(_%y+y)%y}function H(S,y){let v=y[0];for(let I=1;I<y.length;I++)v=m(v,k(S,2n**BigInt(I)%S.order,y[I]));return v}function M(S,y,v,I,_,L,F){let j=T(c.A),V=T(c.B),G=(Je,it)=>[l(F),x(v),x(I),x(Je),x(it)],Z=b(c.A,G(k(c.A,j,c.A.Galt),k(c.B,V,c.B.Galt)),F),q=b(c.B,G(k(c.A,j,c.A.Galt),k(c.B,V,c.B.Galt)),F);if((S===1n||S===1?1n:0n)===0n){let Je=T(c.A),it=T(c.B),yt=A(v,c.A.G),Mn=A(I,c.B.G),mn=b(c.A,G(A(k(c.A,Je,c.A.Galt),E(c.A,yt,Z)),A(k(c.B,it,c.B.Galt),E(c.B,Mn,q))),F),hn=b(c.B,G(A(k(c.A,Je,c.A.Galt),E(c.A,yt,Z)),A(k(c.B,it,c.B.Galt),E(c.B,Mn,q))),F);return{eA:mn,eB:hn,a0:Je,a1:(j+mn*_)%c.A.order,b0:it,b1:(V+hn*L)%c.B.order}}let ce=T(c.A),ke=T(c.B),se=b(c.A,G(A(k(c.A,ce,c.A.Galt),E(c.A,v,Z)),A(k(c.B,ke,c.B.Galt),E(c.B,I,q))),F),le=b(c.B,G(A(k(c.A,ce,c.A.Galt),E(c.A,v,Z)),A(k(c.B,ke,c.B.Galt),E(c.B,I,q))),F);return{eA:Z,eB:q,a0:(j+se*_)%c.A.order,a1:ce,b0:(V+le*L)%c.B.order,b1:ke}}let W=S=>({eA:f(S.eA),eB:f(S.eB),a0:f(S.a0),a1:f(S.a1),b0:f(S.b0),b1:f(S.b1)});function R(S,y){let v=k(c.A,S),I=k(c.B,S),_=D(c.A,S),L=D(c.B,S),F=[];for(let j=0;j<a;j++)F.push({i:j,bit:B(S,j)===1n?1:0,cA:d(_.cs[j]),cB:d(L.cs[j]),rA:f(_.rs[j]),rB:f(L.rs[j])});return{XA:d(v),XB:d(I),context:String(y??""),bits:F}}function P(S,y){let v=M(S.bit===1?1n:0n,S.i,c.A.P.fromHex(String(S.cA).replace(/^0x/,"")),c.B.P.fromHex(String(S.cB).replace(/^0x/,"")),BigInt("0x"+String(S.rA).replace(/^0x/,"")),BigInt("0x"+String(S.rB).replace(/^0x/,"")),y);return{i:S.i,cA:S.cA,cB:S.cB,sig:W(v)}}function $(S,y){let v=new Map(y.map(_=>[_.i,_])),I=[];for(let _=0;_<a;_++){let L=v.get(_);if(!L)throw new Error("assembleProof: no part for bit "+_);I.push({cA:L.cA,cB:L.cB,sig:L.sig})}return{XA:S.XA,XB:S.XB,proofs:I}}function C(S,y,v){let I=R(S,y),_=[];for(let L=0;L<a;L++)v&&(L%16===0||L===a-1)&&v(L+1,a),_.push(P(I.bits[L],I.context));return $(I,_)}function K(S,y){if(S.name!=="ed25519")return!0;try{return y.isTorsionFree()===!0}catch{return!1}}function Y(S,y){if(!S||typeof S!="object")return{ok:!1,reason:"proof: an object is expected"};if(typeof S.XA!="string"||typeof S.XB!="string")return{ok:!1,reason:"proof: no XA or XB"};if(!Array.isArray(S.proofs))return{ok:!1,reason:"proof: no parts list"};if(S.proofs.length!==a)return{ok:!1,reason:"proof: "+S.proofs.length+" parts, expected "+a};let v=(j,V)=>j.P.fromHex(String(V).replace(/^0x/,"")),I,_,L,F;try{if(I=v(c.A,S.XA),_=v(c.B,S.XB),!K(c.B,_))return{ok:!1,reason:"proof: XB is not in the prime-order subgroup"}}catch(j){return{ok:!1,reason:"proof: XA or XB is unparsable ("+String(j&&j.message||j)+")"}}try{L=S.proofs.map((j,V)=>{try{return v(c.A,j.cA)}catch(G){throw new Error("bit "+V+": "+String(G&&G.message||G))}}),F=S.proofs.map((j,V)=>{try{return v(c.B,j.cB)}catch(G){throw new Error("bit "+V+": "+String(G&&G.message||G))}})}catch(j){return{ok:!1,reason:"proof: "+String(j&&j.message||j)}}if(!H(c.A,L).equals(I))return{ok:!1,reason:"the commitment sum does not give X on secp256k1"};if(!H(c.B,F).equals(_))return{ok:!1,reason:"the commitment sum does not give X on ed25519"};for(let j=0;j<S.proofs.length;j++){let V=S.proofs[j];try{if(!K(c.B,F[j]))return{ok:!1,reason:"bit "+j+": the commitment is not in the prime-order subgroup"};let G=V.cA,Z=V.cB,q=Object.fromEntries(Object.entries(V.sig).map(([pi,vr])=>[pi,BigInt(String(vr).startsWith("0x")?vr:"0x"+vr)])),oe=v(c.A,G),ce=v(c.B,Z),ke=(pi,vr)=>[l(y),x(oe),x(ce),x(pi),x(vr)],se=k(c.A,q.a1,c.A.Galt),le=E(c.A,oe,q.eA),Je=k(c.B,q.b1,c.B.Galt),it=E(c.B,ce,q.eB),yt=b(c.A,ke(A(se,le),A(Je,it)),y),Mn=b(c.B,ke(A(se,le),A(Je,it)),y),mn=k(c.A,q.a0,c.A.Galt),hn=E(c.A,A(oe,c.A.G),yt),cd=k(c.B,q.b0,c.B.Galt),ld=E(c.B,A(ce,c.B.G),Mn),v0=b(c.A,ke(A(mn,hn),A(cd,ld)),y),E0=b(c.B,ke(A(mn,hn),A(cd,ld)),y);if(v0!==q.eA||E0!==q.eB)return{ok:!1,reason:"bit "+j+": challenges did not match"}}catch(G){return{ok:!1,reason:"bit "+j+": fields are unparsable ("+String(G&&G.message||G)+")"}}}return{ok:!0}}return{BITS:a,curves:c,prove:C,verify:Y,prepareProof:R,proveBit:P,assembleProof:$,torsionFree:K}}var Xu="halfenc is locked: the sealed-half envelope is not part of the live flow (keccak commit/reveal replaced it). Set globalThis.ARRAKIS_ALLOW_HALFENC = true to work with it in a test or a spike.";function Vu(){return globalThis.ARRAKIS_ALLOW_HALFENC===!0}function Ku({secp256k1:e,ed25519:t,keccak256:n,randomBytes:r}){let o=t.Point.Fn.ORDER,s=e.Point.Fn.ORDER,i=o<s?o:s;function a(w){let b=0n;for(let T of w)b=b<<8n|BigInt(T);return b}function c(w){for(let b=0;b<256;b++){let T=a(r(32));if(T>0n&&T<w)return T}throw new Error("randScalar: failed in 256 attempts")}let l=w=>w.toString(16).padStart(64,"0");function d(){let w=c(s);return{priv:w,pub:e.Point.BASE.multiply(w).toHex()}}function u(w,b){let T=n(Uint8Array.from(Buffer.concat([Buffer.from(w.replace(/^0x/,""),"hex"),Buffer.from(b||"","utf8")])));return a(T)%i}function f(w,b,T){if(!Vu())throw new Error(Xu);if(!(w>0n&&w<i))throw new Error("seal: half outside min(l, n)");let B=e.Point.fromHex(b.replace(/^0x/,"")),E=c(s),k=e.Point.BASE.multiply(E),m=B.multiply(E),A=u(m.toHex(),T),x=N=>"0x"+String(N).replace(/^0x/i,"").toLowerCase();return{recipient:x(b),ephemeral:x(k.toHex()),masked:"0x"+l((w+A)%i),context:T||""}}function p(w,b,T){if(!Vu())return{ok:!1,reason:Xu};if(!w||!w.ephemeral||!w.masked)return{ok:!1,reason:"incomplete envelope"};let E=e.Point.fromHex(w.ephemeral.replace(/^0x/,"")).multiply(b),k=u(E.toHex(),w.context),m=(BigInt(w.masked)-k+i)%i;if(m===0n)return{ok:!1,reason:"restored zero"};if(!T)return{ok:!0,x:m};let A=t.Point.BASE.multiply(m).toHex(),x=t.Point.fromHex(T.startsWith("0x")?T.slice(2):T).toHex();return A!==x?{ok:!1,reason:"the ciphertext holds a different half"}:{ok:!0,x:m}}function h(w){let b=n(Uo(w));return"0x"+Gt(b)}return{LIMIT:i,recipientKeyPair:d,seal:f,open:p,packSealed:Da,unpackSealed:ab,sealedCommitmentOf:h}}var Yu=1;function Gt(e){let t="";for(let n of e)t+=n.toString(16).padStart(2,"0");return t}function sb(e){let t=String(e??""),n=[];for(let r=0;r<t.length;r++){let o=t.charCodeAt(r);o<128?n.push(o):o<2048?n.push(192|o>>6,128|o&63):n.push(224|o>>12,128|o>>6&63,128|o&63)}return new Uint8Array(n)}function ib(e){let t="";for(let n=0;n<e.length;n++){let r=e[n];r<128?t+=String.fromCharCode(r):r<224?t+=String.fromCharCode((r&31)<<6|e[++n]&63):t+=String.fromCharCode((r&15)<<12|(e[++n]&63)<<6|e[++n]&63)}return t}var Uo=e=>{let t=String(e||"").replace(/^0x/i,""),n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++)n[r]=parseInt(t.substr(r*2,2),16);return n};function Da(e){if(!e||!e.recipient||!e.ephemeral||!e.masked)throw new Error("packSealed: incomplete envelope");let t=Uo(e.recipient),n=Uo(e.ephemeral);if(t.length!==33)throw new Error("packSealed: recipient key must be 33 bytes (compressed point)");if(n.length!==33)throw new Error("packSealed: ephemeral point must be 33 bytes (compressed)");let r=BigInt(e.masked).toString(16).padStart(64,"0"),o=sb(e.context);if(o.length>255)throw new Error("packSealed: context longer than 255 bytes");return"0x"+Gt(Uint8Array.of(Yu))+Gt(t)+Gt(n)+r+o.length.toString(16).padStart(2,"0")+Gt(o)}function ab(e){let t=Uo(e);if(t.length<100)throw new Error("unpackSealed: envelope shorter than 100 bytes");if(t[0]!==Yu)throw new Error("unpackSealed: unknown format version: "+t[0]);let n=t[99];if(t.length!==100+n)throw new Error("unpackSealed: length does not match the one in the context");return{recipient:"0x"+Gt(t.slice(1,34)),ephemeral:"0x"+Gt(t.slice(34,67)),masked:"0x"+Gt(t.slice(67,99)),context:ib(t.slice(100))}}gn();Mi();function lb({ed25519:e,secp256k1:t,keccak256:n,sha3_512:r,randomBytes:o}){let s=Ui({ed25519:e,secp256k1:t,keccak256:n,randomBytes:o}),i=$u({ed25519:e,secp256k1:t,keccak256:n,sha3_512:r,randomBytes:o}),a=Ku({secp256k1:t,ed25519:e,keccak256:n,randomBytes:o});function c(b,T=!1,B){let E=s.newHalf(),k=s.publicHalves(E),m=s.newHalf(),A=s.publicHalves(m).ed,x=a.recipientKeyPair(),N=i.prove(E,b,B);return{half:E,pub:k,viewHalf:m,viewPub:A,enc:x,proof:N,standIn:T}}function l(b,T,B,E){let k=i.verify(b.proof,T);if(!k.ok)return{ok:!1,reason:"counterparty DLEQ failed: "+k.reason};if(b.pub&&b.pub.ed&&String(b.proof.XB).toLowerCase()!==String(b.pub.ed).toLowerCase())return{ok:!1,reason:"the proven ed25519 point does not match the declared one: "+b.proof.XB+" vs "+b.pub.ed};if(B&&E){let m=a.open(a.unpackSealed(B),E,b.pub.ed);if(!m.ok)return{ok:!1,reason:"the counterparty envelope does not confirm the half: "+m.reason}}return{ok:!0}}function d(b,T,B){let E=a.seal(T,b.enc.pub,B),k=Da(E);return{sealed:E,bytes:k,commitment:a.sealedCommitmentOf(k)}}function u(b,T,B){return a.open(a.unpackSealed(b),T,B)}function f(b){return ju(b,t,n)}function p(b,T){return s.combinePublic(b.pub.ed,T.pub.ed)}function h(b){return s.publicHalves(typeof b=="bigint"?b:BigInt(b)).ed}function w({ownSpendHalf:b,ownViewHalf:T,otherSpendPoint:B,otherViewPoint:E,network:k}){return No({halves:s,addressFromKeys:bn,deps:{keccak256:n},ownSpendHalf:b,ownViewHalf:T,otherSpendPoint:B,otherViewPoint:E,network:k})}return{halves:s,dleq:i,enc:a,newSide:c,verifySide:l,sealFor:d,openFrom:u,jointAddressPoint:p,pointOf:h,jointAddress:w,halfCommitment:f}}yc();vc();Ac();var ls={};ge(ls,{checkOrderQuoteShape:()=>Lg,pairAsset:()=>Vg,pairCurrency:()=>Kg,pairFacingUser:()=>Xg,quoteNetworksFit:()=>Gg,refreshRfq:()=>Oc,requestOrderQuote:()=>Hg,rfqOffers:()=>Yg,rfqQuery:()=>jg,rfqSnapshot:()=>$g,setRfqQuery:()=>Wg,startRfqPolling:()=>zg});qe();async function Hg({providerId:e,order:t}){if(!e)throw new Error("no provider selected: there is no one to ask for an order quote");let n=await fetch(Ug()+"/order-quote",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({providerId:e,order:t})}),r=null;try{r=await n.json()}catch{r=null}if(!n.ok||!r||r.ok!==!0||!r.quote){let o=r&&(r.error||r.why)||"HTTP "+n.status;throw new Error("the provider gave no order quote: "+o)}if(r.signatureVerified!==!0)throw new Error("provider signature not confirmed: "+String(r.signatureWhy||"the backend did not verify"));return r.quote}function Lg(e){let t=["providerId","amount","claimer","edPointClaimer","commitHalfClaimer","viewHalfClaimer","proof","context","expiresAt"].filter(n=>e[n]===void 0||e[n]===null||e[n]==="");if(t.length)throw new Error("the order quote is missing fields: "+t.join(", "));if(e.quoteKind!=="orderQuote")throw new Error("not an order quote, but "+String(e.quoteKind));if(Number(e.expiresAt)<=Date.now())throw new Error("the order quote has expired")}var Mg=null,Ug=()=>Mg||Ke.base,rt={size:1,side:"buy",chain:at,token:null};function Wg(e){e&&((e.side==="buy"||e.side==="sell")&&(rt.side=e.side),e.size!==null&&e.size!==void 0&&Number(e.size)>0?rt.size=Number(e.size):rt.size=1,typeof e.chain=="string"&&e.chain&&(rt.chain=e.chain),typeof e.token=="string"&&e.token&&(rt.token=e.token))}function jg(){return{...rt}}var Re={ok:!1,error:null,data:null,at:0,fetching:!1};function $g(){return Re}function Xg(e=rt.side,t="ETH"){return e==="sell"?t.toUpperCase()+"/XMR":"XMR/"+t.toUpperCase()}function Vg(e){return String(e||"").split("/")[0].toUpperCase()}function Kg(e){return String(e||"").split("/")[1]?String(e).split("/")[1].toUpperCase():""}function Yg(){let e=Re.ok&&Re.data?Re.data:null;return e?{offers:e.offers||[],refused:e.refused||[],seq:e.seq===void 0?null:e.seq,at:e.at===void 0?null:e.at}:{offers:[],refused:[],seq:null,at:null}}function Gg(e,{monero:t,evm:n}){let r=e.asset==="XMR",o=e.currency==="XMR";if(!r&&!o)return{ok:!1,stated:e.networkStated,why:"pair "+e.pair+" has no XMR on either side"};let s=r?e.assetNetwork:e.currencyNetwork,i=r?e.currencyNetwork:e.assetNetwork,a=r?"assetNetwork":"currencyNetwork",c=r?"currencyNetwork":"assetNetwork";return s&&s!==t?{ok:!1,stated:!0,why:e.pair+": "+a+" is "+s+", but this page pays XMR on "+t}:i&&i!==n?{ok:!1,stated:!0,why:e.pair+": "+c+" is "+i+", but this page settles on "+n}:{ok:!0,stated:e.networkStated,moneroNet:s||null,evmNet:i||null,why:null}}async function Oc(){if(Re.fetching)return Re;Re.fetching=!0;try{let e=await Promise.resolve().then(()=>(Fp(),Cp));await e.sdkBook({chain:rt.chain,direction:rt.side,token:rt.token,size:rt.size});let t=e.sdkBookSnapshot();Re.ok=t.ok,Re.error=t.error,Re.data=t.data,Re.at=t.at||Date.now()}catch(e){Re.ok=!1,Re.error=String(e&&e.message||e),Re.data=null,Re.at=Date.now()}finally{Re.fetching=!1}return Re}var Dp=null;function zg(e=null,t=Ke.pollMs){typeof e=="string"&&e&&(rt.chain=e),!Dp&&(Oc(),Dp=setInterval(()=>Oc(),t))}Yi();Yo();var ds={};ge(ds,{scalarFromMoneroHex:()=>Qg,spendKeysFromRevealedHalf:()=>Zg});function Zg({halves:e,ownSpendHalf:t,ownViewHalf:n,otherSpendPoint:r,otherViewHalf:o,revealedHalf:s}){if(!e)throw new Error("half maths is required");for(let[p,h]of Object.entries({ownSpendHalf:t,ownViewHalf:n,otherSpendPoint:r,otherViewHalf:o,revealedHalf:s}))if(h==null||h==="")throw new Error("not set: "+p);let i=e.combineHalves(BigInt(t),BigInt(s)),a=e.publicHalves(i).ed,c=e.combinePublic(e.publicHalves(BigInt(t)).ed,r),l=p=>String(p).replace(/^0x/i,"").toLowerCase();if(l(a)!==l(c))throw new Error("revealed half does not match the address: (s_a + s_b)*G != the order spend key. The half is from another order or substituted - sweeping is not allowed");let d=e.combineHalves(BigInt(n),BigInt(o)),u=p=>BigInt(p).toString(16).padStart(64,"0"),f=p=>u(p).match(/../g).reverse().join("");return{privateSpendKey:f(i),privateViewKey:f(d)}}function Qg(e){let t=String(e).replace(/^0x/i,"");if(!/^[0-9a-f]{64}$/.test(t))throw new Error("key is not in Monero notation: expected 64 hex");return BigInt("0x"+t.match(/../g).reverse().join(""))}gn();var Pp=5e8;function _c(e,{height:t=null,nowSec:n=null}={}){let r=Number(e)||0;if(r<=0)return{code:"unlocked",locked:!1,untilHeight:null,untilTime:null};if(r>=5e8){let i=n==null?Math.floor(Date.now()/1e3):Number(n),a=Number.isFinite(i)&&i>=r;return{code:a?"unlocked":"locked_time",locked:!a,untilHeight:null,untilTime:r}}let o=t==null?null:Number(t),s=o!==null&&Number.isFinite(o)&&o>=r;return{code:s?"unlocked":"locked_height",locked:!s,untilHeight:r,untilTime:null}}function us(e){return e?e.untilTime!==null&&e.untilTime!==void 0?Number(e.untilTime):e.untilHeight!==null&&e.untilHeight!==void 0?Number(e.untilHeight):-1:-1}var no={};ge(no,{ED_ORDER:()=>Ft,UNLOCK_TIME_BLOCK_MAX:()=>Pp,bytesToHex:()=>Rn,decodeAmount:()=>$m,derivedOutputKey:()=>Wm,fetchBlock:()=>Vm,fetchTransactions:()=>Km,findOurOutputs:()=>Xm,hashToScalar:()=>to,hexToBytes:()=>_n,keccak:()=>rl,keyDerivation:()=>nl,laterBoundary:()=>us,matchTransaction:()=>Ym,scalarFromBytesLE:()=>Ps,scalarFromHexLE:()=>ol,scalarToBytesLE:()=>Mm,scanRange:()=>qx,txPublicKeyFromExtra:()=>jm,unlockStateOf:()=>_c,varint:()=>sl,viewKeyFormForAddress:()=>Jx,viewSecretCandidates:()=>il});var fs=BigInt(4294967295),Hp=BigInt(32);function qg(e,t=!1){return t?{h:Number(e&fs),l:Number(e>>Hp&fs)}:{h:Number(e>>Hp&fs)|0,l:Number(e&fs)|0}}function ps(e,t=!1){let n=e.length,r=new Uint32Array(n),o=new Uint32Array(n);for(let s=0;s<n;s++){let{h:i,l:a}=qg(e[s],t);[r[s],o[s]]=[i,a]}return[r,o]}var ex=e=>e/2**32|0,tx=e=>e>>>0;function Lp(e,t,n,r){let o=ex(n),s=tx(n);e.setUint32(t,r?s:o,r),e.setUint32(t+4,r?o:s,r)}var Rc=(e,t,n)=>e>>>n,Cc=(e,t,n)=>e<<32-n|t>>>n,An=(e,t,n)=>e>>>n|t<<32-n,Nn=(e,t,n)=>e<<32-n|t>>>n,$r=(e,t,n)=>e<<64-n|t>>>n-32,Xr=(e,t,n)=>e>>>n-32|t<<64-n;function St(e,t,n,r){let o=(t>>>0)+(r>>>0);return{h:e+n+(o/2**32|0)|0,l:o|0}}var Mp=(e,t,n)=>(e>>>0)+(t>>>0)+(n>>>0),Up=(e,t,n,r)=>t+n+r+(e/2**32|0)|0,Wp=(e,t,n,r)=>(e>>>0)+(t>>>0)+(n>>>0)+(r>>>0),jp=(e,t,n,r,o)=>t+n+r+o+(e/2**32|0)|0,$p=(e,t,n,r,o)=>(e>>>0)+(t>>>0)+(n>>>0)+(r>>>0)+(o>>>0),Xp=(e,t,n,r,o,s)=>t+n+r+o+s+(e/2**32|0)|0;function ms(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}var hs=e=>e?`"${e}" `:"";function He(e,t=""){if(typeof e!="number")throw new TypeError(hs(t)+"expected number, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw new RangeError(hs(t)+"expected integer >= 0, got "+e);return e}function Yp(e,t=""){if(typeof e!="boolean")throw new TypeError(hs(t)+"expected boolean, got type="+typeof e);return e}function We(e,t,n=""){if(ms(e)&&(t===void 0||e.length===t))return e;t!==void 0&&He(t,"length");let r=ms(e),o=t!==void 0?` of length ${t}`:"",s=r?`length=${e.length}`:`type=${typeof e}`,i=hs(n)+"expected Uint8Array"+o+", got "+s;throw r?new RangeError(i):new TypeError(i)}function ws(e){if(typeof e!="function"||typeof e.create!="function")throw new TypeError("expected hash wrapped by utils.createHasher");if(He(e.outputLen),He(e.blockLen),e.outputLen<1||e.blockLen<1)throw new Error("hash blockLen / outputLen must be >= 1")}var rx=(e,t)=>{if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError((t==="object"?"":`"${t}" `)+"expected object, got type="+typeof e)},Vp=(e,t)=>{rx(e,t);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new TypeError(`"${t}" expected plain object`);if(Object.hasOwn(e,"__proto__"))throw new TypeError(`"${t}.__proto__" is not allowed`)};function Rt(e,t=!0){if(e.destroyed)throw new Error("hash was destroyed");if(t&&e.finished)throw new Error("digest() was already called")}function tr(e,t){We(e,void 0,"output");let n=t.outputLen;if(!(e.length>=n))throw new RangeError('"output" expected length >= '+n)}function Fc(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function vt(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function ys(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function pt(e,t){return e<<32-t|e>>>t}var ox=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function sx(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function ix(e){for(let t=0;t<e.length;t++)e[t]=sx(e[t]);return e}var Dc=ox?e=>e:ix,Gp=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",ax=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function bs(e){if(We(e),Gp)return e.toHex();let t="";for(let n=0;n<e.length;n++)t+=ax[e[n]];return t}function Kp(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0}function gs(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);if(Gp)try{return Uint8Array.fromHex(e)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}let t=e.length,n=t/2;if(t%2)throw new RangeError("hex string expected, got unpadded hex of length "+t);let r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){let i=Kp(e.charCodeAt(s)),a=Kp(e.charCodeAt(s+1));if(i===void 0||a===void 0){let c=e[s]+e[s+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+s)}r[o]=i*16+a}return r}function Pc(...e){let t=0;for(let r=0;r<e.length;r++){let o=e[r];We(o),t+=o.length}let n=new Uint8Array(t);for(let r=0,o=0;r<e.length;r++){let s=e[r];n.set(s,o),o+=s.length}return n}function zp(e,t,n="opts"){return Vp(e,"defaults"),t!==void 0&&Vp(t,n),Object.assign(Object.create(null),e,t)}function Vr(e,t={}){if(typeof e!="function")throw new TypeError('"hashCons" expected function, got type='+typeof e);t=zp({},t,"info");let n=(o,s)=>e(s).update(o).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>e(o),Object.assign(n,t),Object.freeze(n)}function Zp(e=32){He(e,"bytesLength");let t=typeof globalThis=="object"?globalThis.crypto:null;if(typeof t?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(e>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${e}`);return t.getRandomValues(new Uint8Array(e))}var Kr=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});function Qp(e,t,n){return e&t^~e&n}function Jp(e,t,n){return e&t^e&n^t&n}var Yr=class{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(t,n,r,o){this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(t),this.view=ys(this.buffer)}update(t){Rt(this),We(t);let{view:n,buffer:r,blockLen:o}=this,s=t.length,i=!1;for(let a=0;a<s;){let c=Math.min(o-this.pos,s-a);if(c===o){let l=ys(t);for(;o<=s-a;a+=o)this.process(l,a);i=!0;continue}r.set(a===0&&c===s?t:t.subarray(a,a+c),this.pos),this.pos+=c,a+=c,this.pos===o&&(this.process(n,0),this.pos=0,i=!0)}return this.length+=t.length,i&&this.roundClean(),this}digestInto(t){Rt(this),tr(t,this),this.finished=!0;let{buffer:n,view:r,blockLen:o,isLE:s}=this,{pos:i}=this;n[i++]=128,n.fill(0,i),this.padOffset>o-i&&(this.process(r,0),n.fill(0)),Lp(r,o-8,this.length*8,s),this.process(r,0),this.roundClean();let a=t===n?r:ys(t),c=this.outputLen,l=c/4,d=this.get();if(c%4||l>d.length)throw new Error("invalid outputLen");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:t,outputLen:n}=this;this.digestInto(t);let r=t.slice(0,n);return this.destroy(),r}_cloneIntoMeta(t){let{buffer:n,length:r,finished:o,destroyed:s,pos:i}=this;return t.destroyed=s,t.finished=o,t.length=r,t.pos=i,i&&t.buffer.set(n),t}clone(){return this._cloneInto()}},qp=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var em=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var cx=Uint32Array.from([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]),qt=new Uint32Array(64),Hc=class extends Yr{A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;constructor(t,n){super(64,t,8,!1),this.A=n[0]|0,this.B=n[1]|0,this.C=n[2]|0,this.D=n[3]|0,this.E=n[4]|0,this.F=n[5]|0,this.G=n[6]|0,this.H=n[7]|0}get(){let{A:t,B:n,C:r,D:o,E:s,F:i,G:a,H:c}=this;return[t,n,r,o,s,i,a,c]}set(t,n,r,o,s,i,a,c){this.A=t|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}_cloneInto(t){return(t||=new this.constructor).set(...this.get()),this._cloneIntoMeta(t)}process(t,n){for(let u=0;u<16;u++,n+=4)qt[u]=t.getUint32(n,!1);for(let u=16;u<64;u++){let f=qt[u-15],p=qt[u-2],h=pt(f,7)^pt(f,18)^f>>>3,w=pt(p,17)^pt(p,19)^p>>>10;qt[u]=w+qt[u-7]+h+qt[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=pt(a,6)^pt(a,11)^pt(a,25),p=d+f+Qp(a,c,l)+cx[u]+qt[u]|0,w=(pt(r,2)^pt(r,13)^pt(r,22))+Jp(r,o,s)|0;d=l,l=c,c=a,a=i+p|0,i=s,s=o,o=r,r=p+w|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,c,l,d)}roundClean(){vt(qt)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),vt(this.buffer)}},Lc=class extends Hc{constructor(){super(32,qp)}};var tm=ps(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),lx=tm[0],dx=tm[1],en=new Uint32Array(80),tn=new Uint32Array(80),Mc=class extends Yr{Ah=0;Al=0;Bh=0;Bl=0;Ch=0;Cl=0;Dh=0;Dl=0;Eh=0;El=0;Fh=0;Fl=0;Gh=0;Gl=0;Hh=0;Hl=0;constructor(t,n){super(128,t,16,!1),this.Ah=n[0]|0,this.Al=n[1]|0,this.Bh=n[2]|0,this.Bl=n[3]|0,this.Ch=n[4]|0,this.Cl=n[5]|0,this.Dh=n[6]|0,this.Dl=n[7]|0,this.Eh=n[8]|0,this.El=n[9]|0,this.Fh=n[10]|0,this.Fl=n[11]|0,this.Gh=n[12]|0,this.Gl=n[13]|0,this.Hh=n[14]|0,this.Hl=n[15]|0}get(){let{Ah:t,Al:n,Bh:r,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:p,Gl:h,Hh:w,Hl:b}=this;return[t,n,r,o,s,i,a,c,l,d,u,f,p,h,w,b]}set(t,n,r,o,s,i,a,c,l,d,u,f,p,h,w,b){this.Ah=t|0,this.Al=n|0,this.Bh=r|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=p|0,this.Gl=h|0,this.Hh=w|0,this.Hl=b|0}_cloneInto(t){return(t||=new this.constructor).set(...this.get()),this._cloneIntoMeta(t)}process(t,n){for(let E=0;E<16;E++,n+=4)en[E]=t.getUint32(n),tn[E]=t.getUint32(n+=4);for(let E=16;E<80;E++){let k=en[E-15]|0,m=tn[E-15]|0,A=An(k,m,1)^An(k,m,8)^Rc(k,m,7),x=Nn(k,m,1)^Nn(k,m,8)^Cc(k,m,7),N=en[E-2]|0,D=tn[E-2]|0,O=An(N,D,19)^$r(N,D,61)^Rc(N,D,6),H=Nn(N,D,19)^Xr(N,D,61)^Cc(N,D,6),M=Wp(x,H,tn[E-7],tn[E-16]),W=jp(M,A,O,en[E-7],en[E-16]);en[E]=W|0,tn[E]=M|0}let{Ah:r,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:p,Fl:h,Gh:w,Gl:b,Hh:T,Hl:B}=this;for(let E=0;E<80;E++){let k=An(u,f,14)^An(u,f,18)^$r(u,f,41),m=Nn(u,f,14)^Nn(u,f,18)^Xr(u,f,41),A=u&p^~u&w,x=f&h^~f&b,N=$p(B,m,x,dx[E],tn[E]),D=Xp(N,T,k,A,lx[E],en[E]),O=N|0,H=An(r,o,28)^$r(r,o,34)^$r(r,o,39),M=Nn(r,o,28)^Xr(r,o,34)^Xr(r,o,39),W=r&s^r&a^s&a,R=o&i^o&c^i&c;T=w|0,B=b|0,w=p|0,b=h|0,p=u|0,h=f|0,{h:u,l:f}=St(l|0,d|0,D|0,O|0),l=a|0,d=c|0,a=s|0,c=i|0,s=r|0,i=o|0;let P=Mp(O,M,R);r=Up(P,D,H,W),o=P|0}({h:r,l:o}=St(this.Ah|0,this.Al|0,r|0,o|0)),{h:s,l:i}=St(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=St(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=St(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=St(this.Eh|0,this.El|0,u|0,f|0),{h:p,l:h}=St(this.Fh|0,this.Fl|0,p|0,h|0),{h:w,l:b}=St(this.Gh|0,this.Gl|0,w|0,b|0),{h:T,l:B}=St(this.Hh|0,this.Hl|0,T|0,B|0),this.set(r,o,s,i,a,c,l,d,u,f,p,h,w,b,T,B)}roundClean(){vt(en,tn)}destroy(){this.destroyed=!0,vt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},Uc=class extends Mc{constructor(){super(64,em)}};var nm=Vr(()=>new Lc,Kr(1));var Wc=Vr(()=>new Uc,Kr(3));function ks(e,t,n=()=>{}){if(!Array.isArray(e))throw new TypeError(`"${t}" expected array, got type=${typeof e}`);for(let r=0;r<e.length;r++)n(e[r],`${t}[${r}]`);return e}var ne=(e,t,n)=>We(e,t,n),jc=He;function om(e,t=""){if(typeof e!="string"){let n=t&&`"${t}" `;throw new TypeError(n+"expected string, got type="+typeof e)}return e}function nn(e,t="object"){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(t==="object"?"expected valid options object":`"${t}" expected object, got type=${typeof e}`);return e}function Tn(e,t){if(typeof e!="function")throw new TypeError(`"${t}" is invalid: expected function, got ${typeof e}`);return e}var Gr=bs,ot=(...e)=>Pc(...e),nr=e=>gs(e),on=ms,Bn=e=>Zp(e),xs=BigInt(0),rm=BigInt(1),ux=e=>e?`"${e}" `:"";function Xe(e,t=""){if(typeof e!="boolean")throw new TypeError(ux(t)+"expected boolean, got type="+typeof e);return e}function Ss(e){if(typeof e=="bigint"){if(!rn(e))throw new RangeError("positive bigint expected, got "+e)}else jc(e);return e}function Ct(e,t=""){if(typeof e!="number"){let n=t&&`"${t}" `;throw new TypeError(n+"expected number, got type="+typeof e)}if(!Number.isSafeInteger(e)){let n=t&&`"${t}" `;throw new RangeError(n+"expected safe integer, got "+e)}}function zr(e){let t=Ss(e).toString(16);return t.length&1?"0"+t:t}function sm(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);return e===""?xs:BigInt("0x"+e)}function Et(e){return sm(bs(e))}function In(e){return sm(bs(Zr(We(e)).reverse()))}function vs(e,t){if(He(t),t===0)throw new Error("zero output length is invalid");e=Ss(e);let n=t*2,r=e.toString(16);if(r.length>n)throw new RangeError("number is too large");return gs(r.padStart(n,"0"))}function $c(e,t){return vs(e,t).reverse()}function Zr(e){return Uint8Array.from(ne(e))}function rn(e){return typeof e=="bigint"&&xs<=e}function Xc(e,t,n){return rn(e)&&rn(t)&&rn(n)&&t<=e&&e<n}function rr(e,t,n,r){if(!Xc(t,n,r))throw new RangeError("expected valid "+e+": "+n+" <= n < "+r+", got "+t)}function or(e){if(e<xs)throw new Error("expected non-negative bigint, got "+e);return e===xs?0:e.toString(2).length}var Qr=e=>(Ct(e,"n"),(rm<<BigInt(e))-rm);function im(e,t,n){if(He(e,"hashLen"),He(t,"qByteLen"),typeof n!="function")throw new TypeError("hmacFn must be a function");let r=b=>new Uint8Array(b),o=Uint8Array.of(),s=Uint8Array.of(0),i=Uint8Array.of(1),a=1e3,c=r(e),l=r(e),d=0,u=()=>{c.fill(1),l.fill(0),d=0},f=(...b)=>n(l,ot(c,...b)),p=(b=o)=>{l=f(s,b),c=f(),b.length!==0&&(l=f(i,b),c=f())},h=()=>{if(d++>=a)throw new Error("drbg: tried max amount of iterations");let b=0,T=[];for(;b<t;){c=f();let B=c.slice();T.push(B),b+=c.length}return ot(...T)};return(b,T)=>{u(),p(b);let B;for(;(B=T(h()))===void 0;)p();return u(),B}}function Ve(e,t={},n={},r="object"){nn(e,r),nn(t,"fields"),nn(n,"optFields");function o(i,a,c){let l=r==="object"?`param "${String(i)}"`:`"${r}.${String(i)}"`,d=e[i];if(!Object.hasOwn(e,i)&&(c?d!==void 0:a!=="function"))throw new TypeError(`${l} is invalid: expected own property`);if(c&&d===void 0)return;let u=typeof d;if(u!==a||d===null)throw new TypeError(`${l} is invalid: expected ${a}, got ${u}`)}let s=(i,a)=>Object.entries(i).forEach(([c,l])=>o(c,l,a));s(t,!1),s(n,!0)}var Ie=BigInt(0),re=BigInt(1),sn=BigInt(2),lm=BigInt(3),Vc=BigInt(4),dm=BigInt(5),fx=BigInt(7),um=BigInt(8),px=BigInt(9),mx=BigInt(15),fm=BigInt(16),hx=BigInt("0x10000000000000000");function ye(e,t){if(t<=Ie)throw new Error("mod: expected positive modulus, got "+t);let n=e%t;return n>=Ie?n:t+n}function pm(e,t,n){if(n<=re)throw new Error("pow: expected modulus > 1, got "+n);if(typeof t!="bigint")throw new TypeError("invalid exponent: expected bigint, got "+typeof t);if(t<Ie)throw new Error("invalid exponent, negatives unsupported");if(t===Ie)return re;if(t===re)return e;let r=e%n;if(r<Ie&&(r+=n),t<hx){let a=re;for(;t>Ie;)t&re&&(a=a*r%n),r=r*r%n,t>>=re;return a}let o=[];for(;t>Ie;)o.push(Number(t&mx)),t>>=Vc;let s=new Array(16);s[0]=re,s[1]=r;for(let a=2;a<16;a++)s[a]=s[a-1]*r%n;let i=s[o[o.length-1]];for(let a=o.length-2;a>=0;a--){i=i*i%n,i=i*i%n,i=i*i%n,i=i*i%n;let c=o[a];c!==0&&(i=i*s[c]%n)}return i}function me(e,t,n){if(n<=re)throw new Error("pow2: expected modulus > 1, got "+n);if(t<Ie)throw new Error("pow2: expected non-negative exponent, got "+t);let r=e;for(;t-- >Ie;)r*=r,r%=n;return r}function am(e,t){if(e===Ie)throw new Error("invert: expected non-zero number");if(t<=re)throw new Error("invert: expected modulus > 1, got "+t);let n=ye(e,t),r=t,o=Ie,s=re;for(;n!==Ie;){let a=r/n,c=r-n*a,l=o-s*a;r=n,n=c,o=s,s=l}if(r!==re)throw new Error("invert: does not exist");return ye(o,t)}function mm(e,t){if(t<=re)throw new Error("invertCt: expected prime modulus > 1, got "+t);let n=ye(e,t);if(n===Ie)throw new Error("invertCt: expected non-zero number");let r=pm(n,t-sn,t);if(ye(n*r,t)!==re)throw new Error("invertCt: does not exist");return r}function Kc(e,t,n){let r=e;if(!r.eql(r.sqr(t),n))throw new Error("Cannot find square root")}function Yc(e,t){if((e&re)===Ie)throw new Error(t+": expected odd modulus, got "+e)}function hm(e,t){let n=e,r=(n.ORDER+re)/Vc,o=n.pow(t,r);return Kc(n,o,t),o}function wx(e,t){let n=e,r=(n.ORDER-dm)/um,o=n.mul(t,sn),s=n.pow(o,r),i=n.mul(t,s),a=n.mul(n.mul(i,sn),s),c=n.mul(i,n.sub(a,n.ONE));return Kc(n,c,t),c}function yx(e){let t=ir(e),n=wm(e),r=n(t,t.neg(t.ONE)),o=n(t,r),s=n(t,t.neg(r)),i=(e+fx)/fm;return((a,c)=>{let l=a,d=l.pow(c,i),u=l.mul(d,r),f=l.mul(d,o),p=l.mul(d,s),h=l.eql(l.sqr(u),c),w=l.eql(l.sqr(f),c);d=l.cmov(d,u,h),u=l.cmov(p,f,w);let b=l.eql(l.sqr(u),c),T=l.cmov(d,u,b);return Kc(l,T,c),T})}function wm(e){if(e<lm)throw new Error("sqrt is not defined for small field");Yc(e,"tonelliShanks");let t=e-re,n=0;for(;t%sn===Ie;)t/=sn,n++;let r=sn,o=ir(e);for(;Jr(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return hm;let s=o.pow(r,t),i=(t+re)/sn;return function(c,l){let d=c;if(d.is0(l))return l;if(Jr(d,l)!==1)throw new Error("Cannot find square root");let u=n,f=d.mul(d.ONE,s),p=d.pow(l,t),h=d.pow(l,i);for(;!d.eql(p,d.ONE);){if(d.is0(p))throw new Error("Cannot find square root: probably non-prime P");let w=1,b=d.sqr(p);for(;!d.eql(b,d.ONE);)if(w++,b=d.sqr(b),w===u)throw new Error("Cannot find square root");let T=re<<BigInt(u-w-1),B=d.pow(f,T);u=w,f=d.sqr(B),p=d.mul(p,f),h=d.mul(h,B)}return h}}function bx(e){return Yc(e,"Fp.sqrt"),e%Vc===lm?hm:e%um===dm?wx:e%fm===px?yx(e):wm(e)}var ym=(e,t)=>(ye(e,t)&re)===re,gx=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function sr(e){if(nn(e,"field"),typeof e.ORDER!="bigint")throw new TypeError('param "ORDER" is invalid: expected bigint, got '+typeof e.ORDER);Ct(e.BYTES,"BYTES"),Ct(e.BITS,"BITS");for(let t of gx)Tn(e[t],"field."+t);if(e.BYTES<1||e.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(e.ORDER<=re)throw new Error("invalid field: expected ORDER > 1, got "+e.ORDER);return e}function As(e,t,n=!1){sr(e),ks(t,"nums"),Xe(n,"passZero");let r=e,o=new Array(t.length).fill(n?r.ZERO:void 0),s=t.reduce((a,c,l)=>r.is0(c)?a:(o[l]=a,r.mul(a,c)),r.ONE),i=r.inv(s);return t.reduceRight((a,c,l)=>r.is0(c)?a:(o[l]=r.mul(a,o[l]),r.mul(a,c)),i),o}function Jr(e,t){sr(e);let n=e;Yc(n.ORDER,"FpLegendre");let r=(n.ORDER-re)/sn,o=n.pow(t,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function xx(e,t){if(t!==void 0&&jc(t),e<=Ie)throw new Error("invalid n length: expected positive n, got "+e);if(t!==void 0&&t<1)throw new Error("invalid n length: expected positive bit length, got "+t);let n=or(e);if(t!==void 0&&t<n)throw new Error(`invalid n length: expected nBitLength (${t}) >= bitLen(n) (${n})`);let r=t!==void 0?t:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}var cm=new WeakMap,Es=class{ORDER;BITS;BYTES;isLE;ZERO=Ie;ONE=re;_lengths;_mod;constructor(t,n={}){if(t<=re)throw new Error("invalid field: expected ORDER > 1, got "+t);let r;this.isLE=!1,n!=null&&typeof n=="object"&&(typeof n.BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:!0}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));let{nBitLength:o,nByteLength:s}=xx(t,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=t,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(t){return ye(t,this.ORDER)}isValid(t){if(typeof t!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof t);return Ie<=t&&t<this.ORDER}is0(t){return t===Ie}isValidNot0(t){return!this.is0(t)&&this.isValid(t)}isOdd(t){return(t&re)===re}neg(t){return ye(-t,this.ORDER)}eql(t,n){return t===n}sqr(t){return ye(t*t,this.ORDER)}add(t,n){return ye(t+n,this.ORDER)}sub(t,n){return ye(t-n,this.ORDER)}mul(t,n){return ye(t*n,this.ORDER)}pow(t,n){return pm(t,n,this.ORDER)}div(t,n){return ye(t*am(n,this.ORDER),this.ORDER)}sqrN(t){return t*t}addN(t,n){return t+n}subN(t,n){return t-n}mulN(t,n){return t*n}inv(t){return am(t,this.ORDER)}sqrt(t){let n=cm.get(this);return n||cm.set(this,n=bx(this.ORDER)),n(this,t)}toBytes(t){return this.isLE?$c(t,this.BYTES):vs(t,this.BYTES)}fromBytes(t,n=!1){ne(t);let{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(r){if(t.length<1||!r.includes(t.length)||t.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+t.length);let l=new Uint8Array(o);l.set(t,s?0:l.length-t.length),t=l}if(t.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+t.length);let c=s?In(t):Et(t);if(a&&(c=ye(c,i)),!n&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(t){return As(this,t,!0)}cmov(t,n,r){return Xe(r,"condition"),r?n:t}};function ir(e,t={}){return Object.freeze(Es.prototype),new Es(e,t)}function bm(e){if(typeof e!="bigint")throw new Error("field order must be bigint");if(e<=re)throw new Error("field order must be greater than 1");let t=or(e-re);return Math.ceil(t/8)}function Ns(e){let t=bm(e);return t+Math.ceil(t/2)}function Ts(e,t,n=!1){ne(e);let r=e.length,o=bm(t),s=Math.max(Ns(t),16);if(r<s||r>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+r);let i=n?In(e):Et(e),a=ye(i,t-re)+re;return n?$c(a,o):vs(a,o)}var Zc=BigInt(0),qr=BigInt(1),kx=BigInt(4),Gc=16,gm=128,Sx=5,xm=2**31;function an(e){let t=e;if(typeof t!="function")throw new TypeError('"Point" expected constructor, got type='+typeof e);Tn(t.fromAffine,"Point.fromAffine"),Tn(t.fromBytes,"Point.fromBytes"),Tn(t.fromHex,"Point.fromHex"),nn(t.BASE,"Point.BASE"),nn(t.ZERO,"Point.ZERO"),sr(t.Fp),sr(t.Fn)}function Bs(e,t){an(e),Sm(t,e);let n=As(e.Fp,t.map(r=>r.Z));return t.map((r,o)=>e.fromAffine(r.toAffine(n[o])))}function vx(e,t,n=1){if(!Number.isSafeInteger(e)||e<n||e>t)throw new Error("invalid window size, expected ["+n+".."+t+"], got W="+e)}function Ex(e,t){let n=e*(4*t+128);if(n>xm)throw new Error("invalid window size: table would need ~"+Math.ceil(n/2**20)+" MiB, max "+xm/2**20+" MiB")}function Qc(e,t){if(e!==void 0){Tn(e,"randomBytes");try{let n=e(t);if(!on(n)||n.length!==t)return}catch{return}return e}}function Sm(e,t){ks(e,"points"),e.forEach((n,r)=>{if(!(n instanceof t))throw new Error("invalid point at index "+r)})}function Ax(e,t,n){if(!Array.isArray(e))throw new Error("array of scalars expected");e.forEach((r,o)=>{if(!(n===void 0?t.isValid(r):rn(r)&&r<n))throw new Error("invalid scalar at index "+o)})}var vm=new WeakMap;function zc(e){return vm.get(e)||1}function Nx(e,t){let n=e.double(),r=[e];for(let o=1;o<t;o++)r.push(r[o-1].add(n));return r}function Tx(e,t){let n=2**t,r=n/2,o=BigInt(n-1),s=[];for(;e>Zc;){let i=0;e&qr&&(i=Number(e&o),i>=r&&(i-=n),e-=BigInt(i)),s.push(i),e>>=qr}return s}function Bx(e,t,n){let r=2**t,o=r/2,s=BigInt(r-1),i=BigInt(t),a=[];for(let c=0;c<n;c++){let l=Number(e&s);e>>=i,l>o&&(l-=r,e+=qr),a.push(l)}if(e!==Zc)throw new Error("invalid wnaf");return a}function Ix(e,t,n){let r=0;for(let s of n)r=Math.max(r,s.length);let o=e;for(let s=r-1;s>=0;s--){s!==r-1&&(o=o.double());for(let i=0;i<n.length;i++){let a=n[i][s];if(a){let c=t[i][Math.abs(a)-1>>1];o=o.add(a<0?c.negate():c)}}}return o}var ar=class{Point;BASE;ZERO;randomBytes;wnafPrecomputes=new WeakMap;baseCanBeBlinded;bits;constructor(t,n){an(t),this.randomBytes=Qc(n,Gc),this.Point=t,this.BASE=t.BASE,this.ZERO=t.ZERO,this.bits=t.Fn.BITS}buildWnafTable(t,n,r){let o=Math.ceil(r/n)+1,s=2**(n-1),i=[],a=t;for(let c=0;c<o;c++){let l=a;for(let d=0;d<s;d++)i.push(l),l=l.add(a);a=i[i.length-1].double()}return{W:n,bits:r,windows:o,comp:i}}wnafCachedCT(t,n){let{W:r,windows:o,comp:s}=t,i=2**(r-1),a=Bx(n,r,o),c=this.ZERO,l=this.BASE;for(let d=0;d<o;d++){let u=a[d],f=d*i,p=Math.abs(u)-1,h=s[f];for(let b=1;b<i;b++)h=b===p?s[f+b]:h;let w=h.negate();u===0?l=l.add(s[f]):c=c.add(u<0?w:h)}return{p:c,f:l}}getWnafPrecomputes(t,n,r,o){let s=this.wnafPrecomputes.get(n),i=s?.find(a=>a.W===t&&a.bits===r);return i||(i=this.buildWnafTable(n,t,r),typeof o=="function"&&(i={...i,comp:o(i.comp)}),s||(s=[],this.wnafPrecomputes.set(n,s)),s.push(i)),i}assertPoint(t){if(!(t instanceof this.Point))throw new TypeError('"point" expected Point instance, got type='+typeof t)}validateMulInput(t,n){if(this.assertPoint(t),!Xc(n,qr,this.Point.Fn.ORDER))throw new Error("invalid scalar")}runCT(t,n,r,o){let s=zc(t);return s===1?this.fixedWindowCT(t,n,r):this.wnafCachedCT(this.getWnafPrecomputes(s,t,r,o),n)}mulCT(t,n,r){return this.validateMulInput(t,n),this.runCT(t,n,this.bits,r)}mulCTBlinded(t,n,r){if(this.validateMulInput(t,n),this.randomBytes===void 0)throw new Error("randomBytes is required for scalar blinding");let o=this.Point.Fn.BITS+gm,s=this.randomBytes(Gc);if(!on(s)||s.length!==Gc)throw new Error("randomBytes returned invalid byte array");s[0]=s[0]&63|128;let i=n+Et(s)*this.Point.Fn.ORDER;return this.runCT(t,i,o,r)}fixedWindowCT(t,n,r){let o=Sx,s=1<<o,i=Qr(o),a=new Array(s);a[0]=this.ZERO;for(let d=1;d<s;d++)a[d]=a[d-1].add(t);let c=Math.ceil(r/o),l=this.ZERO;for(let d=c-1;d>=0;d--){if(d!==c-1)for(let p=0;p<o;p++)l=l.double();let u=Number(n>>BigInt(d*o)&i),f=a[0];for(let p=1;p<s;p++)f=p===u?a[p]:f;l=l.add(f)}return{p:l,f:l}}shouldBlind(t,n){return this.randomBytes===void 0?!1:n===qr?!0:t!==this.BASE?!1:(this.baseCanBeBlinded===void 0&&(this.baseCanBeBlinded=this.mulUnsafe(this.BASE,this.Point.Fn.ORDER).is0()),this.baseCanBeBlinded)}mulSecret(t,n,r,o){return this.shouldBlind(t,r)?this.mulCTBlinded(t,n,o):this.mulCT(t,n,o)}mulUnsafe(t,n,r){if(this.assertPoint(t),!rn(n))throw new Error("invalid scalar");let o=zc(t);if(o===1||n>=this.Point.Fn.ORDER)return Is(this.Point,[t],[n],!0);let s=this.getWnafPrecomputes(o,t,this.bits,r);return this.wnafCachedCT(s,n).p}setWindowSize(t,n){this.assertPoint(t),vx(n,this.bits);let r=Math.ceil((this.bits+gm)/n)+1;Ex(r*2**(n-1),this.Point.Fp.BYTES),vm.set(t,n),this.wnafPrecomputes.delete(t)}hasWindowSize(t){return zc(t)!==1}};function Is(e,t,n,r=!1){if(an(e),Sm(t,e),Xe(r,"allowOversized"),Ax(n,e.Fn,r?e.Fn.ORDER**kx:void 0),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=t.map(i=>Nx(i,4)),s=n.map(i=>Tx(i,4));return Ix(e.ZERO,o,s)}function km(e,t,n){if(t){if(t.ORDER!==e)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return sr(t),t}else return ir(e,{isLE:n})}function Os(e,t,n={},r){if(e!=="weierstrass"&&e!=="edwards")throw new Error('expected curve type "weierstrass" or "edwards"');if(r===void 0&&(r=e==="edwards"),!t||typeof t!="object")throw new Error(`expected valid ${e} CURVE object`);Ve(n);for(let c of["p","n","h"]){let l=t[c];if(!(rn(l)&&l!==Zc))throw new Error(`CURVE.${c} must be positive bigint`)}let o=km(t.p,n.Fp,r),s=km(t.n,n.Fn,r),a=["Gx","Gy","a",e==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(t[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:o,Fn:s}}function _s(e,t){return function(r){let o=e(r);return{secretKey:o,publicKey:t(o)}}}var Rs=BigInt(0),Cs=BigInt(1),Fs=BigInt(2),Ox=BigInt(4),Em=BigInt(8);function _x(e,t,n,r){let o=e.sqr(n),s=e.sqr(r),i=e.add(e.mul(t.a,o),s),a=e.add(e.ONE,e.mul(t.d,e.mul(o,s)));return e.eql(i,a)}function Am(e,t={}){Ve(t,{},{},"extraOpts");let n=t,r=Os("edwards",e,n,n.FpFnLE),{Fp:o,Fn:s}=r,i=r.CURVE,{h:a}=i;if(Jr(o,i.a)!==1)throw new Error("edwards: CURVE.a must be a square in Fp for complete addition formulas");if(Jr(o,i.d)!==-1)throw new Error("edwards: CURVE.d must be a non-square in Fp for complete addition formulas");Ve(n,{},{uvRatio:"function",randomBytes:"function"});let c=n.randomBytes===void 0?Bn:n.randomBytes,l=Fs<<BigInt(o.BYTES*8)-Cs;function d(B){if(!o.isOdd)throw new Error("Field does not have .isOdd()");return o.isOdd(B)}let u=n.uvRatio===void 0?(B,E)=>{try{return{isValid:!0,value:o.sqrt(o.div(B,E))}}catch{return{isValid:!1,value:Rs}}}:n.uvRatio;if(!_x(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");let f=o.eql(i.a,o.neg(o.ONE))?B=>o.neg(B):o.eql(i.a,o.ONE)?B=>B:B=>o.mul(i.a,B);function p(B,E,k=!1){let m=k?Cs:Rs;return rr("coordinate "+B,E,m,l),E}function h(B){if(!(B instanceof w))throw new Error("EdwardsPoint expected")}class w{static BASE=new w(i.Gx,i.Gy,o.ONE,o.mul(i.Gx,i.Gy));static ZERO=new w(o.ZERO,o.ONE,o.ONE,o.ZERO);static Fp=o;static Fn=s;X;Y;Z;T;constructor(E,k,m,A){this.X=p("x",E),this.Y=p("y",k),this.Z=p("z",m,!0),this.T=p("t",A),Object.freeze(this)}static CURVE(){return i}static fromAffine(E){if(E instanceof w)throw new Error("extended point not allowed");let{x:k,y:m}=E||{};return p("x",k),p("y",m),new w(k,m,o.ONE,o.mul(k,m))}static fromBytes(E,k=!1){let m=o.BYTES,{a:A,d:x}=i;E=Zr(ne(E,m,"point")),Xe(k,"zip215");let N=Zr(E),D=E[m-1];N[m-1]=D&-129;let O=In(N),H=k?l:o.ORDER;rr("point.y",O,Rs,H);let M=o.sqr(O),W=o.sub(M,o.ONE),R=o.sub(o.mulN(x,M),A),{isValid:P,value:$}=u(W,R);if(!P)throw new Error("bad point: invalid y coordinate");let C=d($),K=(D&128)!==0;if(!k&&o.is0($)&&K)throw new Error("bad point: x=0 and x_0=1");return K!==C&&($=o.neg($)),w.fromAffine({x:$,y:O})}static fromHex(E,k=!1){return w.fromBytes(nr(E),k)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(E=6,k=!0){return T.setWindowSize(this,E),k||this.multiply(Fs),this}assertValidity(){let E=this,{a:k,d:m}=i;if(E.is0())throw new Error("bad point: ZERO");let{X:A,Y:x,Z:N,T:D}=E,O=o.sqr(A),H=o.sqr(x),M=o.sqr(N),W=o.sqr(M),R=o.mul(O,k),P=o.mul(o.add(R,H),M),$=o.add(W,o.mul(m,o.mul(O,H)));if(!o.eql(P,$))throw new Error("bad point: equation left != right (1)");let C=o.mul(A,x),K=o.mul(N,D);if(!o.eql(C,K))throw new Error("bad point: equation left != right (2)")}equals(E){h(E);let{X:k,Y:m,Z:A}=this,{X:x,Y:N,Z:D}=E,O=o.mul(k,D),H=o.mul(x,A),M=o.mul(m,D),W=o.mul(N,A);return o.eql(O,H)&&o.eql(M,W)}is0(){return this.equals(w.ZERO)}negate(){return new w(o.neg(this.X),this.Y,this.Z,o.neg(this.T))}double(){let{X:E,Y:k,Z:m}=this,A=o.sqr(E),x=o.sqr(k),N=o.mul(o.sqr(m),Fs),D=f(A),O=o.addN(E,k),H=o.sub(o.subN(o.sqr(O),A),x),M=o.addN(D,x),W=o.subN(M,N),R=o.subN(D,x),P=o.mul(H,W),$=o.mul(M,R),C=o.mul(H,R),K=o.mul(W,M);return new w(P,$,K,C)}add(E){h(E);let{d:k}=i,{X:m,Y:A,Z:x,T:N}=this,{X:D,Y:O,Z:H,T:M}=E,W=o.mul(m,D),R=o.mul(A,O),P=o.mul(o.mulN(N,k),M),$=o.mul(x,H),C=o.sub(o.subN(o.mulN(o.addN(m,A),o.addN(D,O)),W),R),K=o.subN($,P),Y=o.addN($,P),S=o.sub(R,f(W)),y=o.mul(C,K),v=o.mul(Y,S),I=o.mul(C,S),_=o.mul(K,Y);return new w(y,v,_,I)}subtract(E){return h(E),this.add(E.negate())}multiply(E){if(!s.isValidNot0(E))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");let{p:k,f:m}=T.mulSecret(this,E,a,b);return b([k,m])[0]}multiplyUnsafe(E){if(!s.isValid(E))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return E===Rs?w.ZERO:this.is0()||E===Cs?this:T.mulUnsafe(this,E,b)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return T.mulUnsafe(this,i.n).is0()}toAffine(E){let k=this,m=E;if(m!=null&&typeof m!="bigint")throw new TypeError('"invertedZ" expected bigint, got type='+typeof m);let{X:A,Y:x,Z:N}=k,D=k.is0();m==null&&(m=D?o.create(Em):o.inv(N));let O=o.mul(A,m),H=o.mul(x,m),M=o.mul(N,m);if(D)return{x:o.ZERO,y:o.ONE};if(!o.eql(M,o.ONE))throw new Error("invZ was invalid");return{x:O,y:H}}clearCofactor(){return a===Cs?this:a===Fs?this.double():a===Ox?this.double().double():a===Em?this.double().double().double():this.multiplyUnsafe(a)}toBytes(){let{x:E,y:k}=this.toAffine(),m=o.toBytes(k);return m[m.length-1]|=d(E)?128:0,m}toHex(){return Gr(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let b=B=>Bs(w,B),T=new ar(w,c);return T.bits>=6&&w.BASE.precompute(6),Object.freeze(w.prototype),Object.freeze(w),w}function Nm(e,t,n={}){if(an(e),typeof t!="function")throw new Error('"hash" function param is required');let r=t,o=n;Ve(o,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",zip215:"boolean",mapToCurve:"function",toMontgomery:"function",toMontgomerySecret:"function"});let{prehash:s}=o,{BASE:i,Fp:a,Fn:c}=e,l=r.outputLen,d=2*a.BYTES;if(l!==void 0&&(Ct(l,"hash.outputLen"),l!==d))throw new Error(`hash.outputLen must be ${d}, got ${l}`);let u=o.randomBytes===void 0?Bn:o.randomBytes,f=o.toMontgomery,p=o.toMontgomerySecret,h=o.adjustScalarBytes===void 0?R=>R:o.adjustScalarBytes,w=o.domain===void 0?(R,P,$)=>{if(Xe($,"phflag"),P.length||$)throw new Error("Contexts/pre-hash are not supported");return R}:o.domain;function b(R){return c.create(In(R))}function T(R){let P=D.secretKey;ne(R,D.secretKey,"secretKey");let $=ne(r(R),2*P,"hashedSecretKey"),C=h($.slice(0,P)),K=$.slice(P,2*P),Y=b(C);return{head:C,prefix:K,scalar:Y}}function B(R){let{head:P,prefix:$,scalar:C}=T(R),K=i.multiply(C),Y=K.toBytes();return{head:P,prefix:$,scalar:C,point:K,pointBytes:Y}}function E(R){return B(R).pointBytes}function k(R=Uint8Array.of(),...P){let $=ot(...P);return b(r(w($,ne(R,void 0,"context"),!!s)))}function m(R,P,$={}){Ve($,{},{},"options"),R=Zr(ne(R,void 0,"message")),s&&(R=s(R));let{prefix:C,scalar:K,pointBytes:Y}=B(P),S=k($.context,C,R),y=i.multiply(S).toBytes(),v=k($.context,y,Y,R),I=c.create(S+v*K);if(!c.isValid(I))throw new Error("sign failed: invalid s");let _=ot(y,c.toBytes(I));return ne(_,D.signature,"result")}let A={zip215:o.zip215};function x(R,P,$,C=A){Ve(C);let{context:K}=C,Y=C.zip215===void 0?!!A.zip215:C.zip215,S=D.signature;R=ne(R,S,"signature"),P=ne(P,void 0,"message"),$=ne($,D.publicKey,"publicKey"),Y!==void 0&&Xe(Y,"zip215"),s&&(P=s(P));let y=S/2,v=R.subarray(0,y),I=In(R.subarray(y,S)),_,L,F;try{_=e.fromBytes($,Y),L=e.fromBytes(v,Y),F=i.multiplyUnsafe(I)}catch{return!1}if(!Y&&_.isSmallOrder())return!1;let j=k(K,v,$,P);return L.add(_.multiplyUnsafe(j)).subtract(F).clearCofactor().is0()}let N=a.BYTES,D={secretKey:N,publicKey:N,signature:2*N,seed:N};function O(R){return R=R===void 0?u(D.seed):R,ne(R,D.seed,"seed")}function H(R){return on(R)&&R.length===D.secretKey}function M(R,P){try{return!!e.fromBytes(R,P===void 0?A.zip215:P)}catch{return!1}}let W={getExtendedPublicKey:B,randomSecretKey:O,isValidSecretKey:H,isValidPublicKey:M,toMontgomery(R){if(f===void 0)throw new Error("Montgomery conversion is not supported for this curve");return f(e.fromBytes(R))},toMontgomerySecret(R){if(p===void 0)throw new Error("Montgomery conversion is not supported for this curve");return p(R)}};return Object.freeze(D),Object.freeze(W),Object.freeze({keygen:_s(O,E),getPublicKey:E,sign:m,verify:x,utils:W,Point:e,lengths:D})}var Jc=BigInt(1),Tm=BigInt(2);var Rx=BigInt(5),Cx=BigInt(8),qc=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),Fx={p:qc,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Cx,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Dx(e){let t=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=qc,a=e*e%s*e%s,c=me(a,Tm,s)*a%s,l=me(c,Jc,s)*e%s,d=me(l,Rx,s)*l%s,u=me(d,t,s)*d%s,f=me(u,n,s)*u%s,p=me(f,r,s)*f%s,h=me(p,o,s)*p%s,w=me(h,o,s)*p%s,b=me(w,t,s)*d%s;return{pow_p_5_8:me(b,Tm,s)*e%s,b2:a}}function Om(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}var Bm=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Px(e,t){let n=qc,r=ye(t*t*t,n),o=ye(r*r*t,n),s=Dx(e*o).pow_p_5_8,i=ye(e*r*s,n),a=ye(t*i*i,n),c=i,l=ye(i*Bm,n),d=a===e,u=a===ye(-e,n),f=a===ye(-e*Bm,n);return d&&(i=c),(u||f)&&(i=l),ym(i,n)&&(i=ye(-i,n)),{isValid:d||u,value:i}}var el=Am(Fx,{uvRatio:Px}),Im=el.Fp;function Hx(e){let{y:t}=e;return Im.toBytes(Im.div(Jc+t,Jc-t))}function Lx(e){let t=el.Fp.BYTES;return We(e,t),Om(Wc(e.subarray(0,t))).subarray(0,t)}function Mx(e){return Nm(el,Wc,Object.assign({adjustScalarBytes:Om,toMontgomery:Hx,toMontgomerySecret:Lx,zip215:!0},e))}var On=Mx({});var Ux=BigInt(0),eo=BigInt(1),Wx=BigInt(2),jx=BigInt(7),$x=BigInt(256),Xx=BigInt(113),Cm=[],Fm=[],Dm=[];for(let e=0,t=eo,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],Cm.push(2*(5*r+n)),Fm.push((e+1)*(e+2)/2%64);let o=Ux;for(let s=0;s<7;s++)t=(t<<eo^(t>>jx)*Xx)%$x,t&Wx&&(o^=eo<<(eo<<BigInt(s))-eo);Dm.push(o)}var Pm=ps(Dm,!0),Vx=Pm[0],Kx=Pm[1],Yx=(e,t,n)=>e<<n|t>>>32-n,Gx=(e,t,n)=>t<<n|e>>>32-n,zx=(e,t,n)=>t<<n-32|e>>>64-n,Zx=(e,t,n)=>e<<n-32|t>>>64-n,_m=(e,t,n)=>n>32?zx(e,t,n):Yx(e,t,n),Rm=(e,t,n)=>n>32?Zx(e,t,n):Gx(e,t,n),cr=new Uint32Array(10);function Qx(e,t=24){if(!(e instanceof Uint32Array))throw new TypeError('"s" expected Uint32Array(50), got type='+typeof e);if(e.length!==50)throw new RangeError('"s" expected Uint32Array(50), got length='+e.length);if(He(t,"rounds"),t<1||t>24)throw new Error('"rounds" expected integer 1..24');for(let n=24-t;n<24;n++){for(let s=0;s<10;s++)cr[s]=e[s]^e[s+10]^e[s+20]^e[s+30]^e[s+40];for(let s=0;s<10;s+=2){let i=(s+8)%10,a=(s+2)%10,c=cr[a],l=cr[a+1],d=_m(c,l,1)^cr[i],u=Rm(c,l,1)^cr[i+1];for(let f=0;f<50;f+=10)e[s+f]^=d,e[s+f+1]^=u}let r=e[2],o=e[3];for(let s=0;s<24;s++){let i=Fm[s],a=_m(r,o,i),c=Rm(r,o,i),l=Cm[s];r=e[l],o=e[l+1],e[l]=a,e[l+1]=c}for(let s=0;s<50;s+=10){let i=e[s],a=e[s+1],c=e[s+2],l=e[s+3];e[s]^=~e[s+2]&e[s+4],e[s+1]^=~e[s+3]&e[s+5],e[s+2]^=~e[s+4]&e[s+6],e[s+3]^=~e[s+5]&e[s+7],e[s+4]^=~e[s+6]&e[s+8],e[s+5]^=~e[s+7]&e[s+9],e[s+6]^=~e[s+8]&i,e[s+7]^=~e[s+9]&a,e[s+8]^=~i&c,e[s+9]^=~a&l}e[0]^=Vx[n],e[1]^=Kx[n]}vt(cr)}var tl=class e{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;canXOF;enableXOF=!1;rounds;constructor(t,n,r,o=!1,s=24){if(He(t,"blockLen"),He(n,"suffix"),He(s,"rounds"),Yp(o,"enableXOF"),this.blockLen=t,this.suffix=n,this.outputLen=r,this.enableXOF=o,this.canXOF=o,this.rounds=s,He(r,"outputLen"),!(0<t&&t<200))throw new Error('"blockLen" must be 1..199');this.state=new Uint8Array(200),this.state32=Fc(this.state)}clone(){return this._cloneInto()}keccak(){Dc(this.state32),Qx(this.state32,this.rounds),Dc(this.state32),this.posOut=0,this.pos=0}update(t){Rt(this),We(t);let{blockLen:n,state:r,state32:o}=this,s=t.length,i=n%4===0&&t.byteOffset%4===0,a=n/4,c=i&&s>=n?Fc(t):void 0;for(let l=0;l<s;){if(c!==void 0&&this.pos===0&&l%4===0&&s-l>=n){for(let u=0,f=l/4;u<a;u++)o[u]^=c[f+u];l+=n,this.pos=n,this.keccak();continue}let d=Math.min(n-this.pos,s-l);for(let u=0;u<d;u++)r[this.pos++]^=t[l++];this.pos===n&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:t,suffix:n,pos:r,blockLen:o}=this;t[r]^=n,(n&128)!==0&&r===o-1&&this.keccak(),t[o-1]^=128,this.keccak()}writeInto(t){Rt(this,!1),We(t),this.finish();let n=this.state,{blockLen:r}=this;for(let o=0,s=t.length;o<s;){this.posOut>=r&&this.keccak();let i=Math.min(r-this.posOut,s-o);t.set(n.subarray(this.posOut,this.posOut+i),o),this.posOut+=i,o+=i}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not enabled");return this.writeInto(t)}xof(t){return He(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(tr(t,this),this.finished)throw new Error("digest() was already called");this.writeInto(t.length===this.outputLen?t:t.subarray(0,this.outputLen)),this.destroy()}digest(){let t=new Uint8Array(this.outputLen);return this.digestInto(t),t}destroy(){this.destroyed=!0,vt(this.state)}_cloneInto(t){let{blockLen:n,suffix:r,outputLen:o,rounds:s,enableXOF:i}=this;return t||=new e(n,r,o,i,s),t.blockLen=n,t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=s,t.suffix=r,t.outputLen=o,t.enableXOF=i,t.canXOF=this.canXOF,t.destroyed=this.destroyed,t}},Hm=(e,t,n,r={})=>Vr(()=>new tl(t,e,n),r);var Lm=Hm(6,72,64,Kr(10));var Ds=Hm(1,136,32);function rl(e){return Ds(e)}var Ft=On.Point.CURVE().n;function _n(e){let t=String(e).trim().replace(/^0x/,"");if(t.length%2)throw new Error("odd hex length");let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++)n[r]=parseInt(t.substr(r*2,2),16);return n}function Rn(e){return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}function Ps(e){let t=Uint8Array.from(e).reverse();return BigInt("0x"+Rn(t))}function ol(e){return Ps(_n(e))}function Mm(e,t=32){let n=new Uint8Array(t),r=BigInt(e);for(let o=0;o<t;o++)n[o]=Number(r&0xffn),r>>=8n;return n}function to(...e){let t=e.reduce((o,s)=>o+s.length,0),n=new Uint8Array(t),r=0;for(let o of e)n.set(o,r),r+=o.length;return Ps(rl(n))%Ft}function sl(e){let t=[],n=BigInt(e);for(;n>=0x80n;)t.push(Number(n&0x7fn|0x80n)),n>>=7n;return t.push(Number(n)),new Uint8Array(t)}function Um(e){return On.Point.fromHex(String(e).replace(/^0x/,""))}function il(e){if(typeof e=="bigint")return[["number",e%Ft]];let t=String(e).replace(/^0x/,"");return/^[0-9a-fA-F]{64}$/.test(t)?[["BE-number",BigInt("0x"+t)%Ft],["LE-bytes",ol(t)%Ft]]:[["unparsed",null]]}function Jx(e,t){let n=String(t||"").toLowerCase();if(!n)return null;for(let[r,o]of il(e))if(o!==null&&On.Point.BASE.multiply(o).toHex().toLowerCase()===n)return r;return!1}function nl(e,t){let n=Um(e),r=(typeof t=="bigint"?t:ol(String(t).replace(/^0x/,"")))%Ft,o=n.multiply(r);return _n(o.multiply(8n).toHex())}function Wm(e,t,n){let r=to(e,sl(t));return On.Point.BASE.multiply(r).add(Um(n)).toHex()}function jm(e){let t=Array.isArray(e)?Uint8Array.from(e):_n(e),n=0;for(;n<t.length;){let r=t[n];if(r===1)return Rn(t.subarray(n+1,n+33));if(r===2){n+=1+t[n+1];continue}if(r===0){n+=1+t[n+1];continue}return null}return null}function $m(e,t,n){let r=_n(e);if(Number(n)>=2){let i=new TextEncoder().encode("amount"),a=new Uint8Array(i.length+t.length);a.set(i,0),a.set(t,i.length);let c=rl(a),l=r.slice();for(let d=0;d<8;d++)l[d]^=c[d];return Ps(l)}let o=to(_n(to(_n(Rn(t))).toString(16).padStart(64,"0")));return(BigInt("0x"+Rn(r))%Ft-o+Ft)%Ft}function Xm({txPublicKey:e,viewSecretHex:t,spendPubHex:n,outputs:r,ecdhAmounts:o=[],rctVersion:s=2}){if(!e)throw new Error("the transaction has no public key (extra tag 0x01) - nothing to parse");let i=il(t).filter(([,c])=>c!==null),a=i[0]||["unparsed",null];for(let[c,l]of i){let d=nl(e,l),u=[];for(let f of r){let p=to(d,sl(f.index));if(Wm(d,f.index,n).toLowerCase()===String(f.key).toLowerCase()){let w=o[f.index]?$m(o[f.index],Mm(p),s):null;u.push({index:f.index,key:f.key,amountAtomic:w})}}if(u.length)return{derivation:Rn(d),outputs:u,viewKeyForm:c}}return{derivation:a[1]===null?null:Rn(nl(e,a[1])),outputs:[],viewKeyForm:a[0]}}async function Vm(e,t){let r=await(await fetch(`${String(e).replace(/\/+$/,"")}/json_rpc`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:"block",method:"get_block",params:{height:t}})})).json();if(!r.result)throw new Error(`block ${t} not received: ${r.error?r.error.message:"empty answer"}`);return r.result}async function Km(e,t){if(!t.length)return[];let r=await(await fetch(`${String(e).replace(/\/+$/,"")}/get_transactions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({txs_hashes:t,decode_as_json:!0})})).json(),o=r.txs||[];return(r.txs_as_json||[]).map((s,i)=>{let a=typeof s=="string"?JSON.parse(s):s,c=o[i]||{};return a.tx_hash=c.tx_hash||a.tx_hash||null,a.block_height=c.block_height??null,a.confirmations=c.confirmations??null,a.in_pool=c.in_pool??null,a})}function Ym(e,t,{height:n=null,nowSec:r=null}={}){let o=[],s=jm(e.extra);if(!s)return o;let i=n??e.block_height??null,a=_c(e.unlock_time,{height:i,nowSec:r}),c=f=>((f.target||{}).tagged_key||f.target||{}).key,l=(e.vout||[]).map((f,p)=>({index:p,key:c(f)})),d=((e.rct_signatures||{}).ecdhInfo||[]).map(f=>f.amount),u=(e.rct_signatures||{}).type||2;for(let f of t){let p=Xm({txPublicKey:s,viewSecretHex:f.viewSecret,spendPubHex:f.spendPub,outputs:l,ecdhAmounts:d,rctVersion:Number(u)>=2?2:1});p.outputs.length&&o.push({address:f.address,index:f.index??null,outputs:p.outputs,derivation:p.derivation,viewKeyForm:p.viewKeyForm,unlockTime:Number(e.unlock_time)||0,unlock:a})}return o}async function qx({daemonUrl:e,fromHeight:t,toHeight:n,watched:r,log:o=()=>{},concurrency:s=4,nowSec:i=null}){let a=Number(t),c=Number(n);if(!(a>=0)||!(c>=a))throw new Error("bad height range: "+t+".."+n);let l=new Map;for(let p of r)l.set(p.address,{address:p.address,receivedAtomic:0n,lockedAtomic:0n,lockedUntil:null,lockedTxids:[],txids:[],bestHeight:null,outputs:0,viewKeyForm:null});let d=[];for(let p=a;p<=c;p++)d.push(p);let u=0,f=async()=>{for(;u<d.length;){let p=d[u++];try{let h=await Vm(e,p),w=h.json?(typeof h.json=="string"?JSON.parse(h.json):h.json).tx_hashes||[]:[];if(!w.length)continue;let b=await Km(e,w);for(let T of b)for(let B of Ym(T,r,{height:p,nowSec:i})){let E=l.get(B.address);if(!E)continue;B.viewKeyForm&&(E.viewKeyForm=B.viewKeyForm);let k=!!(B.unlock&&B.unlock.locked),m=String(T.tx_hash||"").replace(/^0x/,"");for(let A of B.outputs){let x=A.amountAtomic||0n;k?(E.lockedAtomic+=x,m&&!E.lockedTxids.includes(m)&&E.lockedTxids.push(m),us(B.unlock)>us(E.lockedUntil)&&(E.lockedUntil=B.unlock)):(E.receivedAtomic+=x,E.outputs+=1),m&&!E.txids.includes(m)&&E.txids.push(m),(E.bestHeight===null||p>E.bestHeight)&&(E.bestHeight=p)}}}catch(h){o({event:"indexer_block_error",height:p,error:String(h.message).slice(0,160)})}}};return await Promise.all(Array.from({length:Math.max(1,Math.min(s,d.length))},f)),{fromHeight:a,toHeight:c,results:Array.from(l.values())}}var ro="monero",ek="ninsei-wallet-session",tk=()=>{let e=te.XMR_NETWORKS||{};return[...new Set(Object.values(e).filter(t=>typeof t=="string"&&t))].sort()};function al({createWallet:e=null,network:t=null,serverUri:n=null,password:r=ek,keys:o={},restoreHeight:s=0,expectedAddress:i=null}={}){let a=null,c=null,l=new Set,d=()=>{for(let h of l)try{h()}catch{}},u=h=>{if(a===null)throw new g("wallet-not-connected",{vm:ro,surface:h});return a},f=()=>{if(typeof o.seed=="string"&&o.seed)return{seed:o.seed};if(o.privateSpendKey||o.privateViewKey){if(!o.primaryAddress)throw new g("bad-input",{field:"primaryAddress",why:"required-with-private-keys"});let h={};return o.privateSpendKey&&(h.privateSpendKey=o.privateSpendKey),o.privateViewKey&&(h.privateViewKey=o.privateViewKey),h.primaryAddress=o.primaryAddress,h}throw new g("bad-input",{field:"keys",missing:["seed","privateSpendKey"]})},p=async()=>{if(a===null)return;let h=a;a=null,c=null;try{await h.close()}catch{}};return{vm:ro,id:ro,async connect(){if(typeof e!="function")throw new g("bad-input",{field:"createWallet"});let h=tk();if(typeof t!="string"||!t)throw new g("bad-input",{field:"network",known:h});if(h.length&&!h.includes(t))throw new g("bad-input",{field:"network",known:h,got:t});if(typeof n!="string"||!n)throw new g("bad-input",{field:"serverUri"});let w=f(),b=Number(s);if(!Number.isFinite(b)||b<=0)throw new g("bad-input",{field:"restoreHeight",got:s});await p(),a=await e({networkType:t,server:{uri:n},password:r,restoreHeight:b,...w}),c=String(await a.getAddress(0,0));let B=typeof Mt.networkFromShape=="function"?Mt.networkFromShape(c):null;if(B&&B!==t)throw await p(),new g("wrong-chain",{got:B,want:t});if(i&&c!==i)throw await p(),new g("recovery-failed",{step:"address"});await a.setRestoreHeight(b),d()},async disconnect(){return await p()},async close(){return await p()},address(){return u("address"),c},chainId(){return t},async unlockedBalance(){return await u("unlockedBalance").getUnlockedBalance()},async sync(){await u("sync").sync(),d()},subscribe(h){if(typeof h!="function")throw new g("bad-input",{field:"handler"});return l.add(h),()=>l.delete(h)},async send(){throw new g("not-implemented",{surface:"adapter.send",vm:ro})},async receipt(){throw new g("not-implemented",{surface:"adapter.receipt",vm:ro})},driver(){return a}}}var Hs=["awaiting_funding","funded","maker_locking","xmr_locked","ready","claimed","swept"];var Ls=["balance","gas","allowance","consent","network","settlement-network","stale","deadline","range","size","escrow-state","escrow-points","counterparty","slots","unchecked","unknown"],lr=["not-implemented","bad-input","wallet-not-connected","wallet-rejected","wrong-chain","quote-unavailable","quote-refused","address-denied","quote-stale","quote-signature-invalid","quote-key-mismatch","quote-field-unbound","quote-expired","quote-registry-unchecked","quote-key-unknown","quote-provider-mismatch","quote-provider-not-allowed","quote-factory-unchecked","quote-factory-unknown","quote-factory-mismatch","quote-factory-code-unknown","recovery-declined","recovery-failed","storage-unavailable","server-unavailable","server-refused","xmr-timeout","xmr-locked","xmr-nodes-disagree","xmr-no-nodes","xmr-underpaid","xmr-too-late","contract-reverted","insufficient-funds","gas-refused-by-maker","gas-not-arrived","gas-too-little","unknown"];var nk=Object.freeze({"not-implemented":{retryable:!1,side:"caller"},"bad-input":{retryable:!1,side:"caller"},"wallet-not-connected":{retryable:!1,side:"wallet"},"wallet-rejected":{retryable:!1,side:"wallet"},"wrong-chain":{retryable:!1,side:"wallet"},"quote-unavailable":{retryable:!0,side:"provider"},"quote-refused":{retryable:!1,side:"provider"},"address-denied":{retryable:!1,side:"caller"},"quote-stale":{retryable:!0,side:"provider"},"quote-signature-invalid":{retryable:!1,side:"provider"},"quote-key-mismatch":{retryable:!1,side:"provider"},"quote-field-unbound":{retryable:!1,side:"provider"},"quote-expired":{retryable:!0,side:"provider"},"quote-registry-unchecked":{retryable:!0,side:"chain"},"quote-key-unknown":{retryable:!1,side:"chain"},"quote-provider-mismatch":{retryable:!1,side:"chain"},"quote-provider-not-allowed":{retryable:!1,side:"caller"},"quote-factory-unchecked":{retryable:!0,side:"chain"},"quote-factory-unknown":{retryable:!1,side:"chain"},"quote-factory-mismatch":{retryable:!1,side:"chain"},"quote-factory-code-unknown":{retryable:!1,side:"chain"},"recovery-declined":{retryable:!1,side:"wallet"},"recovery-failed":{retryable:!1,side:"wallet"},"storage-unavailable":{retryable:!0,side:"service"},"server-unavailable":{retryable:!0,side:"service"},"server-refused":{retryable:!1,side:"service"},"xmr-timeout":{retryable:!0,side:"chain"},"xmr-locked":{retryable:!0,side:"chain"},"xmr-nodes-disagree":{retryable:!0,side:"chain"},"xmr-no-nodes":{retryable:!0,side:"chain"},"xmr-underpaid":{retryable:!1,side:"chain"},"xmr-too-late":{retryable:!1,side:"chain"},"contract-reverted":{retryable:!1,side:"chain"},"insufficient-funds":{retryable:!1,side:"wallet"},"gas-refused-by-maker":{retryable:!1,side:"provider"},"gas-not-arrived":{retryable:!0,side:"chain"},"gas-too-little":{retryable:!1,side:"provider"},unknown:{retryable:!1,side:"unknown"}}),rk={"in-range":"range","above-max":"range","below-min":"range","range-unstated":"range","size-unstated":"size","amount-unstated":"size","unit-mismatch":"range","balance-enough":"balance","balance-short":"balance","balance-unchecked":"balance","gas-enough":"gas","gas-short":"gas","reserve-unstated":"gas","native-unchecked":"gas","not-needed":"allowance",allowed:"allowance","allowance-short":"allowance","allowance-unchecked":"allowance","consent-missing":"consent","network-match":"network","network-unknown":"network","wallet-unknown":"network","wallet-network":"network","settlement-network":"settlement-network","real-provider":"counterparty","stand-in-provider":"counterparty","standin-on-production":"counterparty",fresh:"stale",stale:"stale","no-ttl":"stale",untimed:"stale",expired:"stale","deadlines-ok":"deadline","deadlines-unstated":"deadline","ready-by-in-past":"deadline","t1-not-after-ready-by":"deadline","ready-window-too-short":"deadline","claim-window-too-short":"deadline","deadline-too-far":"deadline",new:"escrow-state","already-funded":"escrow-state","already-claimed":"escrow-state","already-refunded":"escrow-state","state-unchecked":"escrow-state","off-step":"escrow-state","points-match":"escrow-points","point-mismatch":"escrow-points","commit-mismatch":"escrow-points","points-unchecked":"escrow-points","slots-match":"slots","slots-unchecked":"slots",unchecked:"unchecked"},Gm=e=>rk[e]||"unknown";var Vl={};ge(Vl,{ASYNC:()=>Oe,BALANCE_OF_SELECTOR:()=>hw,SETTLES:()=>Xl,SYNC:()=>oo,balances:()=>ov,carriesNativeVerdict:()=>cv,providerSettles:()=>yw,requireAsyncProvider:()=>iv,requireProvider:()=>av,requireSyncProvider:()=>sv,routeProviderFor:()=>ni,routeProviders:()=>br,sameChain:()=>nv,vm:()=>tv,walletChainId:()=>mw});var oo="sync",Oe="async";var cl=e=>!e||typeof e!="object"?{ok:!1,reason:"provider-absent"}:e.shape!==oo&&e.shape!==Oe?{ok:!1,reason:"provider-shape-unknown",shape:e.shape===void 0?null:e.shape}:e.shape===Oe&&typeof e.settled!="function"?{ok:!1,reason:"provider-incomplete",shape:Oe,missing:"settled"}:{ok:!0,shape:e.shape};var Ms=class{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(t,n){if(ws(t),We(n,void 0,"key"),this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("expected Hash instance");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?t.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=t.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),vt(o)}update(t){return Rt(this),this.iHash.update(t),this}digestInto(t){Rt(this),tr(t,this),this.finished=!0;let n=t.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){let t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||=Object.create(Object.getPrototypeOf(this),{});let{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a,canXOF:c}=this;return t=t,t.finished=o,t.destroyed=s,t.blockLen=i,t.outputLen=a,t.canXOF=c,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},zm=(()=>{let e=((t,n,r)=>new Ms(t,n).update(r).digest());return e.create=(t,n)=>new Ms(t,n),e})();var ok=BigInt(0),ll=class extends Error{constructor(t=""){super(t)}},Dt={Err:ll,_tlv:{encode:(e,t)=>{let{Err:n}=Dt;if(Ct(e,"tag"),e<0||e>255)throw new n("tlv.encode: wrong tag");if(om(t,"data"),t.length&1)throw new n("tlv.encode: unpadded data");let r=t.length/2,o=zr(r);if(o.length/2&128)throw new n("tlv.encode: long form length too big");let s=r>127?zr(o.length/2|128):"";return zr(e)+s+o+t},decode(e,t){let{Err:n}=Dt;t=ne(t,void 0,"DER data");let r=0;if(e<0||e>255)throw new n("tlv.decode: wrong tag");if(t.length<2||t[r++]!==e)throw new n("tlv.decode: wrong tlv");let o=t[r++],s=!!(o&128),i=0;if(!s)i=o;else{let c=o&127;if(!c)throw new n("tlv.decode(long): indefinite length not supported");if(c>4)throw new n("tlv.decode(long): byte length is too big");let l=t.subarray(r,r+c);if(l.length!==c)throw new n("tlv.decode: length bytes not complete");if(l[0]===0)throw new n("tlv.decode(long): zero leftmost byte");for(let d of l)i=i<<8|d;if(r+=c,i<128)throw new n("tlv.decode(long): not minimal encoding")}let a=t.subarray(r,r+i);if(a.length!==i)throw new n("tlv.decode: wrong value length");return{v:a,l:t.subarray(r+i)}}},_int:{encode(e){let{Err:t}=Dt;if(Ss(e),e<ok)throw new t("integer: negative integers are not allowed");let n=zr(e);if(Number.parseInt(n[0],16)&8&&(n="00"+n),n.length&1)throw new t("unexpected DER parsing assertion: unpadded hex");return n},decode(e){let{Err:t}=Dt;if(e.length<1)throw new t("invalid signature integer: empty");if(e[0]&128)throw new t("invalid signature integer: negative");if(e.length>1&&e[0]===0&&!(e[1]&128))throw new t("invalid signature integer: unnecessary leading zero");return Et(e)}},toSig(e,t){let{Err:n,_int:r,_tlv:o}=Dt;if(t!==void 0&&(Ct(t,"maxScalarBytes"),t<1))throw new n("invalid signature: maxScalarBytes must be positive");let s=ne(e,void 0,"signature"),{v:i,l:a}=o.decode(48,s);if(a.length)throw new n("invalid signature: left bytes after parsing");let{v:c,l}=o.decode(2,i),{v:d,l:u}=o.decode(2,l);if(u.length)throw new n("invalid signature: left bytes after parsing");if(t!==void 0&&(c.length>t||d.length>t))throw new n("invalid signature: integer too large");return{r:r.decode(c),s:r.decode(d)}},hexFromSig(e){let{_tlv:t,_int:n}=Dt;Ve(e,{r:"bigint",s:"bigint"},{},"sig");let r=t.encode(2,n.encode(e.r)),o=t.encode(2,n.encode(e.s)),s=r+o;return t.encode(48,s)}},Us=(Object.freeze(Dt._tlv),Object.freeze(Dt._int),Object.freeze(Dt));var Zm=(e,t)=>(e+(e>=0?t:-t)/Qm)/t;function sk(e,t,n){rr("scalar",e,Pt,n);let[[r,o],[s,i]]=t,a=Zm(i*e,n),c=Zm(-o*e,n),l=e-a*r-c*s,d=-a*o-c*i,u=l<Pt,f=d<Pt;u&&(l=-l),f&&(d=-d);let p=Qr(Math.ceil(or(n)/2))+Cn;if(l<Pt||l>=p||d<Pt||d>=p)throw new Error("splitScalar (endomorphism): failed for k");return{k1neg:u,k1:l,k2neg:f,k2:d}}function fl(e){if(!["compact","recovered","der"].includes(e))throw new Error('Signature format must be "compact", "recovered", or "der"');return e}function dl(e,t){Ve(e);let n={};for(let r of Object.keys(t))n[r]=e[r]===void 0?t[r]:e[r];return Xe(n.lowS,"lowS"),Xe(n.prehash,"prehash"),n.format!==void 0&&fl(n.format),n}var Pt=BigInt(0),Cn=BigInt(1),Qm=BigInt(2),ul=BigInt(3),ik=BigInt(4);function Jm(e,t={}){let n=Os("weierstrass",e,t),r=n.Fp,o=n.Fn,s=n.CURVE,{h:i,n:a}=s;Ve(t,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",randomBytes:"function"});let{endo:c,allowInfinityPoint:l,clearCofactor:d,isTorsionFree:u,fromBytes:f,toBytes:p}=t,h=t.randomBytes===void 0?Bn:t.randomBytes;if(c&&(!r.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let w=c?{beta:c.beta,basises:c.basises.map(S=>[...S])}:void 0,b=eh(r,o);function T(){if(!r.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function B(S,y,v){if(y.is0()){if(!l)throw new Error("bad point: ZERO");return Uint8Array.of(0)}let{x:I,y:_}=y.toAffine(),L=r.toBytes(I);if(Xe(v,"isCompressed"),v){T();let F=!r.isOdd(_);return ot(qm(F),L)}else return ot(Uint8Array.of(4),L,r.toBytes(_))}function E(S){ne(S,void 0,"Point");let{publicKey:y,publicKeyUncompressed:v}=b,I=S.length,_=S[0],L=S.subarray(1);if(l&&I===1&&_===0)return{x:r.ZERO,y:r.ZERO};if(I===y&&(_===2||_===3)){let F=r.fromBytes(L);if(!r.isValid(F))throw new Error("bad point: is not on curve, wrong x");let j=N(F),V;try{V=r.sqrt(j)}catch(q){let oe=q instanceof Error?": "+q.message:"";throw new Error("bad point: is not on curve, sqrt error"+oe)}T();let G=r.isOdd(V);return(_&1)===1!==G&&(V=r.neg(V)),{x:F,y:V}}else if(I===v&&_===4){let F=r.BYTES,j=r.fromBytes(L.subarray(0,F)),V=r.fromBytes(L.subarray(F,F*2));if(!D(j,V))throw new Error("bad point: is not on curve");return{x:j,y:V}}else throw new Error(`bad point: got length ${I}, expected compressed=${y} or uncompressed=${v}`)}let k=p===void 0?B:p,m=f===void 0?E:f,A=r.mul(s.b,ul),x=r.is0(s.a)?S=>r.ZERO:S=>r.mul(s.a,S);function N(S){let y=r.sqr(S),v=r.mul(y,S);return r.add(r.add(v,r.mul(S,s.a)),s.b)}function D(S,y){let v=r.sqr(y),I=N(S);return r.eql(v,I)}if(!D(s.Gx,s.Gy))throw new Error("bad curve params: generator point");let O=r.mul(r.pow(s.a,ul),ik),H=r.mul(r.sqr(s.b),BigInt(27));if(r.is0(r.add(O,H)))throw new Error("bad curve params: a or b");function M(S,y,v=!1){if(!r.isValid(y)||v&&r.is0(y))throw new Error(`bad point coordinate ${S}`);return typeof y=="object"&&y!==null?r.create(y):y}function W(S){if(!(S instanceof C))throw new Error("Weierstrass Point expected")}function R(S){if(!w||!w.basises)throw new Error("no endo");return sk(S,w.basises,o.ORDER)}function P(S,y,v,I){if(!o.isValid(I))throw new RangeError("invalid scalar: out of range");if(w){let{k1neg:_,k1:L,k2neg:F,k2:j}=R(I),V=new C(r.mul(v.X,w.beta),v.Y,v.Z);S.push(_?v.negate():v,F?V.negate():V),y.push(L,j)}else S.push(v),y.push(I)}let $=new WeakSet;class C{static BASE=new C(s.Gx,s.Gy,r.ONE);static ZERO=new C(r.ZERO,r.ONE,r.ZERO);static Fp=r;static Fn=o;X;Y;Z;constructor(y,v,I){this.X=M("x",y),this.Y=M("y",v,!0),this.Z=M("z",I),Object.freeze(this)}static CURVE(){return s}static fromAffine(y){let{x:v,y:I}=y||{};if(!y||!r.isValid(v)||!r.isValid(I))throw new Error("invalid affine point");if(y instanceof C)throw new Error("projective point not allowed");return r.is0(v)&&r.is0(I)?C.ZERO:new C(v,I,r.ONE)}static fromBytes(y){let v=C.fromAffine(m(ne(y,void 0,"point")));return v.assertValidity(),v}static fromHex(y){return C.fromBytes(nr(y))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(y=6,v=!0){return Y.setWindowSize(this,y),v||this.multiply(ul),this}assertValidity(){let y=this;if(y.is0()){if(l&&r.is0(y.X)&&r.eql(y.Y,r.ONE)&&r.is0(y.Z))return;throw new Error("bad point: ZERO")}if($.has(y))return;let{x:v,y:I}=y.toAffine();if(!r.isValid(v)||!r.isValid(I))throw new Error("bad point: x or y not field elements");if(!D(v,I))throw new Error("bad point: equation left != right");if(!y.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");$.add(y)}hasEvenY(){let{y}=this.toAffine();if(!r.isOdd)throw new Error("Field doesn't support isOdd");return!r.isOdd(y)}equals(y){W(y);let{X:v,Y:I,Z:_}=this,{X:L,Y:F,Z:j}=y,V=r.eql(r.mul(v,j),r.mul(L,_)),G=r.eql(r.mul(I,j),r.mul(F,_));return V&&G}negate(){return new C(this.X,r.neg(this.Y),this.Z)}double(){let{X:y,Y:v,Z:I}=this,_=r.ZERO,L=r.ZERO,F=r.ZERO,j=r.mul(y,y),V=r.mul(v,v),G=r.mul(I,I),Z=r.mul(y,v);return Z=r.add(Z,Z),F=r.mul(y,I),F=r.add(F,F),_=x(F),L=r.mul(A,G),L=r.add(_,L),_=r.sub(V,L),L=r.add(V,L),L=r.mul(_,L),_=r.mul(Z,_),F=r.mul(A,F),G=x(G),Z=r.sub(j,G),Z=x(Z),Z=r.add(Z,F),F=r.add(j,j),j=r.add(F,j),j=r.add(j,G),j=r.mul(j,Z),L=r.add(L,j),G=r.mul(v,I),G=r.add(G,G),j=r.mul(G,Z),_=r.sub(_,j),F=r.mul(G,V),F=r.add(F,F),F=r.add(F,F),new C(_,L,F)}add(y){W(y);let{X:v,Y:I,Z:_}=this,{X:L,Y:F,Z:j}=y,V=r.ZERO,G=r.ZERO,Z=r.ZERO,q=r.mul(v,L),oe=r.mul(I,F),ce=r.mul(_,j),ke=r.add(v,I),se=r.add(L,F);ke=r.mul(ke,se),se=r.add(q,oe),ke=r.sub(ke,se),se=r.add(v,_);let le=r.add(L,j);return se=r.mul(se,le),le=r.add(q,ce),se=r.sub(se,le),le=r.add(I,_),V=r.add(F,j),le=r.mul(le,V),V=r.add(oe,ce),le=r.sub(le,V),Z=x(se),V=r.mul(A,ce),Z=r.add(V,Z),V=r.sub(oe,Z),Z=r.add(oe,Z),G=r.mul(V,Z),oe=r.add(q,q),oe=r.add(oe,q),ce=x(ce),se=r.mul(A,se),oe=r.add(oe,ce),ce=r.sub(q,ce),ce=x(ce),se=r.add(se,ce),q=r.mul(oe,se),G=r.add(G,q),q=r.mul(le,se),V=r.mul(ke,V),V=r.sub(V,q),q=r.mul(ke,oe),Z=r.mul(le,Z),Z=r.add(Z,q),new C(V,G,Z)}subtract(y){return W(y),this.add(y.negate())}is0(){return this.equals(C.ZERO)}multiply(y){if(!o.isValidNot0(y))throw new RangeError("invalid scalar: out of range");let{p:v,f:I}=Y.mulSecret(this,y,i,K);return K([v,I])[0]}multiplyUnsafe(y){let v=this,I=y;if(!o.isValid(I))throw new RangeError("invalid scalar: out of range");if(I===Pt||v.is0())return C.ZERO;if(I===Cn)return v;if(Y.hasWindowSize(this))return Y.mulUnsafe(v,I,K);let _=[],L=[];return P(_,L,v,I),Is(C,_,L)}mulAddUnsafe(y,v,I){W(v);let _=[],L=[];return P(_,L,this,y),P(_,L,v,I),Is(C,_,L)}toAffine(y){let v=this,I=y;if(I!=null&&!r.isValid(I))throw new RangeError('"invertedZ" expected valid field element');let{X:_,Y:L,Z:F}=v;if(r.eql(F,r.ONE))return{x:_,y:L};let j=v.is0();I==null&&(I=j?r.ONE:r.inv(F));let V=r.mul(_,I),G=r.mul(L,I),Z=r.mul(F,I);if(j)return{x:r.ZERO,y:r.ZERO};if(!r.eql(Z,r.ONE))throw new Error("invZ was invalid");return{x:V,y:G}}isTorsionFree(){return i===Cn?!0:u?u(C,this):Y.mulUnsafe(this,a).is0()}clearCofactor(){return i===Cn?this:d?d(C,this):this.multiplyUnsafe(i)}isSmallOrder(){return i===Cn?this.is0():this.clearCofactor().is0()}toBytes(y=!0){return Xe(y,"isCompressed"),this.assertValidity(),k(C,this,y)}toHex(y=!0){return Gr(this.toBytes(y))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let K=S=>Bs(C,S),Y=new ar(C,h);return Y.bits>=6&&C.BASE.precompute(6),Object.freeze(C.prototype),Object.freeze(C),C}function qm(e){return Uint8Array.of(e?2:3)}function eh(e,t){return{secretKey:t.BYTES,publicKey:1+e.BYTES,publicKeyUncompressed:1+2*e.BYTES,publicKeyHasPrefix:!0,signature:2*t.BYTES}}function ak(e,t={}){an(e);let{Fn:n}=e,r=t.randomBytes===void 0?Bn:t.randomBytes,o=Object.assign(eh(e.Fp,n),{seed:Math.max(Ns(n.ORDER),16)});function s(p){try{let h=n.fromBytes(p);return n.isValidNot0(h)}catch{return!1}}function i(p,h){let{publicKey:w,publicKeyUncompressed:b}=o;try{let T=p.length;return h===!0&&T!==w||h===!1&&T!==b?!1:!e.fromBytes(p).is0()}catch{return!1}}function a(p){return p=p===void 0?r(o.seed):p,Ts(ne(p,o.seed,"seed"),n.ORDER)}function c(p,h=!0){return e.BASE.multiply(n.fromBytes(p)).toBytes(h)}function l(p){let{secretKey:h,publicKey:w,publicKeyUncompressed:b}=o,T=n._lengths;if(!on(p))return;let B=ne(p,void 0,"key").length,E=B===w||B===b,k=B===h||!!T?.includes(B);if(!(E&&k))return E}function d(p,h,w=!0){if(l(p)===!0)throw new Error("first arg must be private key");if(l(h)===!1)throw new Error("second arg must be public key");let b=n.fromBytes(p),T=e.fromBytes(h);if(T.is0())throw new Error("invalid public key: point at infinity");return T.multiply(b).toBytes(w)}let u={isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a},f=_s(a,c);return Object.freeze(u),Object.freeze(o),Object.freeze({getPublicKey:c,getSharedSecret:d,keygen:f,Point:e,utils:u,lengths:o})}function th(e,t,n={}){an(e);let r=t;ws(r),Ve(n,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});let o=Object.assign({},n),s=o.randomBytes===void 0?Bn:o.randomBytes,i=o.hmac===void 0?(S,y)=>zm(r,S,y):o.hmac,{Fp:a,Fn:c}=e,{ORDER:l,BITS:d}=c,u=Ns(l),f=Qc(s,u),{keygen:p,getPublicKey:h,getSharedSecret:w,utils:b,lengths:T}=ak(e,o),B={prehash:!0,lowS:typeof o.lowS=="boolean"?o.lowS:!0,format:"compact",extraEntropy:!1},E=l*Qm+Cn<a.ORDER;function k(S){let y=l>>Cn;return S>y}function m(S,y){if(!c.isValidNot0(y))throw new Error(`invalid signature ${S}: out of range 1..Point.Fn.ORDER`);return y}function A(){if(!a.isOdd)throw new Error("Field doesn't support isOdd")}function x(S,y,v){return A(),(S===v?0:2)|Number(a.isOdd(y))}function N(){if(E)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function D(S,y){fl(y);let v=T.signature,I=y==="compact"?v:y==="recovered"?v+1:void 0;return ne(S,I)}class O{r;s;recovery;constructor(y,v,I){if(this.r=m("r",y),this.s=m("s",v),I!=null){if(N(),![0,1,2,3].includes(I))throw new Error("invalid recovery id");this.recovery=I}Object.freeze(this)}static fromBytes(y,v=B.format){D(y,v);let I;if(v==="der"){if(y.length>2*c.BYTES+16)throw new Us.Err("invalid signature: DER signature too long");let{r:j,s:V}=Us.toSig(ne(y),c.BYTES+1);return new O(j,V)}v==="recovered"&&(I=y[0],v="compact",y=y.subarray(1));let _=T.signature/2,L=y.subarray(0,_),F=y.subarray(_,_*2);return new O(c.fromBytes(L),c.fromBytes(F),I)}static fromHex(y,v){return this.fromBytes(nr(y),v)}assertRecovery(){let{recovery:y}=this;if(y==null)throw new Error("invalid recovery id: must be present");return y}addRecoveryBit(y){return new O(this.r,this.s,y)}recoverPublicKey(y){let{r:v,s:I}=this,_=this.assertRecovery(),L=_===2||_===3?v+l:v;if(!a.isValid(L))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let F=a.toBytes(L),j=e.fromBytes(ot(qm((_&1)===0),F)),V=c.inv(L),G=M(ne(y,void 0,"msgHash")),Z=c.create(-G*V),q=c.create(I*V),oe=e.BASE.mulAddUnsafe(Z,j,q);if(oe.is0())throw new Error("invalid recovery: point at infinify");return oe.assertValidity(),oe}hasHighS(){return k(this.s)}toBytes(y=B.format){if(fl(y),y==="der")return nr(Us.hexFromSig(this));let{r:v,s:I}=this,_=c.toBytes(v),L=c.toBytes(I);return y==="recovered"?(N(),ot(Uint8Array.of(this.assertRecovery()),_,L)):ot(_,L)}toHex(y){return Gr(this.toBytes(y))}}Object.freeze(O.prototype),Object.freeze(O);let H=o.bits2int===void 0?function(y){if(y.length>8192)throw new Error("input is too large");let v=Et(y),I=y.length*8-d;return I>0?v>>BigInt(I):v}:o.bits2int,M=o.bits2int_modN===void 0?function(y){return c.create(H(y))}:o.bits2int_modN,W=Qr(d);function R(S){return rr("num < 2^"+d,S,Pt,W),c.toBytes(S)}function P(S,y){return ne(S,void 0,"message"),y?ne(r(S),void 0,"prehashed message"):S}function $(S,y,v){let{lowS:I,prehash:_,extraEntropy:L}=dl(v,B);S=P(S,_);let F=M(S),j=c.fromBytes(y);if(!c.isValidNot0(j))throw new Error("invalid private key");let V=[R(j),R(F)];if(L!=null&&L!==!1){let oe=L===!0?s(T.secretKey):L;V.push(ne(oe,void 0,"extraEntropy"))}let G=ot(...V),Z=F;function q(oe){let ce=H(oe);if(!c.isValidNot0(ce))return;let ke=e.BASE.multiply(ce).toAffine(),se=c.create(ke.x);if(se===Pt)return;let le;if(f!==void 0){let yt=Et(Ts(f(u),l)),Mn=c.inv(c.mul(yt,ce)),mn=c.mul(yt,Z),hn=c.mul(yt,j);le=c.create(Mn*c.create(mn+hn*se))}else{let yt=mm(ce,l);le=c.create(yt*c.create(Z+se*j))}if(le===Pt)return;let Je=x(ke.x,ke.y,se),it=le;return I&&k(le)&&(it=c.neg(le),Je^=1),new O(se,it,E?void 0:Je)}return{seed:G,k2sig:q}}function C(S,y,v={}){let{seed:I,k2sig:_}=$(S,y,v);return im(r.outputLen,c.BYTES,i)(I,_).toBytes(v.format)}function K(S,y,v,I={}){let{lowS:_,prehash:L,format:F}=dl(I,B);if(v=ne(v,void 0,"publicKey"),y=P(y,L),!on(S)){let j=S instanceof O?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+j)}D(S,F);try{let j=O.fromBytes(S,F),V=e.fromBytes(v);if(V.is0()||_&&j.hasHighS())return!1;let{r:G,s:Z}=j,q=M(y),oe=c.inv(Z),ce=c.create(q*oe),ke=c.create(G*oe),se=e.BASE.mulAddUnsafe(ce,V,ke);if(se.is0())return!1;let le=se.toAffine();return!(c.create(le.x)!==G||F==="recovered"&&j.recovery!==x(le.x,le.y,G))}catch{return!1}}function Y(S,y,v={}){let{prehash:I}=dl(v,B);return y=P(y,I),O.fromBytes(S,"recovered").recoverPublicKey(y).toBytes()}return Object.freeze({keygen:p,getPublicKey:h,getSharedSecret:w,utils:b,lengths:T,Point:e,sign:C,verify:K,recoverPublicKey:Y,Signature:O,hash:r})}var ml={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},ck={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var nh=BigInt(2);function lk(e){let t=ml.p,n=BigInt(3),r=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=e*e*e%t,d=l*l*e%t,u=me(d,n,t)*d%t,f=me(u,n,t)*d%t,p=me(f,nh,t)*l%t,h=me(p,o,t)*p%t,w=me(h,s,t)*h%t,b=me(w,a,t)*w%t,T=me(b,c,t)*b%t,B=me(T,a,t)*w%t,E=me(B,n,t)*d%t,k=me(E,i,t)*h%t,m=me(k,r,t)*l%t,A=me(m,nh,t);if(!pl.eql(pl.sqr(A),e))throw new Error("Cannot find square root");return A}var pl=ir(ml.p,{sqrt:lk}),dk=Jm(ml,{Fp:pl,endo:ck}),cn=th(dk,nm);var z=e=>{let t=typeof e=="string"?new TextEncoder().encode(e):e;return Ds(t)};var uk=e=>{let t=new Uint8Array(e),n=globalThis.crypto;return(!n||typeof n.getRandomValues!="function")&&U("bad-input",{field:"random-bytes",why:"no-source"}),n.getRandomValues(t),t},ln={ed25519:On,secp256k1:cn,keccak256:z,sha3_512:Lm,randomBytes:uk};var rh="NinseiEscrowFactory";var fk=["EIP712Domain(","string name,","string version,","uint256 chainId,","address verifyingContract)"],oh=fk.join(""),js=[["provider","address"],["quoteKey","address"],["registry","address"],["cashier","address"],["locker","address"],["claimer","address"],["amount","uint256"],["readyBy","uint64"],["t1","uint64"],["salt","bytes32"],["commitHalfClaimer","bytes32"],["edPointClaimer","bytes32"],["chainId","uint256"],["feeBps","uint256"],["fee","uint256"],["feeRecipient","address"],["validUntil","uint64"],["nonce","uint256"],["xmrAmount","uint256"]],sh="OrderQuote("+js.map(e=>e[1]+" "+e[0]).join(",")+")",dn=e=>{throw new Error(e)},Ws=e=>new TextEncoder().encode(String(e)),$s=(...e)=>{let t=e.reduce((o,s)=>o+s.length,0),n=new Uint8Array(t),r=0;for(let o of e)n.set(o,r),r+=o.length;return n},wl=e=>{let t=String(e).replace(/^0x/,"");t.length%2&&dn("eip712-odd-hex");let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++){let o=parseInt(t.slice(r*2,r*2+2),16);Number.isNaN(o)&&dn("eip712-bad-hex"),n[r]=o}return n},pk=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},mk=e=>{if(typeof e=="bigint")return e;let t=String(e??"").trim();if(/^0x[0-9a-fA-F]+$/.test(t)||/^[0-9]+$/.test(t))return BigInt(t);dn("eip712-bad-number")},hl=(e,t)=>{let n=mk(e);n<0n&&dn("eip712-negative"),n>=1n<<BigInt(t)&&dn("eip712-overflow");let r=new Uint8Array(32),o=n;for(let s=31;s>=0&&o>0n;s--)r[s]=Number(o&0xffn),o>>=8n;return r},ih=e=>{let t=String(e??"").trim();/^(0x)?[0-9a-fA-F]{40}$/.test(t)||dn("eip712-bad-address");let n=new Uint8Array(32);return n.set(wl(t.replace(/^0x/,"")),12),n},hk=e=>{let t=String(e??"").trim();return/^(0x)?[0-9a-fA-F]{64}$/.test(t)||dn("eip712-bad-bytes32"),wl(t.replace(/^0x/,""))},wk=(e,t)=>{if(e==="address")return ih(t);if(e==="bytes32")return hk(t);if(e==="uint64")return hl(t,64);if(e==="uint256")return hl(t,256);dn("eip712-bad-type")},yl=e=>{let t=[];for(let[n]of js){let r=e?e[n]:void 0;(r==null||r==="")&&t.push(n)}return e&&(e.factory===void 0||e.factory===null||e.factory==="")&&t.push("factory"),e&&(e.signature===void 0||e.signature===null||e.signature==="")&&t.push("signature"),t};function yk({crypto:e,quote:t}){return e.keccak256($s(e.keccak256(Ws(oh)),e.keccak256(Ws(rh)),e.keccak256(Ws("1")),hl(t.chainId,256),ih(t.factory)))}function bk({crypto:e,quote:t}){let n=[e.keccak256(Ws(sh))];for(let[r,o]of js)n.push(wk(o,t?t[r]:void 0));return e.keccak256($s(...n))}function ah({crypto:e,quote:t}){return e.keccak256($s(Uint8Array.from([25,1]),yk({crypto:e,quote:t}),bk({crypto:e,quote:t})))}function ch({crypto:e,quote:t}){try{if(yl(t).length)return null;let n=wl(String(t.signature).replace(/^0x/,""));if(n.length!==65)return null;let r=n[64];if(r>=27&&(r-=27),r!==0&&r!==1)return null;let o=ah({crypto:e,quote:t}),i=e.secp256k1.Signature.fromBytes($s(n.slice(0,32),n.slice(32,64))).addRecoveryBit(r).recoverPublicKey(o).toBytes(!1);return pk(e.keccak256(i.slice(1)).slice(12))}catch{return null}}var lh=["Gnosis","Protocol"].join(" "),dh="v2",Fn="0x9008D19f58AAbD9eD0D60971565AA8510560ab41",uh="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",gk=["EIP712Domain(","string name,","string version,","uint256 chainId,","address verifyingContract)"],xk=gk.join(""),dr=[["sellToken","address"],["buyToken","address"],["receiver","address"],["sellAmount","uint256"],["buyAmount","uint256"],["validTo","uint32"],["appData","bytes32"],["feeAmount","uint256"],["kind","string"],["partiallyFillable","bool"],["sellTokenBalance","string"],["buyTokenBalance","string"]],kk="Order("+dr.map(e=>e[1]+" "+e[0]).join(",")+")";var mt=e=>{throw new Error(e)},so=e=>new TextEncoder().encode(String(e)),Ks=(...e)=>{let t=e.reduce((o,s)=>o+s.length,0),n=new Uint8Array(t),r=0;for(let o of e)n.set(o,r),r+=o.length;return n},Xs=e=>{let t=String(e).replace(/^0x/,"");t.length%2&&mt("cow-odd-hex");let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++){let o=parseInt(t.slice(r*2,r*2+2),16);Number.isNaN(o)&&mt("cow-bad-hex"),n[r]=o}return n},fh=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},Sk=e=>{if(typeof e=="bigint")return e;let t=String(e??"").trim();if(/^0x[0-9a-fA-F]+$/.test(t)||/^[0-9]+$/.test(t))return BigInt(t);mt("cow-bad-number")},Vs=(e,t)=>{let n=Sk(e);n<0n&&mt("cow-negative"),n>=1n<<BigInt(t)&&mt("cow-overflow");let r=new Uint8Array(32),o=n;for(let s=31;s>=0&&o>0n;s--)r[s]=Number(o&0xffn),o>>=8n;return r},ph=e=>{let t=String(e??"").trim();/^(0x)?[0-9a-fA-F]{40}$/.test(t)||mt("cow-bad-address");let n=new Uint8Array(32);return n.set(Xs(t.replace(/^0x/,"")),12),n},vk=e=>{let t=String(e??"").trim();return/^(0x)?[0-9a-fA-F]{64}$/.test(t)||mt("cow-bad-bytes32"),Xs(t.replace(/^0x/,""))},Ek=e=>{let t=new Uint8Array(32);return e===!0||e==="true"||e===1||e==="1"?t[31]=1:e===!1||e==="false"||e===0||e==="0"||e===void 0||e===null?t[31]=0:mt("cow-bad-bool"),t},Ak=e=>z(so(e)),Nk=(e,t)=>{if(e==="address")return ph(t);if(e==="bytes32")return vk(t);if(e==="uint32")return Vs(t,32);if(e==="uint256")return Vs(t,256);if(e==="bool")return Ek(t);if(e==="string")return Ak(t);mt("cow-bad-type")},mh=e=>{let t=[];for(let[n]of dr){let r=e?e[n]:void 0;(r==null||r==="")&&t.push(n)}return t},Tk=({chainId:e,settlement:t=Fn})=>z(Ks(z(so(xk)),z(so(lh)),z(so(dh)),Vs(e,256),ph(t))),Bk=e=>{let t=[z(so(kk))];for(let[n,r]of dr)t.push(Nk(r,e?e[n]:void 0));return z(Ks(...t))},Ik=({order:e,chainId:t,settlement:n=Fn})=>z(Ks(Uint8Array.from([25,1]),Tk({chainId:t,settlement:n}),Bk(e))),hh=e=>fh(Ik(e)),wh=({digest:e,owner:t,validTo:n})=>{let r=Xs(e);r.length!==32&&mt("cow-bad-digest");let o=Xs(t);o.length!==20&&mt("cow-bad-owner");let s=Vs(n,32).slice(28);return fh(Ks(r,o,s))},yh=({order:e,chainId:t,settlement:n=Fn})=>({domain:{name:lh,version:dh,chainId:Number(t),verifyingContract:n},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Order:dr.map(([r,o])=>({name:r,type:o}))},primaryType:"Order",message:{sellToken:e.sellToken,buyToken:e.buyToken,receiver:e.receiver,sellAmount:String(e.sellAmount),buyAmount:String(e.buyAmount),validTo:Number(e.validTo),appData:e.appData,feeAmount:String(e.feeAmount),kind:String(e.kind),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance),buyTokenBalance:String(e.buyTokenBalance)}});var Ok=()=>typeof fetch=="function"?fetch:null;function st({apiBase:e,fetchImpl:t=null,timeoutMs:n=2e4}){let r=t||Ok();return{async json(o,{signal:s=null,method:i="GET",headers:a=null,body:c=null}={}){if(typeof r!="function")throw new g("bad-input",{field:"fetch"});let l=new AbortController,d=setTimeout(()=>l.abort(),n),u=()=>l.abort();s&&s.addEventListener("abort",u,{once:!0});try{let f={signal:l.signal,method:i,headers:{accept:"application/json",...a||{}}};c!=null&&(f.body=c);let p=await r(e+o,f);if(!p||typeof p.ok!="boolean")throw new g("server-unavailable",{why:"bad-response"});if(!p.ok)throw new g("server-unavailable",{status:p.status});return await p.json()}catch(f){throw f instanceof g?f:new g("server-unavailable",{why:f&&f.name==="AbortError"?"timeout":"fetch"})}finally{clearTimeout(d),s&&s.removeEventListener("abort",u)}},async tryJson(o,{signal:s=null,method:i="GET",headers:a=null,body:c=null}={}){if(typeof r!="function")throw new g("bad-input",{field:"fetch"});let l=new AbortController,d=setTimeout(()=>l.abort(),n),u=()=>l.abort();s&&s.addEventListener("abort",u,{once:!0});try{let f={signal:l.signal,method:i,headers:{accept:"application/json",...a||{}}};c!=null&&(f.body=c);let p=await r(e+o,f);if(!p||typeof p.ok!="boolean")throw new g("server-unavailable",{why:"bad-response"});let h=null;try{h=await p.json()}catch{h=null}return{ok:p.ok,status:p.status,body:h}}catch(f){throw f instanceof g?f:new g("server-unavailable",{why:f&&f.name==="AbortError"?"timeout":"fetch"})}finally{clearTimeout(d),s&&s.removeEventListener("abort",u)}}}}var bl=Object.freeze({1:{slug:"mainnet",orderbook:"https://api.cow.fi/mainnet"},100:{slug:"xdai",orderbook:"https://api.cow.fi/xdai"},42161:{slug:"arbitrum_one",orderbook:"https://api.cow.fi/arbitrum_one"},8453:{slug:"base",orderbook:"https://api.cow.fi/base"},56:{slug:"bnb",orderbook:"https://api.cow.fi/bnb"},11155111:{slug:"sepolia",orderbook:"https://api.cow.fi/sepolia"}}),_k=["presignaturePending","open","fulfilled","cancelled","expired"],bh=["fulfilled","cancelled","expired"],gh="fulfilled";var be=(e,t={})=>({ok:!1,code:e,params:t}),gl=e=>{let t=bl[Number(e)];return t?t.orderbook:null},Ys=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),Rk=e=>/^(0x)?[0-9a-fA-F]{64}$/.test(String(e||""));function xh(e={}){let t=Number(e.chainId);if(gl(t)===null)return{...be("cow-unknown-network",{chainId:Number.isFinite(t)?t:null}),known:Object.keys(bl).map(Number)};let n=e.owner,r=e.receiver===void 0||e.receiver===null?n:e.receiver,o={sellToken:e.sellToken,buyToken:e.buyToken,receiver:r||n,sellAmount:e.sellAmountWei,buyAmount:e.buyAmountWei,validTo:e.validTo,appData:e.appData===void 0||e.appData===null?"0x"+"00".repeat(32):e.appData,feeAmount:e.feeAmountWei===void 0||e.feeAmountWei===null?"0":e.feeAmountWei,kind:e.kind===void 0||e.kind===null?"sell":e.kind,partiallyFillable:e.partiallyFillable===void 0||e.partiallyFillable===null?!1:e.partiallyFillable,sellTokenBalance:e.sellTokenBalance===void 0||e.sellTokenBalance===null?"erc20":e.sellTokenBalance,buyTokenBalance:e.buyTokenBalance===void 0||e.buyTokenBalance===null?"erc20":e.buyTokenBalance},s=mh(o);if(Ys(n)||s.push("owner"),Rk(o.appData)||s.push("appData"),(!Ys(o.sellToken)||!Ys(o.buyToken)||!Ys(o.receiver))&&s.push("token"),s.length)return be("cow-bad-order",{missing:[...new Set(s)]});try{let i=hh({order:o,chainId:t,settlement:Fn}),a=wh({digest:i,owner:n,validTo:o.validTo}),c=yh({order:o,chainId:t,settlement:Fn});return{ok:!0,chainId:t,owner:n,order:o,digest:i,uid:a,typedData:c}}catch(i){return be("cow-bad-order",{why:String(i&&i.message?i.message:i)})}}function Ck({order:e,signature:t,owner:n,signingScheme:r="eip712",from:o=null}){return{sellToken:e.sellToken,buyToken:e.buyToken,receiver:e.receiver,sellAmount:String(e.sellAmount),buyAmount:String(e.buyAmount),validTo:Number(e.validTo),appData:String(e.appData),feeAmount:String(e.feeAmount),kind:String(e.kind),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance),buyTokenBalance:String(e.buyTokenBalance),signingScheme:r,signature:t,from:o||n}}function Fk(e={}){let t=xh(e);return t.ok?{ok:!0,provider:"cowswap",venue:"CoWSwap",shape:Oe,route:"cowswap",expectedOutWei:String(t.order.buyAmount),order:t.order,typedData:t.typedData,digest:t.digest,uid:t.uid,owner:t.owner,endsWith:{kind:"order-status",settledWhen:gh,final:[...bh],endpoint:"/api/v1/orders/{uid}"}}:t}async function Dk({typedData:e,wallet:t,address:n=null}={}){if(!e||typeof e!="object")return be("cow-bad-order",{field:"typedData"});try{if(t&&typeof t.signTypedData=="function"){let o=await t.signTypedData(e);return typeof o!="string"||!/^0x[0-9a-fA-F]{130}$/.test(o)?be("cow-sign-failed",{why:"bad-signature-shape"}):{ok:!0,signature:o}}let r=t&&typeof t.driver=="function"?t.driver():null;if(r&&typeof r.request=="function"){let o=n||(typeof t.address=="function"?await t.address():null),s=await r.request({method:"eth_signTypedData_v4",params:[o,JSON.stringify(e)]});return typeof s!="string"||!/^0x[0-9a-fA-F]{130}$/.test(s)?be("cow-sign-failed",{why:"bad-signature-shape"}):{ok:!0,signature:s}}return be("cow-sign-failed",{why:"no-wallet"})}catch(r){return be("cow-sign-failed",{why:String(r&&r.code||r&&r.message||r)})}}async function Pk({order:e,signature:t,owner:n,chainId:r,fetchImpl:o=null,timeoutMs:s=2e4,signingScheme:i="eip712",from:a=null}={}){let c=gl(r);if(c===null)return be("cow-unknown-network",{chainId:Number(r)});if(typeof t!="string"||!/^0x[0-9a-fA-F]{130}$/.test(t))return be("cow-bad-order",{field:"signature"});let l=st({apiBase:c,fetchImpl:o,timeoutMs:s}),d=JSON.stringify(Ck({order:e,signature:t,owner:n,signingScheme:i,from:a})),u;try{u=await l.tryJson("/api/v1/orders",{method:"POST",headers:{"content-type":"application/json"},body:d})}catch(f){return be("cow-unreachable",{why:String(f&&f.params&&f.params.why||f&&f.code||f)})}return!u||typeof u.ok!="boolean"?be("cow-bad-response",{where:"submit"}):u.ok?typeof u.body!="string"||!/^0x[0-9a-fA-F]{112}$/.test(u.body)?be("cow-bad-response",{where:"submit",got:typeof u.body}):{ok:!0,uid:u.body}:be("cow-refused",{status:u.status,reason:u.body&&u.body.errorType?u.body.errorType:null})}async function kh({uid:e,chainId:t,fetchImpl:n=null,timeoutMs:r=2e4}={}){let o=gl(t);if(o===null)return be("cow-unknown-network",{chainId:Number(t)});if(typeof e!="string"||!/^0x[0-9a-fA-F]{112}$/.test(e))return be("cow-bad-order",{field:"uid"});let s=st({apiBase:o,fetchImpl:n,timeoutMs:r}),i;try{i=await s.tryJson("/api/v1/orders/"+e)}catch(c){return be("cow-unreachable",{why:String(c&&c.params&&c.params.why||c&&c.code||c)})}if(!i||typeof i.ok!="boolean")return be("cow-bad-response",{where:"status"});if(i.status===404)return be("cow-order-unknown",{uid:e});if(!i.ok)return be("cow-refused",{status:i.status});let a=i.body&&i.body.status;return typeof a!="string"||!_k.includes(a)?be("cow-bad-response",{where:"status",got:typeof a=="string"?a:null}):{ok:!0,status:a,order:i.body}}async function Hk(e={},t={}){let{uid:n,chainId:r}=e;if(typeof n!="string"||!/^0x[0-9a-fA-F]{112}$/.test(n))return be("cow-bad-order",{field:"uid"});let o=typeof t.now=="function"?t.now:()=>Date.now(),s=typeof t.sleep=="function"?t.sleep:d=>new Promise(u=>setTimeout(u,d)),i=Number.isFinite(t.pollMs)&&t.pollMs>0?t.pollMs:5e3,a=Number.isFinite(t.timeoutMs)&&t.timeoutMs>0?t.timeoutMs:3e5,c=o(),l=null;for(;;){let d=await kh({uid:n,chainId:r,fetchImpl:t.fetchImpl,timeoutMs:t.requestTimeoutMs});if(!d.ok)return d;if(l=d.status,bh.includes(l))return{ok:!0,done:!0,settled:l===gh,status:l,uid:n};if(o()-c>=a)return be("cow-not-settled",{uid:n,status:l,waitedMs:o()-c});await s(i)}}function Lk({order:e=null,requiredOutWei:t=null,tokenUsd:n=null,referenceNativeUsd:r=null,tolerated:o=!1,gates:s=null,sellDecimals:i=null,buyDecimals:a=null,buySymbol:c=null,allowanceWei:l=null,allowanceConsent:d=!1,tokenIsNative:u=!1,symbol:f=null,decimals:p=null}={}){if(!e)return{ok:!1,blocked:!0,reason:"cow-no-order",checks:[]};let h=$e.priceGateVerdict({amountInWei:e.sellAmount,amountOutWei:e.buyAmount,inDecimals:i,outDecimals:a,tokenUsd:Number(n)>0?Number(n):null,referenceUsd:Number(r)>0?Number(r):null,stableSteps:[],tolerated:!!o,gates:s}),w={ok:!0,amountOutWei:String(e.buyAmount),price:h,wrapped:{symbol:c,decimals:a}},b=$e.dexLegVerdict(w,t),T={ok:!b.blocked,checked:b.kind!=="unchecked"&&b.kind!=="unquoted",blocks:b.blocked===!0,kind:b.kind,reason:b.reason},B=ie.allowanceVerdict({tokenIsNative:u,allowanceWei:l,amountWei:e.sellAmount,consent:d===!0,symbol:f,decimals:Number.isFinite(Number(p))?Number(p):18});return{...ie.signingGateVerdict([T,B]),price:h,coverage:b,allowance:B}}var Sh=Object.freeze({id:"cowswap",kind:"cow",venue:"CoWSwap",shape:Oe,settles:"native",networks:bl,settlement:Fn,buyEthAddress:uh,orderFields:dr,plan:Fk,settled:Hk,buildIntent:xh,sign:Dk,submit:Pk,status:kh,gate:Lk});var Mk=["Kyber","DSLO","Protocol"].join(" "),Uk="1",Ce="0xcab2FA2eeab7065B45CBcF6E3936dDE2506b4f6C",Wk=["EIP712Domain(","string name,","string version,","uint256 chainId,","address verifyingContract)"],jk=Wk.join(""),ur=[["salt","uint256"],["makerAsset","address"],["takerAsset","address"],["maker","address"],["receiver","address"],["allowedSender","address"],["makingAmount","uint256"],["takingAmount","uint256"],["feeConfig","uint256"],["makerAssetData","bytes"],["takerAssetData","bytes"],["getMakerAmount","bytes"],["getTakerAmount","bytes"],["predicate","bytes"],["interaction","bytes"]],$k="Order("+ur.map(e=>e[1]+" "+e[0]).join(",")+")";var Xk=[["orderHash","bytes32"],["opExpireTime","uint32"]],XA="DSOrder("+Xk.map(e=>e[1]+" "+e[0]).join(",")+")";var un=e=>{throw new Error(e)},Gs=e=>new TextEncoder().encode(String(e)),kl=(...e)=>{let t=e.reduce((o,s)=>o+s.length,0),n=new Uint8Array(t),r=0;for(let o of e)n.set(o,r),r+=o.length;return n},Sl=e=>{let t=String(e??"").replace(/^0x/,"");t.length%2&&un("kyber-odd-hex");let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++){let o=parseInt(t.slice(r*2,r*2+2),16);Number.isNaN(o)&&un("kyber-bad-hex"),n[r]=o}return n},Vk=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},Kk=e=>{if(typeof e=="bigint")return e;let t=String(e??"").trim();if(/^0x[0-9a-fA-F]+$/.test(t)||/^[0-9]+$/.test(t))return BigInt(t);un("kyber-bad-number")},xl=(e,t)=>{let n=Kk(e);n<0n&&un("kyber-negative"),n>=1n<<BigInt(t)&&un("kyber-overflow");let r=new Uint8Array(32),o=n;for(let s=31;s>=0&&o>0n;s--)r[s]=Number(o&0xffn),o>>=8n;return r},vh=e=>{let t=String(e??"").trim();/^(0x)?[0-9a-fA-F]{40}$/.test(t)||un("kyber-bad-address");let n=new Uint8Array(32);return n.set(Sl(t.replace(/^0x/,"")),12),n},Yk=e=>{let t=String(e??"").trim();return/^(0x)?[0-9a-fA-F]{64}$/.test(t)||un("kyber-bad-bytes32"),Sl(t.replace(/^0x/,""))},Gk=e=>z(Sl(e)),zk=(e,t)=>{if(e==="address")return vh(t);if(e==="bytes32")return Yk(t);if(e==="uint32")return xl(t,32);if(e==="uint256")return xl(t,256);if(e==="bytes")return Gk(t);un("kyber-bad-type")},Eh=e=>{let t=[];for(let[n,r]of ur){let o=e?e[n]:void 0;(o==null||r!=="bytes"&&o==="")&&t.push(n)}return t},Zk=({chainId:e,contract:t=Ce})=>z(kl(z(Gs(jk)),z(Gs(Mk)),z(Gs(Uk)),xl(e,256),vh(t))),Qk=e=>{let t=[z(Gs($k))];for(let[n,r]of ur)t.push(zk(r,e?e[n]:void 0));return z(kl(...t))},Jk=({order:e,chainId:t,contract:n=Ce})=>z(kl(Uint8Array.from([25,1]),Zk({chainId:t,contract:n}),Qk(e))),Ah=e=>Vk(Jk(e));var Ze="https://limit-order.kyberswap.com",Th=["KyberSwap","Limit","Order"].join(" "),zs=Object.freeze({1:{orderbook:Ze,contract:Ce},10:{orderbook:Ze,contract:Ce},56:{orderbook:Ze,contract:Ce},137:{orderbook:Ze,contract:Ce},250:{orderbook:Ze,contract:Ce},324:{orderbook:Ze,contract:Ce},5e3:{orderbook:Ze,contract:Ce},8453:{orderbook:Ze,contract:Ce},42161:{orderbook:Ze,contract:Ce},43114:{orderbook:Ze,contract:Ce},59144:{orderbook:Ze,contract:Ce},534352:{orderbook:Ze,contract:Ce},81457:{orderbook:Ze,contract:Ce}}),qk="/write/api/v1/orders/sign-message",eS="/write/api/v1/orders",Bh="/read-ks/api/v1/orders";var tS=["active","open","partially_filled","cancelling","closed","filled","cancelled","expired"],Ih=["filled","cancelled","expired"],Oh="filled";var nS=["active","closed"];var ee=(e,t={})=>({ok:!1,code:e,params:t}),ao=e=>{let t=zs[Number(e)];return t?t.orderbook:null},_h=e=>{let t=zs[Number(e)];return t?t.contract:null},io=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),Nh=e=>{try{return BigInt(String(e))>0n}catch{return!1}};function rS(e={}){let t=Number(e.chainId);if(ao(t)===null)return{...ee("kyber-unknown-network",{chainId:Number.isFinite(t)?t:null}),known:Object.keys(zs).map(Number)};let n=e.maker,r=e.receiver===void 0||e.receiver===null?n:e.receiver,o={chainId:String(t),makerAsset:e.makerAsset,takerAsset:e.takerAsset,maker:n,receiver:r,makingAmount:String(e.makingAmount),takingAmount:String(e.takingAmount),expiredAt:e.expiredAt};e.allowedSenders!==void 0&&e.allowedSenders!==null&&(o.allowedSenders=e.allowedSenders);let s=[];return io(n)||s.push("maker"),io(o.makerAsset)||s.push("makerAsset"),io(o.takerAsset)||s.push("takerAsset"),io(o.receiver)||s.push("receiver"),Nh(o.makingAmount)||s.push("makingAmount"),Nh(o.takingAmount)||s.push("takingAmount"),Number.isInteger(Number(o.expiredAt))||s.push("expiredAt"),s.length?ee("kyber-bad-order",{missing:[...new Set(s)]}):{ok:!0,chainId:t,orderbook:ao(t),contract:_h(t),maker:n,params:o,expectedOutWei:String(o.takingAmount)}}function oS(e={}){let t=rS(e);return t.ok?{ok:!0,provider:"kyberswap",venue:Th,shape:Oe,route:"kyberswap",expectedOutWei:t.expectedOutWei,params:t.params,owner:t.maker,endsWith:{kind:"order-status",settledWhen:Oh,final:[...Ih],endpoint:Bh}}:t}async function sS({params:e,chainId:t=null,fetchImpl:n=null,timeoutMs:r=2e4,clientId:o=null}={}){let s=Number(t!==null?t:e&&e.chainId),i=ao(s);if(i===null)return ee("kyber-unknown-network",{chainId:Number.isFinite(s)?s:null});if(!e||typeof e!="object")return ee("kyber-bad-order",{field:"params"});let a=st({apiBase:i,fetchImpl:n,timeoutMs:r}),c={"content-type":"application/json"};o&&(c["X-Client-Id"]=String(o));let l;try{l=await a.tryJson(qk,{method:"POST",headers:c,body:JSON.stringify(e)})}catch(E){return ee("kyber-unreachable",{why:String(E&&E.params&&E.params.why||E&&E.code||E)})}if(!l||typeof l.ok!="boolean")return ee("kyber-bad-response",{where:"sign-message"});if(!l.ok)return ee("kyber-refused",{status:l.status,stage:"sign-message",reason:l.body&&l.body.message?l.body.message:null});let d=l.body&&l.body.data;if(!d||typeof d!="object")return ee("kyber-bad-response",{where:"sign-message"});let u=d.domain||{},f=d.message||{},p=d.types&&Array.isArray(d.types.Order)?d.types.Order.map(E=>(E?E.name:"")+":"+(E?E.type:"")).join(","):null,h=ur.map(([E,k])=>E+":"+k).join(","),w=_h(s);if(!(u.name===void 0?!1:String(u.name)===["Kyber","DSLO","Protocol"].join(" ")&&String(u.version)==="1"&&Number(u.chainId)===s&&String(u.verifyingContract||"").toLowerCase()===String(w).toLowerCase()))return ee("kyber-bad-response",{where:"sign-message",field:"domain"});if(p!==h)return ee("kyber-bad-response",{where:"sign-message",field:"types"});let T=Eh(f);if(T.length)return ee("kyber-bad-response",{where:"sign-message",missing:T});let B;try{B=Ah({order:f,chainId:s,contract:w})}catch(E){return ee("kyber-bad-response",{where:"sign-message",why:String(E&&E.message?E.message:E)})}return{ok:!0,chainId:s,orderbook:i,contract:w,salt:String(f.salt),message:f,digest:B,typedData:{domain:u,types:d.types,primaryType:d.primaryType||"Order",message:f}}}async function iS({typedData:e,wallet:t,address:n=null}={}){if(!e||typeof e!="object")return ee("kyber-bad-order",{field:"typedData"});try{if(t&&typeof t.signTypedData=="function"){let o=await t.signTypedData(e);return typeof o!="string"||!/^0x[0-9a-fA-F]{130}$/.test(o)?ee("kyber-sign-failed",{why:"bad-signature-shape"}):{ok:!0,signature:o}}let r=t&&typeof t.driver=="function"?t.driver():null;if(r&&typeof r.request=="function"){let o=n||(typeof t.address=="function"?await t.address():null),s=await r.request({method:"eth_signTypedData_v4",params:[o,JSON.stringify(e)]});return typeof s!="string"||!/^0x[0-9a-fA-F]{130}$/.test(s)?ee("kyber-sign-failed",{why:"bad-signature-shape"}):{ok:!0,signature:s}}return ee("kyber-sign-failed",{why:"no-wallet"})}catch(r){return ee("kyber-sign-failed",{why:String(r&&r.code||r&&r.message||r)})}}async function aS({params:e,salt:t,signature:n,chainId:r=null,fetchImpl:o=null,timeoutMs:s=2e4,clientId:i=null}={}){let a=Number(r!==null?r:e&&e.chainId),c=ao(a);if(c===null)return ee("kyber-unknown-network",{chainId:Number.isFinite(a)?a:null});if(!e||typeof e!="object")return ee("kyber-bad-order",{field:"params"});if(typeof n!="string"||!/^0x[0-9a-fA-F]{130}$/.test(n))return ee("kyber-bad-order",{field:"signature"});if(t==null||t==="")return ee("kyber-bad-order",{field:"salt"});let l=st({apiBase:c,fetchImpl:o,timeoutMs:s}),d={"content-type":"application/json"};i&&(d["X-Client-Id"]=String(i));let u=JSON.stringify({...e,salt:String(t),signature:n}),f;try{f=await l.tryJson(eS,{method:"POST",headers:d,body:u})}catch(w){return ee("kyber-unreachable",{why:String(w&&w.params&&w.params.why||w&&w.code||w)})}if(!f||typeof f.ok!="boolean")return ee("kyber-bad-response",{where:"submit"});if(!f.ok)return ee("kyber-refused",{status:f.status,stage:"submit",reason:f.body&&f.body.message?f.body.message:null});let p=f.body&&f.body.data,h=p&&p.id;return!Number.isInteger(Number(h))||Number(h)<=0?ee("kyber-bad-response",{where:"submit",got:typeof h}):{ok:!0,id:Number(h)}}async function Rh({id:e,chainId:t,maker:n,fetchImpl:r=null,timeoutMs:o=2e4}={}){let s=Number(t),i=ao(s);if(i===null)return ee("kyber-unknown-network",{chainId:Number.isFinite(s)?s:null});if(!Number.isInteger(Number(e))||Number(e)<=0)return ee("kyber-bad-order",{field:"id"});if(!io(n))return ee("kyber-bad-order",{field:"maker"});let a=st({apiBase:i,fetchImpl:r,timeoutMs:o});for(let c of nS){let l=Bh+"?chainId="+s+"&maker="+n+"&status="+c,d;try{d=await a.tryJson(l)}catch(p){return ee("kyber-unreachable",{why:String(p&&p.params&&p.params.why||p&&p.code||p)})}if(!d||typeof d.ok!="boolean")return ee("kyber-bad-response",{where:"orders"});if(!d.ok)return ee("kyber-refused",{status:d.status,stage:"orders"});let u=d.body&&d.body.data&&d.body.data.orders;if(!Array.isArray(u))return ee("kyber-bad-response",{where:"orders"});let f=u.find(p=>p&&Number(p.id)===Number(e))||null;if(f){let p=f.status;return typeof p!="string"||!tS.includes(p)?ee("kyber-bad-response",{where:"status",got:typeof p=="string"?p:null}):{ok:!0,status:p,order:f,bucket:c}}}return ee("kyber-order-unknown",{id:Number(e),maker:n})}async function cS(e={},t={}){let{id:n,chainId:r,maker:o}=e;if(!Number.isInteger(Number(n))||Number(n)<=0)return ee("kyber-bad-order",{field:"id"});let s=typeof t.now=="function"?t.now:()=>Date.now(),i=typeof t.sleep=="function"?t.sleep:u=>new Promise(f=>setTimeout(f,u)),a=Number.isFinite(t.pollMs)&&t.pollMs>0?t.pollMs:5e3,c=Number.isFinite(t.timeoutMs)&&t.timeoutMs>0?t.timeoutMs:3e5,l=s(),d=null;for(;;){let u=await Rh({id:n,chainId:r,maker:o,fetchImpl:t.fetchImpl,timeoutMs:t.requestTimeoutMs});if(!u.ok)return u;if(d=u.status,Ih.includes(d))return{ok:!0,done:!0,settled:d===Oh,status:d,id:Number(n)};if(s()-l>=c)return ee("kyber-not-settled",{id:Number(n),status:d,waitedMs:s()-l});await i(a)}}function lS({order:e=null,requiredOutWei:t=null,tokenUsd:n=null,referenceNativeUsd:r=null,tolerated:o=!1,gates:s=null,sellDecimals:i=null,buyDecimals:a=null,buySymbol:c=null,allowanceWei:l=null,allowanceConsent:d=!1,tokenIsNative:u=!1,symbol:f=null,decimals:p=null}={}){if(!e)return{ok:!1,blocked:!0,reason:"kyber-no-order",checks:[]};let h=$e.priceGateVerdict({amountInWei:e.makingAmount,amountOutWei:e.takingAmount,inDecimals:i,outDecimals:a,tokenUsd:Number(n)>0?Number(n):null,referenceUsd:Number(r)>0?Number(r):null,stableSteps:[],tolerated:!!o,gates:s}),w={ok:!0,amountOutWei:String(e.takingAmount),price:h,wrapped:{symbol:c,decimals:a}},b=$e.dexLegVerdict(w,t),T={ok:!b.blocked,checked:b.kind!=="unchecked"&&b.kind!=="unquoted",blocks:b.blocked===!0,kind:b.kind,reason:b.reason},B=ie.allowanceVerdict({tokenIsNative:u,allowanceWei:l,amountWei:e.makingAmount,consent:d===!0,symbol:f,decimals:Number.isFinite(Number(p))?Number(p):18});return{...ie.signingGateVerdict([T,B]),price:h,coverage:b,allowance:B}}var Ch=Object.freeze({id:"kyberswap",kind:"kyber",venue:Th,shape:Oe,settles:"wrapped",networks:zs,settlement:Ce,orderFields:ur,plan:oS,settled:cS,unsignedOrder:sS,sign:iS,submit:aS,status:Rh,gate:lS});var dS="Permit2",vl="0x000000000022D473030F116dDEE9F6B43aC78BA3",El="0x0000000000000000000000000000000000000000",uS=["EIP712Domain(","string name,","uint256 chainId,","address verifyingContract)"],JA=uS.join(""),Al=[["reactor","address"],["swapper","address"],["nonce","uint256"],["deadline","uint256"],["additionalValidationContract","address"],["additionalValidationData","bytes"]],Nl=[["token","address"],["startAmount","uint256"],["endAmount","uint256"],["recipient","address"]],co=[["info","OrderInfo"],["cosigner","address"],["baseInputToken","address"],["baseInputStartAmount","uint256"],["baseInputEndAmount","uint256"],["baseOutputs","DutchOutput[]"]],Fh=[["permitted","TokenPermissions"],["spender","address"],["nonce","uint256"],["deadline","uint256"],["witness","V2DutchOrder"]],Dh=[["token","address"],["amount","uint256"]],lo=(e,t)=>e+"("+t.map(n=>n[1]+" "+n[0]).join(",")+")",Tl=lo("OrderInfo",Al),Bl=lo("DutchOutput",Nl),Ph=lo("V2DutchOrder",co),fS=lo("TokenPermissions",Dh),qA=lo("PermitWitnessTransferFrom",Fh)+Bl+Tl+fS+Ph,pS=Ph+Bl+Tl;var fr=e=>{throw new Error(e)},Il=e=>new TextEncoder().encode(String(e)),Zs=(...e)=>{let t=e.reduce((o,s)=>o+s.length,0),n=new Uint8Array(t),r=0;for(let o of e)n.set(o,r),r+=o.length;return n},Hh=e=>{let t=String(e).replace(/^0x/,"");t.length%2&&fr("uniswapx-odd-hex");let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++){let o=parseInt(t.slice(r*2,r*2+2),16);Number.isNaN(o)&&fr("uniswapx-bad-hex"),n[r]=o}return n},mS=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},hS=e=>{if(typeof e=="bigint")return e;let t=String(e??"").trim();if(/^0x[0-9a-fA-F]+$/.test(t)||/^[0-9]+$/.test(t))return BigInt(t);fr("uniswapx-bad-number")},pr=(e,t)=>{let n=hS(e);n<0n&&fr("uniswapx-negative"),n>=1n<<BigInt(t)&&fr("uniswapx-overflow");let r=new Uint8Array(32),o=n;for(let s=31;s>=0&&o>0n;s--)r[s]=Number(o&0xffn),o>>=8n;return r},Dn=e=>{let t=String(e??"").trim();/^(0x)?[0-9a-fA-F]{40}$/.test(t)||fr("uniswapx-bad-address");let n=new Uint8Array(32);return n.set(Hh(t.replace(/^0x/,"")),12),n},wS=e=>z(Hh(e??"0x")),Lh=e=>{let t=[];for(let[r,o]of Al){let s=e?e[r]:void 0;(s==null||o!=="bytes"&&s==="")&&t.push(r)}for(let[r]of co){if(r==="info"||r==="baseOutputs")continue;let o=e?e[r]:void 0;(o==null||o==="")&&t.push(r)}let n=e?e.baseOutputs:void 0;if(!Array.isArray(n)||n.length===0)return t.push("baseOutputs"),t;for(let r of n)for(let[o]of Nl){let s=r?r[o]:void 0;(s==null||s==="")&&t.push("baseOutputs."+o)}return t},yS=e=>z(Zs(z(Il(Tl)),Dn(e.reactor),Dn(e.swapper),pr(e.nonce,256),pr(e.deadline,256),Dn(e.additionalValidationContract),wS(e.additionalValidationData))),bS=e=>z(Zs(z(Il(Bl)),Dn(e.token),pr(e.startAmount,256),pr(e.endAmount,256),Dn(e.recipient))),gS=e=>z(Zs(...(e||[]).map(bS))),xS=e=>z(Zs(z(Il(pS)),yS(e),Dn(e.cosigner),Dn(e.baseInputToken),pr(e.baseInputStartAmount,256),pr(e.baseInputEndAmount,256),gS(e.baseOutputs))),Mh=e=>mS(xS(e));var Uh=({order:e,chainId:t,permit2:n=vl})=>({domain:{name:dS,chainId:Number(t),verifyingContract:n},types:{EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],PermitWitnessTransferFrom:Fh.map(([r,o])=>({name:r,type:o})),TokenPermissions:Dh.map(([r,o])=>({name:r,type:o})),V2DutchOrder:co.map(([r,o])=>({name:r,type:o})),OrderInfo:Al.map(([r,o])=>({name:r,type:o})),DutchOutput:Nl.map(([r,o])=>({name:r,type:o}))},primaryType:"PermitWitnessTransferFrom",message:{permitted:{token:e.baseInputToken,amount:String(e.baseInputEndAmount)},spender:e.reactor,nonce:String(e.nonce),deadline:String(e.deadline),witness:{info:{reactor:e.reactor,swapper:e.swapper,nonce:String(e.nonce),deadline:String(e.deadline),additionalValidationContract:e.additionalValidationContract,additionalValidationData:e.additionalValidationData},cosigner:e.cosigner,baseInputToken:e.baseInputToken,baseInputStartAmount:String(e.baseInputStartAmount),baseInputEndAmount:String(e.baseInputEndAmount),baseOutputs:(e.baseOutputs||[]).map(r=>({token:r.token,startAmount:String(r.startAmount),endAmount:String(r.endAmount),recipient:r.recipient}))}}});var kS="https://api.uniswap.org/v2",Wh="/orders",jh="UniswapX",SS="0x4449Cd34d1eb1FEDCF02A1Be3834FfDe8E6A6180",vS="0x0000000000000000000000000000000000000000",uo=Object.freeze({1:{orderbook:kS,reactor:"0x00000011F84B9aa48e5f8aA8B9897600006289Be"}}),$h=["open","expired","error","cancelled","filled","insufficient-funds"],Xh=["expired","error","cancelled","filled","insufficient-funds"],Vh="filled";var ue=(e,t={})=>({ok:!1,code:e,params:t});var ES=e=>{let t=uo[Number(e)];return t?t.orderbook:null},mr=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),Qs=e=>{try{return BigInt(String(e))>0n}catch{return!1}},Kh=e=>/^0x[0-9a-fA-F]{64}$/.test(String(e||""));function Yh(e={}){let t=Number(e.chainId),n=uo[t];if(!n)return{...ue("uniswapx-unknown-network",{chainId:Number.isFinite(t)?t:null}),known:Object.keys(uo).map(Number)};let r=e.swapper,o=e.recipient===void 0||e.recipient===null?r:e.recipient,s={reactor:e.reactor===void 0||e.reactor===null?n.reactor:e.reactor,swapper:r,nonce:e.nonce,deadline:e.deadline,additionalValidationContract:e.additionalValidationContract===void 0||e.additionalValidationContract===null?vS:e.additionalValidationContract,additionalValidationData:e.additionalValidationData===void 0||e.additionalValidationData===null?"0x":e.additionalValidationData,cosigner:e.cosigner===void 0||e.cosigner===null?SS:e.cosigner,baseInputToken:e.sellToken,baseInputStartAmount:e.sellAmountWei,baseInputEndAmount:e.sellAmountEndWei===void 0||e.sellAmountEndWei===null?e.sellAmountWei:e.sellAmountEndWei,baseOutputs:[{token:e.buyToken,startAmount:e.buyAmountWei,endAmount:e.buyAmountEndWei===void 0||e.buyAmountEndWei===null?e.buyAmountWei:e.buyAmountEndWei,recipient:o}]},i=Lh(s);if(mr(r)||i.push("swapper"),mr(s.reactor)||i.push("reactor"),mr(s.cosigner)||i.push("cosigner"),mr(s.baseInputToken)||i.push("sellToken"),(!Qs(s.baseInputStartAmount)||!Qs(s.baseInputEndAmount))&&i.push("sellAmountWei"),(!Qs(s.baseOutputs[0].startAmount)||!Qs(s.baseOutputs[0].endAmount))&&i.push("buyAmountWei"),(!mr(s.baseOutputs[0].token)||!mr(s.baseOutputs[0].recipient))&&i.push("buyToken"),Number.isInteger(Number(s.deadline))||i.push("deadline"),i.length)return ue("uniswapx-bad-order",{missing:[...new Set(i)]});try{let a=Uh({order:s,chainId:t}),c=Mh(s);return{ok:!0,chainId:t,owner:r,reactor:s.reactor,order:s,orderHash:c,typedData:a}}catch(a){return ue("uniswapx-bad-order",{why:String(a&&a.message?a.message:a)})}}function AS(e={}){let t=Yh(e);if(!t.ok)return t;let n=t.order.baseOutputs[0];return{ok:!0,provider:"uniswapx",venue:jh,shape:Oe,route:"uniswapx",expectedOutWei:String(n.endAmount),order:t.order,orderHash:t.orderHash,typedData:t.typedData,owner:t.owner,reactor:t.reactor,nativeOutput:String(n.token).toLowerCase()===El,endsWith:{kind:"order-status",settledWhen:Vh,final:[...Xh],endpoint:Wh}}}async function NS({typedData:e,wallet:t,address:n=null}={}){if(!e||typeof e!="object")return ue("uniswapx-bad-order",{field:"typedData"});try{if(t&&typeof t.signTypedData=="function"){let o=await t.signTypedData(e);return typeof o!="string"||!/^0x[0-9a-fA-F]{130}$/.test(o)?ue("uniswapx-sign-failed",{why:"bad-signature-shape"}):{ok:!0,signature:o}}let r=t&&typeof t.driver=="function"?t.driver():null;if(r&&typeof r.request=="function"){let o=n||(typeof t.address=="function"?await t.address():null),s=await r.request({method:"eth_signTypedData_v4",params:[o,JSON.stringify(e)]});return typeof s!="string"||!/^0x[0-9a-fA-F]{130}$/.test(s)?ue("uniswapx-sign-failed",{why:"bad-signature-shape"}):{ok:!0,signature:s}}return ue("uniswapx-sign-failed",{why:"no-wallet"})}catch(r){return ue("uniswapx-sign-failed",{why:String(r&&r.code||r&&r.message||r)})}}async function TS({quote:e=null,signature:t=null,routing:n="DUTCH_V2",submitter:r=null,fetchImpl:o=null,timeoutMs:s=2e4}={}){if(typeof t!="string"||!/^0x[0-9a-fA-F]{130}$/.test(t))return ue("uniswapx-bad-order",{field:"signature"});if(!e||typeof e!="object")return ue("uniswapx-bad-order",{field:"quote"});let i=r==null||r===""?null:String(r);if(!i)return ue("uniswapx-no-submitter",{field:"submitter"});let a=st({apiBase:i,fetchImpl:o,timeoutMs:s}),c=JSON.stringify({signature:t,quote:e,routing:n}),l;try{l=await a.tryJson("",{method:"POST",headers:{"content-type":"application/json"},body:c})}catch(f){return ue("uniswapx-unreachable",{why:String(f&&f.params&&f.params.why||f&&f.code||f)})}if(!l||typeof l.ok!="boolean")return ue("uniswapx-bad-response",{where:"submit"});if(!l.ok)return ue("uniswapx-refused",{status:l.status,stage:"submit"});let d=l.body&&typeof l.body=="object"?l.body:null;if(!d||typeof d.orderId!="string"||d.orderId==="")return ue("uniswapx-bad-response",{where:"submit",field:"orderId"});let u=d.orderStatus;return typeof u!="string"||!$h.includes(u)?ue("uniswapx-bad-response",{where:"submit",field:"orderStatus"}):{ok:!0,orderId:d.orderId,orderStatus:u,requestId:typeof d.requestId=="string"?d.requestId:null}}async function Gh({orderHash:e,chainId:t=null,fetchImpl:n=null,timeoutMs:r=2e4,api:o=null}={}){let s=Number(t),i=o?String(o):Number.isFinite(s)?ES(s):null;if(!i)return ue("uniswapx-unknown-network",{chainId:Number.isFinite(s)?s:null});if(!Kh(e))return ue("uniswapx-bad-order",{field:"orderHash"});let a=st({apiBase:i,fetchImpl:n,timeoutMs:r}),c;try{c=await a.tryJson(Wh+"?orderHash="+e)}catch(f){return ue("uniswapx-unreachable",{why:String(f&&f.params&&f.params.why||f&&f.code||f)})}if(!c||typeof c.ok!="boolean")return ue("uniswapx-bad-response",{where:"orders"});if(!c.ok)return ue("uniswapx-refused",{status:c.status,stage:"orders"});let l=c.body&&c.body.orders;if(!Array.isArray(l))return ue("uniswapx-bad-response",{where:"orders"});let d=l.find(f=>f&&String(f.orderHash||"").toLowerCase()===String(e).toLowerCase())||l[0]||null;if(!d)return ue("uniswapx-order-unknown",{orderHash:e});let u=d.orderStatus;return typeof u!="string"||!$h.includes(u)?ue("uniswapx-bad-response",{where:"orderStatus",got:typeof u=="string"?u:null}):{ok:!0,status:u,order:d}}async function BS(e={},t={}){let{orderHash:n,chainId:r=null}=e;if(!Kh(n))return ue("uniswapx-bad-order",{field:"orderHash"});let o=typeof t.now=="function"?t.now:()=>Date.now(),s=typeof t.sleep=="function"?t.sleep:d=>new Promise(u=>setTimeout(u,d)),i=Number.isFinite(t.pollMs)&&t.pollMs>0?t.pollMs:5e3,a=Number.isFinite(t.timeoutMs)&&t.timeoutMs>0?t.timeoutMs:3e5,c=o(),l=null;for(;;){let d=await Gh({orderHash:n,chainId:r,fetchImpl:t.fetchImpl,timeoutMs:t.requestTimeoutMs,api:t.api});if(!d.ok)return d;if(l=d.status,Xh.includes(l))return{ok:!0,done:!0,settled:l===Vh,status:l,orderHash:n};if(o()-c>=a)return ue("uniswapx-not-settled",{orderHash:n,status:l,waitedMs:o()-c});await s(i)}}function IS({order:e=null,requiredOutWei:t=null,tokenUsd:n=null,referenceNativeUsd:r=null,tolerated:o=!1,gates:s=null,sellDecimals:i=null,buyDecimals:a=null,buySymbol:c=null,allowanceWei:l=null,allowanceConsent:d=!1,tokenIsNative:u=!1,symbol:f=null,decimals:p=null}={}){if(!e)return{ok:!1,blocked:!0,reason:"uniswapx-no-order",checks:[]};let h=Array.isArray(e.baseOutputs)&&e.baseOutputs.length?e.baseOutputs[0]:null,w=h?h.endAmount:null,b=$e.priceGateVerdict({amountInWei:e.baseInputEndAmount,amountOutWei:w,inDecimals:i,outDecimals:a,tokenUsd:Number(n)>0?Number(n):null,referenceUsd:Number(r)>0?Number(r):null,stableSteps:[],tolerated:!!o,gates:s}),T={ok:!0,amountOutWei:w===null?null:String(w),price:b,wrapped:{symbol:c,decimals:a}},B=$e.dexLegVerdict(T,t),E={ok:!B.blocked,checked:B.kind!=="unchecked"&&B.kind!=="unquoted",blocks:B.blocked===!0,kind:B.kind,reason:B.reason},k=ie.allowanceVerdict({tokenIsNative:u,allowanceWei:l,amountWei:e.baseInputEndAmount,consent:d===!0,symbol:f,decimals:Number.isFinite(Number(p))?Number(p):18});return{...ie.signingGateVerdict([E,k]),price:b,coverage:B,allowance:k}}var zh=Object.freeze({id:"uniswapx",kind:"uniswapx",venue:jh,shape:Oe,settles:"native",networks:uo,settlement:uo[1].reactor,permit2:vl,nativeToken:El,orderFields:co,plan:AS,settled:BS,buildIntent:Yh,sign:NS,submit:TS,status:Gh,gate:IS});var OS="Permit2",Js="0x000000000022D473030F116dDEE9F6B43aC78BA3",Ol="0x0000000000000000000000000000000000000000",_S="0x0000000000000000000000000000000000000002",RS="0x24856bc3",Zh=Object.freeze({v3SwapExactIn:0,sweep:4,wrapEth:11,unwrapWeth:12}),CS=3,FS=["EIP712Domain(","string name,","uint256 chainId,","address verifyingContract)"],i6=FS.join(""),_l=[["reactor","address"],["swapper","address"],["nonce","uint256"],["deadline","uint256"]],Rl=[["token","address"],["amount","uint256"],["recipient","address"]],Cl=[["token","address"],["startAmount","uint256"],["endAmount","uint256"],["startTime","uint256"],["endTime","uint256"]],qs=[["info","RelayOrderInfo"],["input","Input"],["fee","FeeEscalator"],["universalRouterCalldata","bytes"]],Qh=[["token","address"],["amount","uint256"]],Jh=[["permitted","TokenPermissions[]"],["spender","address"],["nonce","uint256"],["deadline","uint256"],["witness","RelayOrder"]],wr=(e,t)=>e+"("+t.map(n=>n[1]+" "+n[0]).join(",")+")",Fl=wr("RelayOrderInfo",_l),Dl=wr("Input",Rl),Pl=wr("FeeEscalator",Cl),qh=wr("RelayOrder",qs),DS=wr("TokenPermissions",Qh),PS=qh+Pl+Dl+Fl,a6=wr("PermitBatchWitnessTransferFrom",Jh)+Pl+Dl+qh+Fl+DS;var pn=e=>{throw new Error(e)},ei=e=>new TextEncoder().encode(String(e)),fn=(...e)=>{let t=e.reduce((o,s)=>o+s.length,0),n=new Uint8Array(t),r=0;for(let o of e)n.set(o,r),r+=o.length;return n},fo=e=>{let t=String(e).replace(/^0x/,"");t.length%2&&pn("uniswaprelay-odd-hex");let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++){let o=parseInt(t.slice(r*2,r*2+2),16);Number.isNaN(o)&&pn("uniswaprelay-bad-hex"),n[r]=o}return n},Hl=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},ew=e=>{if(typeof e=="bigint")return e;let t=String(e??"").trim();if(/^0x[0-9a-fA-F]+$/.test(t)||/^[0-9]+$/.test(t))return BigInt(t);pn("uniswaprelay-bad-number")},Qe=(e,t)=>{let n=ew(e);return n<0n&&pn("uniswaprelay-negative"),n>=1n<<BigInt(t)&&pn("uniswaprelay-overflow"),fo("0x"+n.toString(16).padStart(64,"0"))},Pn=e=>{let t=String(e??"").trim();/^(0x)?[0-9a-fA-F]{40}$/.test(t)||pn("uniswaprelay-bad-address");let n=new Uint8Array(32);return n.set(fo(t.replace(/^0x/,"")),12),n},HS=e=>Qe(e?1:0,8);var tw=e=>{let t=[];for(let[n]of _l){let r=e&&e.info?e.info[n]:void 0;(r==null||r==="")&&t.push("info."+n)}for(let[n]of Rl){let r=e&&e.input?e.input[n]:void 0;(r==null||r==="")&&t.push("input."+n)}for(let[n]of Cl){let r=e&&e.fee?e.fee[n]:void 0;(r==null||r==="")&&t.push("fee."+n)}return(!e||e.universalRouterCalldata===void 0||e.universalRouterCalldata===null)&&t.push("universalRouterCalldata"),t},LS=e=>z(fn(z(ei(Fl)),Pn(e.info.reactor),Pn(e.info.swapper),Qe(e.info.nonce,256),Qe(e.info.deadline,256))),MS=e=>z(fn(z(ei(Dl)),Pn(e.token),Qe(e.amount,256),Pn(e.recipient))),US=e=>z(fn(z(ei(Pl)),Pn(e.token),Qe(e.startAmount,256),Qe(e.endAmount,256),Qe(e.startTime,256),Qe(e.endTime,256))),WS=e=>z(fn(z(ei(PS)),LS(e),MS(e.input),US(e.fee),z(fo(e.universalRouterCalldata)))),nw=e=>Hl(WS(e));var rw=({order:e,chainId:t,permit2:n=Js})=>({domain:{name:OS,chainId:Number(t),verifyingContract:n},types:{EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],PermitBatchWitnessTransferFrom:Jh.map(([r,o])=>({name:r,type:o})),TokenPermissions:Qh.map(([r,o])=>({name:r,type:o})),RelayOrder:qs.map(([r,o])=>({name:r,type:o})),RelayOrderInfo:_l.map(([r,o])=>({name:r,type:o})),Input:Rl.map(([r,o])=>({name:r,type:o})),FeeEscalator:Cl.map(([r,o])=>({name:r,type:o}))},primaryType:"PermitBatchWitnessTransferFrom",message:{permitted:[{token:e.input.token,amount:String(e.input.amount)},{token:e.fee.token,amount:String(e.fee.endAmount)}],spender:e.info.reactor,nonce:String(e.info.nonce),deadline:String(e.info.deadline),witness:{info:{reactor:e.info.reactor,swapper:e.info.swapper,nonce:String(e.info.nonce),deadline:String(e.info.deadline)},input:{token:e.input.token,amount:String(e.input.amount),recipient:e.input.recipient},fee:{token:e.fee.token,startAmount:String(e.fee.startAmount),endAmount:String(e.fee.endAmount),startTime:String(e.fee.startTime),endTime:String(e.fee.endTime)},universalRouterCalldata:e.universalRouterCalldata}}});var Ll=e=>{let t=String(e).replace(/^0x/,"").toLowerCase();return t.length%64===0?t:t.padEnd(Math.ceil(t.length/64)*64,"0")},hr=e=>ew(e).toString(16).padStart(64,"0");var jS=e=>{let t=e.map(i=>String(i).replace(/^0x/,"")),n=hr(t.length),r=[],o=t.length*32;for(let i of t)r.push(hr(o)),o+=32+Math.ceil(i.length/64)*32;let s=t.map(i=>hr(i.length/2)+Ll(i)).join("");return"0x"+n+r.join("")+s},$S=(e,t)=>{(!Array.isArray(e)||e.length!==t.length+1)&&pn("uniswaprelay-bad-path");let n="";for(let r=0;r<t.length;r++){n+=String(e[r]).replace(/^0x/,"").toLowerCase();let o=Number(t[r]);(!Number.isInteger(o)||o<0||o>16777215)&&pn("uniswaprelay-bad-fee"),n+=o.toString(16).padStart(CS*2,"0")}return n+=String(e[e.length-1]).replace(/^0x/,"").toLowerCase(),"0x"+n},XS=({recipient:e,amountInWei:t,amountOutMinimumWei:n,path:r,payerIsUser:o=!1})=>{let s=String(r).replace(/^0x/,""),i=fn(Pn(e),Qe(t,256),Qe(n,256),Qe(160,256),HS(o)),a=fn(Qe(s.length/2,256),fo("0x"+Ll(s)));return Hl(fn(i,a))},VS=({recipient:e,amountMinimumWei:t})=>Hl(fn(Pn(e),Qe(t,256))),ow=({tokenIn:e,weth:t,fee:n,amountInWei:r,amountOutMinimumWei:o,recipient:s})=>{let i=$S([e,t],[n]),a="0x"+Zh.v3SwapExactIn.toString(16).padStart(2,"0")+Zh.unwrapWeth.toString(16).padStart(2,"0"),c=XS({recipient:_S,amountInWei:r,amountOutMinimumWei:o,path:i,payerIsUser:!1}),l=VS({recipient:s,amountMinimumWei:o}),d=a.replace(/^0x/,""),u=hr(fo(a).length)+Ll(d),f=jS([c,l]).replace(/^0x/,""),p=64,h=64+u.length/2;return RS+hr(p)+hr(h)+u+f};var sw="0x0000000000A4e21E2597DCac987455c48b12edBF",iw="0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD",aw=["Uniswap","Relay"].join(" "),Wl=Object.freeze({1:{reactor:sw,universalRouter:iw,permit2:Js}}),KS=["Relay(","bytes32,","address,","address,","uint256)"],cw=()=>KS.join(""),YS=cw(),ti=(()=>{let e="0x";for(let t of z(cw()))e+=t.toString(16).padStart(2,"0");return e})();var GS=["filled","expired"],jl="filled";var xe=(e,t={})=>({ok:!1,code:e,params:t});var $l=e=>Wl[Number(e)]||null,yr=e=>/^0x[0-9a-fA-F]{40}$/.test(String(e||"")),Ml=e=>{try{return BigInt(String(e))>0n}catch{return!1}},lw=e=>/^0x[0-9a-fA-F]{64}$/.test(String(e||"")),Ul=e=>/^0x[0-9a-fA-F]{130}$/.test(String(e||""));function dw(e={}){let t=Number(e.chainId),n=$l(t);if(!n)return{...xe("uniswap-relay-unknown-network",{chainId:Number.isFinite(t)?t:null}),known:Object.keys(Wl).map(Number)};let r=e.swapper,o=e.recipient===void 0||e.recipient===null?r:e.recipient,s=e.universalRouter===void 0||e.universalRouter===null?n.universalRouter:e.universalRouter,i=e.wrappedToken,a=[];if(yr(r)||a.push("swapper"),(!yr(o)||String(o).toLowerCase()===Ol)&&a.push("recipient"),yr(e.sellToken)||a.push("sellToken"),yr(i)||a.push("wrappedToken"),yr(s)||a.push("universalRouter"),Number.isInteger(Number(e.fee))||a.push("fee"),Ml(e.sellAmountWei)||a.push("sellAmountWei"),Ml(e.buyAmountWei)||a.push("buyAmountWei"),yr(e.feeToken)||a.push("feeToken"),Ml(e.feeEndAmountWei)||a.push("feeEndAmountWei"),Number.isInteger(Number(e.deadline))||a.push("deadline"),a.length)return xe("uniswap-relay-bad-order",{missing:[...new Set(a)]});let c=e.feeStartAmountWei===void 0||e.feeStartAmountWei===null?e.feeEndAmountWei:e.feeStartAmountWei,l=e.feeStartTime===void 0||e.feeStartTime===null?e.deadline:e.feeStartTime,d=e.feeEndTime===void 0||e.feeEndTime===null?e.deadline:e.feeEndTime,u;try{u=ow({tokenIn:e.sellToken,weth:i,fee:e.fee,amountInWei:e.sellAmountWei,amountOutMinimumWei:e.buyAmountWei,recipient:o})}catch(h){return xe("uniswap-relay-bad-order",{why:String(h&&h.message?h.message:h)})}let f={info:{reactor:n.reactor,swapper:r,nonce:e.nonce===void 0||e.nonce===null?"0":String(e.nonce),deadline:String(e.deadline)},input:{token:e.sellToken,amount:String(e.sellAmountWei),recipient:s},fee:{token:e.feeToken,startAmount:String(c),endAmount:String(e.feeEndAmountWei),startTime:String(l),endTime:String(d)},universalRouterCalldata:u},p=tw(f);if(p.length)return xe("uniswap-relay-bad-order",{missing:p});try{let h=rw({order:f,chainId:t}),w=nw(f);return{ok:!0,chainId:t,owner:r,reactor:f.info.reactor,order:f,orderHash:w,calldata:u,typedData:h}}catch(h){return xe("uniswap-relay-bad-order",{why:String(h&&h.message?h.message:h)})}}function zS(e={}){let t=dw(e);return t.ok?{ok:!0,provider:"uniswaprelay",venue:aw,shape:Oe,route:"uniswaprelay",expectedOutWei:String(e.buyAmountWei),order:t.order,orderHash:t.orderHash,typedData:t.typedData,calldata:t.calldata,owner:t.owner,reactor:t.reactor,nativeOutput:!0,endsWith:{kind:"onchain-effect",settledWhen:jl,final:[...GS],event:YS}}:t}async function ZS({typedData:e,wallet:t,address:n=null}={}){if(!e||typeof e!="object")return xe("uniswap-relay-bad-order",{field:"typedData"});try{if(t&&typeof t.signTypedData=="function"){let o=await t.signTypedData(e);return Ul(o)?{ok:!0,signature:o}:xe("uniswap-relay-sign-failed",{why:"bad-signature-shape"})}let r=t&&typeof t.driver=="function"?t.driver():null;if(r&&typeof r.request=="function"){let o=n||(typeof t.address=="function"?await t.address():null),s=await r.request({method:"eth_signTypedData_v4",params:[o,JSON.stringify(e)]});return Ul(s)?{ok:!0,signature:s}:xe("uniswap-relay-sign-failed",{why:"bad-signature-shape"})}return xe("uniswap-relay-sign-failed",{why:"no-wallet"})}catch(r){return xe("uniswap-relay-sign-failed",{why:String(r&&r.code||r&&r.message||r)})}}function QS({order:e=null,signature:t=null,chainId:n=null}={}){let r=Number(n);return $l(r)?!e||typeof e!="object"?xe("uniswap-relay-bad-order",{field:"order"}):Ul(t)?xe("uniswap-relay-no-discovery",{reactorIsPermissionless:!0,documentedSubmissionEndpoint:null,reason:"undocumented"}):xe("uniswap-relay-bad-order",{field:"signature"}):xe("uniswap-relay-unknown-network",{chainId:Number.isFinite(r)?r:null})}var JS=async({driver:e=null,getLogs:t=null,reactor:n,orderHash:r,fromBlock:o="earliest",toBlock:s="latest"})=>{try{return typeof t=="function"?{ok:!0,logs:await t({reactor:n,orderHash:r,fromBlock:o,toBlock:s,topic0:ti})}:e&&typeof e.request=="function"?{ok:!0,logs:await e.request({method:"eth_getLogs",params:[{address:n,fromBlock:o,toBlock:s,topics:[ti,r]}]})}:xe("uniswap-relay-unreachable",{why:"no-driver"})}catch(i){return xe("uniswap-relay-unreachable",{why:String(i&&i.code||i&&i.message||i)})}};async function uw({orderHash:e,chainId:t=null,reactor:n=null,deadline:r=null,driver:o=null,getLogs:s=null,fromBlock:i="earliest",toBlock:a="latest",nowSec:c=null}={}){let l=Number(t),d=$l(l),u=n||(d?d.reactor:null);if(!u)return xe("uniswap-relay-unknown-network",{chainId:Number.isFinite(l)?l:null});if(!lw(e))return xe("uniswap-relay-bad-order",{field:"orderHash"});let f=await JS({driver:o,getLogs:s,reactor:u,orderHash:e,fromBlock:i,toBlock:a});if(!f.ok)return f;let p=f.logs;if(!Array.isArray(p))return xe("uniswap-relay-bad-response",{where:"logs",got:typeof p});let h=p.filter(w=>{if(!w||!Array.isArray(w.topics))return!1;let b=String(w.topics[0]||"").toLowerCase(),T=String(w.topics[1]||"").toLowerCase();return b===ti.toLowerCase()&&T===String(e).toLowerCase()});if(p.length>0&&h.length===0)return xe("uniswap-relay-bad-response",{where:"logs",detail:"topics-mismatch"});if(h.length>0)return{ok:!0,status:jl,log:h[0]};if(r!=null){let w=typeof c=="function"?c():Number.isFinite(c)?c:Math.floor(Date.now()/1e3);if(Number(r)<w)return{ok:!0,status:"expired"}}return{ok:!0,status:"open"}}async function qS(e={},t={}){let{orderHash:n,chainId:r=null,reactor:o=null,deadline:s=null}=e;if(!lw(n))return xe("uniswap-relay-bad-order",{field:"orderHash"});let i=typeof t.now=="function"?t.now:()=>Date.now(),a=typeof t.sleep=="function"?t.sleep:f=>new Promise(p=>setTimeout(p,f)),c=Number.isFinite(t.pollMs)&&t.pollMs>0?t.pollMs:5e3,l=Number.isFinite(t.timeoutMs)&&t.timeoutMs>0?t.timeoutMs:3e5,d=i(),u=null;for(;;){let f=await uw({orderHash:n,chainId:r,reactor:o,deadline:s,driver:t.driver||null,getLogs:t.getLogs||null,fromBlock:t.fromBlock===void 0?"earliest":t.fromBlock,toBlock:t.toBlock===void 0?"latest":t.toBlock,nowSec:t.nowSec===void 0?null:t.nowSec});if(!f.ok)return f;if(u=f.status,u===jl)return{ok:!0,done:!0,settled:!0,status:u,orderHash:n};if(u==="expired")return{ok:!0,done:!0,settled:!1,status:u,orderHash:n};if(i()-d>=l)return xe("uniswap-relay-not-settled",{orderHash:n,status:u,waitedMs:i()-d});await a(c)}}function ev({order:e=null,amountInWei:t=null,expectedOutWei:n=null,requiredOutWei:r=null,tokenUsd:o=null,referenceNativeUsd:s=null,tolerated:i=!1,gates:a=null,sellDecimals:c=null,buyDecimals:l=null,buySymbol:d=null,allowanceWei:u=null,allowanceConsent:f=!1,tokenIsNative:p=!1,symbol:h=null,decimals:w=null}={}){if(!e)return{ok:!1,blocked:!0,reason:"uniswap-relay-no-order",checks:[]};let b=t??(e.input?e.input.amount:null),T=n??null,B=$e.priceGateVerdict({amountInWei:b,amountOutWei:T,inDecimals:c,outDecimals:l,tokenUsd:Number(o)>0?Number(o):null,referenceUsd:Number(s)>0?Number(s):null,stableSteps:[],tolerated:!!i,gates:a}),E={ok:!0,amountOutWei:T===null?null:String(T),price:B,wrapped:{symbol:d,decimals:l}},k=$e.dexLegVerdict(E,r??T),m={ok:!k.blocked,checked:k.kind!=="unchecked"&&k.kind!=="unquoted",blocks:k.blocked===!0,kind:k.kind,reason:k.reason},A=ie.allowanceVerdict({tokenIsNative:p,allowanceWei:u,amountWei:b,consent:f===!0,symbol:h,decimals:Number.isFinite(Number(w))?Number(w):18});return{...ie.signingGateVerdict([m,A]),price:B,coverage:k,allowance:A}}var fw=Object.freeze({id:"uniswaprelay",kind:"uniswaprelay",venue:aw,shape:Oe,settles:"native",networks:Wl,settlement:sw,universalRouter:iw,permit2:Js,nativeToken:Ol,eventTopic:ti,orderFields:qs,plan:zS,settled:qS,buildIntent:dw,sign:ZS,submit:QS,status:uw,gate:ev});var tv="evm",mw=e=>Number(e.chainId),nv=(e,t)=>{let n=mw(t),r=Number(e);return Number.isFinite(r)&&Number.isFinite(n)&&r===n},hw="0x70a08231",pw=e=>{try{return BigInt(e).toString(10)}catch{return null}},rv=e=>String(e).replace(/^0x/,"").toLowerCase().padStart(64,"0");async function ov({driver:e,address:t,tokens:n}){let r=[];for(let o of n){let s=null;try{if(o.address===null)s=pw(await e.request({method:"eth_getBalance",params:[t,"latest"]}));else{let i=hw+rv(t);s=pw(await e.request({method:"eth_call",params:[{to:o.address,data:i},"latest"]}))}}catch{s=null}r.push({token:o.id,symbol:o.symbol,decimals:o.decimals,amount:s})}return r}var ww={declared:{id:"declared",kind:"declared",shape:oo,async plan(){return{ok:!1,code:"not-implemented",stage:3}}},cowswap:Sh,kyberswap:Ch,uniswapx:zh,uniswaprelay:fw},br=()=>Object.keys(ww).sort(),ni=e=>ww[e]||null,sv=e=>{let t=ni(e);return t?t.shape!==oo?{ok:!1,reason:"provider-not-synchronous",provider:t.id,shape:t.shape===void 0?null:t.shape}:{ok:!0,provider:t}:{ok:!1,reason:"provider-unknown",provider:typeof e=="string"?e:null,known:br()}},iv=e=>{let t=ni(e);if(!t)return{ok:!1,reason:"provider-unknown",provider:typeof e=="string"?e:null,known:br()};if(t.shape!==Oe)return{ok:!1,reason:"provider-not-asynchronous",provider:t.id,shape:t.shape===void 0?null:t.shape};let n=cl(t);return n.ok?{ok:!0,provider:t}:{ok:!1,reason:n.reason,provider:t.id,shape:t.shape===void 0?null:t.shape,missing:n.missing??null}},av=e=>{let t=ni(e);if(!t)return{ok:!1,reason:"provider-unknown",provider:typeof e=="string"?e:null,known:br()};let n=cl(t);return n.ok?{ok:!0,provider:t}:{ok:!1,reason:n.reason,provider:t.id,shape:n.shape??null,missing:n.missing??null}},Xl=Object.freeze({NATIVE:"native",WRAPPED:"wrapped"}),yw=e=>e&&e.settles?e.settles:null,cv=e=>{let t=yw(e),n=e&&e.id?e.id:null;return t===Xl.NATIVE?{ok:!0,settles:t,provider:n}:t===Xl.WRAPPED?{ok:!1,reason:"settles-wrapped",settles:t,provider:n}:{ok:!1,reason:"settles-unstated",settles:null,provider:n}};var bw={evm:Vl},gw=()=>Object.keys(bw).sort(),gr=e=>bw[e]||null,lv=e=>(te.CHAINS||[]).find(t=>t&&t.id===e)||null,xw=e=>{let t=lv(e);return t&&t.vm?t.vm:null};var dv=e=>{let t=typeof te.chainByChainId=="function"?te.chainByChainId(e):null;t||U("bad-input",{field:"chain.chainId",unknown:e,why:"no-network-with-this-chainId"});let n=te.tokensOf(t.id),r=[t.native,...t.tokens||[]].filter(Boolean),o=s=>String(s.symbol).toLowerCase();return n.map(o).join("|")!==r.map(o).join("|")&&U("bad-input",{field:"chain.tokens",unknown:e,why:"tokens-belong-to-another-network"}),n},uv=e=>({id:e.id,name:e.name,vm:e.vm||"evm",chainId:e.chainId,nativeSymbol:e.native&&e.native.symbol?e.native.symbol:null,tokens:dv(e.chainId).map(t=>({id:String(t.symbol).toLowerCase(),symbol:String(t.symbol),address:t.address||null,decimals:Number(t.decimals)})),dex:e.dex?{routes:e.dex.routes||[]}:null}),Kl=Object.freeze({swaps:"/swaps",swap:"/swaps/{id}",evmSwaps:"/evm-swaps",orderQuote:"/order-quote",revealedHalf:"/escrow/revealed-half",swept:"/swaps/{id}/swept"}),kw=Object.freeze({mainnet:[{url:"https://xmr-node.cakewallet.com:18081",operator:"Cake Wallet"},{url:"https://xmr.cryptostorm.is",operator:"cryptostorm"},{url:"https://node.monero.fail",operator:"monero.fail"},{url:"https://mainnet.xmr.kernal.eu:18089",operator:"kernal.eu"}],stagenet:[{url:"https://xmr.arrakisswap.trade",operator:"ninseiswap"},{url:"https://stagenet.xmr.kernal.eu:38089",operator:"kernal.eu"}]}),fv=e=>typeof e=="string"&&e||e&&typeof e=="object"&&typeof e.url=="string"&&e.url,Yl=e=>Array.isArray(e)&&e.every(fv),pv=(e,t)=>{let n=e&&e.nodes,r=e&&e.addNodes,o={mainnet:[...kw.mainnet],stagenet:[...kw.stagenet]};if(n!=null)if(Yl(n))t in o||U("bad-input",{field:"nodes",network:t}),o[t]=[...n];else if(n&&typeof n=="object"&&!Array.isArray(n))for(let s of Object.keys(n))s in o||U("bad-input",{field:"nodes",unknown:s,known:Object.keys(o)}),Yl(n[s])||U("bad-input",{field:"nodes."+s}),o[s]=[...n[s]];else U("bad-input",{field:"nodes"});return r!=null&&(Yl(r)||U("bad-input",{field:"addNodes"}),t in o||U("bad-input",{field:"addNodes",network:t}),o[t]=[...o[t],...r]),o},mv=(e,t)=>e.replace(/\{([a-z]+)\}/g,(n,r)=>{let o=t?t[r]:void 0;return(o==null||o==="")&&U("bad-input",{field:"route.param",param:r}),encodeURIComponent(String(o))}),hv=e=>{let t=e&&e.routes||{};for(let n of Object.keys(t))n in Kl||U("bad-input",{field:"routes",unknown:n,known:Object.keys(Kl)}),(typeof t[n]!="string"||!t[n])&&U("bad-input",{field:"routes."+n});return{...Kl,...t}},Gl=e=>Number.isFinite(Number(e))&&Number(e)>0?Number(e):null,wv=e=>{let t=e&&e.watch||{},n=t.pollMs===void 0?Gl(te.API&&te.API.pollMs)||5e3:Number(t.pollMs);(!Number.isFinite(n)||n<=0)&&U("bad-input",{field:"watch.pollMs"});let r=te.MONERO||{},o=(Gl(r.blockTimeReal)||12e4)*(Gl(r.confirmTarget)||10),s=t.timeoutMs===void 0?o:Number(t.timeoutMs);return(!Number.isFinite(s)||s<=0)&&U("bad-input",{field:"watch.timeoutMs"}),{pollMs:n,timeoutMs:s}},yv=(e,t)=>{let n=t&&t.endpoints||{},r=n.explorer||{},o=n.rpc||{},s=i=>typeof i=="string"&&i?i:null;return{explorer:{evmTx:s(r.evmTx)||s(e.explorerTx),evmAddr:s(r.evmAddr)||s(e.explorerAddr),evmName:s(r.evmName)||s(e.explorerName),xmrTx:s(r.xmrTx)},rpc:{evm:s(o.evm)||s(e.rpcUrl),monero:s(o.monero)}}};function Sw(e){let t=te.CHAINS.map(uv),n=t.find(w=>w.id===e.settlement.chain)||null;n||U("bad-input",{field:"settlement.chain",known:t.map(w=>w.id)});let r=te.CHAINS.find(w=>w.id===e.settlement.chain)||{},o=hv(e),s=wv(e),i=yv(r,e),a=pv(e,e.xmrNetwork),c=e.settlement.vm||n.vm;c||U("bad-input",{field:"settlement.vm"}),c!==n.vm&&U("bad-input",{field:"settlement.vm",chain:n.id,vm:n.vm,got:c}),gr(c)||U("not-implemented",{surface:"settlement.vm",vm:c,implemented:gw()});let d=br(),u=Array.isArray(e.routing&&e.routing.prefer)&&e.routing.prefer.length?e.routing.prefer.map(w=>String(w)):d.filter(w=>w==="declared");for(let w of u)d.includes(w)||U("bad-input",{field:"routing.prefer",unknown:w,known:d});let f=["mainnet","stagenet","testnet","fakechain"],p=[...new Set([...Object.values(te.XMR_NETWORKS||{}),...f])];p.includes(e.xmrNetwork)||U("bad-input",{field:"xmrNetwork",known:p});let h=te.SIGNING_GUARDS||{};return{settlement:{chain:n,vm:c},chains:t,xmrNetworks:p,assetsBase:e.assetsBase,apiBase:e.apiBase,mode:e.mode,limits:{minAmount:null,maxAmount:null,stepAmount:null,xmrConfirmTarget:te.MONERO.confirmTarget??null,watchPollMs:s.pollMs,watchTimeoutMs:s.timeoutMs,xmrConfirmations:te.MONERO.confirmTarget??10,xmrBlockTimeSec:Math.round((te.MONERO.blockTimeReal??12e4)/1e3),readyLeadWarnSec:h.readyLeadWarnSec??null,quotePollMs:te.API.pollMs??5e3,httpTimeoutMs:te.API.timeoutMs??2e4},routing:{providers:d,prefer:u},routes:{...o},endpoints:i,xmrNodes:a,nodesFor:w=>a&&a[w]?a[w]:[],route:(w,b)=>(w in o||U("bad-input",{field:"route",unknown:w,known:Object.keys(o)}),mv(o[w],b)),codes:{steps:Hs,checks:Ls,errors:lr}}}var bv={keccak256:z,secp256k1:cn};var vw=e=>yl(e);var Ew=e=>ch({crypto:bv,quote:e});var Tw=e=>new TextEncoder().encode(String(e)),ri=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},gv=()=>ri(z(Tw("providerOf(address)")).slice(0,4)),xv=e=>gv()+"0".repeat(24)+String(e).toLowerCase().replace(/^0x/,""),kv=()=>ri(z(Tw("factoryOf(address)")).slice(0,4)),Sv=e=>kv()+"0".repeat(24)+String(e).toLowerCase().replace(/^0x/,""),Aw=e=>{let t=String(e??"").replace(/^0x/,"");if(t.length%2)return null;let n=new Uint8Array(t.length/2);for(let r=0;r<n.length;r++){let o=parseInt(t.slice(r*2,r*2+2),16);if(Number.isNaN(o))return null;n[r]=o}return n},po="0x"+"00".repeat(20),Nw=e=>{let t=String(e??"").replace(/^0x/,"");return t.length>=40?"0x"+t.slice(-40).toLowerCase():null},Le=e=>e==null||e===""?null:Number.isFinite(Number(e))?Number(e):null,vv=e=>String(e||"").split("/")[0].toUpperCase(),Ev=e=>String(e||"").split("/")[1]?String(e).split("/")[1].toUpperCase():"";function Av(e,t,n={},r={}){let o=t&&typeof t=="object"?t:{},s=String(e||o.pair||"").trim().toUpperCase();if(!s.includes("/"))return null;let i=o.asset?String(o.asset).toUpperCase():null,a=o.currency?String(o.currency).toUpperCase():null,c=vv(s),l=Ev(s),d=Le(o.rateQuote),u=Le(o.rate),f=d!==null?d:u,p=null;d!==null?p=u:f!==null&&(p=l==="XMR"?f>0?1/f:null:f);let h=i&&i!==c||a&&a!==l,w=Le(o.at);return{providerId:String(n.providerId||o.providerId||"").trim(),displayName:n.displayName||o.displayName||null,finality:n.finality||o.finality||null,pair:s,asset:i||c,currency:a||l,assetNetwork:o.assetNetwork?String(o.assetNetwork):null,currencyNetwork:o.currencyNetwork?String(o.currencyNetwork):null,rateQuote:f,rate:p,min:Le(o.min),max:Le(o.max),step:Le(o.step),ttlMs:Le(o.ttlMs)&&Le(o.ttlMs)>0?Le(o.ttlMs):null,at:w,why:o.why?String(o.why):null,disabled:o.disabled===!0||u!==null&&!(u>0),networksUnnamed:o.networksUnnamed===!0,networksDerived:o.networksDerived===!0,seq:Le(o.seq)!==null?Le(o.seq):Le(n.seq)!==null?Le(n.seq):Le(r.seq),signature:o.signature||n.signature||null,keyId:o.keyId||null,networkStated:!!(o.assetNetwork||o.currencyNetwork),contradicts:h,ageMs:w===null?null:Math.max(0,Date.now()-w)}}function Nv(e,t=Date.now()){let n=e&&e.quotes,r=[],o=(l,d,u)=>{let f=Av(l,d,u,e||{});f&&r.push(f)};if(Array.isArray(n))for(let l of n){if(!l||typeof l!="object")continue;let d=l.quotes&&!Array.isArray(l.quotes)&&typeof l.quotes=="object"?l.quotes:null;if(d)for(let[u,f]of Object.entries(d))o(u,f,l);else o(l.pair,l,l)}else if(n&&typeof n=="object")for(let[l,d]of Object.entries(n))o(l,d,d&&typeof d=="object"?d:{});let s=new Map;for(let l of r){let d=(l.providerId||"?")+"|"+l.pair,u=s.get(d);(!u||Number(l.at)>Number(u.at))&&s.set(d,l)}let i=[],a=[];for(let l of s.values()){if(l.contradicts){a.push({...l,code:"malformed"});continue}if(l.rateQuote===null&&l.rate===null){a.push({...l,code:"malformed"});continue}if(l.disabled||!(l.rate>0)){a.push({...l,code:"disabled"});continue}if(l.ttlMs&&l.ageMs!==null&&l.ageMs>l.ttlMs){a.push({...l,code:"stale"});continue}i.push(l)}let c=i.slice().sort((l,d)=>d.rate-l.rate)[0]||null;return{offers:i,refused:a,best:c,at:t}}function Bw(e,{min:t=null,max:n=null,step:r=null}={}){let o=Number(e);if(!Number.isFinite(o)||o<=0)return{size:null,asked:e,snapped:!1,code:"bad-size"};let s=Number(r),i=Number.isFinite(Number(t))&&t!==null&&t!==""?Number(t):0,a=Number.isFinite(Number(n))&&n!==null&&n!==""?Number(n):null;if(o<i)return{size:o,asked:o,snapped:!1,code:"below-min"};if(a!==null&&o>a)return{size:o,asked:o,snapped:!1,code:"above-max"};if(!Number.isFinite(s)||s<=0)return{size:o,asked:o,snapped:!1,code:null};let c=Math.floor((o-i)/s+1e-9),l=Number((i+c*s).toFixed(12));return l<i&&(l=i),{size:l,asked:o,snapped:Math.abs(l-o)>1e-12,code:null}}function Tv(e,t,n,r=Date.now()){let o=e&&Number.isFinite(Number(e.rate))&&Number(e.rate)>0?Number(e.rate):null,s=t==="sell"?o!==null&&n>0?n*o:null:o!==null&&n>0?n/o:null;if(s===null)return{rate:o,size:null,unit:null,code:"no-offer",xmr:null};let i=Bw(s,e||{});return{rate:o,size:i.size,unit:t==="sell"?String(e.currency||"").toUpperCase()||null:"XMR",snapped:i.snapped,code:i.code,xmr:t==="sell"?n:Number.isFinite(Number(i.size))?Number(i.size):null}}var Iw=e=>({providerId:e.providerId,displayName:e.displayName,pair:e.pair,rate:e.rate,rateQuote:e.rateQuote,min:e.min,max:e.max,step:e.step,ttlMs:e.ttlMs,at:e.at,seq:e.seq,finality:e.finality||null,asset:e.asset,currency:e.currency,assetNetwork:e.assetNetwork,currencyNetwork:e.currencyNetwork,networkStated:e.networkStated,networksDerived:e.networksDerived===!0,networksUnnamed:e.networksUnnamed===!0,why:e.why,signature:e.signature,keyId:e.keyId,ageMs:e.ageMs,networks:{asset:e.assetNetwork,currency:e.currencyNetwork,stated:e.networkStated}}),Bv=e=>({...Iw(e),code:e.code,why:e.why});function Ow({config:e,http:t,now:n=()=>Date.now(),evmCall:r=null,evmCode:o=null,providerAllowed:s=null,knownFactoryCodes:i=null,knownImplementationCodes:a=null,denylist:c=null}){let l=Array.isArray(i)&&i.length?i.map(k=>String(k).toLowerCase()).filter(Boolean):null,d=Array.isArray(a)&&a.length?a.map(k=>String(k).toLowerCase()).filter(Boolean):null,u=new Set,f=null,p=1,h=null,w={direction:"buy",token:null,amount:null},b=!1,T=()=>{for(let k of u)k(h)},B=async()=>{if(!b){b=!0;try{let k=Number.isFinite(Number(w.size))&&Number(w.size)>0,m=k?Number(w.size):p,A=await t.json("/rate?amount="+encodeURIComponent(m)+"&side="+encodeURIComponent(w.direction)),x=Nv(A,n()),N=x.best,D=Number.isFinite(Number(w.amount))?Number(w.amount):null,O=N&&D!==null&&!k?Tv(N,w.direction,D,n()):null;O&&O.size!==null&&(p=O.size);let H=N&&String(N.currency||"").toUpperCase()||null,M=k&&N?Bw(m,N):null;h={direction:w.direction,token:w.token,amount:D,size:k?m:p,unit:k?w.direction==="sell"?H:"XMR":O?O.unit:null,rate:k?N?Number(N.rate):null:O?O.rate:null,xmr:O?O.xmr:null,at:n(),providerId:N?N.providerId:null,sizeOk:k?!!(M&&M.code===null):!!(O&&O.code===null),sizeCode:k?M?M.code:"no-offer":O?O.code:"no-offer",seq:x.offers.length?(x.offers.find(W=>W.seq!==null)||{}).seq??null:null,best:A&&A.best&&typeof A.best=="object"?{providerId:String(A.best.providerId||""),pair:String(A.best.pair||"")}:null,offers:x.offers.map(Iw),refused:x.refused.map(Bv),references:Array.isArray(A&&A.references)?A.references.map(W=>({source:W.source,value:Le(W.value),at:Le(W.at)})):[],ok:x.offers.length>0},T()}catch(k){h={...h||{direction:w.direction,token:w.token,amount:null,size:p,unit:null,rate:null,xmr:null,at:n(),providerId:null,sizeOk:!1,sizeCode:null,seq:null,best:null,offers:[],refused:[],references:[]},at:n(),ok:!1,error:{code:k&&k.code==="server-unavailable"?"quote-unavailable":"unknown"}},T()}finally{b=!1}}},E=()=>{f&&clearInterval(f),f=null,u.size>0&&(B(),f=setInterval(()=>{B()},e.limits.quotePollMs))};return{watch(k,m){typeof m!="function"&&U("bad-input",{field:"onSnapshot"});let A=k&&k.direction==="sell"?"sell":"buy",x=k&&typeof k.token=="string"&&k.token?k.token.toLowerCase():e.settlement.chain.nativeSymbol.toLowerCase();return w={direction:A,token:x,amount:k&&k.amount!==void 0?k.amount:null,size:k&&Number.isFinite(Number(k.size))&&Number(k.size)>0?Number(k.size):null},p=1,h=null,u.add(m),E(),()=>{u.delete(m),u.size===0&&(f&&clearInterval(f),f=null)}},snapshot:()=>h,async firm(k){(!k||typeof k!="object")&&U("bad-input",{field:"request"}),(typeof k.providerId!="string"||!k.providerId)&&U("bad-input",{field:"providerId"}),(!k.order||typeof k.order!="object")&&U("bad-input",{field:"order"}),c&&typeof k.order.locker=="string"&&c.has(k.order.locker.toLowerCase())&&U("address-denied",{step:"order-quote"});let m=null;try{m=await t.tryJson(e.route("orderQuote"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({providerId:k.providerId,order:k.order})})}catch(y){if(y&&y.code==="bad-input")throw y;U("server-unavailable",{step:"order-quote"})}(m&&m.body&&typeof m.body.code=="string"?m.body.code:null)==="denied-address"&&U("address-denied",{step:"order-quote"}),(!m||m.ok!==!0||!m.body||m.body.ok!==!0||!m.body.quote)&&U("quote-refused",{step:"order-quote"});let N=m.body.quote,D=vw(N);D.length&&U("quote-field-unbound",{step:"signature",missing:D});let O=Number(N.validUntil),H=Math.floor(n()/1e3);Number.isFinite(O)&&O>0&&O<=H&&U("quote-expired",{step:"signature",validUntil:O});let M=Ew(N);M===null&&U("quote-signature-invalid",{step:"signature"});let W=String(N.quoteKey).toLowerCase();M!==W&&U("quote-key-mismatch",{step:"signature",got:M,want:W});let R=String(N.registry||"").toLowerCase();(!/^0x[0-9a-f]{40}$/.test(R)||R===po)&&U("quote-field-unbound",{step:"registry",field:"registry"});let P=String(N.provider||"").toLowerCase();(!/^0x[0-9a-f]{40}$/.test(P)||P===po)&&U("quote-field-unbound",{step:"registry",field:"provider"}),typeof r!="function"&&U("quote-registry-unchecked",{step:"registry",why:"no-chain-read"});let $=null;try{$=Nw(await r({to:R,data:xv(W)}))}catch{U("quote-registry-unchecked",{step:"registry",why:"read-failed",registry:R})}($===null||$===po)&&U("quote-key-unknown",{step:"registry",registry:R,quoteKey:W}),$!==P&&U("quote-provider-mismatch",{step:"registry",got:$,want:P}),typeof s=="function"&&s(P)!==!0&&U("quote-provider-not-allowed",{step:"policy",provider:P});let C=String(N.factory||"").toLowerCase();(!/^0x[0-9a-f]{40}$/.test(C)||C===po)&&U("quote-field-unbound",{step:"factory",field:"factory"});let K=null;try{K=Nw(await r({to:R,data:Sv(P)}))}catch{U("quote-factory-unchecked",{step:"factory",why:"read-failed",registry:R})}if((K===null||K===po)&&U("quote-factory-unknown",{step:"factory",registry:R,provider:P}),K!==C&&U("quote-factory-mismatch",{step:"factory",got:C,want:K}),l){typeof o!="function"&&U("quote-factory-unchecked",{step:"factory",why:"no-code-read"});let y=null;try{y=await o(C)}catch{U("quote-factory-unchecked",{step:"factory",why:"code-read-failed",factory:C})}let v=Aw(y),I=ri(z(v||new Uint8Array(0)));l.includes(I)||U("quote-factory-code-unknown",{step:"factory",factory:C,codeHash:I})}if(d){typeof r!="function"&&U("quote-factory-unchecked",{step:"factory",why:"no-chain-read"}),typeof o!="function"&&U("quote-factory-unchecked",{step:"factory",why:"no-code-read"});let y=await _e.verifyFactoryImplementationOnChain({factory:C,read:r,code:v=>o(v),policy:d,hashCode:v=>ri(z(Aw(v)||new Uint8Array(0)))});if(!y.ok){let v=y.why==="implementation-code-unknown"||y.why==="implementation-code-mismatch"||y.why==="implementation-has-no-code";U(v?"quote-factory-code-unknown":"quote-factory-unchecked",{step:"factory",why:y.why,factory:C,implementation:y.implementation||null})}}let Y=null;try{Y=It.orderContextString(k.order)}catch{Y=null}if(Y===null){let y=N&&N.claimer;if(y)try{Y=It.orderContextString({...k.order,claimer:y})}catch{U("bad-input",{field:"order"})}else U("bad-input",{field:"order"})}let S=N.context||"";return String(S)!==Y&&U("quote-refused",{step:"context",why:S?"other-terms":"not-reported"}),N}}}var Iv=e=>{let t=e&&typeof e=="object"?e:{},{reason:n,kind:r,ok:o,checked:s,blocks:i,...a}=t;return{code:Gm(r),ok:o===!0,checked:s!==!1,blocks:i===!0,kind:typeof r=="string"?r:"unknown",params:a}},_w=(...e)=>e.some(t=>t!=null&&t!==""),ht=(e,t)=>{try{return e(t)}catch(n){return{ok:!1,checked:!1,blocks:!1,kind:"unchecked",error:String(n&&n.message?n.message:n)}}};function Rw({config:e,wallet:t,limits:n={}}){return async function(o={},s={}){let i=te.SIGNING_GUARDS||{},a=Number.isFinite(s.nowMs)?s.nowMs:Date.now(),c=o&&typeof o=="object"?o:{},l=!!s.tokenIsNative,d=e.evmNetwork,f=[ht(ie.quoteFreshnessVerdict,{at:Number.isFinite(c.at)?c.at:null,ttlMs:Number.isFinite(c.ttlMs)?c.ttlMs:null,expiresAt:Number.isFinite(c.expiresAt)?c.expiresAt:null,nowMs:a}),ht(ie.deadlineVerdict,{nowSec:Math.floor(a/1e3),readyBy:Number.isFinite(c.readyBy)?c.readyBy:null,t1:Number.isFinite(c.t1)?c.t1:null,minReadyLeadSec:i.minReadyLeadSec??null,minClaimWindowSec:i.minClaimWindowSec??null}),ht(ie.rangeVerdict,{size:Number.isFinite(c.amount)?c.amount:null,unit:c.token||null,min:Number.isFinite(c.min)?c.min:n.minAmount??null,max:Number.isFinite(c.max)?c.max:n.maxAmount??null,step:Number.isFinite(c.step)?c.step:n.stepAmount??null,quoteUnit:c.token||null}),ht(ie.payBalanceVerdict,{payBalanceWei:s.payBalanceWei??null,payAmountWei:s.payAmountWei??null,symbol:l?d.nativeSymbol:c.token||null,decimals:Number.isFinite(s.decimals)?s.decimals:18}),ht(ie.gasReserveVerdict,{nativeBalanceWei:s.nativeBalanceWei??null,requiredNativeWei:s.requiredNativeWei??null,gasReserveWei:s.gasReserveWei??null,symbol:d.nativeSymbol,decimals:18}),ht(ie.allowanceVerdict,{tokenIsNative:l,allowanceWei:s.allowanceWei??null,amountWei:s.payAmountWei??null,consent:s.allowanceConsent===!0,symbol:c.token||null,decimals:Number.isFinite(s.decimals)?s.decimals:18}),ht(ie.networkGateVerdict,{walletChainId:t.status().chainId,selectedChainId:d.chainId,settlementChainId:d.chainId,selectedChainName:d.name}),ht(ie.counterpartyVerdict,{standIn:s.standIn===!0,liveChain:s.liveChain===!0,network:e.evmNetwork.id,chainId:d.chainId}),ht(ie.escrowStateVerdict,{status:s.escrowStatus??null,error:null,address:s.escrowAddress??null}),..._w(s.point,s.commit)?[ht(ie.escrowPointsVerdict,{role:s.pointsRole??null,what:s.pointsWhat??null,point:s.point??null,onchainPoint:s.onchainPoint??null,commit:s.commit??null,onchainCommit:s.onchainCommit??null,readError:s.pointsReadError??null})]:[],..._w(s.slots)?[ht(ie.liveOrderSlotsVerdict,{slots:s.slots??null,expect:s.slotsExpect??null,readError:s.slotsReadError??null})]:[]].map(Iv),p=[...new Set(f.filter(h=>h.blocks).map(h=>h.code))];return{ok:p.length===0,blockedBy:p,checks:f}}}var Cw=e=>typeof e=="string"?e:e&&typeof e.contents=="string"?e.contents:null;function Fw({http:e=null,config:t=null}={}){return{async open(n,r){let o=Cw(n);if(o===null)throw new g("bad-input",{field:"file"});let s;try{s=await Io.restoreFromFile(o,r)}catch{throw new g("recovery-failed",{stage:"restore"})}let i=s.payload||{},a=s.wallet||{},c=Number(i.version)>=3;return{address:typeof a.address=="string"?a.address:null,spendable:!c,swapId:typeof i.swapId=="string"?i.swapId:null}},async restoreHeight(n={}){let r=Cw(n.file);if(r===null)throw new g("bad-input",{field:"file"});if(typeof n.passphrase!="string")throw new g("bad-input",{field:"passphrase"});let o;try{o=JSON.parse(r)}catch{throw new g("recovery-failed",{stage:"parse"})}let s;try{s=await Pe.decryptFile(o,n.passphrase),Pe.validatePayload(s)}catch{throw new g("recovery-failed",{stage:"restore"})}let i=s.moneroWallet||{},a=typeof i.address=="string"&&i.address?i.address:null,c=Number(i.restoreHeight)||0,l=0,d=!1,u=null;if(e&&t&&a){d=!0;try{let h=await e.json(t.route("swaps")),b=(Array.isArray(h)?h:h&&h.swaps||[]).find(T=>String(T&&T.address||"")===String(a))||null;l=Number(b&&b.restoreHeight)||0,b||(u="no-row")}catch{u="unreachable"}}let f=l>0?l:c,p=l>0?"app":c>0?"file":"none";return{address:a,height:f,source:p,fileHeight:c,appHeight:l,appAsked:d,appProblem:p==="none"?u||"no-height":null}}}}var oi=Object.keys(te.SCENARIO_LABELS||{});function Dw(){let e=oi[0]||null,t=1,n=0;return{scenarios:()=>oi.slice(),apply(r){oi.includes(r)||U("bad-input",{field:"scenario",known:oi}),e=r},speed(r){let o=Number(r);(!Number.isFinite(o)||o<=0)&&U("bad-input",{field:"speed"}),t=o},advance(r){let o=Number(r);Number.isFinite(o)||U("bad-input",{field:"ms"}),n+=o},debug:()=>({scenario:e,speed:t,advancedMs:n})}}var Ov=["connect","disconnect","address","chainId","subscribe","driver"],Pw=e=>e&&lr.includes(e.code)?e.code:"unknown",zl="monero",mo={token:"xmr",symbol:"XMR",decimals:12},_v=2;function Hw({settlement:e,leg:t}){let n=null,r={connected:!1,address:null,chainId:null,chainMatches:!1},o=new Set,s=null,i=async(c=!0)=>{if(!n)return r;let[l,d]=await Promise.all([Promise.resolve(n.address()).catch(()=>null),Promise.resolve(n.chainId()).catch(()=>null)]),u=typeof l=="string"&&l.length>0;if(r={connected:u,address:u?l:null,chainId:d===void 0?null:d,chainMatches:u&&t.sameChain(d,e)},c)for(let f of o)f(r);return r},a=()=>{typeof s=="function"&&s(),s=null};return{use(c){(!c||typeof c!="object")&&U("bad-input",{field:"adapter"});let l=Ov.filter(u=>typeof c[u]!="function");l.length&&U("bad-input",{field:"adapter",missing:l}),(typeof c.vm!="string"||!c.vm)&&U("bad-input",{field:"adapter.vm"});let d=[e.vm,zl];d.includes(c.vm)||U("bad-input",{field:"adapter.vm",expected:e.vm,accepted:d,got:c.vm}),a(),n=c,s=n.subscribe(()=>{i().catch(()=>{})}),r={connected:!1,address:null,chainId:null,chainMatches:!1},i().catch(()=>{})},status:()=>r,async connect({chainId:c=null}={}){n||U("wallet-not-connected");try{let l=c===null&&n.vm===e.vm?t.walletChainId(e):c;await n.connect(l===null?{}:{chainId:l})}catch(l){throw new g(Pw(l),{vm:n.vm})}return i()},async disconnect(){return n&&await Promise.resolve(n.disconnect()).catch(()=>{}),a(),n=null,void await i()},address:()=>r.address,async switchChain(c){n||U("wallet-not-connected"),Number.isFinite(Number(c))||U("bad-input",{field:"chainId"}),(n.vm!==e.vm||typeof n.switchChain!="function")&&U("not-implemented",{surface:"wallet.switchChain",vm:n.vm,stage:_v});try{await n.switchChain(Number(c))}catch(d){throw new g(Pw(d),{vm:n.vm})}let l=await i();return l.chainMatches||U("wrong-chain",{got:l.chainId,want:t.walletChainId(e)}),l},async balances(c){n||U("wallet-not-connected");let l=r.connected?r:await i(!1);if(l.connected||U("wallet-not-connected"),n.vm===zl){let h=(Array.isArray(c)&&c.length?c.map(b=>String(b).toLowerCase()):[mo.token]).find(b=>b!==mo.token);h!==void 0&&U("bad-input",{field:"tokens",unknown:h}),typeof n.unlockedBalance!="function"&&U("not-implemented",{surface:"wallet.balances",vm:zl});let w=BigInt(await n.unlockedBalance()).toString();return[{token:mo.token,symbol:mo.symbol,decimals:mo.decimals,amount:w}]}l.chainMatches||U("wrong-chain",{got:l.chainId,want:t.walletChainId(e)}),typeof t.balances!="function"&&U("not-implemented",{surface:"wallet.balances",vm:e.vm});let d=e.tokens||[],u=Array.isArray(c)&&c.length?c.map(p=>String(p).toLowerCase()):d.map(p=>p.id),f=[];for(let p of u){let h=d.find(w=>w.id===p);h||U("bad-input",{field:"tokens",unknown:p}),f.push(h)}return t.balances({driver:n.driver(),address:l.address,tokens:f})},subscribe(c){return typeof c!="function"&&U("bad-input",{field:"handler"}),o.add(c),()=>o.delete(c)},driver:()=>n?n.driver():null}}var Ht=()=>Wo.createOrderBuilder(ln);function Hn(e){if(!e||typeof e!="object")throw new g("bad-input",{field:"order"});try{return It.orderContextString(e)}catch{throw new g("bad-input",{field:"order"})}}function Ww({side:e,order:t,sealed:n=null,ownEncPriv:r=null}){if(!e||typeof e!="object")throw new g("bad-input",{field:"side"});let o=Hn(t),s=null;try{s=Ht().verifySide(e,o,n,r)}catch{throw new g("bad-input",{field:"side"})}if(!s||s.ok!==!0)throw new g("quote-refused",{step:"proof",why:s&&s.reason?"rejected":"unknown"});return e}function jw({ownSpendHalf:e,ownViewHalf:t,otherSpendPoint:n,otherViewPoint:r,network:o}){let s={ownSpendHalf:e,ownViewHalf:t,otherSpendPoint:n,otherViewPoint:r},i=Object.keys(s).filter(a=>s[a]===void 0||s[a]===null||s[a]==="");if(i.length)throw new g("bad-input",{field:"jointAddress",missing:i});try{return Ht().jointAddress({ownSpendHalf:e,ownViewHalf:t,otherSpendPoint:n,otherViewPoint:r,network:o})}catch{throw new g("bad-input",{field:"jointAddress"})}}var Ne=e=>"0x"+String(e).replace(/^0x/i,"").toLowerCase(),xr=e=>"0x"+BigInt(e).toString(16).padStart(64,"0"),Lw=e=>/^0x[0-9a-f]{64}$/.test(String(e)),Mw=e=>e&&typeof e=="object"&&e.XB?{...e,XB:Ne(e.XB)}:e,Uw=e=>typeof e=="string"&&e?Ne(e):e;function Zl(e,t){let n=Hn(e),r=Ht().newSide(n,!1,t);return{context:n,side:r,spendPoint:Ne(r.pub.ed),viewPoint:Ne(r.viewPub),encPub:Ne(r.enc.pub)}}function Rv({context:e,side:t=null,counterparty:n=null,standIn:r=!1}){let o=null;if(n&&typeof n=="object"){let c=n.pub&&typeof n.pub=="object"?n.pub:{};o={proof:Mw(n.proof),edPub:Uw(n.edPub||n.edPoint||n.edPointClaimer||c.ed||null),viewPoint:Uw(n.viewPoint||n.viewPub||null),viewHalf:n.viewHalf||n.viewHalfClaimer||null,half:n.half!==void 0?n.half:null,commitHalfClaimer:n.commitHalfClaimer||null,sealed:n.sealed||null,providerId:n.providerId||null,standIn:!1}}else if(r===!0){let c=Ht().newSide(e,!0);o={proof:Mw(c.proof),edPub:Ne(c.pub.ed),viewPoint:Ne(c.viewPub),viewHalf:c.viewHalf,half:c.half,commitHalfClaimer:null,sealed:null,providerId:null,standIn:!0,mock:c}}else throw new g("bad-input",{field:"counterparty"});let s=[];if(o.proof||s.push("proof"),o.edPub||s.push("edPub"),s.length)throw new g("bad-input",{field:"counterparty",missing:s});let i=o.sealed&&t&&t.enc?t.enc.priv:null,a=null;try{a=Ht().verifySide({proof:o.proof,pub:{ed:o.edPub}},e,o.sealed,i)}catch{throw new g("bad-input",{field:"counterparty"})}if(!a||a.ok!==!0)throw new g("quote-refused",{step:"proof",why:a&&a.reason?"rejected":"unknown"});return o}function $w({order:e,side:t=null,counterparty:n=null,standIn:r=!1,network:o=null}){let s=Hn(e),i=t?{context:s,side:t,spendPoint:Ne(t.pub&&t.pub.ed),viewPoint:Ne(t.viewPub),encPub:Ne(t.enc&&t.enc.pub?t.enc.pub:null)}:Zl(e),a=[];if((i.side.half===void 0||i.side.half===null)&&a.push("half"),(i.side.viewHalf===void 0||i.side.viewHalf===null)&&a.push("viewHalf"),Lw(i.spendPoint)||a.push("spendPoint"),Lw(i.viewPoint)||a.push("viewPoint"),a.length)throw new g("bad-input",{field:"side",missing:a});let c=Rv({context:i.context,side:i.side,counterparty:n,standIn:r}),l=c.viewPoint||(c.viewHalf?Ne(Ht().pointOf(c.viewHalf)):null);if(!l)throw new g("bad-input",{field:"counterparty",missing:["viewPoint"]});let d=null;try{d=Ht().jointAddress({ownSpendHalf:i.side.half,ownViewHalf:i.side.viewHalf,otherSpendPoint:c.edPub,otherViewPoint:l,network:o})}catch{throw new g("bad-input",{field:"network"})}return{context:i.context,own:{spendPoint:i.spendPoint,viewPoint:i.viewPoint,encPub:i.encPub,proof:i.side.proof},side:i.side,counterparty:c,wallet:{spendHalf:xr(i.side.half),viewHalf:xr(i.side.viewHalf),otherSpendPoint:c.edPub,otherViewPoint:Ne(l),otherViewHalf:c.viewHalf?xr(c.viewHalf):null,address:d.address,spendPub:Ne(d.spendPub),viewPub:Ne(d.viewPub),otherCommitHalf:c.commitHalfClaimer||null,commitHalfLocker:Ne(Ht().halfCommitment(i.side.half)),commitHalfClaimer:c.half!==void 0&&c.half!==null?Ne(Ht().halfCommitment(c.half)):c.commitHalfClaimer||null,network:o||null}}}function Cv(e=null){if(e!=null)return Zl(e).side;let t=Tt.createHalves(ln),n=t.newHalf(),r=t.newHalf();return{half:n,viewHalf:r,pub:t.publicHalves(n),viewPub:t.publicHalves(r).ed}}function Xw(e,{order:t=null}={}){if(!e||typeof e!="object")throw new g("bad-input",{field:"input"});let n=Cv(t),r=null;try{r=we.createSwap(e)}catch{throw new g("bad-input",{field:"input"})}let o={...r.escrow||{},half:xr(n.half),viewHalf:xr(n.viewHalf),edPointLocker:Ne(n.pub.ed),edViewPointLocker:Ne(n.viewPub)};n.enc&&n.enc.pub&&(o.encPub=Ne(n.enc.pub));let s={...r,escrow:o},i=e&&e.orderQuoteId;i!=null&&i!==""&&(s.orderQuoteId=i);try{we.saveSwap(s)}catch{throw new g("storage-unavailable",{step:"save-swap"})}return{swap:s,side:n,missing:["counterparty-half"],nextStep:"order"}}var Dv="Declined",Pv=()=>`${Dv}(${["address"].join(",")})`,Hv=e=>{let t="0x";for(let n of e)t+=n.toString(16).padStart(2,"0");return t},kr=Hv(z(Pv())),Lv="declined",ii="compliance",Lt="declined",Mv=["declined","terminal","code","source","at","checked"],Vw=e=>{let t={};for(let n of Mv)t[n]=e[n]===void 0?null:e[n];return t},Kw=({source:e=null,at:t=null}={})=>Vw({declined:!0,terminal:Lt,code:ii,source:e,at:t,checked:!0}),si=({source:e=null,at:t=null,checked:n=!0}={})=>Vw({declined:!1,terminal:null,code:null,source:e,at:t,checked:n});function Ql(e,{escrow:t=null,at:n=null}={}){if(!Array.isArray(e))throw new g("bad-input",{field:"logs",why:"not-array"});let r=typeof t=="string"&&t?t.toLowerCase():null;for(let o of e){if(!o||typeof o!="object"||r&&typeof o.address=="string"&&o.address&&o.address.toLowerCase()!==r)continue;let s=Array.isArray(o.topics)?o.topics:[];if(String(s[0]||"").toLowerCase()===kr)return Kw({source:"event",at:n})}return si({source:"event",at:n})}function Uv(e,{at:t=null}={}){if(!e||typeof e!="object")return si({source:"status",at:t,checked:!1});for(let n of[e,e.userStatus])if(!(!n||typeof n!="object")&&String(n.status||"")===Lv&&String(n.code||"")===ii)return Kw({source:"status",at:t});return si({source:"status",at:t})}function Yw({logs:e=void 0,status:t=void 0,escrow:n=null,at:r=null}={}){let o=Array.isArray(e)?Ql(e,{escrow:n,at:r}):null;if(o&&o.declined)return o;let s=t&&typeof t=="object"?Uv(t,{at:r}):null;return s&&s.declined?s:o||s||si({checked:!1,at:r})}async function Wv({address:e,topics:t=[kr],fromBlock:n="earliest",toBlock:r="latest"}={}){if(typeof e!="string"||!/^0x[0-9a-fA-F]{40}$/.test(e))throw new g("bad-input",{field:"logs.address"});let o=null;try{o=typeof _e.currentProvider=="function"?_e.currentProvider():null}catch{o=null}if(!o||typeof o.request!="function")throw new g("bad-input",{field:"evmLogs",why:"no-provider"});let s=await o.request({method:"eth_getLogs",params:[{address:e,topics:t,fromBlock:n,toBlock:r}]});if(!Array.isArray(s))throw new g("server-unavailable",{step:"logs",why:"bad-response"});return s}var ai=e=>typeof e=="function"?e:Wv,ci=(e,t="earliest")=>{let n=Number(e);return!Number.isFinite(n)||n<0?t:"0x"+Math.trunc(n).toString(16)};var{chainById:eN,DEFAULT_CHAIN:tN,MONERO:nN}=te,{fundOrderLive:rN,newSecret:oN,sendTransaction:Jl,readContract:ql}=_e,{encodeClaim:jv,encodeRefund:$v,encodeMarkReady:Xv,encodeStatus:Vv,encodeT1:Kv,encodeTermsHash:Yv,encodeRead:zw,decodeUint64:Gw,decodeBytes32:Zw,decodeStatus:Gv}=Zn,{liveOrderSlotsVerdict:zv,counterpartyVerdict:sN}=ie,{createOrderWorker:iN}=is,{orderContextString:aN}=It,{requestOrderQuote:cN,checkOrderQuoteShape:lN}=ls,{CLAIM_GAS_LIMIT:Zv}=Co;async function Qw(e,t={}){if(!e)throw new g("bad-input",{field:"escrow"});let r=await(t.call||ql)({to:e,data:Vv()});return Gv(r)}async function Jw(e,t={}){if(typeof e!="string"||!e)throw new g("bad-input",{field:"escrow"});let n=ai(t.logs),r=t.fromBlock===void 0?"earliest":ci(t.fromBlock),o=await n({address:e,topics:[kr],fromBlock:r,toBlock:"latest"});return Ql(o,{escrow:e,at:Number.isFinite(Number(t.at))?Number(t.at):null})}async function qw(e,t={}){if(!e)throw new g("bad-input",{field:"escrow"});let n=t.call||ql,[r,o,s]=await Promise.all([n({to:e,data:Kv()}),n({to:e,data:Yv()}),n({to:e,data:zw("readyBy")})]);for(let[i,a]of[[r,"t1()"]])if(String(i||"").replace(/^0x/,"").length===0)throw new g("bad-input",{field:"escrow",why:"no-contract"});return{t1:Gw(r,"t1()"),termsHash:Zw(o,"termsHash()"),readyBy:Gw(s,"readyBy()")}}async function Qv(e,t={}){let n=t.call||ql;if(!e)throw new g("bad-input",{field:"escrow"});let r=["edPointLocker","edPointClaimer","edViewPointLocker","commitHalfLocker","commitHalfClaimer"];try{let o=await Promise.all(r.map(i=>n({to:e,data:zw(i)}))),s={};return r.forEach((i,a)=>{s[i]=Zw(o[a],i+"()")}),{slots:s}}catch(o){return{error:String(o&&o.message||o)}}}async function ed(e,t,n="signature",r={}){if(!t)throw new g("bad-input",{field:"expect"});let o=await Qv(e,r),s=zv({slots:o.slots,readError:o.error,expect:t});if(s.blocks)throw new g("contract-reverted",{step:n,why:"slots-mismatch"});return s}async function e0({escrow:e,halfClaimer:t,expect:n,onStep:r,deps:o={}}){if(!e)throw new g("bad-input",{field:"escrow"});if(!t)throw new g("bad-input",{field:"halfClaimer"});return await ed(e,n,"claim",o),r?.("confirm-claim"),{hash:await(o.send||Jl)({to:e,data:jv(t),gas:Zv})}}async function t0({escrow:e,halfLocker:t,onStep:n,expect:r=null,deps:o={}}){if(!e)throw new g("bad-input",{field:"escrow"});if(!t)throw new g("bad-input",{field:"halfLocker"});return n?.("confirm-refund"),r&&await ed(e,r,"refund",o),{hash:await(o.send||Jl)({to:e,data:$v(t),gas:250000n})}}async function n0({escrow:e,expect:t,onStep:n,deps:r={}}){if(!e)throw new g("bad-input",{field:"escrow"});return await ed(e,t,"mark-ready",r),n?.("confirm-mark-ready"),{hash:await(r.send||Jl)({to:e,data:Xv(),gas:120000n})}}var Jv=["commitHalfLocker","commitHalfClaimer","edPointLocker","edPointClaimer","edViewPointLocker"],qv=e=>typeof e=="string"&&e&&!/^0x/i.test(e)?"0x"+e:e;function o0(e){if(!e||typeof e!="object")throw new g("bad-input",{field:"request"});let t={...e};for(let n of Jv)t[n]=qv(t[n]);return t}function eE(e){if(!e||typeof e!="object")throw new g("bad-input",{field:"request"});let n=["locker","claimer","commitHalfLocker","commitHalfClaimer","edPointLocker","edPointClaimer","amount","readyBy","t1"].filter(r=>e[r]===void 0||e[r]===null||e[r]==="");if(n.length)throw new g("bad-input",{field:"terms",missing:n});try{return Zn.orderTerms(o0(e))}catch{let o=Math.floor(Date.now()/1e3);throw Number(e.readyBy)<=o?new g("bad-input",{field:"readyBy",why:"not-in-future"}):Number(e.t1)<=Number(e.readyBy)?new g("bad-input",{field:"t1",why:"not-after-readyBy"}):new g("bad-input",{field:"terms"})}}var tE=e=>String(e??"").replace(/0x[0-9a-fA-F]{64}/g,"0x<redacted>").slice(0,200),nE=/fetch failed|network|ECONN|ETIMEDOUT|ENOTFOUND|EAI_AGAIN|socket|timeout|HTTP \d|status \d|non-ok/i,rE=e=>nE.test(e);async function s0(e,t,n={}){if(!e||typeof e!="object")throw new g("bad-input",{field:"request"});if(!t||typeof t.send!="function"||typeof t.receipt!="function")throw new g("bad-input",{field:"wallet",missing:["send","receipt"]});let r=o0(e);eE({...r,amount:r.amountWei});let o=_e,s=typeof n.call=="function"?n.call:o.readContract;try{return await o.fundOrder({...r,call:s,send:i=>t.send(i),receipt:i=>t.receipt(typeof i=="string"?i:i&&typeof i.hash=="string"?i.hash:i)})}catch(i){if(i&&typeof i.code=="string")throw i;let a=tE(i&&i.message||i);throw new g(rE(a)?"server-unavailable":"bad-input",{step:"fund-order",why:a})}}var sE=(e,t)=>t.filter(n=>e[n]===void 0||e[n]===null||e[n]===""),td=e=>{let t=["send","receipt"],n=e?t.filter(r=>typeof e[r]!="function"):t;if(n.length)throw new g("bad-input",{field:"wallet",missing:n});return e},nd=(e,t)=>{if(!e||typeof e!="object")throw new g("bad-input",{field:"request"});let n=sE(e,["escrow","expect",...t]);if(n.length)throw new g("bad-input",{field:"request",missing:n});return e},rd=async(e,t)=>{try{return await t()}catch(n){throw n&&typeof n.code=="string"?n:new g("contract-reverted",{step:e})}};function li({call:e=null}={}){let t=e||_e.readContract,n=r=>({call:t,send:o=>r.send(o),receipt:o=>r.receipt(o)});return{async markReady(r,o){nd(r,[]),td(o);let{escrow:s,expect:i,onStep:a}=r;return await rd("mark-ready",()=>n0({escrow:s,expect:i,onStep:a,deps:n(o)}))},async claim(r,o){nd(r,["halfClaimer"]),td(o);let{escrow:s,halfClaimer:i,expect:a,onStep:c}=r;return await rd("claim",()=>e0({escrow:s,halfClaimer:i,expect:a,onStep:c,deps:n(o)}))},async refund(r,o){nd(r,["halfLocker"]),td(o);let{escrow:s,halfLocker:i,expect:a,onStep:c}=r;return await rd("refund",()=>t0({escrow:s,halfLocker:i,expect:a,onStep:c,deps:n(o)}))}}}var Sr=e=>typeof e=="string"&&e.length>0,di=e=>{let t=Number(e);return Number.isFinite(t)?Math.trunc(t):null},iE=e=>Sr(e)?e.trim().replace(/^0x/,"").toLowerCase():null,i0=e=>{try{return new URL(e).host}catch{throw new g("bad-input",{field:"nodes.url",unknown:e})}};function aE(e){if(!Array.isArray(e))throw new g("bad-input",{field:"nodes"});let t=[];for(let n of e)if(Sr(n)){let r=n.replace(/\/+$/,"");t.push({url:r,operator:i0(r)})}else if(n&&typeof n=="object"&&Sr(n.url)){let r=n.url.replace(/\/+$/,"");t.push({url:r,operator:Sr(n.operator)?n.operator:i0(r)})}else throw new g("bad-input",{field:"nodes",why:"each-node-is-url-or-url+operator"});if(!t.length)throw new g("bad-input",{field:"nodes",why:"empty-list"});return t}async function od(e,t,n,r,o){let s;try{s=await r(e.url+t,{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify(n),signal:typeof AbortSignal<"u"&&AbortSignal.timeout?AbortSignal.timeout(o):void 0})}catch(i){throw new g("xmr-no-nodes",{node:e.url,why:String(i&&i.message||i).slice(0,120)})}if(!s||s.ok!==!0)throw new g("xmr-no-nodes",{node:e.url,status:s?s.status:null});try{return await s.json()}catch{throw new g("xmr-no-nodes",{node:e.url,why:"bad-json"})}}async function a0(e,t,n){let r=await od(e,"/json_rpc",{jsonrpc:"2.0",id:"info",method:"get_info"},t,n),o=r&&r.result;if(!o||!Number.isFinite(Number(o.height)))throw new g("xmr-no-nodes",{node:e.url,why:"no-height"});return{height:Number(o.height),synced:o.synchronized!==!1,nettype:o.nettype||null}}async function c0(e,t,n,r){let o=await od(e,"/json_rpc",{jsonrpc:"2.0",id:"block",method:"get_block",params:{height:t}},n,r),s=o&&o.result;if(!s)throw new g("xmr-no-nodes",{node:e.url,why:"no-block"});let i=s.block_header&&s.block_header.hash||null,a=Array.isArray(s.tx_hashes)?s.tx_hashes:null;if(!a){let c=typeof s.json=="string"?JSON.parse(s.json):s.json;a=c&&c.tx_hashes||[]}return{hash:i,txHashes:a}}async function l0(e,t,n,r){if(!t.length)return[];let o=await od(e,"/get_transactions",{txs_hashes:t,decode_as_json:!0},n,r),s=o.txs||[];return(o.txs_as_json||[]).map((i,a)=>{let c=typeof i=="string"?JSON.parse(i):i,l=s[a]||{};return c.tx_hash=String(l.tx_hash||c.tx_hash||"").replace(/^0x/,"").toLowerCase(),c.block_height=l.block_height??null,c.confirmations=l.confirmations??null,c})}var d0=e=>e.outputs.reduce((t,n)=>t+(n.amountAtomic||0n),0n);async function cE(e,{txid:t,address:n,viewSecret:r,spendPub:o,fromHeight:s,toHeight:i,nowSec:a,fetchImpl:c,timeoutMs:l}){let d=Math.max(0,di(s)??0),u=di(i);if(!Number.isFinite(u)||u<d)throw new g("bad-input",{field:"fromHeight",got:s});for(let f=d;f<=u;f++){let{txHashes:p}=await c0(e,f,c,l);if(!p.length||t&&!p.includes(t))continue;let h=await l0(e,p,c,l);for(let w of h){if(t&&w.tx_hash!==t)continue;let b=no.matchTransaction(w,[{address:n,viewSecret:r,spendPub:o}],{height:f,nowSec:a});if(b.length&&d0(b[0])>0n)return{txid:w.tx_hash,height:f}}}return null}async function ui(e){if(!e||typeof e!="object")throw new g("bad-input",{field:"request"});let t=aE(e.nodes);if(!Sr(e.address))throw new g("bad-input",{field:"address"});if(e.viewSecret===void 0||e.viewSecret===null)throw new g("bad-input",{field:"viewSecret"});if(!Sr(e.spendPub))throw new g("bad-input",{field:"spendPub"});let n;try{n=BigInt(e.expectedAtomic)}catch{throw new g("bad-input",{field:"expectedAtomic"})}if(n<=0n)throw new g("bad-input",{field:"expectedAtomic"});let r=Math.max(1,di(e.minConfirmations)??1),o=typeof e.fetch=="function"?e.fetch:globalThis.fetch;if(typeof o!="function")throw new g("bad-input",{field:"fetch"});let s=Number.isFinite(Number(e.nowSec))?Number(e.nowSec):Math.floor(Date.now()/1e3),i=Number.isFinite(Number(e.timeoutMs))&&Number(e.timeoutMs)>0?Number(e.timeoutMs):2e4,a=iE(e.txid),c={address:e.address,viewSecret:e.viewSecret,spendPub:e.spendPub},l=[];for(let x of t)try{let N=await a0(x,o,i);l.push({node:x,info:N})}catch{}if(!l.length)throw new g("xmr-no-nodes",{tried:t.map(x=>x.url)});let d=Math.max(...l.map(x=>x.info.height)),u=Math.max(0,d-1),f=null,p=null;for(let{node:x}of l){try{f=await cE(x,{txid:a,address:e.address,viewSecret:e.viewSecret,spendPub:e.spendPub,fromHeight:e.fromHeight,toHeight:u,nowSec:s,fetchImpl:o,timeoutMs:i})}catch(N){p=N,f=null}if(f)break}if(!f){if(p&&p.code==="xmr-no-nodes")throw p;return{seen:!1,state:"pending",txid:a,tip:d,checked:l.map(x=>({url:x.node.url,operator:x.node.operator,height:x.info.height}))}}let h=[];for(let x of t){let N={url:x.url,operator:x.operator},D;try{D=await a0(x,o,i)}catch{N.state="down",h.push(N);continue}if(!D.synced||D.height<f.height){N.state="stale",N.height=D.height,h.push(N);continue}let O;try{O=await c0(x,f.height,o,i)}catch{N.state="down",h.push(N);continue}if(N.blockHash=O.hash,!O.hash||!O.txHashes.includes(f.txid)){N.state="no-tx",h.push(N);continue}let H=null;try{H=(await l0(x,O.txHashes,o,i)).find(W=>W.tx_hash===f.txid)||null}catch{N.state="down",h.push(N);continue}if(!H){N.state="no-tx",h.push(N);continue}let M=no.matchTransaction(H,[c],{height:f.height,nowSec:s});if(!M.length){N.state="no-output",h.push(N);continue}N.state="ok",N.amountAtomic=d0(M[0]),N.unlock=M[0].unlock,N.confirmations=Number.isFinite(Number(H.confirmations))?Number(H.confirmations):D.height-f.height,h.push(N)}let w=h.filter(x=>x.state==="no-tx"||x.state==="no-output");if(w.length)throw new g("xmr-nodes-disagree",{txid:f.txid,height:f.height,nodes:w.map(x=>({url:x.url,operator:x.operator,blockHash:x.blockHash||null,why:x.state})),agreed:h.filter(x=>x.state==="ok").map(x=>({url:x.url,operator:x.operator,blockHash:x.blockHash}))});let b=h.filter(x=>x.state==="ok");if(!b.length)return{seen:!1,state:"pending",txid:f.txid,height:f.height,checked:h};let T=b.find(x=>x.unlock&&x.unlock.locked);if(T){let x=T.unlock;throw new g("xmr-locked",{txid:f.txid,height:f.height,address:e.address,untilHeight:x.untilHeight??null,untilTime:x.untilTime??null})}let B=b.reduce((x,N)=>N.amountAtomic>x?N.amountAtomic:x,0n);if(B<n)throw new g("xmr-underpaid",{txid:f.txid,height:f.height,got:B.toString(),want:n.toString()});let E=new Map;for(let x of b){let N=x.blockHash;E.has(N)||E.set(N,{blockHash:N,operators:new Set,nodes:[]});let D=E.get(N);D.operators.add(x.operator),D.nodes.push(x)}let k=null;for(let x of E.values())(!k||x.operators.size>k.operators.size)&&(k=x);let m=Math.min(...k.nodes.map(x=>x.confirmations)),A=k.nodes.map(x=>({url:x.url,operator:x.operator,blockHash:x.blockHash,confirmations:x.confirmations}));return k.operators.size<2?{seen:!1,state:"one-node",txid:f.txid,height:f.height,blockHash:k.blockHash,amountAtomic:B.toString(),confirmations:m,operators:[...k.operators],agreedBy:A,checked:h}:m<r?{seen:!1,state:"pending",why:"confirmations",txid:f.txid,height:f.height,blockHash:k.blockHash,amountAtomic:B.toString(),confirmations:m,needConfirmations:r,agreedBy:A,checked:h}:{seen:!0,state:"arrived",txid:f.txid,height:f.height,blockHash:k.blockHash,amountAtomic:B.toString(),confirmations:m,needConfirmations:r,operators:[...k.operators],agreedBy:A,checked:h}}function sd({readyBySec:e,nowSec:t,minConfirmations:n,blockTimeSec:r}={}){let o=Number(e),s=Number.isFinite(Number(t))?Number(t):Math.floor(Date.now()/1e3),i=Math.max(1,di(n)??1),a=Number.isFinite(Number(r))&&Number(r)>0?Number(r):120;if(!Number.isFinite(o)||o<=0)return null;let c=i*a,l=Math.floor(o-s);if(l<c)throw new g("xmr-too-late",{needSec:c,leftSec:l,minConfirmations:i,readyBy:Math.floor(o)});return l}var dE={success:"success",refund_eth:"refunded_eth",[Lt]:Lt},wt=e=>{let t=Number(e);return Number.isFinite(t)?t:null},uE="xmr_locked",fE=["id","network","escrow","quoteId","providerId","hashlock","amount","t0","t1"],pE=["swapId","network","address","viewKey","expectedAmountXmr","restoreHeight","chain"];function mE(e,t,n=null){let r=e&&e.escrow||{},o=n&&typeof n=="object"?n:{},s=(...i)=>{for(let a of i)if(!(a==null||a===""))return typeof a=="bigint"?a.toString():a;return null};return{id:e.id||null,network:e.network||e.chain||null,escrow:t||r.address||null,quoteId:s(e.orderQuoteId,r.quoteId),providerId:s(e.providerId,r.providerId),hashlock:s(r.hashlock,e.hashlock),amount:s(r.amountWei,o.amount,e.amountWei),t0:s(r.t0,o.t0),t1:s(r.t1,o.t1)}}function u0(e){let t=e&&e.escrow||{};if(typeof t.viewHalf!="string"||!t.viewHalf)throw new g("bad-input",{field:"viewHalf"});if(typeof t.counterViewHalf!="string"||!t.counterViewHalf)throw new g("bad-input",{field:"counterViewHalf"});try{return Tt.createHalves(ln).combineHalves(BigInt(t.viewHalf),BigInt(t.counterViewHalf)).toString(16).padStart(64,"0")}catch{throw new g("bad-input",{field:"viewKey"})}}function f0(e){if(!e||typeof e!="object")return null;let t=Number(e.receivedXmr);if(!Number.isFinite(t))return null;let n=Number(e.confirmations),r=e.status===uE,o=wt(e.lockedXmr);return{id:e.id||null,address:e.address||null,status:e.status||null,expectedXmr:wt(e.expectedAmountXmr),receivedXmr:t,confirmations:Number.isFinite(n)?n:0,txids:Array.isArray(e.fundingTxids)?e.fundingTxids:[],locked:r,lockedXmr:o===null?0:o,lockedUntil:e.lockedUntil||null,seen:t>0&&!r}}function p0(e){if(!e||typeof e!="object"||!e.id)throw new g("bad-input",{field:"swap"});let t=we.derive(e),n=[],r=Array.isArray(t.steps)?t.steps:[],o=r.find(d=>d.key==="funded")||null;n.push({code:"awaiting_funding",done:!!(o&&o.done),active:!(o&&o.done),at:null});for(let d of r)n.push({code:d.key,done:!!d.done,active:!!d.active,failed:!!d.failed,at:t.simulated&&t.simulated.evm?d.atSim??null:null});let s=n.find(d=>d.active)||[...n].reverse().find(d=>d.done)||n[0],i=t.terminal?dE[t.terminal.kind]??"closed":null,a=i===Lt,c=e.network||e.chain||null,l=c&&xw(c)||"unknown";return{id:e.id,direction:e.side==="sell"?"sell":"buy",createdAt:e.createdAt??null,maker:{id:e.makerId!==void 0&&e.makerId!==null?e.makerId:(e.maker&&e.maker.id)??null,name:e.makerName!==void 0&&e.makerName!==null?e.makerName:(e.maker&&e.maker.name)??null},phase:t.phase||null,phaseLabel:t.phaseLabel||null,settled:!!e.settlement,funds:{receivedXmr:wt(t.xmrAmount&&t.xmrAmount.seen)??0,escrowLocked:!!(e.escrow&&(e.escrow.fundTx||e.escrow.secret))},pay:{token:e.payToken||"eth",amount:wt(e.payAmount)??0},get:{xmr:wt(e.xmrAmount)??0},step:s.code,steps:n,deadlines:{readyBy:t.deadlines&&t.deadlines.readyBy!==void 0?wt(t.deadlines.readyBy):null,t1:t.deadlines&&t.deadlines.t1!==void 0?wt(t.deadlines.t1):null},xmr:{confirmations:wt(t.xmr&&(t.xmr.confirmations!==void 0?t.xmr.confirmations:t.conf))??0,target:wt(t.xmr&&t.xmr.confTarget)??wt(t.confTarget)??0,txid:t.xmr&&Array.isArray(t.xmr.txids)&&t.xmr.txids[0]||null,amount:{expected:t.xmrAmount?t.xmrAmount.expected??null:null,seen:t.xmrAmount?t.xmrAmount.seen??null:null}},counterparty:{chain:c,vm:l,leg:e.escrow&&(e.escrow.address||e.escrow.leg)||null,status:t.phase||null,txs:e.escrow&&(e.escrow.txids||e.escrow.txs)||[]},actions:a?{markReady:!1,sweep:!1,refund:!1}:{markReady:!!(t.can&&t.can.ready),sweep:!!(t.can&&t.can.sweep),refund:!!(t.can&&t.can.refund)},simulated:{evm:!!(t.simulated&&t.simulated.evm),xmr:!!(t.simulated&&t.simulated.xmr)},terminal:i}}var m0=12,hE=e=>{let t=e&&e.quote&&typeof e.quote=="object"?e.quote:{},n=r=>r==null||r===""?void 0:r;return{side:e.side||"buy",network:t.chain?t.chain:void 0,payToken:t.asset?String(t.asset).toLowerCase():void 0,payAmount:t.amount!==void 0?t.amount:void 0,xmrAmount:t.size!==void 0?t.size:void 0,orderQuoteId:n(t.id),receiveAddress:n(e.receiveTo),makerId:n(t.makerId),makerName:n(t.makerName),makerSpread:n(t.makerSpread),quoteSignature:n(t.signature),fee:n(t.ninseiFee),dexSpread:n(t.dexSpread),gasUsd:n(t.gasUsd),rate:n(t.rate)}};function id({preflight:e,http:t,createRecord:n,mode:r=null,xmrNetwork:o=null,call:s=null,config:i=null,auth:a=null,denylist:c=null,watch:l=null,logs:d=null}={}){let u=typeof s=="function"?s:_e.readContract,f=ai(d),p=li({call:typeof s=="function"?s:null}),h=(m,A)=>{if(!i||typeof i.route!="function")throw new g("bad-input",{field:"config",step:"server"});return i.route(m,A)},w=(m,A)=>{let x=i&&i.limits?i.limits[m]:null;return Number.isFinite(Number(x))&&Number(x)>0?Number(x):A},b=()=>{let m=Wt.loadState();return Object.values(m&&m.swaps||{}).filter(x=>x&&x.id).sort((x,N)=>Number(N.createdAt||0)-Number(x.createdAt||0))};async function T(m){let A=m.order&&typeof m.order=="object"?m.order:{},x=A.amount,N=x==null||x===""?null:String(x),D=Number(A.chainId),O=Number.isFinite(D)?te.chainByChainId(D):null,H=O?te.tokensOf(O.id):[],M=String(m.quote&&(m.quote.token||m.quote.asset)||"").toLowerCase(),W=H.find(C=>String(C.symbol).toLowerCase()===M)||null,R=H.find(C=>!C.address)||null,P=!!(W&&!W.address),$={tokenIsNative:P,standIn:!m.counterparty&&r!=="live",liveChain:!!(O&&O.escrow&&O.escrow.mode==="live"&&!O.testnet)};N!==null&&($.payAmountWei=N,$.requiredNativeWei=N);try{let C=m.wallet,K=C&&typeof C.driver=="function"?C.driver():null,Y=C&&typeof C.address=="function"?await C.address():null,S=gr("evm"),y=I=>String(I.symbol).toLowerCase(),v=[];if(R&&v.push({id:y(R),symbol:R.symbol,decimals:R.decimals,address:null}),W&&W.address&&v.push({id:y(W),symbol:W.symbol,decimals:W.decimals,address:W.address}),K&&Y&&S&&typeof S.balances=="function"&&v.length){let I=await S.balances({driver:K,address:Y,tokens:v}),_=j=>{let V=j?I.find(G=>G.token===y(j)):null;return V&&V.amount!==null?V.amount:null},L=R?_(R):null;L!==null&&($.nativeBalanceWei=L);let F=P?L:_(W);F!==null&&($.payBalanceWei=F)}}catch{}return $}async function B(m,A,x){if(!t||typeof t.tryJson!="function")throw new g("bad-input",{field:"http",step:"mark"});let N=mE(m,A,x),D=JSON.stringify(Object.fromEntries(fE.map(M=>[M,N[M]]))),O={"content-type":"application/json"};if(typeof a=="function"){let M=null;try{M=await a()}catch{M=null}typeof M=="string"&&M&&(O.authorization="Bearer "+M)}let H=null;try{H=await t.tryJson(h("evmSwaps"),{method:"POST",headers:O,body:D})}catch(M){throw new g("server-unavailable",{step:"mark",why:M&&M.code||"fetch"})}if(!H||H.ok!==!0)throw new g("server-refused",{step:"mark",status:H?H.status:null,why:H&&H.body&&(H.body.error||H.body.detail)||null});return{marked:!0,httpStatus:H.status,orderBinding:H.body&&H.body.orderBinding||null}}async function E(m,A){if(!t||typeof t.tryJson!="function")throw new g("bad-input",{field:"http",step:"watch"});let x=m&&m.escrow||{},N=x.moneroAddress||m.swapWallet&&m.swapWallet.address||null;if(!N)throw new g("bad-input",{field:"moneroAddress"});let D=wt(A&&A.xmrAmount!==void 0?A.xmrAmount:m.xmrAmount);if(!(D>0))throw new g("bad-input",{field:"expectedAmountXmr"});let O=m.moneroNetwork||o||null;if(!O)throw new g("bad-input",{field:"moneroNetwork"});let H={swapId:m.id||null,network:O,address:N,viewKey:u0(m),expectedAmountXmr:D,restoreHeight:Number(x.birthHeight)>0?Number(x.birthHeight):null,chain:m.network||m.chain||null},M={};for(let P of pE)H[P]!==void 0&&H[P]!==null&&(M[P]=H[P]);l&&l.sendViewKeyToServer===!1&&delete M.viewKey;let W=null;try{W=await t.tryJson(h("swaps"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(M)})}catch(P){throw new g("server-unavailable",{step:"watch",why:P&&P.code||"fetch"})}if(!W||W.ok!==!0)throw new g("server-refused",{step:"watch",status:W?W.status:null,why:W&&W.body&&(W.body.error||W.body.detail)||null});let R=f0(W.body);if(!R)throw new g("server-unavailable",{step:"watch",why:"bad-response"});return{registered:!0,httpStatus:W.status,...R,expectedXmr:R.expectedXmr!==null?R.expectedXmr:D}}async function k(m){if(!t||typeof t.tryJson!="function")throw new g("bad-input",{field:"http",step:"watch"});let A=null;try{A=await t.tryJson(h("swap",{id:m}),{method:"GET"})}catch(x){throw new g("server-unavailable",{step:"watch",why:x&&x.code||"fetch"})}if(!A||A.ok!==!0)throw new g("server-refused",{step:"watch",status:A?A.status:null,id:m,why:A&&A.body&&(A.body.error||A.body.detail)||null});return A.body}return{async list(){return b().map(p0)},async get(m){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});let A=b().find(x=>x.id===m);return A?p0(A):null},async progress(m){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});let A=we.getSwap(m);return A?{id:String(A.id||m),swap:A,swapWallet:we.halvesWalletOf(A),view:we.derive(A)}:null},async confirmReady(m){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});return we.confirmReady(m)},async refundEth(m,A="you"){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});return we.refundEth(m,A)},async sweepNow(m){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});return we.sweepNow(m)},async setDestination(m,A){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});if(typeof A!="string"||!A)throw new g("bad-input",{field:"address"});let x=we.getSwap(m);return x?(x.receiveAddress=A,we.saveSwap(x)):null},async addressNetwork(m){if(typeof m!="string"||!m)return null;try{return Mt.networkFromShape(m)}catch{return null}},async forget(m){if(typeof m!="string"||!m)throw new g("bad-input",{field:"id"});let A=null;try{A=Wt.loadState()}catch{throw new g("storage-unavailable",{step:"forget"})}let x=A&&A.swaps;if(!x||!x[m])return!1;delete x[m];try{Wt.saveState(A)}catch{throw new g("storage-unavailable",{step:"forget"})}return!0},async sync(){if(!t||typeof t.tryJson!="function")throw new g("bad-input",{field:"http",step:"sync"});let m={};if(typeof a=="function"){let D=null;try{D=await a()}catch{D=null}typeof D=="string"&&D&&(m.authorization="Bearer "+D)}let A=null;try{A=await t.tryJson(h("evmSwaps"),{method:"GET",headers:m})}catch(D){throw new g("server-unavailable",{step:"sync",why:D&&D.code||"fetch"})}if(!A||A.ok!==!0)throw new g("server-refused",{step:"sync",status:A?A.status:null,why:A&&A.body&&(A.body.error||A.body.detail)||null});let x=A.body;if(!x||!Array.isArray(x.swaps))throw new g("server-unavailable",{step:"sync",why:"bad-response"});return{ok:!0,added:we.addServerSwaps(x.swaps),seen:x.swaps.length}},verifyArrival:m=>ui(m),assertTimeForConfirmations:m=>sd(m),async refundIfXmrMissing(m={},A={}){let x=typeof A.verify=="function"?A.verify:ui,N=typeof A.refund=="function"?A.refund:p.refund,D=typeof A.now=="function"?A.now:()=>Math.floor(Date.now()/1e3);if(!m||typeof m!="object")throw new g("bad-input",{field:"request"});let O=m.swap&&typeof m.swap=="object"?m.swap:null,H=O&&O.escrow||{},M=m.escrow||H.address||null;if(!M)throw new g("bad-input",{field:"escrow"});let W=m.halfLocker||H.half||null;if(!W)throw new g("bad-input",{field:"halfLocker"});if(!m.expect||typeof m.expect!="object")throw new g("bad-input",{field:"expect"});let R=m.address||H.moneroAddress||null;if(!R)throw new g("bad-input",{field:"address"});let P=m.viewSecret!==void 0&&m.viewSecret!==null?m.viewSecret:O?u0(O):null;if(P==null)throw new g("bad-input",{field:"viewSecret"});let $=m.spendPub||H.moneroSpendPub||null;if(!$)throw new g("bad-input",{field:"spendPub"});let C=m.expectedAtomic!==void 0&&m.expectedAtomic!==null?m.expectedAtomic:H.expectedAtomic!==void 0&&H.expectedAtomic!==null?H.expectedAtomic:null;if(C===null&&O&&Number.isFinite(Number(O.xmrAmount))&&(C=BigInt(Math.round(Number(O.xmrAmount)*1e12)).toString()),C===null)throw new g("bad-input",{field:"expectedAtomic"});let K=Number(m.readyBySec!==void 0&&m.readyBySec!==null?m.readyBySec:H.readyBy);if(!Number.isFinite(K)||K<=0)throw new g("bad-input",{field:"readyBySec"});let Y=Number.isFinite(Number(m.minConfirmations))&&Number(m.minConfirmations)>0?Math.trunc(Number(m.minConfirmations)):w("xmrConfirmations",10),S=Number.isFinite(Number(m.blockTimeSec))&&Number(m.blockTimeSec)>0?Number(m.blockTimeSec):w("xmrBlockTimeSec",120),y=Number.isFinite(Number(m.leadSec))&&Number(m.leadSec)>=0?Number(m.leadSec):Y*S,v=Number.isFinite(Number(m.nowSec))?Number(m.nowSec):D(),I=Math.floor(K-v);if(I<=0)return{refunded:!1,state:"claim-window",leftSec:I,readyBy:K,nowSec:v};if(I>y)return{refunded:!1,state:"waiting",leftSec:I,needSec:y,readyBy:K,nowSec:v};let _=await x({nodes:m.nodes,address:R,viewSecret:P,spendPub:$,expectedAtomic:C,minConfirmations:Y,txid:m.txid||null,fromHeight:m.fromHeight===void 0?null:m.fromHeight,timeoutMs:m.timeoutMs,nowSec:v});if(_.seen)return{refunded:!1,state:"arrived",leftSec:I,verdict:_};let L=await N({escrow:M,halfLocker:W,expect:m.expect,onStep:m.onStep},m.wallet);return{refunded:!0,state:"refunded",hash:L&&L.hash||null,leftSec:I,verified:_}},async start(m){if(!m||typeof m!="object")throw new g("bad-input",{field:"request"});if(!m.quote||typeof m.quote!="object")throw new g("bad-input",{field:"quote"});if(typeof m.onRecoveryFile!="function")throw new g("bad-input",{field:"onRecoveryFile"});if(!m.receiveTo||typeof m.receiveTo!="string")throw new g("bad-input",{field:"receiveTo"});let A=await T(m),x=e?await e(m.quote,A):null,D=(x&&(x.checks||x.results)||[]).filter(F=>F&&F.blocks===!0);if(D.length){let F=D[0];throw new g(F.code||"bad-input",{...F.params||{},kind:F.kind,surface:"swaps.start"})}let O=typeof n=="function"?n:async F=>Xw(hE(F),{order:F.order}),H=typeof m.passphrase=="string"?m.passphrase:"";if(typeof H!="string")throw new g("bad-input",{field:"passphrase"});if(H.length>0&&H.length<m0)throw new g("bad-input",{field:"passphrase",min:m0});let M=Hn(m.order),W=null;try{W=await O(m)}catch(F){throw F&&typeof F.code=="string"?F:new g("storage-unavailable",{step:"create-record"})}if(!W||!W.swap)throw new g("bad-input",{field:"record"});let R=W,P=null;if(!R.swapWallet){let F=$w({order:m.order,side:W.side||null,counterparty:m.counterparty||null,standIn:r!=="live",network:R.swap.moneroNetwork||o||null}),j=R.swap.escrow&&typeof R.swap.escrow=="object"?R.swap.escrow:{};R.swap.escrow={...j,half:F.wallet.spendHalf,viewHalf:F.wallet.viewHalf,edPointLocker:F.own.spendPoint,edViewPointLocker:F.own.viewPoint,edPointClaimer:F.wallet.otherSpendPoint,counterViewPoint:F.wallet.otherViewPoint,counterViewHalf:F.wallet.otherViewHalf,moneroAddress:F.wallet.address,moneroSpendPub:F.wallet.spendPub,moneroViewPub:F.wallet.viewPub,moneroNetwork:F.wallet.network,standIn:F.counterparty.standIn,providerId:F.counterparty.providerId,orderContext:F.context};try{we.saveSwap(R.swap)}catch{throw new g("storage-unavailable",{step:"save-swap"})}if(R={...R,swapWallet:we.halvesWalletOf(R.swap)},!R.swapWallet)throw new g("bad-input",{field:"swapWallet"});P=F}let $=null;try{$=Pe.buildPayload({swap:R.swap,swapWallet:R.swapWallet,escrow:R.escrow,receiveAddress:R.receiveTo||m.receiveTo,restoreHeight:R.restoreHeight??null}),Pe.validatePayload($)}catch{throw new g("recovery-failed",{step:"build-payload"})}let C=null;try{C={name:Pe.recoveryFileName($.swapId),contents:await Pe.createRecoveryFile($,H)}}catch{throw new g("recovery-failed",{step:"encrypt"})}if(await m.onRecoveryFile(C)!==!0)throw new g("recovery-declined",{swapId:$.swapId});let Y=m.wallet;if(!Y||typeof Y.send!="function"||typeof Y.receipt!="function")throw new g("bad-input",{field:"wallet",missing:["send","receipt"],surface:"swaps.start",step:"lock"});if(c){let F=typeof Y.address=="function"?await Y.address():null;if(typeof F!="string"||!F)throw new g("bad-input",{field:"wallet",missing:["address"],surface:"swaps.start",step:"lock"});if(c.has(F.toLowerCase()))throw new g("address-denied",{step:"lock"})}let S=P?{commitHalfLocker:P.wallet.commitHalfLocker,commitHalfClaimer:P.wallet.commitHalfClaimer,edPointLocker:P.own.spendPoint,edPointClaimer:P.wallet.otherSpendPoint,edViewPointLocker:P.own.viewPoint}:{},y={...m.order,...S,amountWei:m.order.amount};y.quote=m.orderQuote||null;let v=null;try{v=await s0(y,Y,{call:u})}catch(F){throw F&&typeof F.code=="string"?F:new g("server-unavailable",{step:"lock"})}let I=v&&v.escrow||null;if(I){let F=R.swap.escrow&&typeof R.swap.escrow=="object"?R.swap.escrow:{};R.swap.escrow={...F,address:I,birthHeight:Number(v.birthBlock)>0?Number(v.birthBlock):F.birthHeight??null};try{we.saveSwap(R.swap)}catch{throw new g("storage-unavailable",{step:"save-escrow"})}}let _=await B(R.swap,I,m.order),L=await E(R.swap,m.order);return{id:R.swap.id||null,escrow:I,address:L.address,step:"xmr-incoming",server:_,watch:L,next:"watch"}},async watch(m){if(!m||typeof m!="object")throw new g("bad-input",{field:"request"});let A=typeof m.id=="string"&&m.id?m.id:null;if(!A)throw new g("bad-input",{field:"id"});let x=m.expect!==void 0&&m.expect!==null,N=m.wallet!==void 0&&m.wallet!==null;if(x!==N)throw new g("bad-input",{field:x?"wallet":"expect"});if(x&&!(m.escrow||m.address))throw new g("bad-input",{field:"escrow"});let D=Number.isFinite(Number(m.pollMs))&&Number(m.pollMs)>0?Number(m.pollMs):w("watchPollMs",5e3),O=Number.isFinite(Number(m.timeoutMs))&&Number(m.timeoutMs)>0?Number(m.timeoutMs):w("watchTimeoutMs",12e5),H=Number.isFinite(Number(m.minConfirmations))&&Number(m.minConfirmations)>0?Math.trunc(Number(m.minConfirmations)):w("xmrConfirmations",10),M=m.verify&&typeof m.verify=="object"?{...m.verify,nodes:Array.isArray(m.verify.nodes)?m.verify.nodes:i&&typeof i.nodesFor=="function"?i.nodesFor(m.verify.network||m.network||o):[],minConfirmations:H}:null;if(M){let v=m.readyBySec!==void 0&&m.readyBySec!==null?Number(m.readyBySec):m.deadline&&m.deadline.readyBy!==void 0?Number(m.deadline.readyBy):null;v&&sd({readyBySec:v,nowSec:Math.floor(Date.now()/1e3),minConfirmations:H,blockTimeSec:w("xmrBlockTimeSec",120)})}let W=Date.now(),R=null;try{R=we.getSwap(A)}catch{R=null}let P=m.escrow||R&&R.escrow&&R.escrow.address||null,$=ci(R&&R.escrow?R.escrow.birthHeight:null),C={checked:!1,error:null,logs:void 0},K=async()=>{if(C.checked=!1,C.error=null,C.logs=void 0,!P){C.error="no-escrow";return}try{C.logs=await f({address:P,topics:[kr],fromBlock:$,toBlock:"latest"}),C.checked=!0}catch(v){C.error=v&&v.code||"logs-unread"}},Y=(v,I)=>{if(!(!v||v.settlement)){v.settlement={kind:Lt,phase:Lt,at:I};try{we.saveSwap(v)}catch{throw new g("storage-unavailable",{step:"decline"})}}},S=({source:v,at:I,waitedMs:_,address:L,chainChecked:F,chainError:j})=>({id:A,escrow:P,address:L||null,seen:!1,declined:!0,terminal:Lt,code:ii,source:v,at:I,waitedMs:_,chain:{checked:!!F,error:j||null}});if(R&&R.settlement&&R.settlement.kind===Lt){let v=Number(R.settlement.at);return S({source:"record",at:Number.isFinite(v)?v:Date.now(),waitedMs:0,address:null,chainChecked:!1,chainError:null})}let y=null;for(;;){await K();let v=await k(A);y=f0(v);let I=Yw({logs:C.logs,status:v,escrow:P,at:Date.now()});if(I.declined)return Y(R,I.at),S({source:I.source,at:I.at,waitedMs:Date.now()-W,address:v&&v.address,chainChecked:C.checked,chainError:C.error});if(!y)throw new g("server-unavailable",{step:"watch",why:"bad-response",id:A});if(y.locked){let _=y.lockedUntil||{};throw new g("xmr-locked",{id:A,address:y.address,status:y.status,expectedXmr:y.expectedXmr,receivedXmr:y.receivedXmr,lockedXmr:y.lockedXmr,untilHeight:_.untilHeight??null,untilTime:_.untilTime??null,waitedMs:Date.now()-W})}if(M){let _=await ui({...M,nowSec:Math.floor(Date.now()/1e3)});if(y.verify=_,!_.seen){if(Date.now()-W>=O)throw new g("xmr-timeout",{id:A,address:y.address,expectedXmr:y.expectedXmr,state:_.state,confirmations:_.confirmations??0,waitedMs:Date.now()-W,timeoutMs:O,pollMs:D});await new Promise(F=>setTimeout(F,D));continue}let L={seen:!0,id:A,address:y.address,status:y.status,expectedXmr:y.expectedXmr,receivedXmr:Number(_.amountAtomic)/1e12,confirmations:_.confirmations,txids:[_.txid],at:Date.now(),verified:{height:_.height,blockHash:_.blockHash,operators:_.operators,agreedBy:_.agreedBy},source:"client"};return x&&N?L.marked=await p.markReady({escrow:m.escrow||y.address,expect:m.expect,onStep:m.onStep},m.wallet):L.next="mark-ready",L}if(y.seen){let _={seen:!0,id:A,address:y.address,status:y.status,expectedXmr:y.expectedXmr,receivedXmr:y.receivedXmr,confirmations:y.confirmations,txids:y.txids,at:Date.now()};return x&&N?_.marked=await p.markReady({escrow:m.escrow||y.address,expect:m.expect,onStep:m.onStep},m.wallet):_.next="mark-ready",_}if(Date.now()-W>=O)throw new g("xmr-timeout",{id:A,address:y.address,expectedXmr:y.expectedXmr,receivedXmr:y.receivedXmr,confirmations:y.confirmations,waitedMs:Date.now()-W,timeoutMs:O,pollMs:D});await new Promise(_=>setTimeout(_,D))}}}}var wE=2,yE=10,fi=(e,t)=>{try{return BigInt(e)}catch{throw new g("bad-input",{field:t})}},bE=e=>{if(!e||typeof e.driver!="function")throw new g("bad-input",{field:"wallet.driver"});let t=e.driver();if(!t||typeof t!="object")throw new g("bad-input",{field:"wallet.driver"});let n=["setRestoreHeight","getBalance"].filter(r=>typeof t[r]!="function");if(n.length)throw new g("bad-input",{field:"wallet.driver",missing:n});return t},Ln=async(e,t)=>{try{return await t()}catch(n){throw n instanceof g?n:new g("wallet-rejected",{surface:e,why:String(n&&n.message||n)})}},h0=async(e,t)=>{if(typeof e[t]!="function")return null;try{let n=await e[t](),r=Number(n);return Number.isFinite(r)?r:null}catch{return null}};async function w0(e={}){let t=e.wallet;if(!t||typeof t!="object")throw new g("bad-input",{field:"wallet"});let n=["sync","unlockedBalance"].filter(f=>typeof t[f]!="function");if(n.length)throw new g("bad-input",{field:"wallet",missing:n});let r=Number(e.fromHeight);if(!Number.isFinite(r)||r<=0)throw new g("bad-input",{field:"restoreHeight"});let o=Number.isFinite(Number(e.scanBack))&&Number(e.scanBack)>=0?Math.floor(Number(e.scanBack)):yE,s=Math.max(0,Math.floor(r)-o),i=bE(t);if(await Ln("setRestoreHeight",()=>i.setRestoreHeight(s)),typeof i.rescanBlockchain!="function")throw new g("bad-input",{field:"wallet.driver.rescanBlockchain"});try{await Ln("rescanBlockchain",()=>i.rescanBlockchain())}catch{}try{await t.sync()}catch{}let a=fi(await Ln("getBalance",()=>i.getBalance()),"balance"),c=fi(await Ln("unlockedBalance",()=>t.unlockedBalance()),"unlockedBalance"),l=1,d=!1;if(e.rescanWhenLocked!==!1&&a>0n&&c===0n&&typeof i.rescanSpent=="function"&&l<wE){d=!0,await Ln("rescanSpent",()=>i.rescanSpent());try{await t.sync()}catch{}a=fi(await Ln("getBalance",()=>i.getBalance()),"balance"),c=fi(await Ln("unlockedBalance",()=>t.unlockedBalance()),"unlockedBalance"),l+=1}return{total:a.toString(),unlocked:c.toString(),scanHeight:s,walletHeight:await h0(i,"getHeight"),nodeHeight:await h0(i,"getDaemonHeight"),passes:l,lockedPass:d}}gn();var gE=e=>typeof e=="string"?e.trim():"";function xE(e){let t=e&&e.receive;return(t&&typeof t.address=="string"?t.address.trim():"")||null}async function y0(e,t){let n=gE(t),r=xE(e),o=e&&e.moneroWallet&&e.moneroWallet.network||null;if(!n)return{ok:!1,dest:n,promised:r,matches:r===null?null:!1,network:o,verified:!1,reason:"no address"};let s=await Ii(n,o?{expectNetwork:o}:{});return{ok:s.ok===!0,dest:n,promised:r,matches:r===null?null:n===r,network:o,verified:s.verified===!0,reason:s.reason||null}}var b0=12,kE=["unlock","sync","sweep","relay"],SE="0x3f267bb6",ad=e=>typeof e=="string"?e:e&&typeof e.contents=="string"?e.contents:null,g0=async(e,t)=>{try{return await t()}catch(n){throw n instanceof g?n:new g("wallet-rejected",{surface:e,why:String(n&&n.message||n)})}},vE=async(e,t)=>{if(!e||typeof e.fee!="function")return null;let n;try{n=await e.fee(t)}catch{return null}if(n==null)return null;let r=String(n);return/^\d+$/.test(r)?r:null};function x0({http:e,config:t,call:n=null}){let r=new Map,o=0,s={mainnet:"MAINNET",stagenet:"STAGENET",testnet:"TESTNET"},i={wallet(a={}){let c=a.moneroTs;if(!c||typeof c!="object")throw new g("bad-input",{field:"moneroTs"});if(typeof c.createWalletFull!="function")throw new g("bad-input",{field:"moneroTs.createWalletFull"});let l=String(a.network||"").trim().toLowerCase(),d=s[l]||null,u=d&&c.MoneroNetworkType?c.MoneroNetworkType[d]:void 0;if(u==null)throw new g("bad-input",{field:"network",known:Object.keys(s),got:a.network});if(typeof a.serverUri!="string"||!a.serverUri)throw new g("bad-input",{field:"serverUri"});return al({createWallet:f=>c.createWalletFull({...f,networkType:u}),network:l,serverUri:a.serverUri,password:a.password,keys:a.keys||{},restoreHeight:a.restoreHeight,expectedAddress:a.expectedAddress||null})},async destination(a={}){let c=ad(a.file);if(!c)throw new g("bad-input",{field:"file"});if(typeof a.passphrase!="string")throw new g("bad-input",{field:"passphrase"});if(typeof a.dest!="string"||!a.dest.trim())throw new g("bad-input",{field:"dest"});let l=null;try{l=await Pe.decryptFile(JSON.parse(c),a.passphrase)}catch{throw new g("recovery-failed",{step:"decrypt"})}try{Pe.validatePayload(l)}catch{throw new g("recovery-failed",{step:"validate"})}return y0(l,a.dest)},async plan(a){if(!a||typeof a!="object")throw new g("bad-input",{field:"request"});let c=ad(a.file);if(!c)throw new g("bad-input",{field:"file"});if(typeof a.passphrase!="string"||a.passphrase.length>0&&a.passphrase.length<b0)throw new g("bad-input",{field:"passphrase",min:b0});let l=null;try{l=JSON.parse(c)}catch{throw new g("recovery-failed",{step:"parse"})}let d=null;try{d=await Pe.decryptFile(l,a.passphrase)}catch{throw new g("recovery-failed",{step:"decrypt"})}try{Pe.validatePayload(d)}catch{throw new g("recovery-failed",{step:"validate"})}let u=d.moneroWallet||{},f=u.address||null;if(!f)throw new g("recovery-failed",{step:"address"});let p=[],h=!!u.spendHalf;h||p.push("spendable");let w=Number(u.restoreHeight)||0,b=null;try{let m=await e.json(t.route("swaps"));b=(Array.isArray(m)?m:m&&m.swaps||[]).find(x=>String(x&&x.address||"")===String(f))||null}catch{b=null}let T=Number(b&&b.restoreHeight)||0;T>0&&(w=T),w>0||p.push("restore-height");let B=!1,E=null,k=u.escrowAddress||d.escrow&&d.escrow.address||null;if(k&&typeof n=="function")try{let m=String(await n({to:k,data:SE})||""),A=m.startsWith("0x")?m.slice(2):m;/^[0-9a-fA-F]{64}$/.test(A)&&!/^0+$/.test(A)&&(B=!0,E="0x"+A.slice(24))}catch{B=!1}if(!B&&k&&t&&t.apiBase)try{let m=await e.json(t.route("revealedHalf"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({network:d.network,address:k})});B=!!(m&&m.ok&&m.revealed&&m.half),B&&(E=String(m.half))}catch{B=!1}return B||p.push("revealed-half"),{swapId:d.swapId||null,address:f,spendable:h,restoreHeight:w,steps:kE,revealedHalf:B,half:E,missing:p}},async keys(a){let c=await i.plan(a);if(!c.half)throw new g("bad-input",{field:"revealedHalf",why:"not-revealed"});let l=ad(a.file),d=null;try{d=await Pe.decryptFile(JSON.parse(l),a.passphrase)}catch{throw new g("recovery-failed",{step:"decrypt"})}let u=d.moneroWallet||{},p=["spendHalf","viewHalf","otherSpendPoint","otherViewHalf"].filter(h=>u[h]===void 0||u[h]===null||u[h]==="");if(p.length)throw new g("bad-input",{field:"payload",missing:p});try{let h=Tt.createHalves(ln),w=ds.spendKeysFromRevealedHalf({halves:h,ownSpendHalf:u.spendHalf,ownViewHalf:u.viewHalf,otherSpendPoint:u.otherSpendPoint,otherViewHalf:u.otherViewHalf,revealedHalf:c.half});return{privateSpendKey:w.privateSpendKey,privateViewKey:w.privateViewKey,address:c.address}}catch{throw new g("bad-input",{field:"revealedHalf",step:"verify"})}},async restore(a){return await w0(a||{})},async report(a){if(!a||typeof a.swapId!="string"||!a.swapId)throw new g("bad-input",{field:"swapId"});if(typeof a.txid!="string"||!a.txid)throw new g("bad-input",{field:"txid"});try{let c=await e.json(t.route("swept",{id:a.swapId}),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({txid:a.txid})});return{reported:!(c&&c.ok===!1)}}catch{return{reported:!1}}},async sign(a){let c=await i.plan(a);if(!a||typeof a.to!="string"||!a.to)throw new g("bad-input",{field:"to"});if(typeof a.connectWallet!="function")throw new g("bad-input",{field:"connectWallet"});let l=await a.connectWallet(c),u=["open","sync","unlockedBalance","sweepUnlocked","relay","close"].filter(f=>!l||typeof l[f]!="function");if(u.length)throw new g("bad-input",{field:"wallet",missing:u});await l.open(c);try{try{await l.sync()}catch{}let f=BigInt(await g0("unlockedBalance",()=>l.unlockedBalance()));if(f<=0n)throw new g("insufficient-funds",{unlocked:f.toString()});let p=await g0("sweepUnlocked",()=>l.sweepUnlocked({address:a.to,relay:!1})),h=await vE(l,p),w=h===null?null:BigInt(h),b="sweep-"+ ++o;return r.set(b,{wallet:l,plan:c,signed:p}),{token:b,amount:f.toString(),fee:h,receive:w===null||w>=f?null:(f-w).toString(),to:a.to,swept:c.address}}catch(f){try{await l.close()}catch{}throw f}},async relay(a){if(!a||typeof a.token!="string"||!a.token)throw new g("bad-input",{field:"token"});let c=r.get(a.token);if(!c)throw new g("bad-input",{field:"token",why:"no-open-session"});r.delete(a.token);let{wallet:l,plan:d,signed:u}=c;try{let f=await l.relay(u),p=Array.isArray(f)?f:[],h=d.swapId&&p.length?(await i.report({swapId:d.swapId,txid:p[0]})).reported:!1;return{txids:p,swept:d.address,reported:h}}finally{await l.close()}},async run(a){let c=await i.sign(a);return await i.relay({token:c.token})}};return i}var EE=e=>{let t=e&&typeof e=="object"?e:{},n=t.settlement&&typeof t.settlement=="object"?t.settlement:null;(!n||typeof n.chain!="string"||!n.chain)&&U("bad-input",{field:"settlement.chain"}),n.vm!==void 0&&(typeof n.vm!="string"||!n.vm)&&U("bad-input",{field:"settlement.vm"}),(typeof t.xmrNetwork!="string"||!t.xmrNetwork)&&U("bad-input",{field:"xmrNetwork"});let r=t.mode===void 0?"live":t.mode;if(r!=="live"&&r!=="sim"&&U("bad-input",{field:"mode",known:["live","sim"]}),t.storage!==void 0){let o=t.storage;o&&typeof o.get=="function"&&typeof o.set=="function"&&typeof o.remove=="function"||U("bad-input",{field:"storage"})}if(t.fetch!==void 0&&typeof t.fetch!="function"&&U("bad-input",{field:"fetch"}),t.now!==void 0&&typeof t.now!="function"&&U("bad-input",{field:"now"}),t.routing!==void 0){let o=t.routing;(!o||typeof o!="object"||o.prefer!==void 0&&!Array.isArray(o.prefer))&&U("bad-input",{field:"routing"})}if(t.routes!==void 0&&(!t.routes||typeof t.routes!="object"||Array.isArray(t.routes))&&U("bad-input",{field:"routes"}),t.endpoints!==void 0&&(!t.endpoints||typeof t.endpoints!="object"||Array.isArray(t.endpoints))&&U("bad-input",{field:"endpoints"}),t.nodes!==void 0&&!Array.isArray(t.nodes)&&(!t.nodes||typeof t.nodes!="object")&&U("bad-input",{field:"nodes"}),t.addNodes!==void 0&&!Array.isArray(t.addNodes)&&U("bad-input",{field:"addNodes"}),t.evmCall!==void 0&&typeof t.evmCall!="function"&&U("bad-input",{field:"evmCall"}),t.evmCode!==void 0&&typeof t.evmCode!="function"&&U("bad-input",{field:"evmCode"}),t.evmLogs!==void 0&&typeof t.evmLogs!="function"&&U("bad-input",{field:"evmLogs"}),t.allowedProviders!==void 0&&t.allowedProviders!==null){let o=t.allowedProviders;!Array.isArray(o)&&typeof o!="function"&&U("bad-input",{field:"allowedProviders"})}if(t.knownFactoryCodes!==void 0&&t.knownFactoryCodes!==null&&!Array.isArray(t.knownFactoryCodes)&&U("bad-input",{field:"knownFactoryCodes"}),t.knownImplementationCodes!==void 0&&t.knownImplementationCodes!==null&&!Array.isArray(t.knownImplementationCodes)&&U("bad-input",{field:"knownImplementationCodes"}),t.denylist!==void 0&&t.denylist!==null&&(!Array.isArray(t.denylist)||t.denylist.some(o=>typeof o!="string"))&&U("bad-input",{field:"denylist"}),t.serverAuth!==void 0&&typeof t.serverAuth!="function"&&U("bad-input",{field:"serverAuth"}),t.createRecord!==void 0&&typeof t.createRecord!="function"&&U("bad-input",{field:"createRecord"}),t.watch!==void 0){let o=t.watch;(!o||typeof o!="object"||Array.isArray(o))&&U("bad-input",{field:"watch"});for(let s of["pollMs","timeoutMs"])o[s]!==void 0&&!(Number.isFinite(Number(o[s]))&&Number(o[s])>0)&&U("bad-input",{field:"watch."+s})}return{settlement:{chain:n.chain,vm:n.vm},xmrNetwork:t.xmrNetwork,apiBase:typeof t.apiBase=="string"&&t.apiBase?t.apiBase:"/api",assetsBase:typeof t.assetsBase=="string"&&t.assetsBase?t.assetsBase:"/",mode:r,storage:t.storage||null,fetch:t.fetch||null,now:t.now||null,routing:t.routing||null,routes:t.routes||null,endpoints:t.endpoints||null,nodes:t.nodes===void 0?null:t.nodes,addNodes:t.addNodes===void 0?null:t.addNodes,evmCall:t.evmCall||null,evmCode:t.evmCode||null,evmLogs:t.evmLogs||null,allowedProviders:t.allowedProviders===void 0?null:t.allowedProviders,knownFactoryCodes:t.knownFactoryCodes===void 0?null:t.knownFactoryCodes,knownImplementationCodes:t.knownImplementationCodes===void 0?null:t.knownImplementationCodes,denylist:t.denylist===void 0?null:t.denylist,serverAuth:t.serverAuth||null,watch:t.watch||null,createRecord:t.createRecord||null}};function AE(e){let t=EE(e),n=Sw({settlement:t.settlement,xmrNetwork:t.xmrNetwork,apiBase:t.apiBase,assetsBase:t.assetsBase,mode:t.mode,routing:t.routing,routes:t.routes,endpoints:t.endpoints,watch:t.watch,nodes:t.nodes,addNodes:t.addNodes}),r=gr(n.settlement.vm),o=Hw({settlement:n.settlement.chain,leg:r}),s=Rw({config:{...n,evmNetwork:n.settlement.chain},wallet:o,limits:n.limits}),i=t.mode==="sim"?Dw():null;t.storage&&(Wt.setStorage(t.storage),Ho.setSessionStore(t.storage));let a=st({apiBase:n.apiBase,fetchImpl:t.fetch,timeoutMs:n.limits.httpTimeoutMs}),c=(()=>{let h=t.allowedProviders;if(h==null)return null;if(typeof h=="function")return b=>h(b)===!0;let w=new Set(h.map(b=>String(b).toLowerCase()));return b=>w.has(String(b).toLowerCase())})(),l=Array.isArray(t.denylist)&&t.denylist.length?new Set(t.denylist.map(h=>String(h).toLowerCase())):null,d=Ow({config:n,http:a,now:t.now||(()=>Date.now()),evmCall:t.evmCall||null,evmCode:t.evmCode||null,providerAllowed:c,knownFactoryCodes:t.knownFactoryCodes,knownImplementationCodes:t.knownImplementationCodes,denylist:l}),u=li({call:t.evmCall}),f=typeof t.evmCall=="function"?{call:t.evmCall}:{},p=typeof t.evmLogs=="function"?{logs:t.evmLogs}:{};return Object.freeze({config:n,wallet:o,preflight:s,recovery:Fw({http:a,config:n}),actions:u,order:{context:h=>Hn(h),verifyCounterparty:h=>Ww(h),jointAddress:h=>jw(h),status:h=>Qw(h,f),deadlines:h=>qw(h,f),decline:(h,w={})=>Jw(h,{...p,...w||{}})},sim:i,quotes:{watch:(h,w)=>d.watch(h,w),snapshot:()=>d.snapshot(),firm:h=>d.firm(h)},swaps:id({preflight:s,http:a,mode:t.mode,xmrNetwork:t.xmrNetwork,call:t.evmCall,logs:t.evmLogs||null,config:n,auth:t.serverAuth,denylist:l,watch:t.watch,createRecord:t.createRecord}),sweep:x0({http:a,config:n,call:t.evmCall})})}var k0=e=>typeof e=="string"&&/^0x[0-9a-f]+$/i.test(e)?Number.parseInt(e,16):null,NE=/^0x[0-9a-fA-F]{40}$/,TE=e=>"0x"+Number(e).toString(16),BE=4902,IE=e=>(e&&(e.code||e.data&&e.data.originalError&&e.data.originalError.code))===BE||/unrecognized chain|not added/i.test(String(e&&e.message||"")),S0=e=>e&&e.code===4001||/rejected|denied/i.test(String(e&&e.message||""));function OE(e,{id:t="evm"}={}){let n=[];return{vm:"evm",id:t,async connect({chainId:r=null}={}){try{await e.request({method:"eth_requestAccounts"})}catch(o){let s=o&&(o.code===4001||o.code==="ACTION_REJECTED"),i=new Error(s?"wallet-rejected":"wallet-not-connected");throw i.code=s?"wallet-rejected":"wallet-not-connected",i}Number.isFinite(r)&&k0(await e.request({method:"eth_chainId"}).catch(()=>null))!==Number(r)&&await this.switchChain(r)},async disconnect(){for(;n.length;){let[r,o]=n.pop();typeof e.removeListener=="function"&&e.removeListener(r,o)}},async address(){let r=await e.request({method:"eth_accounts"}).catch(()=>null),o=Array.isArray(r)?r[0]:null;return typeof o=="string"&&NE.test(o)?o:null},async chainId(){return k0(await e.request({method:"eth_chainId"}).catch(()=>null))},subscribe(r){if(typeof e.on!="function")return()=>{};for(let o of["accountsChanged","chainChanged"]){let s=()=>r();e.on(o,s),n.push([o,s])}return()=>{}},async switchChain(r){let o=Number(r),s=TE(o);try{await e.request({method:"wallet_switchEthereumChain",params:[{chainId:s}]})}catch(i){if(!IE(i))throw new g(S0(i)?"wallet-rejected":"wrong-chain",{vm:"evm"});let a=typeof te.chainByChainId=="function"?te.chainByChainId(o):null;if(!a)throw new g("wrong-chain",{vm:"evm",chainId:o});try{await e.request({method:"wallet_addEthereumChain",params:[{chainId:s,chainName:a.name,nativeCurrency:{name:a.native.symbol,symbol:a.native.symbol,decimals:a.native.decimals},rpcUrls:[a.rpcUrl],blockExplorerUrls:[a.explorerAddr]}]})}catch(c){throw new g(S0(c)?"wallet-rejected":"wrong-chain",{vm:"evm"})}}},async send({to:r,data:o="0x",value:s=0n,gas:i=null}){if(typeof r!="string"||!r)throw new g("bad-input",{field:"send.to"});let a=await e.request({method:"eth_accounts"}),c=Array.isArray(a)?a[0]:null;if(!c)throw new g("wallet-not-connected",{step:"send"});let l=u=>"0x"+BigInt(u).toString(16),d={from:c,to:r,data:o,value:l(s)};return i!=null&&(d.gas=l(i)),await e.request({method:"eth_sendTransaction",params:[d]})},async receipt(r){if(typeof r!="string"||!r)throw new g("bad-input",{field:"receipt.txHash"});return await e.request({method:"eth_getTransactionReceipt",params:[r]})},async signTypedData(r){if(!r||typeof r!="object")throw new g("bad-input",{field:"signTypedData"});let o=await e.request({method:"eth_accounts"}),s=Array.isArray(o)?o[0]:null;if(!s)throw new g("wallet-not-connected",{step:"signTypedData"});let i=await e.request({method:"eth_signTypedData_v4",params:[s,JSON.stringify(r)]});if(typeof i!="string"||!/^0x[0-9a-fA-F]{130}$/.test(i))throw new g("wallet-rejected",{step:"signTypedData",why:"bad-signature-shape"});return i},driver(){return e}}}function _E(e="ninsei.sdk"){let t=n=>e+"."+n;return{get(n){return localStorage.getItem(t(n))},set(n,r){localStorage.setItem(t(n),String(r))},remove(n){localStorage.removeItem(t(n))}}}function RE(e={}){let t=new Map(Object.entries(e));return{get:n=>t.has(n)?t.get(n):null,set:(n,r)=>t.set(n,String(r)),remove:n=>t.delete(n)}}export{Ls as CHECK_CODES,lr as ERROR_CODES,Hs as STEP_CODES,g as SdkError,AE as createNinsei,id as createSwaps,OE as evmWallet,_E as localStorageAdapter,RE as memoryAdapter,N0 as moneroWallet,al as moneroWalletAdapter};
|
|
3
|
+
/*! Bundled license information:
|
|
4
|
+
|
|
5
|
+
@noble/curves/utils.js:
|
|
6
|
+
@noble/curves/abstract/modular.js:
|
|
7
|
+
@noble/curves/abstract/curve.js:
|
|
8
|
+
@noble/curves/abstract/edwards.js:
|
|
9
|
+
@noble/curves/ed25519.js:
|
|
10
|
+
@noble/curves/abstract/der.js:
|
|
11
|
+
@noble/curves/abstract/weierstrass.js:
|
|
12
|
+
@noble/curves/secp256k1.js:
|
|
13
|
+
(*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
14
|
+
*/
|