@uniswap/universal-router-sdk 1.3.9 → 1.4.1

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.
@@ -3,9 +3,14 @@ import { Interface } from '@ethersproject/abi';
3
3
  import { BuyItem, NFTTrade } from '../NFTTrade';
4
4
  import { TradeConfig } from '../Command';
5
5
  import { RoutePlanner } from '../../utils/routerCommands';
6
+ export declare enum SeaportVersion {
7
+ V1_1 = 0,
8
+ V1_4 = 1
9
+ }
6
10
  export declare type SeaportData = {
7
11
  items: Order[];
8
12
  recipient: string;
13
+ version: SeaportVersion;
9
14
  };
10
15
  export declare type FulfillmentComponent = {
11
16
  orderIndex: BigNumberish;
@@ -50,6 +55,7 @@ export declare class SeaportTrade extends NFTTrade<SeaportData> {
50
55
  encode(planner: RoutePlanner, config: TradeConfig): void;
51
56
  getBuyItems(): BuyItem[];
52
57
  getTotalPrice(): BigNumber;
58
+ private commandMap;
53
59
  private getConsiderationFulfillments;
54
60
  private getAdvancedOrderParams;
55
61
  private calculateValue;
@@ -0,0 +1,4 @@
1
+ import { SeaportData } from '../../src/entities/protocols/seaport';
2
+ import { BigNumber } from 'ethers';
3
+ export declare const seaportV1_4Data: SeaportData;
4
+ export declare const seaportV1_4Value: BigNumber;
@@ -86,6 +86,7 @@ var CommandType;
86
86
  CommandType[CommandType["WRAP_ETH"] = 11] = "WRAP_ETH";
87
87
  CommandType[CommandType["UNWRAP_WETH"] = 12] = "UNWRAP_WETH";
88
88
  CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
89
+ CommandType[CommandType["SEAPORT_V1_4"] = 14] = "SEAPORT_V1_4";
89
90
  // NFT-related command types
90
91
  CommandType[CommandType["SEAPORT"] = 16] = "SEAPORT";
91
92
  CommandType[CommandType["LOOKS_RARE_721"] = 17] = "LOOKS_RARE_721";
@@ -103,8 +104,8 @@ var CommandType;
103
104
  var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details, address spender, uint256 sigDeadline)';
104
105
  var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details, address spender, uint256 sigDeadline)';
105
106
  var ALLOW_REVERT_FLAG = 0x80;
106
- var REVERTABLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.NFTX, CommandType.LOOKS_RARE_721, CommandType.LOOKS_RARE_1155, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.CRYPTOPUNKS]);
107
- var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[CommandType.PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM_BATCH] = ['bytes'], _ABI_DEFINITION[CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.SEAPORT] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.LOOKS_RARE_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.LOOKS_RARE_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION);
107
+ var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_721, CommandType.LOOKS_RARE_1155, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.CRYPTOPUNKS]);
108
+ var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[CommandType.PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM_BATCH] = ['bytes'], _ABI_DEFINITION[CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.SEAPORT] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.LOOKS_RARE_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.LOOKS_RARE_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION);
108
109
  var RoutePlanner = /*#__PURE__*/function () {
109
110
  function RoutePlanner() {
110
111
  this.commands = '0x';
@@ -118,7 +119,7 @@ var RoutePlanner = /*#__PURE__*/function () {
118
119
  var command = createCommand(type, parameters);
119
120
  this.inputs.push(command.encodedInput);
120
121
  if (allowRevert) {
121
- if (!REVERTABLE_COMMANDS.has(command.type)) {
122
+ if (!REVERTIBLE_COMMANDS.has(command.type)) {
122
123
  throw new Error("command type: " + command.type + " cannot be allowed to revert");
123
124
  }
124
125
  command.type = command.type | ALLOW_REVERT_FLAG;
@@ -139,7 +140,7 @@ var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(chainId) {
139
140
  switch (chainId) {
140
141
  case 1:
141
142
  // mainnet
142
- return '0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B';
143
+ return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5';
143
144
  case 5:
144
145
  // goerli
145
146
  return '0x4648a43B2C14Da09FdF82B161150d3F634f40491';
@@ -6985,6 +6986,10 @@ var abi$4 = [
6985
6986
  }
6986
6987
  ];
6987
6988
 
6989
+ (function (SeaportVersion) {
6990
+ SeaportVersion[SeaportVersion["V1_1"] = 0] = "V1_1";
6991
+ SeaportVersion[SeaportVersion["V1_4"] = 1] = "V1_4";
6992
+ })(exports.SeaportVersion || (exports.SeaportVersion = {}));
6988
6993
  var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
6989
6994
  _inheritsLoose(SeaportTrade, _NFTTrade);
6990
6995
  function SeaportTrade(orders) {
@@ -7014,7 +7019,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
7014
7019
  } else {
7015
7020
  calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAvailableAdvancedOrders', [advancedOrders, [], orderFulfillments, considerationFulFillments, SeaportTrade.OPENSEA_CONDUIT_KEY, order.recipient, 100]);
7016
7021
  }
7017
- planner.addCommand(CommandType.SEAPORT, [this.getTotalPrice().toString(), calldata], config.allowRevert);
7022
+ planner.addCommand(this.commandMap(order.version), [this.getTotalPrice().toString(), calldata], config.allowRevert);
7018
7023
  }
7019
7024
  };
7020
7025
  _proto.getBuyItems = function getBuyItems() {
@@ -7046,6 +7051,14 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
7046
7051
  }
7047
7052
  return totalPrice;
7048
7053
  };
7054
+ _proto.commandMap = function commandMap(version) {
7055
+ switch (version) {
7056
+ case exports.SeaportVersion.V1_1:
7057
+ return CommandType.SEAPORT;
7058
+ case exports.SeaportVersion.V1_4:
7059
+ return CommandType.SEAPORT_V1_4;
7060
+ }
7061
+ };
7049
7062
  _proto.getConsiderationFulfillments = function getConsiderationFulfillments(protocolDatas) {
7050
7063
  var considerationFulfillments = [];
7051
7064
  var considerationRecipients = [];
@@ -1 +1 @@
1
- {"version":3,"file":"universal-router-sdk.cjs.development.js","sources":["../src/entities/Command.ts","../src/utils/routerCommands.ts","../src/utils/constants.ts","../src/entities/protocols/uniswap.ts","../src/utils/permit2.ts","../src/swapRouter.ts","../src/entities/NFTTrade.ts","../src/entities/protocols/cryptopunk.ts","../src/entities/protocols/foundation.ts","../src/entities/protocols/looksRare.ts","../src/entities/protocols/nft20.ts","../src/entities/protocols/nftx.ts","../src/entities/protocols/seaport.ts","../src/entities/protocols/sudoswap.ts","../src/entities/protocols/x2y2.ts","../src/entities/protocols/unwrapWETH.ts"],"sourcesContent":["import { RoutePlanner } from '../utils/routerCommands'\n\nexport type TradeConfig = {\n allowRevert: boolean\n}\n\nexport enum RouterTradeType {\n UniswapTrade = 'UniswapTrade',\n NFTTrade = 'NFTTrade',\n UnwrapWETH = 'UnwrapWETH',\n}\n\n// interface for entities that can be encoded as a Universal Router command\nexport interface Command {\n tradeType: RouterTradeType\n encode(planner: RoutePlanner, config: TradeConfig): void\n}\n","import { defaultAbiCoder } from 'ethers/lib/utils'\n\n/**\n * CommandTypes\n * @description Flags that modify a command's execution\n * @enum {number}\n */\nexport enum CommandType {\n V3_SWAP_EXACT_IN = 0x00,\n V3_SWAP_EXACT_OUT = 0x01,\n PERMIT2_TRANSFER_FROM = 0x02,\n PERMIT2_PERMIT_BATCH = 0x03,\n SWEEP = 0x04,\n TRANSFER = 0x05,\n PAY_PORTION = 0x06,\n\n V2_SWAP_EXACT_IN = 0x08,\n V2_SWAP_EXACT_OUT = 0x09,\n PERMIT = 0x0a,\n WRAP_ETH = 0x0b,\n UNWRAP_WETH = 0x0c,\n PERMIT2_TRANSFER_FROM_BATCH = 0x0d,\n\n // NFT-related command types\n SEAPORT = 0x10,\n LOOKS_RARE_721 = 0x11,\n NFTX = 0x12,\n CRYPTOPUNKS = 0x13,\n LOOKS_RARE_1155 = 0x14,\n OWNER_CHECK_721 = 0x15,\n OWNER_CHECK_1155 = 0x16,\n\n X2Y2_721 = 0x18,\n SUDOSWAP = 0x19,\n NFT20 = 0x1a,\n X2Y2_1155 = 0x1b,\n FOUNDATION = 0x1c,\n}\n\nconst PERMIT_STRUCT =\n '((address token,uint160 amount,uint48 expiration,uint48 nonce) details, address spender, uint256 sigDeadline)'\n\nconst PERMIT_BATCH_STRUCT =\n '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details, address spender, uint256 sigDeadline)'\n\nconst ALLOW_REVERT_FLAG = 0x80\n\nconst REVERTABLE_COMMANDS = new Set<CommandType>([\n CommandType.SEAPORT,\n CommandType.NFTX,\n CommandType.LOOKS_RARE_721,\n CommandType.LOOKS_RARE_1155,\n CommandType.X2Y2_721,\n CommandType.X2Y2_1155,\n CommandType.FOUNDATION,\n CommandType.SUDOSWAP,\n CommandType.NFT20,\n CommandType.CRYPTOPUNKS,\n])\n\nconst ABI_DEFINITION: { [key in CommandType]: string[] } = {\n [CommandType.PERMIT]: [PERMIT_STRUCT, 'bytes'],\n [CommandType.PERMIT2_PERMIT_BATCH]: [PERMIT_BATCH_STRUCT, 'bytes'],\n [CommandType.PERMIT2_TRANSFER_FROM]: ['address', 'address', 'uint160'],\n [CommandType.PERMIT2_TRANSFER_FROM_BATCH]: ['bytes'],\n [CommandType.TRANSFER]: ['address', 'address', 'uint256'],\n [CommandType.V3_SWAP_EXACT_IN]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],\n [CommandType.V3_SWAP_EXACT_OUT]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],\n [CommandType.V2_SWAP_EXACT_IN]: ['address', 'uint256', 'uint256', 'address[]', 'bool'],\n [CommandType.V2_SWAP_EXACT_OUT]: ['address', 'uint256', 'uint256', 'address[]', 'bool'],\n [CommandType.SEAPORT]: ['uint256', 'bytes'],\n [CommandType.WRAP_ETH]: ['address', 'uint256'],\n [CommandType.UNWRAP_WETH]: ['address', 'uint256'],\n [CommandType.SWEEP]: ['address', 'address', 'uint256'],\n [CommandType.NFTX]: ['uint256', 'bytes'],\n [CommandType.LOOKS_RARE_721]: ['uint256', 'bytes', 'address', 'address', 'uint256'],\n [CommandType.LOOKS_RARE_1155]: ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'],\n [CommandType.X2Y2_721]: ['uint256', 'bytes', 'address', 'address', 'uint256'],\n [CommandType.X2Y2_1155]: ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'],\n [CommandType.FOUNDATION]: ['uint256', 'bytes', 'address', 'address', 'uint256'],\n [CommandType.PAY_PORTION]: ['address', 'address', 'uint256'],\n [CommandType.SUDOSWAP]: ['uint256', 'bytes'],\n [CommandType.OWNER_CHECK_721]: ['address', 'address', 'uint256'],\n [CommandType.OWNER_CHECK_1155]: ['address', 'address', 'uint256', 'uint256'],\n [CommandType.NFT20]: ['uint256', 'bytes'],\n [CommandType.CRYPTOPUNKS]: ['uint256', 'address', 'uint256'],\n}\n\nexport class RoutePlanner {\n commands: string\n inputs: string[]\n\n constructor() {\n this.commands = '0x'\n this.inputs = []\n }\n\n addCommand(type: CommandType, parameters: any[], allowRevert = false): void {\n let command = createCommand(type, parameters)\n this.inputs.push(command.encodedInput)\n if (allowRevert) {\n if (!REVERTABLE_COMMANDS.has(command.type)) {\n throw new Error(`command type: ${command.type} cannot be allowed to revert`)\n }\n command.type = command.type | ALLOW_REVERT_FLAG\n }\n\n this.commands = this.commands.concat(command.type.toString(16).padStart(2, '0'))\n }\n}\n\nexport type RouterCommand = {\n type: CommandType\n encodedInput: string\n}\n\nexport function createCommand(type: CommandType, parameters: any[]): RouterCommand {\n const encodedInput = defaultAbiCoder.encode(ABI_DEFINITION[type], parameters)\n return { type, encodedInput }\n}\n","import { BigNumber } from 'ethers'\n\nexport const UNIVERSAL_ROUTER_ADDRESS = (chainId: number): string => {\n switch (chainId) {\n case 1: // mainnet\n return '0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B'\n case 5: // goerli\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 137: // polygon\n return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5'\n case 80001: // polygon mumbai\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 10: // optimism\n return '0xb555edF5dcF85f42cEeF1f3630a52A108E55A654'\n case 420: // optimism goerli\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 42161: // arbitrum\n return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5'\n case 421613: // arbitrum goerli\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 42220: // celo\n return '0xC73d61d192FB994157168Fb56730FdEc64C9Cb8F'\n case 44787: // celo alfajores\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 56: // binance smart chain\n return '0x5Dc88340E1c5c6366864Ee415d6034cadd1A9897'\n default:\n throw new Error(`Universal Router not deployed on chain ${chainId}`)\n }\n}\n\nexport const WETH_ADDRESS = (chainId: number): string => {\n switch (chainId) {\n case 1: //mainnet\n return '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'\n case 5: // goerli\n return '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6'\n case 137: // polygon\n return '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'\n case 80001: // polygon mumbai\n return '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889'\n case 10: // optimism\n return '0x4200000000000000000000000000000000000006'\n case 420: // optimism goerli\n return '0x4200000000000000000000000000000000000006'\n case 42161: // arbitrum\n return '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'\n case 421613: // arbitrum goerli\n return '0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3'\n case 56: // binance smart chain\n return '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'\n default:\n throw new Error(`WETH9 or UniversalRouter not deployed on chain ${chainId}`)\n }\n}\n\nexport const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3'\n\nexport const CONTRACT_BALANCE = BigNumber.from(2).pow(255)\nexport const ETH_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport const SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001'\nexport const ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002'\n","import JSBI from 'jsbi'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { Trade as V2Trade, Pair } from '@uniswap/v2-sdk'\nimport { Trade as V3Trade, Pool, encodeRouteToPath } from '@uniswap/v3-sdk'\nimport {\n Trade as RouterTrade,\n MixedRouteTrade,\n Protocol,\n IRoute,\n RouteV2,\n RouteV3,\n MixedRouteSDK,\n MixedRoute,\n SwapOptions as RouterSwapOptions,\n getOutputOfPools,\n encodeMixedRouteToPath,\n partitionMixedRouteByProtocol,\n} from '@uniswap/router-sdk'\nimport { Permit2Permit } from '../../utils/permit2'\nimport { Currency, TradeType, CurrencyAmount, Percent } from '@uniswap/sdk-core'\nimport { Command, RouterTradeType, TradeConfig } from '../Command'\nimport { SENDER_AS_RECIPIENT, ROUTER_AS_RECIPIENT, CONTRACT_BALANCE } from '../../utils/constants'\n\n// the existing router permit object doesn't include enough data for permit2\n// so we extend swap options with the permit2 permit\nexport type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit'> & {\n inputTokenPermit?: Permit2Permit\n}\n\nconst REFUND_ETH_PRICE_IMPACT_THRESHOLD = new Percent(JSBI.BigInt(50), JSBI.BigInt(100))\n\ninterface Swap<TInput extends Currency, TOutput extends Currency> {\n route: IRoute<TInput, TOutput, Pair | Pool>\n inputAmount: CurrencyAmount<TInput>\n outputAmount: CurrencyAmount<TOutput>\n}\n\n// Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router\n// also translates trade objects from previous (v2, v3) SDKs\nexport class UniswapTrade implements Command {\n readonly tradeType: RouterTradeType = RouterTradeType.UniswapTrade\n constructor(public trade: RouterTrade<Currency, Currency, TradeType>, public options: SwapOptions) {}\n\n encode(planner: RoutePlanner, _config: TradeConfig): void {\n let payerIsUser = true\n if (this.trade.inputAmount.currency.isNative) {\n // TODO: optimize if only one v2 pool we can directly send this to the pool\n planner.addCommand(CommandType.WRAP_ETH, [\n ROUTER_AS_RECIPIENT,\n this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString(),\n ])\n // since WETH is now owned by the router, the router pays for inputs\n payerIsUser = false\n }\n this.options.recipient = this.options.recipient ?? SENDER_AS_RECIPIENT\n\n // flag for whether we want to perform slippage check on aggregate output of multiple routes\n // 1. when there are >2 exact input trades. this is only a heuristic,\n // as it's still more gas-expensive even in this case, but has benefits\n // in that the reversion probability is lower\n const performAggregatedSlippageCheck =\n this.trade.tradeType === TradeType.EXACT_INPUT && this.trade.routes.length > 2\n const outputIsNative = this.trade.outputAmount.currency.isNative\n const inputIsNative = this.trade.inputAmount.currency.isNative\n const routerMustCustody = performAggregatedSlippageCheck || outputIsNative\n\n for (const swap of this.trade.swaps) {\n switch (swap.route.protocol) {\n case Protocol.V2:\n addV2Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody)\n break\n case Protocol.V3:\n addV3Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody)\n break\n case Protocol.MIXED:\n addMixedSwap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody)\n break\n default:\n throw new Error('UNSUPPORTED_TRADE_PROTOCOL')\n }\n }\n\n if (routerMustCustody) {\n if (outputIsNative) {\n planner.addCommand(CommandType.UNWRAP_WETH, [\n this.options.recipient,\n this.trade.minimumAmountOut(this.options.slippageTolerance).quotient.toString(),\n ])\n } else {\n planner.addCommand(CommandType.SWEEP, [\n this.trade.outputAmount.currency.wrapped.address,\n this.options.recipient,\n this.trade.minimumAmountOut(this.options.slippageTolerance).quotient.toString(),\n ])\n }\n }\n\n if (inputIsNative && (this.trade.tradeType === TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade))) {\n // for exactOutput swaps that take native currency as input\n // we need to send back the change to the user\n planner.addCommand(CommandType.UNWRAP_WETH, [this.options.recipient, 0])\n }\n }\n}\n\n// encode a uniswap v2 swap\nfunction addV2Swap<TInput extends Currency, TOutput extends Currency>(\n planner: RoutePlanner,\n { route, inputAmount, outputAmount }: Swap<TInput, TOutput>,\n tradeType: TradeType,\n options: SwapOptions,\n payerIsUser: boolean,\n routerMustCustody: boolean\n): void {\n const trade = new V2Trade(\n route as RouteV2<TInput, TOutput>,\n tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount,\n tradeType\n )\n\n if (tradeType == TradeType.EXACT_INPUT) {\n planner.addCommand(CommandType.V2_SWAP_EXACT_IN, [\n // if native, we have to unwrap so keep in the router for now\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n route.path.map((pool) => pool.address),\n payerIsUser,\n ])\n } else if (tradeType == TradeType.EXACT_OUTPUT) {\n planner.addCommand(CommandType.V2_SWAP_EXACT_OUT, [\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n route.path.map((pool) => pool.address),\n payerIsUser,\n ])\n }\n}\n\n// encode a uniswap v3 swap\nfunction addV3Swap<TInput extends Currency, TOutput extends Currency>(\n planner: RoutePlanner,\n { route, inputAmount, outputAmount }: Swap<TInput, TOutput>,\n tradeType: TradeType,\n options: SwapOptions,\n payerIsUser: boolean,\n routerMustCustody: boolean\n): void {\n const trade = V3Trade.createUncheckedTrade({\n route: route as RouteV3<TInput, TOutput>,\n inputAmount,\n outputAmount,\n tradeType,\n })\n\n const path = encodeRouteToPath(route as RouteV3<TInput, TOutput>, trade.tradeType === TradeType.EXACT_OUTPUT)\n if (tradeType == TradeType.EXACT_INPUT) {\n planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n path,\n payerIsUser,\n ])\n } else if (tradeType == TradeType.EXACT_OUTPUT) {\n planner.addCommand(CommandType.V3_SWAP_EXACT_OUT, [\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n path,\n payerIsUser,\n ])\n }\n}\n\n// encode a mixed route swap, i.e. including both v2 and v3 pools\nfunction addMixedSwap<TInput extends Currency, TOutput extends Currency>(\n planner: RoutePlanner,\n swap: Swap<TInput, TOutput>,\n tradeType: TradeType,\n options: SwapOptions,\n payerIsUser: boolean,\n routerMustCustody: boolean\n): void {\n const { route, inputAmount, outputAmount } = swap\n const tradeRecipient = routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient\n\n // single hop, so it can be reduced to plain v2 or v3 swap logic\n if (route.pools.length === 1) {\n if (route.pools[0] instanceof Pool) {\n return addV3Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody)\n } else if (route.pools[0] instanceof Pair) {\n return addV2Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody)\n } else {\n throw new Error('Invalid route type')\n }\n }\n\n const trade = MixedRouteTrade.createUncheckedTrade({\n route: route as MixedRoute<TInput, TOutput>,\n inputAmount,\n outputAmount,\n tradeType,\n })\n\n const amountIn = trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient.toString()\n const amountOut = trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient.toString()\n\n // logic from\n // https://github.com/Uniswap/router-sdk/blob/d8eed164e6c79519983844ca8b6a3fc24ebcb8f8/src/swapRouter.ts#L276\n const sections = partitionMixedRouteByProtocol(route as MixedRoute<TInput, TOutput>)\n const isLastSectionInRoute = (i: number) => {\n return i === sections.length - 1\n }\n\n let outputToken\n let inputToken = route.input.wrapped\n\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i]\n /// Now, we get output of this section\n outputToken = getOutputOfPools(section, inputToken)\n\n const newRouteOriginal = new MixedRouteSDK(\n [...section],\n section[0].token0.equals(inputToken) ? section[0].token0 : section[0].token1,\n outputToken\n )\n const newRoute = new MixedRoute(newRouteOriginal)\n\n /// Previous output is now input\n inputToken = outputToken\n\n const mixedRouteIsAllV3 = (route: MixedRouteSDK<Currency, Currency>) => {\n return route.pools.every((pool) => pool instanceof Pool)\n }\n\n if (mixedRouteIsAllV3(newRoute)) {\n const path: string = encodeMixedRouteToPath(newRoute)\n\n planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [\n // if not last section: send tokens directly to the first v2 pair of the next section\n // note: because of the partitioning function we can be sure that the next section is v2\n isLastSectionInRoute(i) ? tradeRecipient : (sections[i + 1][0] as Pair).liquidityToken.address,\n i == 0 ? amountIn : CONTRACT_BALANCE, // amountIn\n !isLastSectionInRoute(i) ? 0 : amountOut, // amountOut\n path, // path\n payerIsUser && i === 0, // payerIsUser\n ])\n } else {\n planner.addCommand(CommandType.V2_SWAP_EXACT_IN, [\n isLastSectionInRoute(i) ? tradeRecipient : ROUTER_AS_RECIPIENT, // recipient\n i === 0 ? amountIn : CONTRACT_BALANCE, // amountIn\n !isLastSectionInRoute(i) ? 0 : amountOut, // amountOutMin\n newRoute.path.map((pool) => pool.address), // path\n payerIsUser && i === 0,\n ])\n }\n }\n}\n\n// if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap\nfunction riskOfPartialFill(trade: RouterTrade<Currency, Currency, TradeType>): boolean {\n return trade.priceImpact.greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD)\n}\n","import { ethers } from 'ethers'\nimport { PermitSingle } from '@uniswap/permit2-sdk'\nimport { CommandType, RoutePlanner } from './routerCommands'\n\nexport interface Permit2Permit extends PermitSingle {\n signature: string\n}\n\nconst SIGNATURE_LENGTH = 65\nconst EIP_2098_SIGNATURE_LENGTH = 64\n\nexport function encodePermit(planner: RoutePlanner, permit: Permit2Permit): void {\n let signature = permit.signature\n\n const length = ethers.utils.arrayify(permit.signature).length\n // signature data provided for EIP-1271 may have length different from ECDSA signature\n if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {\n // sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id\n signature = ethers.utils.joinSignature(ethers.utils.splitSignature(permit.signature))\n }\n\n planner.addCommand(CommandType.PERMIT, [permit, signature])\n}\n","import invariant from 'tiny-invariant'\nimport { abi } from '@uniswap/universal-router/artifacts/contracts/UniversalRouter.sol/UniversalRouter.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { MethodParameters } from '@uniswap/v3-sdk'\nimport { Trade as RouterTrade } from '@uniswap/router-sdk'\nimport { Currency, TradeType } from '@uniswap/sdk-core'\nimport { Command, RouterTradeType } from './entities/Command'\nimport { NFTTrade, SupportedProtocolsData } from './entities/NFTTrade'\nimport { UniswapTrade, SwapOptions } from './entities/protocols/uniswap'\nimport { UnwrapWETH } from './entities/protocols/unwrapWETH'\nimport { CommandType, RoutePlanner } from './utils/routerCommands'\nimport { encodePermit } from './utils/permit2'\nimport { ROUTER_AS_RECIPIENT, SENDER_AS_RECIPIENT, ETH_ADDRESS } from './utils/constants'\n\nexport type SwapRouterConfig = {\n sender?: string // address\n deadline?: BigNumberish\n}\n\ntype SupportedNFTTrade = NFTTrade<SupportedProtocolsData>\n\nexport abstract class SwapRouter {\n public static INTERFACE: Interface = new Interface(abi)\n\n public static swapCallParameters(trades: Command[] | Command, config: SwapRouterConfig = {}): MethodParameters {\n if (!Array.isArray(trades)) trades = [trades]\n\n const nftTrades = trades.filter((trade, _, []) => trade.hasOwnProperty('market')) as SupportedNFTTrade[]\n const allowRevert = nftTrades.length == 1 && nftTrades[0].orders.length == 1 ? false : true\n const planner = new RoutePlanner()\n\n // track value flow to require the right amount of native value\n let currentNativeValueInRouter = BigNumber.from(0)\n let transactionValue = BigNumber.from(0)\n\n for (const trade of trades) {\n /**\n * is NFTTrade\n */\n if (trade.tradeType == RouterTradeType.NFTTrade) {\n const nftTrade = trade as SupportedNFTTrade\n nftTrade.encode(planner, { allowRevert })\n const tradePrice = nftTrade.getTotalPrice()\n\n // send enough native value to contract for NFT purchase\n if (currentNativeValueInRouter.lt(tradePrice)) {\n transactionValue = transactionValue.add(tradePrice.sub(currentNativeValueInRouter))\n currentNativeValueInRouter = BigNumber.from(0)\n } else {\n currentNativeValueInRouter = currentNativeValueInRouter.sub(tradePrice)\n }\n /**\n * is Uniswap Trade\n */\n } else if (trade.tradeType == RouterTradeType.UniswapTrade) {\n const uniswapTrade = trade as UniswapTrade\n const inputIsNative = uniswapTrade.trade.inputAmount.currency.isNative\n const outputIsNative = uniswapTrade.trade.outputAmount.currency.isNative\n const swapOptions = uniswapTrade.options\n\n invariant(!(inputIsNative && !!swapOptions.inputTokenPermit), 'NATIVE_INPUT_PERMIT')\n\n if (!!swapOptions.inputTokenPermit) {\n encodePermit(planner, swapOptions.inputTokenPermit)\n }\n\n if (inputIsNative) {\n transactionValue = transactionValue.add(\n BigNumber.from(uniswapTrade.trade.maximumAmountIn(swapOptions.slippageTolerance).quotient.toString())\n )\n }\n // track amount of native currency in the router\n if (outputIsNative && swapOptions.recipient == ROUTER_AS_RECIPIENT) {\n currentNativeValueInRouter = currentNativeValueInRouter.add(\n BigNumber.from(uniswapTrade.trade.minimumAmountOut(swapOptions.slippageTolerance).quotient.toString())\n )\n }\n uniswapTrade.encode(planner, { allowRevert: false })\n /**\n * is UnwrapWETH\n */\n } else if (trade.tradeType == RouterTradeType.UnwrapWETH) {\n const UnwrapWETH = trade as UnwrapWETH\n trade.encode(planner, { allowRevert: false })\n currentNativeValueInRouter = currentNativeValueInRouter.add(UnwrapWETH.amount)\n /**\n * else\n */\n } else {\n throw 'trade must be of instance: UniswapTrade or NFTTrade'\n }\n }\n\n // TODO: matches current logic for now, but should eventually only sweep for multiple NFT trades\n // or NFT trades with potential slippage (i.e. sudo)\n if (nftTrades.length > 0) planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0])\n return SwapRouter.encodePlan(planner, transactionValue, config)\n }\n\n /**\n * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given swap.\n * @param trades to produce call parameters for\n */\n public static swapNFTCallParameters(trades: SupportedNFTTrade[], config: SwapRouterConfig = {}): MethodParameters {\n let planner = new RoutePlanner()\n let totalPrice = BigNumber.from(0)\n\n const allowRevert = trades.length == 1 && trades[0].orders.length == 1 ? false : true\n\n for (const trade of trades) {\n trade.encode(planner, { allowRevert })\n totalPrice = totalPrice.add(trade.getTotalPrice())\n }\n\n planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0])\n return SwapRouter.encodePlan(planner, totalPrice, config)\n }\n\n /**\n * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trades to produce call parameters for\n * @param options options for the call parameters\n */\n public static swapERC20CallParameters(\n trades: RouterTrade<Currency, Currency, TradeType>,\n options: SwapOptions\n ): MethodParameters {\n // TODO: use permit if signature included in swapOptions\n const planner = new RoutePlanner()\n\n const trade: UniswapTrade = new UniswapTrade(trades, options)\n\n const inputCurrency = trade.trade.inputAmount.currency\n invariant(!(inputCurrency.isNative && !!options.inputTokenPermit), 'NATIVE_INPUT_PERMIT')\n\n if (options.inputTokenPermit) {\n encodePermit(planner, options.inputTokenPermit)\n }\n\n const nativeCurrencyValue = inputCurrency.isNative\n ? BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString())\n : BigNumber.from(0)\n\n trade.encode(planner, { allowRevert: false })\n return SwapRouter.encodePlan(planner, nativeCurrencyValue, {\n deadline: options.deadlineOrPreviousBlockhash ? BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,\n })\n return SwapRouter.encodePlan(planner, nativeCurrencyValue)\n }\n\n /**\n * Encodes a planned route into a method name and parameters for the Router contract.\n * @param planner the planned route\n * @param nativeCurrencyValue the native currency value of the planned route\n * @param config the router config\n */\n private static encodePlan(\n planner: RoutePlanner,\n nativeCurrencyValue: BigNumber,\n config: SwapRouterConfig = {}\n ): MethodParameters {\n const { commands, inputs } = planner\n const functionSignature = !!config.deadline ? 'execute(bytes,bytes[],uint256)' : 'execute(bytes,bytes[])'\n const parameters = !!config.deadline ? [commands, inputs, config.deadline] : [commands, inputs]\n const calldata = SwapRouter.INTERFACE.encodeFunctionData(functionSignature, parameters)\n return { calldata, value: nativeCurrencyValue.toHexString() }\n }\n}\n","import invariant from 'tiny-invariant'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { SeaportData } from './protocols/seaport'\nimport { FoundationData } from './protocols/foundation'\nimport { NFTXData } from './protocols/nftx'\nimport { NFT20Data } from './protocols/nft20'\nimport { RoutePlanner } from '../utils/routerCommands'\nimport { Command, RouterTradeType, TradeConfig } from './Command'\nimport { LooksRareData } from './protocols/looksRare'\nimport { SudoswapData } from './protocols/sudoswap'\nimport { CryptopunkData } from './protocols/cryptopunk'\nimport { X2Y2Data } from './protocols/x2y2'\n\nexport type SupportedProtocolsData =\n | SeaportData\n | FoundationData\n | NFTXData\n | LooksRareData\n | X2Y2Data\n | CryptopunkData\n | NFT20Data\n | SudoswapData\n\nexport abstract class NFTTrade<T> implements Command {\n readonly tradeType: RouterTradeType = RouterTradeType.NFTTrade\n readonly orders: T[]\n readonly market: Market\n\n constructor(market: Market, orders: T[]) {\n invariant(orders.length > 0, 'no buy Items')\n this.market = market\n this.orders = orders\n }\n\n abstract encode(planner: RoutePlanner, config: TradeConfig): void\n\n abstract getBuyItems(): BuyItem[]\n\n abstract getTotalPrice(): BigNumber\n}\n\nexport type BuyItem = {\n tokenAddress: string\n tokenId: BigNumberish\n tokenType: TokenType\n amount?: BigNumberish // for 1155\n}\n\nexport enum Market {\n Foundation = 'foundation',\n LooksRare = 'looksrare',\n NFT20 = 'nft20',\n NFTX = 'nftx',\n Seaport = 'seaport',\n Sudoswap = 'Sudoswap',\n Cryptopunks = 'cryptopunks',\n X2Y2 = 'x2y2',\n}\n\nexport enum TokenType {\n ERC721 = 'ERC721',\n ERC1155 = 'ERC1155',\n Cryptopunk = 'Cryptopunk',\n}\n","import { TradeConfig } from '../Command'\nimport { NFTTrade, Market, TokenType, BuyItem } from '../NFTTrade'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type CryptopunkData = {\n tokenId: BigNumberish\n recipient: string\n value: BigNumberish\n}\n\nexport class CryptopunkTrade extends NFTTrade<CryptopunkData> {\n public static CRYPTOPUNK_ADDRESS: string = '0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb'\n\n constructor(orders: CryptopunkData[]) {\n super(Market.Cryptopunks, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n planner.addCommand(CommandType.CRYPTOPUNKS, [item.tokenId, item.recipient, item.value], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: CryptopunkTrade.CRYPTOPUNK_ADDRESS,\n tokenId: item.tokenId,\n tokenType: TokenType.Cryptopunk,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.value)\n }\n return total\n }\n}\n","import abi from '../../../abis/Foundation.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type FoundationData = {\n recipient: string\n tokenAddress: string\n tokenId: BigNumberish\n price: BigNumberish\n referrer: string // address\n}\n\nexport class FoundationTrade extends NFTTrade<FoundationData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: FoundationData[]) {\n super(Market.Foundation, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n const calldata = FoundationTrade.INTERFACE.encodeFunctionData('buyV2', [\n item.tokenAddress,\n item.tokenId,\n item.price,\n item.referrer,\n ])\n planner.addCommand(\n CommandType.FOUNDATION,\n [item.price, calldata, item.recipient, item.tokenAddress, item.tokenId],\n config.allowRevert\n )\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: item.tokenAddress,\n tokenId: item.tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.price)\n }\n return total\n }\n}\n","import invariant from 'tiny-invariant'\nimport abi from '../../../abis/LooksRare.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type MakerOrder = {\n collection: string\n tokenId: BigNumberish\n isOrderAsk: true\n signer: string\n strategy: string\n currency: string\n amount: BigNumberish\n price: BigNumberish\n minPercentageToAsk: BigNumberish\n nonce: BigNumberish\n startTime: BigNumberish\n endTime: BigNumberish\n v: BigNumberish\n r: string\n s: string\n params: string\n}\n\nexport type TakerOrder = {\n minPercentageToAsk: BigNumberish\n price: BigNumberish\n taker: string\n tokenId: BigNumberish\n isOrderAsk: boolean\n params: string\n}\n\nexport type LooksRareData = {\n makerOrder: MakerOrder\n takerOrder: TakerOrder\n recipient: string\n tokenType: TokenType\n}\n\nexport class LooksRareTrade extends NFTTrade<LooksRareData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: LooksRareData[]) {\n super(Market.LooksRare, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n const calldata = LooksRareTrade.INTERFACE.encodeFunctionData('matchAskWithTakerBidUsingETHAndWETH', [\n item.takerOrder,\n item.makerOrder,\n ])\n\n if (item.tokenType == TokenType.ERC721) {\n invariant(item.makerOrder.amount == 1, 'ERC721 token amount must be 1')\n planner.addCommand(\n CommandType.LOOKS_RARE_721,\n [item.makerOrder.price, calldata, item.recipient, item.makerOrder.collection, item.makerOrder.tokenId],\n config.allowRevert\n )\n } else if (item.tokenType == TokenType.ERC1155) {\n planner.addCommand(\n CommandType.LOOKS_RARE_1155,\n [\n item.makerOrder.price,\n calldata,\n item.recipient,\n item.makerOrder.collection,\n item.makerOrder.tokenId,\n item.makerOrder.amount,\n ],\n config.allowRevert\n )\n }\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: item.makerOrder.collection,\n tokenId: item.makerOrder.tokenId,\n tokenType: item.tokenType,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.makerOrder.price)\n }\n return total\n }\n}\n","import abi from '../../../abis/NFT20.json'\nimport { Interface } from '@ethersproject/abi'\nimport { TradeConfig } from '../Command'\nimport { NFTTrade, Market, TokenType, BuyItem } from '../NFTTrade'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type NFT20Data = {\n tokenAddress: string\n tokenIds: BigNumberish[]\n tokenAmounts: BigNumberish[]\n recipient: string\n fee: BigNumberish\n isV3: boolean\n value: BigNumberish\n}\n\nexport class NFT20Trade extends NFTTrade<NFT20Data> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: NFT20Data[]) {\n super(Market.NFT20, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n const calldata = NFT20Trade.INTERFACE.encodeFunctionData('ethForNft', [\n order.tokenAddress,\n order.tokenIds,\n order.tokenAmounts,\n order.recipient,\n order.fee,\n order.isV3,\n ])\n planner.addCommand(CommandType.NFT20, [order.value, calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const pool of this.orders) {\n for (const tokenId of pool.tokenIds) {\n buyItems.push({\n tokenAddress: pool.tokenAddress,\n tokenId: tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n }\n\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.value)\n }\n return total\n }\n}\n","import abi from '../../../abis/NFTXZap.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { Ether } from '@uniswap/sdk-core'\n\nexport type NFTXData = {\n recipient: string\n vaultAddress: string\n vaultId: BigNumberish\n tokenAddress: string\n tokenIds: BigNumberish[]\n value: BigNumber\n}\n\nexport class NFTXTrade extends NFTTrade<NFTXData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: NFTXData[]) {\n super(Market.NFTX, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n const calldata = NFTXTrade.INTERFACE.encodeFunctionData('buyAndRedeem', [\n order.vaultId,\n order.tokenIds.length,\n order.tokenIds,\n [Ether.onChain(1).wrapped.address, order.vaultAddress],\n order.recipient,\n ])\n planner.addCommand(CommandType.NFTX, [order.value, calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const order of this.orders) {\n for (const tokenId of order.tokenIds) {\n buyItems.push({\n tokenAddress: order.tokenAddress,\n tokenId: tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.value)\n }\n return total\n }\n}\n","import abi from '../../../abis/Seaport.json'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\n\nexport type SeaportData = {\n items: Order[]\n recipient: string // address\n}\n\nexport type FulfillmentComponent = {\n orderIndex: BigNumberish\n itemIndex: BigNumberish\n}\n\nexport type OfferItem = {\n itemType: BigNumberish // enum\n token: string // address\n identifierOrCriteria: BigNumberish\n startAmount: BigNumberish\n endAmount: BigNumberish\n}\n\nexport type ConsiderationItem = OfferItem & {\n recipient: string\n}\n\nexport type Order = {\n parameters: OrderParameters\n signature: string\n}\n\ntype OrderParameters = {\n offerer: string // address,\n offer: OfferItem[]\n consideration: ConsiderationItem[]\n orderType: BigNumberish // enum\n startTime: BigNumberish\n endTime: BigNumberish\n zoneHash: string // bytes32\n zone: string // address\n salt: BigNumberish\n conduitKey: string // bytes32,\n totalOriginalConsiderationItems: BigNumberish\n}\n\nexport type AdvancedOrder = Order & {\n numerator: BigNumber // uint120\n denominator: BigNumber // uint120\n extraData: string // bytes\n}\n\nexport class SeaportTrade extends NFTTrade<SeaportData> {\n public static INTERFACE: Interface = new Interface(abi)\n public static OPENSEA_CONDUIT_KEY: string = '0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000'\n\n constructor(orders: SeaportData[]) {\n super(Market.Seaport, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n let advancedOrders: AdvancedOrder[] = []\n let orderFulfillments: FulfillmentComponent[][] = order.items.map((_, index) => [\n { orderIndex: index, itemIndex: 0 },\n ])\n let considerationFulFillments: FulfillmentComponent[][] = this.getConsiderationFulfillments(order.items)\n\n for (const item of order.items) {\n const { advancedOrder } = this.getAdvancedOrderParams(item)\n advancedOrders.push(advancedOrder)\n }\n\n let calldata: string\n if (advancedOrders.length == 1) {\n calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAdvancedOrder', [\n advancedOrders[0],\n [],\n SeaportTrade.OPENSEA_CONDUIT_KEY,\n order.recipient,\n ])\n } else {\n calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAvailableAdvancedOrders', [\n advancedOrders,\n [],\n orderFulfillments,\n considerationFulFillments,\n SeaportTrade.OPENSEA_CONDUIT_KEY,\n order.recipient,\n 100, // TODO: look into making this a better number\n ])\n }\n planner.addCommand(CommandType.SEAPORT, [this.getTotalPrice().toString(), calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const order of this.orders) {\n for (const item of order.items) {\n for (const offer of item.parameters.offer) {\n buyItems.push({\n tokenAddress: offer.token,\n tokenId: offer.identifierOrCriteria,\n tokenType: TokenType.ERC721,\n })\n }\n }\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let totalPrice = BigNumber.from(0)\n for (const order of this.orders) {\n for (const item of order.items) {\n totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration))\n }\n }\n return totalPrice\n }\n\n private getConsiderationFulfillments(protocolDatas: Order[]): FulfillmentComponent[][] {\n let considerationFulfillments: FulfillmentComponent[][] = []\n const considerationRecipients: string[] = []\n\n for (const i in protocolDatas) {\n const protocolData = protocolDatas[i]\n\n for (const j in protocolData.parameters.consideration) {\n const item = protocolData.parameters.consideration[j]\n\n if (considerationRecipients.findIndex((x) => x === item.recipient) === -1) {\n considerationRecipients.push(item.recipient)\n }\n\n const recipientIndex = considerationRecipients.findIndex((x) => x === item.recipient)\n\n if (!considerationFulfillments[recipientIndex]) {\n considerationFulfillments.push([\n {\n orderIndex: i,\n itemIndex: j,\n },\n ])\n } else {\n considerationFulfillments[recipientIndex].push({\n orderIndex: i,\n itemIndex: j,\n })\n }\n }\n }\n return considerationFulfillments\n }\n\n private getAdvancedOrderParams(data: Order): { advancedOrder: AdvancedOrder; value: BigNumber } {\n const advancedOrder = {\n parameters: data.parameters,\n numerator: BigNumber.from('1'),\n denominator: BigNumber.from('1'),\n signature: data.signature,\n extraData: '0x00',\n }\n const value = this.calculateValue(data.parameters.consideration)\n return { advancedOrder, value }\n }\n\n private calculateValue(considerations: ConsiderationItem[]): BigNumber {\n return considerations.reduce(\n (amt: BigNumber, consideration: ConsiderationItem) => amt.add(consideration.startAmount),\n BigNumber.from(0)\n )\n }\n}\n","import abi from '../../../abis/Sudoswap.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\ntype PairSwap = {\n swapInfo: {\n pair: string // address\n nftIds: BigNumberish[]\n }\n tokenAddress: string // address\n maxCost: BigNumberish\n}\n\nexport type SudoswapData = {\n swaps: PairSwap[]\n nftRecipient: string\n ethRecipient: string\n deadline: BigNumberish\n}\n\nexport class SudoswapTrade extends NFTTrade<SudoswapData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: SudoswapData[]) {\n super(Market.Sudoswap, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n const calldata = SudoswapTrade.INTERFACE.encodeFunctionData('robustSwapETHForSpecificNFTs', [\n order.swaps.map((swap) => {\n return { swapInfo: swap.swapInfo, maxCost: swap.maxCost }\n }),\n order.ethRecipient,\n order.nftRecipient,\n order.deadline,\n ])\n const value = order.swaps.reduce((prevVal, swap) => {\n return prevVal.add(swap.maxCost)\n }, BigNumber.from(0))\n planner.addCommand(CommandType.SUDOSWAP, [value, calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const order of this.orders) {\n for (const swap of order.swaps) {\n for (const tokenId of swap.swapInfo.nftIds) {\n buyItems.push({\n tokenAddress: swap.tokenAddress,\n tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n }\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const order of this.orders) {\n for (const swap of order.swaps) {\n total = total.add(swap.maxCost)\n }\n }\n return total\n }\n}\n","import abi from '../../../abis/X2Y2.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\ntype X2Y2PartialData = {\n signedInput: string\n recipient: string\n tokenAddress: string\n tokenId: BigNumberish\n price: BigNumberish\n}\n\nexport type X2Y2_721_Data = X2Y2PartialData & {\n tokenType: TokenType.ERC721\n}\n\nexport type X2Y2_1155_Data = X2Y2PartialData & {\n tokenType: TokenType.ERC1155\n tokenAmount: BigNumberish\n}\n\nexport type X2Y2Data = X2Y2_721_Data | X2Y2_1155_Data\n\nexport class X2Y2Trade extends NFTTrade<X2Y2Data> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: X2Y2Data[]) {\n super(Market.X2Y2, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n const functionSelector = X2Y2Trade.INTERFACE.getSighash(X2Y2Trade.INTERFACE.getFunction('run'))\n const calldata = functionSelector + item.signedInput.slice(2)\n\n if (item.tokenType == TokenType.ERC721) {\n planner.addCommand(\n CommandType.X2Y2_721,\n [item.price, calldata, item.recipient, item.tokenAddress, item.tokenId],\n config.allowRevert\n )\n } else if (item.tokenType == TokenType.ERC1155) {\n planner.addCommand(\n CommandType.X2Y2_1155,\n [item.price, calldata, item.recipient, item.tokenAddress, item.tokenId, item.tokenAmount],\n config.allowRevert\n )\n }\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: item.tokenAddress,\n tokenId: item.tokenId,\n tokenType: item.tokenType,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.price)\n }\n return total\n }\n}\n","import invariant from 'tiny-invariant'\nimport { BigNumberish } from 'ethers'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { Permit2Permit } from '../../utils/permit2'\nimport { Command, RouterTradeType, TradeConfig } from '../Command'\nimport { encodePermit } from '../../utils/permit2'\nimport { ROUTER_AS_RECIPIENT, UNIVERSAL_ROUTER_ADDRESS, WETH_ADDRESS } from '../../utils/constants'\n\nexport class UnwrapWETH implements Command {\n readonly tradeType: RouterTradeType = RouterTradeType.UnwrapWETH\n readonly permit2Data: Permit2Permit\n readonly wethAddress: string\n readonly routerAddress: string\n readonly amount: BigNumberish\n\n constructor(amount: BigNumberish, chainId: number, permit2?: Permit2Permit) {\n this.wethAddress = WETH_ADDRESS(chainId)\n this.routerAddress = UNIVERSAL_ROUTER_ADDRESS(chainId)\n this.amount = amount\n\n if (!!permit2) {\n invariant(permit2.details.token === this.wethAddress, `must be permitting WETH address: ${this.wethAddress}`)\n invariant(permit2.details.amount >= amount, `Did not permit enough WETH for unwrapWETH transaction`)\n this.permit2Data = permit2\n }\n }\n\n encode(planner: RoutePlanner, _: TradeConfig): void {\n if (!!this.permit2Data) encodePermit(planner, this.permit2Data)\n planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [this.wethAddress, this.routerAddress, this.amount])\n planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, this.amount])\n }\n}\n"],"names":["RouterTradeType","CommandType","PERMIT_STRUCT","PERMIT_BATCH_STRUCT","ALLOW_REVERT_FLAG","REVERTABLE_COMMANDS","Set","SEAPORT","NFTX","LOOKS_RARE_721","LOOKS_RARE_1155","X2Y2_721","X2Y2_1155","FOUNDATION","SUDOSWAP","NFT20","CRYPTOPUNKS","ABI_DEFINITION","PERMIT","PERMIT2_PERMIT_BATCH","PERMIT2_TRANSFER_FROM","PERMIT2_TRANSFER_FROM_BATCH","TRANSFER","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT","V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","WRAP_ETH","UNWRAP_WETH","SWEEP","PAY_PORTION","OWNER_CHECK_721","OWNER_CHECK_1155","RoutePlanner","commands","inputs","addCommand","type","parameters","allowRevert","command","createCommand","push","encodedInput","has","Error","concat","toString","padStart","defaultAbiCoder","encode","UNIVERSAL_ROUTER_ADDRESS","chainId","WETH_ADDRESS","PERMIT2_ADDRESS","CONTRACT_BALANCE","BigNumber","from","pow","ETH_ADDRESS","SENDER_AS_RECIPIENT","ROUTER_AS_RECIPIENT","REFUND_ETH_PRICE_IMPACT_THRESHOLD","Percent","JSBI","BigInt","UniswapTrade","trade","options","planner","_config","payerIsUser","inputAmount","currency","isNative","maximumAmountIn","slippageTolerance","quotient","recipient","performAggregatedSlippageCheck","tradeType","TradeType","EXACT_INPUT","routes","length","outputIsNative","outputAmount","inputIsNative","routerMustCustody","swaps","swap","route","protocol","Protocol","V2","addV2Swap","V3","addV3Swap","MIXED","addMixedSwap","minimumAmountOut","wrapped","address","EXACT_OUTPUT","riskOfPartialFill","V2Trade","path","map","pool","V3Trade","createUncheckedTrade","encodeRouteToPath","tradeRecipient","pools","Pool","Pair","MixedRouteTrade","amountIn","amountOut","sections","partitionMixedRouteByProtocol","isLastSectionInRoute","i","outputToken","inputToken","input","section","getOutputOfPools","newRouteOriginal","MixedRouteSDK","token0","equals","token1","newRoute","MixedRoute","mixedRouteIsAllV3","every","encodeMixedRouteToPath","liquidityToken","priceImpact","greaterThan","SIGNATURE_LENGTH","EIP_2098_SIGNATURE_LENGTH","encodePermit","permit","signature","ethers","utils","arrayify","joinSignature","splitSignature","SwapRouter","swapCallParameters","trades","config","Array","isArray","nftTrades","filter","_","hasOwnProperty","orders","currentNativeValueInRouter","transactionValue","NFTTrade","nftTrade","tradePrice","getTotalPrice","lt","add","sub","uniswapTrade","swapOptions","inputTokenPermit","invariant","UnwrapWETH","amount","encodePlan","swapNFTCallParameters","totalPrice","swapERC20CallParameters","inputCurrency","nativeCurrencyValue","deadline","deadlineOrPreviousBlockhash","undefined","functionSignature","calldata","INTERFACE","encodeFunctionData","value","toHexString","Interface","abi","market","Market","TokenType","CryptopunkTrade","Cryptopunks","item","tokenId","getBuyItems","buyItems","tokenAddress","CRYPTOPUNK_ADDRESS","tokenType","Cryptopunk","total","FoundationTrade","Foundation","price","referrer","ERC721","LooksRareTrade","LooksRare","takerOrder","makerOrder","collection","ERC1155","NFT20Trade","order","tokenIds","tokenAmounts","fee","isV3","NFTXTrade","vaultId","Ether","onChain","vaultAddress","SeaportTrade","Seaport","advancedOrders","orderFulfillments","items","index","orderIndex","itemIndex","considerationFulFillments","getConsiderationFulfillments","getAdvancedOrderParams","advancedOrder","OPENSEA_CONDUIT_KEY","offer","token","identifierOrCriteria","calculateValue","consideration","protocolDatas","considerationFulfillments","considerationRecipients","protocolData","j","findIndex","x","recipientIndex","data","numerator","denominator","extraData","considerations","reduce","amt","startAmount","SudoswapTrade","Sudoswap","swapInfo","maxCost","ethRecipient","nftRecipient","prevVal","nftIds","X2Y2Trade","X2Y2","functionSelector","getSighash","getFunction","signedInput","slice","tokenAmount","permit2","wethAddress","routerAddress","details","permit2Data"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"universal-router-sdk.cjs.development.js","sources":["../src/entities/Command.ts","../src/utils/routerCommands.ts","../src/utils/constants.ts","../src/entities/protocols/uniswap.ts","../src/utils/permit2.ts","../src/swapRouter.ts","../src/entities/NFTTrade.ts","../src/entities/protocols/cryptopunk.ts","../src/entities/protocols/foundation.ts","../src/entities/protocols/looksRare.ts","../src/entities/protocols/nft20.ts","../src/entities/protocols/nftx.ts","../src/entities/protocols/seaport.ts","../src/entities/protocols/sudoswap.ts","../src/entities/protocols/x2y2.ts","../src/entities/protocols/unwrapWETH.ts"],"sourcesContent":["import { RoutePlanner } from '../utils/routerCommands'\n\nexport type TradeConfig = {\n allowRevert: boolean\n}\n\nexport enum RouterTradeType {\n UniswapTrade = 'UniswapTrade',\n NFTTrade = 'NFTTrade',\n UnwrapWETH = 'UnwrapWETH',\n}\n\n// interface for entities that can be encoded as a Universal Router command\nexport interface Command {\n tradeType: RouterTradeType\n encode(planner: RoutePlanner, config: TradeConfig): void\n}\n","import { defaultAbiCoder } from 'ethers/lib/utils'\n\n/**\n * CommandTypes\n * @description Flags that modify a command's execution\n * @enum {number}\n */\nexport enum CommandType {\n V3_SWAP_EXACT_IN = 0x00,\n V3_SWAP_EXACT_OUT = 0x01,\n PERMIT2_TRANSFER_FROM = 0x02,\n PERMIT2_PERMIT_BATCH = 0x03,\n SWEEP = 0x04,\n TRANSFER = 0x05,\n PAY_PORTION = 0x06,\n\n V2_SWAP_EXACT_IN = 0x08,\n V2_SWAP_EXACT_OUT = 0x09,\n PERMIT = 0x0a,\n WRAP_ETH = 0x0b,\n UNWRAP_WETH = 0x0c,\n PERMIT2_TRANSFER_FROM_BATCH = 0x0d,\n SEAPORT_V1_4 = 0x0e,\n\n // NFT-related command types\n SEAPORT = 0x10,\n LOOKS_RARE_721 = 0x11,\n NFTX = 0x12,\n CRYPTOPUNKS = 0x13,\n LOOKS_RARE_1155 = 0x14,\n OWNER_CHECK_721 = 0x15,\n OWNER_CHECK_1155 = 0x16,\n\n X2Y2_721 = 0x18,\n SUDOSWAP = 0x19,\n NFT20 = 0x1a,\n X2Y2_1155 = 0x1b,\n FOUNDATION = 0x1c,\n}\n\nconst PERMIT_STRUCT =\n '((address token,uint160 amount,uint48 expiration,uint48 nonce) details, address spender, uint256 sigDeadline)'\n\nconst PERMIT_BATCH_STRUCT =\n '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details, address spender, uint256 sigDeadline)'\n\nconst ALLOW_REVERT_FLAG = 0x80\n\nconst REVERTIBLE_COMMANDS = new Set<CommandType>([\n CommandType.SEAPORT,\n CommandType.SEAPORT_V1_4,\n CommandType.NFTX,\n CommandType.LOOKS_RARE_721,\n CommandType.LOOKS_RARE_1155,\n CommandType.X2Y2_721,\n CommandType.X2Y2_1155,\n CommandType.FOUNDATION,\n CommandType.SUDOSWAP,\n CommandType.NFT20,\n CommandType.CRYPTOPUNKS,\n])\n\nconst ABI_DEFINITION: { [key in CommandType]: string[] } = {\n [CommandType.PERMIT]: [PERMIT_STRUCT, 'bytes'],\n [CommandType.PERMIT2_PERMIT_BATCH]: [PERMIT_BATCH_STRUCT, 'bytes'],\n [CommandType.PERMIT2_TRANSFER_FROM]: ['address', 'address', 'uint160'],\n [CommandType.PERMIT2_TRANSFER_FROM_BATCH]: ['bytes'],\n [CommandType.TRANSFER]: ['address', 'address', 'uint256'],\n [CommandType.V3_SWAP_EXACT_IN]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],\n [CommandType.V3_SWAP_EXACT_OUT]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],\n [CommandType.V2_SWAP_EXACT_IN]: ['address', 'uint256', 'uint256', 'address[]', 'bool'],\n [CommandType.V2_SWAP_EXACT_OUT]: ['address', 'uint256', 'uint256', 'address[]', 'bool'],\n [CommandType.SEAPORT]: ['uint256', 'bytes'],\n [CommandType.SEAPORT_V1_4]: ['uint256', 'bytes'],\n [CommandType.WRAP_ETH]: ['address', 'uint256'],\n [CommandType.UNWRAP_WETH]: ['address', 'uint256'],\n [CommandType.SWEEP]: ['address', 'address', 'uint256'],\n [CommandType.NFTX]: ['uint256', 'bytes'],\n [CommandType.LOOKS_RARE_721]: ['uint256', 'bytes', 'address', 'address', 'uint256'],\n [CommandType.LOOKS_RARE_1155]: ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'],\n [CommandType.X2Y2_721]: ['uint256', 'bytes', 'address', 'address', 'uint256'],\n [CommandType.X2Y2_1155]: ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'],\n [CommandType.FOUNDATION]: ['uint256', 'bytes', 'address', 'address', 'uint256'],\n [CommandType.PAY_PORTION]: ['address', 'address', 'uint256'],\n [CommandType.SUDOSWAP]: ['uint256', 'bytes'],\n [CommandType.OWNER_CHECK_721]: ['address', 'address', 'uint256'],\n [CommandType.OWNER_CHECK_1155]: ['address', 'address', 'uint256', 'uint256'],\n [CommandType.NFT20]: ['uint256', 'bytes'],\n [CommandType.CRYPTOPUNKS]: ['uint256', 'address', 'uint256'],\n}\n\nexport class RoutePlanner {\n commands: string\n inputs: string[]\n\n constructor() {\n this.commands = '0x'\n this.inputs = []\n }\n\n addCommand(type: CommandType, parameters: any[], allowRevert = false): void {\n let command = createCommand(type, parameters)\n this.inputs.push(command.encodedInput)\n if (allowRevert) {\n if (!REVERTIBLE_COMMANDS.has(command.type)) {\n throw new Error(`command type: ${command.type} cannot be allowed to revert`)\n }\n command.type = command.type | ALLOW_REVERT_FLAG\n }\n\n this.commands = this.commands.concat(command.type.toString(16).padStart(2, '0'))\n }\n}\n\nexport type RouterCommand = {\n type: CommandType\n encodedInput: string\n}\n\nexport function createCommand(type: CommandType, parameters: any[]): RouterCommand {\n const encodedInput = defaultAbiCoder.encode(ABI_DEFINITION[type], parameters)\n return { type, encodedInput }\n}\n","import { BigNumber } from 'ethers'\n\nexport const UNIVERSAL_ROUTER_ADDRESS = (chainId: number): string => {\n switch (chainId) {\n case 1: // mainnet\n return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5'\n case 5: // goerli\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 137: // polygon\n return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5'\n case 80001: // polygon mumbai\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 10: // optimism\n return '0xb555edF5dcF85f42cEeF1f3630a52A108E55A654'\n case 420: // optimism goerli\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 42161: // arbitrum\n return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5'\n case 421613: // arbitrum goerli\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 42220: // celo\n return '0xC73d61d192FB994157168Fb56730FdEc64C9Cb8F'\n case 44787: // celo alfajores\n return '0x4648a43B2C14Da09FdF82B161150d3F634f40491'\n case 56: // binance smart chain\n return '0x5Dc88340E1c5c6366864Ee415d6034cadd1A9897'\n default:\n throw new Error(`Universal Router not deployed on chain ${chainId}`)\n }\n}\n\nexport const WETH_ADDRESS = (chainId: number): string => {\n switch (chainId) {\n case 1: //mainnet\n return '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'\n case 5: // goerli\n return '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6'\n case 137: // polygon\n return '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'\n case 80001: // polygon mumbai\n return '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889'\n case 10: // optimism\n return '0x4200000000000000000000000000000000000006'\n case 420: // optimism goerli\n return '0x4200000000000000000000000000000000000006'\n case 42161: // arbitrum\n return '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'\n case 421613: // arbitrum goerli\n return '0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3'\n case 56: // binance smart chain\n return '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'\n default:\n throw new Error(`WETH9 or UniversalRouter not deployed on chain ${chainId}`)\n }\n}\n\nexport const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3'\n\nexport const CONTRACT_BALANCE = BigNumber.from(2).pow(255)\nexport const ETH_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport const SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001'\nexport const ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002'\n","import JSBI from 'jsbi'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { Trade as V2Trade, Pair } from '@uniswap/v2-sdk'\nimport { Trade as V3Trade, Pool, encodeRouteToPath } from '@uniswap/v3-sdk'\nimport {\n Trade as RouterTrade,\n MixedRouteTrade,\n Protocol,\n IRoute,\n RouteV2,\n RouteV3,\n MixedRouteSDK,\n MixedRoute,\n SwapOptions as RouterSwapOptions,\n getOutputOfPools,\n encodeMixedRouteToPath,\n partitionMixedRouteByProtocol,\n} from '@uniswap/router-sdk'\nimport { Permit2Permit } from '../../utils/permit2'\nimport { Currency, TradeType, CurrencyAmount, Percent } from '@uniswap/sdk-core'\nimport { Command, RouterTradeType, TradeConfig } from '../Command'\nimport { SENDER_AS_RECIPIENT, ROUTER_AS_RECIPIENT, CONTRACT_BALANCE } from '../../utils/constants'\n\n// the existing router permit object doesn't include enough data for permit2\n// so we extend swap options with the permit2 permit\nexport type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit'> & {\n inputTokenPermit?: Permit2Permit\n}\n\nconst REFUND_ETH_PRICE_IMPACT_THRESHOLD = new Percent(JSBI.BigInt(50), JSBI.BigInt(100))\n\ninterface Swap<TInput extends Currency, TOutput extends Currency> {\n route: IRoute<TInput, TOutput, Pair | Pool>\n inputAmount: CurrencyAmount<TInput>\n outputAmount: CurrencyAmount<TOutput>\n}\n\n// Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router\n// also translates trade objects from previous (v2, v3) SDKs\nexport class UniswapTrade implements Command {\n readonly tradeType: RouterTradeType = RouterTradeType.UniswapTrade\n constructor(public trade: RouterTrade<Currency, Currency, TradeType>, public options: SwapOptions) {}\n\n encode(planner: RoutePlanner, _config: TradeConfig): void {\n let payerIsUser = true\n if (this.trade.inputAmount.currency.isNative) {\n // TODO: optimize if only one v2 pool we can directly send this to the pool\n planner.addCommand(CommandType.WRAP_ETH, [\n ROUTER_AS_RECIPIENT,\n this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString(),\n ])\n // since WETH is now owned by the router, the router pays for inputs\n payerIsUser = false\n }\n this.options.recipient = this.options.recipient ?? SENDER_AS_RECIPIENT\n\n // flag for whether we want to perform slippage check on aggregate output of multiple routes\n // 1. when there are >2 exact input trades. this is only a heuristic,\n // as it's still more gas-expensive even in this case, but has benefits\n // in that the reversion probability is lower\n const performAggregatedSlippageCheck =\n this.trade.tradeType === TradeType.EXACT_INPUT && this.trade.routes.length > 2\n const outputIsNative = this.trade.outputAmount.currency.isNative\n const inputIsNative = this.trade.inputAmount.currency.isNative\n const routerMustCustody = performAggregatedSlippageCheck || outputIsNative\n\n for (const swap of this.trade.swaps) {\n switch (swap.route.protocol) {\n case Protocol.V2:\n addV2Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody)\n break\n case Protocol.V3:\n addV3Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody)\n break\n case Protocol.MIXED:\n addMixedSwap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody)\n break\n default:\n throw new Error('UNSUPPORTED_TRADE_PROTOCOL')\n }\n }\n\n if (routerMustCustody) {\n if (outputIsNative) {\n planner.addCommand(CommandType.UNWRAP_WETH, [\n this.options.recipient,\n this.trade.minimumAmountOut(this.options.slippageTolerance).quotient.toString(),\n ])\n } else {\n planner.addCommand(CommandType.SWEEP, [\n this.trade.outputAmount.currency.wrapped.address,\n this.options.recipient,\n this.trade.minimumAmountOut(this.options.slippageTolerance).quotient.toString(),\n ])\n }\n }\n\n if (inputIsNative && (this.trade.tradeType === TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade))) {\n // for exactOutput swaps that take native currency as input\n // we need to send back the change to the user\n planner.addCommand(CommandType.UNWRAP_WETH, [this.options.recipient, 0])\n }\n }\n}\n\n// encode a uniswap v2 swap\nfunction addV2Swap<TInput extends Currency, TOutput extends Currency>(\n planner: RoutePlanner,\n { route, inputAmount, outputAmount }: Swap<TInput, TOutput>,\n tradeType: TradeType,\n options: SwapOptions,\n payerIsUser: boolean,\n routerMustCustody: boolean\n): void {\n const trade = new V2Trade(\n route as RouteV2<TInput, TOutput>,\n tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount,\n tradeType\n )\n\n if (tradeType == TradeType.EXACT_INPUT) {\n planner.addCommand(CommandType.V2_SWAP_EXACT_IN, [\n // if native, we have to unwrap so keep in the router for now\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n route.path.map((pool) => pool.address),\n payerIsUser,\n ])\n } else if (tradeType == TradeType.EXACT_OUTPUT) {\n planner.addCommand(CommandType.V2_SWAP_EXACT_OUT, [\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n route.path.map((pool) => pool.address),\n payerIsUser,\n ])\n }\n}\n\n// encode a uniswap v3 swap\nfunction addV3Swap<TInput extends Currency, TOutput extends Currency>(\n planner: RoutePlanner,\n { route, inputAmount, outputAmount }: Swap<TInput, TOutput>,\n tradeType: TradeType,\n options: SwapOptions,\n payerIsUser: boolean,\n routerMustCustody: boolean\n): void {\n const trade = V3Trade.createUncheckedTrade({\n route: route as RouteV3<TInput, TOutput>,\n inputAmount,\n outputAmount,\n tradeType,\n })\n\n const path = encodeRouteToPath(route as RouteV3<TInput, TOutput>, trade.tradeType === TradeType.EXACT_OUTPUT)\n if (tradeType == TradeType.EXACT_INPUT) {\n planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n path,\n payerIsUser,\n ])\n } else if (tradeType == TradeType.EXACT_OUTPUT) {\n planner.addCommand(CommandType.V3_SWAP_EXACT_OUT, [\n routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,\n trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),\n trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),\n path,\n payerIsUser,\n ])\n }\n}\n\n// encode a mixed route swap, i.e. including both v2 and v3 pools\nfunction addMixedSwap<TInput extends Currency, TOutput extends Currency>(\n planner: RoutePlanner,\n swap: Swap<TInput, TOutput>,\n tradeType: TradeType,\n options: SwapOptions,\n payerIsUser: boolean,\n routerMustCustody: boolean\n): void {\n const { route, inputAmount, outputAmount } = swap\n const tradeRecipient = routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient\n\n // single hop, so it can be reduced to plain v2 or v3 swap logic\n if (route.pools.length === 1) {\n if (route.pools[0] instanceof Pool) {\n return addV3Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody)\n } else if (route.pools[0] instanceof Pair) {\n return addV2Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody)\n } else {\n throw new Error('Invalid route type')\n }\n }\n\n const trade = MixedRouteTrade.createUncheckedTrade({\n route: route as MixedRoute<TInput, TOutput>,\n inputAmount,\n outputAmount,\n tradeType,\n })\n\n const amountIn = trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient.toString()\n const amountOut = trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient.toString()\n\n // logic from\n // https://github.com/Uniswap/router-sdk/blob/d8eed164e6c79519983844ca8b6a3fc24ebcb8f8/src/swapRouter.ts#L276\n const sections = partitionMixedRouteByProtocol(route as MixedRoute<TInput, TOutput>)\n const isLastSectionInRoute = (i: number) => {\n return i === sections.length - 1\n }\n\n let outputToken\n let inputToken = route.input.wrapped\n\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i]\n /// Now, we get output of this section\n outputToken = getOutputOfPools(section, inputToken)\n\n const newRouteOriginal = new MixedRouteSDK(\n [...section],\n section[0].token0.equals(inputToken) ? section[0].token0 : section[0].token1,\n outputToken\n )\n const newRoute = new MixedRoute(newRouteOriginal)\n\n /// Previous output is now input\n inputToken = outputToken\n\n const mixedRouteIsAllV3 = (route: MixedRouteSDK<Currency, Currency>) => {\n return route.pools.every((pool) => pool instanceof Pool)\n }\n\n if (mixedRouteIsAllV3(newRoute)) {\n const path: string = encodeMixedRouteToPath(newRoute)\n\n planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [\n // if not last section: send tokens directly to the first v2 pair of the next section\n // note: because of the partitioning function we can be sure that the next section is v2\n isLastSectionInRoute(i) ? tradeRecipient : (sections[i + 1][0] as Pair).liquidityToken.address,\n i == 0 ? amountIn : CONTRACT_BALANCE, // amountIn\n !isLastSectionInRoute(i) ? 0 : amountOut, // amountOut\n path, // path\n payerIsUser && i === 0, // payerIsUser\n ])\n } else {\n planner.addCommand(CommandType.V2_SWAP_EXACT_IN, [\n isLastSectionInRoute(i) ? tradeRecipient : ROUTER_AS_RECIPIENT, // recipient\n i === 0 ? amountIn : CONTRACT_BALANCE, // amountIn\n !isLastSectionInRoute(i) ? 0 : amountOut, // amountOutMin\n newRoute.path.map((pool) => pool.address), // path\n payerIsUser && i === 0,\n ])\n }\n }\n}\n\n// if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap\nfunction riskOfPartialFill(trade: RouterTrade<Currency, Currency, TradeType>): boolean {\n return trade.priceImpact.greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD)\n}\n","import { ethers } from 'ethers'\nimport { PermitSingle } from '@uniswap/permit2-sdk'\nimport { CommandType, RoutePlanner } from './routerCommands'\n\nexport interface Permit2Permit extends PermitSingle {\n signature: string\n}\n\nconst SIGNATURE_LENGTH = 65\nconst EIP_2098_SIGNATURE_LENGTH = 64\n\nexport function encodePermit(planner: RoutePlanner, permit: Permit2Permit): void {\n let signature = permit.signature\n\n const length = ethers.utils.arrayify(permit.signature).length\n // signature data provided for EIP-1271 may have length different from ECDSA signature\n if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {\n // sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id\n signature = ethers.utils.joinSignature(ethers.utils.splitSignature(permit.signature))\n }\n\n planner.addCommand(CommandType.PERMIT, [permit, signature])\n}\n","import invariant from 'tiny-invariant'\nimport { abi } from '@uniswap/universal-router/artifacts/contracts/UniversalRouter.sol/UniversalRouter.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { MethodParameters } from '@uniswap/v3-sdk'\nimport { Trade as RouterTrade } from '@uniswap/router-sdk'\nimport { Currency, TradeType } from '@uniswap/sdk-core'\nimport { Command, RouterTradeType } from './entities/Command'\nimport { NFTTrade, SupportedProtocolsData } from './entities/NFTTrade'\nimport { UniswapTrade, SwapOptions } from './entities/protocols/uniswap'\nimport { UnwrapWETH } from './entities/protocols/unwrapWETH'\nimport { CommandType, RoutePlanner } from './utils/routerCommands'\nimport { encodePermit } from './utils/permit2'\nimport { ROUTER_AS_RECIPIENT, SENDER_AS_RECIPIENT, ETH_ADDRESS } from './utils/constants'\n\nexport type SwapRouterConfig = {\n sender?: string // address\n deadline?: BigNumberish\n}\n\ntype SupportedNFTTrade = NFTTrade<SupportedProtocolsData>\n\nexport abstract class SwapRouter {\n public static INTERFACE: Interface = new Interface(abi)\n\n public static swapCallParameters(trades: Command[] | Command, config: SwapRouterConfig = {}): MethodParameters {\n if (!Array.isArray(trades)) trades = [trades]\n\n const nftTrades = trades.filter((trade, _, []) => trade.hasOwnProperty('market')) as SupportedNFTTrade[]\n const allowRevert = nftTrades.length == 1 && nftTrades[0].orders.length == 1 ? false : true\n const planner = new RoutePlanner()\n\n // track value flow to require the right amount of native value\n let currentNativeValueInRouter = BigNumber.from(0)\n let transactionValue = BigNumber.from(0)\n\n for (const trade of trades) {\n /**\n * is NFTTrade\n */\n if (trade.tradeType == RouterTradeType.NFTTrade) {\n const nftTrade = trade as SupportedNFTTrade\n nftTrade.encode(planner, { allowRevert })\n const tradePrice = nftTrade.getTotalPrice()\n\n // send enough native value to contract for NFT purchase\n if (currentNativeValueInRouter.lt(tradePrice)) {\n transactionValue = transactionValue.add(tradePrice.sub(currentNativeValueInRouter))\n currentNativeValueInRouter = BigNumber.from(0)\n } else {\n currentNativeValueInRouter = currentNativeValueInRouter.sub(tradePrice)\n }\n /**\n * is Uniswap Trade\n */\n } else if (trade.tradeType == RouterTradeType.UniswapTrade) {\n const uniswapTrade = trade as UniswapTrade\n const inputIsNative = uniswapTrade.trade.inputAmount.currency.isNative\n const outputIsNative = uniswapTrade.trade.outputAmount.currency.isNative\n const swapOptions = uniswapTrade.options\n\n invariant(!(inputIsNative && !!swapOptions.inputTokenPermit), 'NATIVE_INPUT_PERMIT')\n\n if (!!swapOptions.inputTokenPermit) {\n encodePermit(planner, swapOptions.inputTokenPermit)\n }\n\n if (inputIsNative) {\n transactionValue = transactionValue.add(\n BigNumber.from(uniswapTrade.trade.maximumAmountIn(swapOptions.slippageTolerance).quotient.toString())\n )\n }\n // track amount of native currency in the router\n if (outputIsNative && swapOptions.recipient == ROUTER_AS_RECIPIENT) {\n currentNativeValueInRouter = currentNativeValueInRouter.add(\n BigNumber.from(uniswapTrade.trade.minimumAmountOut(swapOptions.slippageTolerance).quotient.toString())\n )\n }\n uniswapTrade.encode(planner, { allowRevert: false })\n /**\n * is UnwrapWETH\n */\n } else if (trade.tradeType == RouterTradeType.UnwrapWETH) {\n const UnwrapWETH = trade as UnwrapWETH\n trade.encode(planner, { allowRevert: false })\n currentNativeValueInRouter = currentNativeValueInRouter.add(UnwrapWETH.amount)\n /**\n * else\n */\n } else {\n throw 'trade must be of instance: UniswapTrade or NFTTrade'\n }\n }\n\n // TODO: matches current logic for now, but should eventually only sweep for multiple NFT trades\n // or NFT trades with potential slippage (i.e. sudo)\n if (nftTrades.length > 0) planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0])\n return SwapRouter.encodePlan(planner, transactionValue, config)\n }\n\n /**\n * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given swap.\n * @param trades to produce call parameters for\n */\n public static swapNFTCallParameters(trades: SupportedNFTTrade[], config: SwapRouterConfig = {}): MethodParameters {\n let planner = new RoutePlanner()\n let totalPrice = BigNumber.from(0)\n\n const allowRevert = trades.length == 1 && trades[0].orders.length == 1 ? false : true\n\n for (const trade of trades) {\n trade.encode(planner, { allowRevert })\n totalPrice = totalPrice.add(trade.getTotalPrice())\n }\n\n planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0])\n return SwapRouter.encodePlan(planner, totalPrice, config)\n }\n\n /**\n * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0\n * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n * @param trades to produce call parameters for\n * @param options options for the call parameters\n */\n public static swapERC20CallParameters(\n trades: RouterTrade<Currency, Currency, TradeType>,\n options: SwapOptions\n ): MethodParameters {\n // TODO: use permit if signature included in swapOptions\n const planner = new RoutePlanner()\n\n const trade: UniswapTrade = new UniswapTrade(trades, options)\n\n const inputCurrency = trade.trade.inputAmount.currency\n invariant(!(inputCurrency.isNative && !!options.inputTokenPermit), 'NATIVE_INPUT_PERMIT')\n\n if (options.inputTokenPermit) {\n encodePermit(planner, options.inputTokenPermit)\n }\n\n const nativeCurrencyValue = inputCurrency.isNative\n ? BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString())\n : BigNumber.from(0)\n\n trade.encode(planner, { allowRevert: false })\n return SwapRouter.encodePlan(planner, nativeCurrencyValue, {\n deadline: options.deadlineOrPreviousBlockhash ? BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,\n })\n return SwapRouter.encodePlan(planner, nativeCurrencyValue)\n }\n\n /**\n * Encodes a planned route into a method name and parameters for the Router contract.\n * @param planner the planned route\n * @param nativeCurrencyValue the native currency value of the planned route\n * @param config the router config\n */\n private static encodePlan(\n planner: RoutePlanner,\n nativeCurrencyValue: BigNumber,\n config: SwapRouterConfig = {}\n ): MethodParameters {\n const { commands, inputs } = planner\n const functionSignature = !!config.deadline ? 'execute(bytes,bytes[],uint256)' : 'execute(bytes,bytes[])'\n const parameters = !!config.deadline ? [commands, inputs, config.deadline] : [commands, inputs]\n const calldata = SwapRouter.INTERFACE.encodeFunctionData(functionSignature, parameters)\n return { calldata, value: nativeCurrencyValue.toHexString() }\n }\n}\n","import invariant from 'tiny-invariant'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { SeaportData } from './protocols/seaport'\nimport { FoundationData } from './protocols/foundation'\nimport { NFTXData } from './protocols/nftx'\nimport { NFT20Data } from './protocols/nft20'\nimport { RoutePlanner } from '../utils/routerCommands'\nimport { Command, RouterTradeType, TradeConfig } from './Command'\nimport { LooksRareData } from './protocols/looksRare'\nimport { SudoswapData } from './protocols/sudoswap'\nimport { CryptopunkData } from './protocols/cryptopunk'\nimport { X2Y2Data } from './protocols/x2y2'\n\nexport type SupportedProtocolsData =\n | SeaportData\n | FoundationData\n | NFTXData\n | LooksRareData\n | X2Y2Data\n | CryptopunkData\n | NFT20Data\n | SudoswapData\n\nexport abstract class NFTTrade<T> implements Command {\n readonly tradeType: RouterTradeType = RouterTradeType.NFTTrade\n readonly orders: T[]\n readonly market: Market\n\n constructor(market: Market, orders: T[]) {\n invariant(orders.length > 0, 'no buy Items')\n this.market = market\n this.orders = orders\n }\n\n abstract encode(planner: RoutePlanner, config: TradeConfig): void\n\n abstract getBuyItems(): BuyItem[]\n\n abstract getTotalPrice(): BigNumber\n}\n\nexport type BuyItem = {\n tokenAddress: string\n tokenId: BigNumberish\n tokenType: TokenType\n amount?: BigNumberish // for 1155\n}\n\nexport enum Market {\n Foundation = 'foundation',\n LooksRare = 'looksrare',\n NFT20 = 'nft20',\n NFTX = 'nftx',\n Seaport = 'seaport',\n Sudoswap = 'Sudoswap',\n Cryptopunks = 'cryptopunks',\n X2Y2 = 'x2y2',\n}\n\nexport enum TokenType {\n ERC721 = 'ERC721',\n ERC1155 = 'ERC1155',\n Cryptopunk = 'Cryptopunk',\n}\n","import { TradeConfig } from '../Command'\nimport { NFTTrade, Market, TokenType, BuyItem } from '../NFTTrade'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type CryptopunkData = {\n tokenId: BigNumberish\n recipient: string\n value: BigNumberish\n}\n\nexport class CryptopunkTrade extends NFTTrade<CryptopunkData> {\n public static CRYPTOPUNK_ADDRESS: string = '0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb'\n\n constructor(orders: CryptopunkData[]) {\n super(Market.Cryptopunks, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n planner.addCommand(CommandType.CRYPTOPUNKS, [item.tokenId, item.recipient, item.value], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: CryptopunkTrade.CRYPTOPUNK_ADDRESS,\n tokenId: item.tokenId,\n tokenType: TokenType.Cryptopunk,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.value)\n }\n return total\n }\n}\n","import abi from '../../../abis/Foundation.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type FoundationData = {\n recipient: string\n tokenAddress: string\n tokenId: BigNumberish\n price: BigNumberish\n referrer: string // address\n}\n\nexport class FoundationTrade extends NFTTrade<FoundationData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: FoundationData[]) {\n super(Market.Foundation, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n const calldata = FoundationTrade.INTERFACE.encodeFunctionData('buyV2', [\n item.tokenAddress,\n item.tokenId,\n item.price,\n item.referrer,\n ])\n planner.addCommand(\n CommandType.FOUNDATION,\n [item.price, calldata, item.recipient, item.tokenAddress, item.tokenId],\n config.allowRevert\n )\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: item.tokenAddress,\n tokenId: item.tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.price)\n }\n return total\n }\n}\n","import invariant from 'tiny-invariant'\nimport abi from '../../../abis/LooksRare.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type MakerOrder = {\n collection: string\n tokenId: BigNumberish\n isOrderAsk: true\n signer: string\n strategy: string\n currency: string\n amount: BigNumberish\n price: BigNumberish\n minPercentageToAsk: BigNumberish\n nonce: BigNumberish\n startTime: BigNumberish\n endTime: BigNumberish\n v: BigNumberish\n r: string\n s: string\n params: string\n}\n\nexport type TakerOrder = {\n minPercentageToAsk: BigNumberish\n price: BigNumberish\n taker: string\n tokenId: BigNumberish\n isOrderAsk: boolean\n params: string\n}\n\nexport type LooksRareData = {\n makerOrder: MakerOrder\n takerOrder: TakerOrder\n recipient: string\n tokenType: TokenType\n}\n\nexport class LooksRareTrade extends NFTTrade<LooksRareData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: LooksRareData[]) {\n super(Market.LooksRare, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n const calldata = LooksRareTrade.INTERFACE.encodeFunctionData('matchAskWithTakerBidUsingETHAndWETH', [\n item.takerOrder,\n item.makerOrder,\n ])\n\n if (item.tokenType == TokenType.ERC721) {\n invariant(item.makerOrder.amount == 1, 'ERC721 token amount must be 1')\n planner.addCommand(\n CommandType.LOOKS_RARE_721,\n [item.makerOrder.price, calldata, item.recipient, item.makerOrder.collection, item.makerOrder.tokenId],\n config.allowRevert\n )\n } else if (item.tokenType == TokenType.ERC1155) {\n planner.addCommand(\n CommandType.LOOKS_RARE_1155,\n [\n item.makerOrder.price,\n calldata,\n item.recipient,\n item.makerOrder.collection,\n item.makerOrder.tokenId,\n item.makerOrder.amount,\n ],\n config.allowRevert\n )\n }\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: item.makerOrder.collection,\n tokenId: item.makerOrder.tokenId,\n tokenType: item.tokenType,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.makerOrder.price)\n }\n return total\n }\n}\n","import abi from '../../../abis/NFT20.json'\nimport { Interface } from '@ethersproject/abi'\nimport { TradeConfig } from '../Command'\nimport { NFTTrade, Market, TokenType, BuyItem } from '../NFTTrade'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\nexport type NFT20Data = {\n tokenAddress: string\n tokenIds: BigNumberish[]\n tokenAmounts: BigNumberish[]\n recipient: string\n fee: BigNumberish\n isV3: boolean\n value: BigNumberish\n}\n\nexport class NFT20Trade extends NFTTrade<NFT20Data> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: NFT20Data[]) {\n super(Market.NFT20, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n const calldata = NFT20Trade.INTERFACE.encodeFunctionData('ethForNft', [\n order.tokenAddress,\n order.tokenIds,\n order.tokenAmounts,\n order.recipient,\n order.fee,\n order.isV3,\n ])\n planner.addCommand(CommandType.NFT20, [order.value, calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const pool of this.orders) {\n for (const tokenId of pool.tokenIds) {\n buyItems.push({\n tokenAddress: pool.tokenAddress,\n tokenId: tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n }\n\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.value)\n }\n return total\n }\n}\n","import abi from '../../../abis/NFTXZap.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { Ether } from '@uniswap/sdk-core'\n\nexport type NFTXData = {\n recipient: string\n vaultAddress: string\n vaultId: BigNumberish\n tokenAddress: string\n tokenIds: BigNumberish[]\n value: BigNumber\n}\n\nexport class NFTXTrade extends NFTTrade<NFTXData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: NFTXData[]) {\n super(Market.NFTX, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n const calldata = NFTXTrade.INTERFACE.encodeFunctionData('buyAndRedeem', [\n order.vaultId,\n order.tokenIds.length,\n order.tokenIds,\n [Ether.onChain(1).wrapped.address, order.vaultAddress],\n order.recipient,\n ])\n planner.addCommand(CommandType.NFTX, [order.value, calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const order of this.orders) {\n for (const tokenId of order.tokenIds) {\n buyItems.push({\n tokenAddress: order.tokenAddress,\n tokenId: tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.value)\n }\n return total\n }\n}\n","import abi from '../../../abis/Seaport.json'\nimport { BigNumber, BigNumberish } from 'ethers'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\n\nexport enum SeaportVersion {\n V1_1,\n V1_4,\n}\n\nexport type SeaportData = {\n items: Order[]\n recipient: string // address\n version: SeaportVersion\n}\n\nexport type FulfillmentComponent = {\n orderIndex: BigNumberish\n itemIndex: BigNumberish\n}\n\nexport type OfferItem = {\n itemType: BigNumberish // enum\n token: string // address\n identifierOrCriteria: BigNumberish\n startAmount: BigNumberish\n endAmount: BigNumberish\n}\n\nexport type ConsiderationItem = OfferItem & {\n recipient: string\n}\n\nexport type Order = {\n parameters: OrderParameters\n signature: string\n}\n\ntype OrderParameters = {\n offerer: string // address,\n offer: OfferItem[]\n consideration: ConsiderationItem[]\n orderType: BigNumberish // enum\n startTime: BigNumberish\n endTime: BigNumberish\n zoneHash: string // bytes32\n zone: string // address\n salt: BigNumberish\n conduitKey: string // bytes32,\n totalOriginalConsiderationItems: BigNumberish\n}\n\nexport type AdvancedOrder = Order & {\n numerator: BigNumber // uint120\n denominator: BigNumber // uint120\n extraData: string // bytes\n}\n\nexport class SeaportTrade extends NFTTrade<SeaportData> {\n public static INTERFACE: Interface = new Interface(abi)\n public static OPENSEA_CONDUIT_KEY: string = '0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000'\n\n constructor(orders: SeaportData[]) {\n super(Market.Seaport, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n let advancedOrders: AdvancedOrder[] = []\n let orderFulfillments: FulfillmentComponent[][] = order.items.map((_, index) => [\n { orderIndex: index, itemIndex: 0 },\n ])\n let considerationFulFillments: FulfillmentComponent[][] = this.getConsiderationFulfillments(order.items)\n\n for (const item of order.items) {\n const { advancedOrder } = this.getAdvancedOrderParams(item)\n advancedOrders.push(advancedOrder)\n }\n\n let calldata: string\n if (advancedOrders.length == 1) {\n calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAdvancedOrder', [\n advancedOrders[0],\n [],\n SeaportTrade.OPENSEA_CONDUIT_KEY,\n order.recipient,\n ])\n } else {\n calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAvailableAdvancedOrders', [\n advancedOrders,\n [],\n orderFulfillments,\n considerationFulFillments,\n SeaportTrade.OPENSEA_CONDUIT_KEY,\n order.recipient,\n 100, // TODO: look into making this a better number\n ])\n }\n planner.addCommand(\n this.commandMap(order.version),\n [this.getTotalPrice().toString(), calldata],\n config.allowRevert\n )\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const order of this.orders) {\n for (const item of order.items) {\n for (const offer of item.parameters.offer) {\n buyItems.push({\n tokenAddress: offer.token,\n tokenId: offer.identifierOrCriteria,\n tokenType: TokenType.ERC721,\n })\n }\n }\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let totalPrice = BigNumber.from(0)\n for (const order of this.orders) {\n for (const item of order.items) {\n totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration))\n }\n }\n return totalPrice\n }\n\n private commandMap(version: SeaportVersion): CommandType {\n switch (version) {\n case SeaportVersion.V1_1:\n return CommandType.SEAPORT\n case SeaportVersion.V1_4:\n return CommandType.SEAPORT_V1_4\n }\n }\n\n private getConsiderationFulfillments(protocolDatas: Order[]): FulfillmentComponent[][] {\n let considerationFulfillments: FulfillmentComponent[][] = []\n const considerationRecipients: string[] = []\n\n for (const i in protocolDatas) {\n const protocolData = protocolDatas[i]\n\n for (const j in protocolData.parameters.consideration) {\n const item = protocolData.parameters.consideration[j]\n\n if (considerationRecipients.findIndex((x) => x === item.recipient) === -1) {\n considerationRecipients.push(item.recipient)\n }\n\n const recipientIndex = considerationRecipients.findIndex((x) => x === item.recipient)\n\n if (!considerationFulfillments[recipientIndex]) {\n considerationFulfillments.push([\n {\n orderIndex: i,\n itemIndex: j,\n },\n ])\n } else {\n considerationFulfillments[recipientIndex].push({\n orderIndex: i,\n itemIndex: j,\n })\n }\n }\n }\n return considerationFulfillments\n }\n\n private getAdvancedOrderParams(data: Order): { advancedOrder: AdvancedOrder; value: BigNumber } {\n const advancedOrder = {\n parameters: data.parameters,\n numerator: BigNumber.from('1'),\n denominator: BigNumber.from('1'),\n signature: data.signature,\n extraData: '0x00',\n }\n const value = this.calculateValue(data.parameters.consideration)\n return { advancedOrder, value }\n }\n\n private calculateValue(considerations: ConsiderationItem[]): BigNumber {\n return considerations.reduce(\n (amt: BigNumber, consideration: ConsiderationItem) => amt.add(consideration.startAmount),\n BigNumber.from(0)\n )\n }\n}\n","import abi from '../../../abis/Sudoswap.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\ntype PairSwap = {\n swapInfo: {\n pair: string // address\n nftIds: BigNumberish[]\n }\n tokenAddress: string // address\n maxCost: BigNumberish\n}\n\nexport type SudoswapData = {\n swaps: PairSwap[]\n nftRecipient: string\n ethRecipient: string\n deadline: BigNumberish\n}\n\nexport class SudoswapTrade extends NFTTrade<SudoswapData> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: SudoswapData[]) {\n super(Market.Sudoswap, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const order of this.orders) {\n const calldata = SudoswapTrade.INTERFACE.encodeFunctionData('robustSwapETHForSpecificNFTs', [\n order.swaps.map((swap) => {\n return { swapInfo: swap.swapInfo, maxCost: swap.maxCost }\n }),\n order.ethRecipient,\n order.nftRecipient,\n order.deadline,\n ])\n const value = order.swaps.reduce((prevVal, swap) => {\n return prevVal.add(swap.maxCost)\n }, BigNumber.from(0))\n planner.addCommand(CommandType.SUDOSWAP, [value, calldata], config.allowRevert)\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const order of this.orders) {\n for (const swap of order.swaps) {\n for (const tokenId of swap.swapInfo.nftIds) {\n buyItems.push({\n tokenAddress: swap.tokenAddress,\n tokenId,\n tokenType: TokenType.ERC721,\n })\n }\n }\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const order of this.orders) {\n for (const swap of order.swaps) {\n total = total.add(swap.maxCost)\n }\n }\n return total\n }\n}\n","import abi from '../../../abis/X2Y2.json'\nimport { Interface } from '@ethersproject/abi'\nimport { BuyItem, Market, NFTTrade, TokenType } from '../NFTTrade'\nimport { TradeConfig } from '../Command'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { BigNumber, BigNumberish } from 'ethers'\n\ntype X2Y2PartialData = {\n signedInput: string\n recipient: string\n tokenAddress: string\n tokenId: BigNumberish\n price: BigNumberish\n}\n\nexport type X2Y2_721_Data = X2Y2PartialData & {\n tokenType: TokenType.ERC721\n}\n\nexport type X2Y2_1155_Data = X2Y2PartialData & {\n tokenType: TokenType.ERC1155\n tokenAmount: BigNumberish\n}\n\nexport type X2Y2Data = X2Y2_721_Data | X2Y2_1155_Data\n\nexport class X2Y2Trade extends NFTTrade<X2Y2Data> {\n public static INTERFACE: Interface = new Interface(abi)\n\n constructor(orders: X2Y2Data[]) {\n super(Market.X2Y2, orders)\n }\n\n encode(planner: RoutePlanner, config: TradeConfig): void {\n for (const item of this.orders) {\n const functionSelector = X2Y2Trade.INTERFACE.getSighash(X2Y2Trade.INTERFACE.getFunction('run'))\n const calldata = functionSelector + item.signedInput.slice(2)\n\n if (item.tokenType == TokenType.ERC721) {\n planner.addCommand(\n CommandType.X2Y2_721,\n [item.price, calldata, item.recipient, item.tokenAddress, item.tokenId],\n config.allowRevert\n )\n } else if (item.tokenType == TokenType.ERC1155) {\n planner.addCommand(\n CommandType.X2Y2_1155,\n [item.price, calldata, item.recipient, item.tokenAddress, item.tokenId, item.tokenAmount],\n config.allowRevert\n )\n }\n }\n }\n\n getBuyItems(): BuyItem[] {\n let buyItems: BuyItem[] = []\n for (const item of this.orders) {\n buyItems.push({\n tokenAddress: item.tokenAddress,\n tokenId: item.tokenId,\n tokenType: item.tokenType,\n })\n }\n return buyItems\n }\n\n getTotalPrice(): BigNumber {\n let total = BigNumber.from(0)\n for (const item of this.orders) {\n total = total.add(item.price)\n }\n return total\n }\n}\n","import invariant from 'tiny-invariant'\nimport { BigNumberish } from 'ethers'\nimport { RoutePlanner, CommandType } from '../../utils/routerCommands'\nimport { Permit2Permit } from '../../utils/permit2'\nimport { Command, RouterTradeType, TradeConfig } from '../Command'\nimport { encodePermit } from '../../utils/permit2'\nimport { ROUTER_AS_RECIPIENT, UNIVERSAL_ROUTER_ADDRESS, WETH_ADDRESS } from '../../utils/constants'\n\nexport class UnwrapWETH implements Command {\n readonly tradeType: RouterTradeType = RouterTradeType.UnwrapWETH\n readonly permit2Data: Permit2Permit\n readonly wethAddress: string\n readonly routerAddress: string\n readonly amount: BigNumberish\n\n constructor(amount: BigNumberish, chainId: number, permit2?: Permit2Permit) {\n this.wethAddress = WETH_ADDRESS(chainId)\n this.routerAddress = UNIVERSAL_ROUTER_ADDRESS(chainId)\n this.amount = amount\n\n if (!!permit2) {\n invariant(permit2.details.token === this.wethAddress, `must be permitting WETH address: ${this.wethAddress}`)\n invariant(permit2.details.amount >= amount, `Did not permit enough WETH for unwrapWETH transaction`)\n this.permit2Data = permit2\n }\n }\n\n encode(planner: RoutePlanner, _: TradeConfig): void {\n if (!!this.permit2Data) encodePermit(planner, this.permit2Data)\n planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [this.wethAddress, this.routerAddress, this.amount])\n planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, this.amount])\n }\n}\n"],"names":["RouterTradeType","CommandType","PERMIT_STRUCT","PERMIT_BATCH_STRUCT","ALLOW_REVERT_FLAG","REVERTIBLE_COMMANDS","Set","SEAPORT","SEAPORT_V1_4","NFTX","LOOKS_RARE_721","LOOKS_RARE_1155","X2Y2_721","X2Y2_1155","FOUNDATION","SUDOSWAP","NFT20","CRYPTOPUNKS","ABI_DEFINITION","PERMIT","PERMIT2_PERMIT_BATCH","PERMIT2_TRANSFER_FROM","PERMIT2_TRANSFER_FROM_BATCH","TRANSFER","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT","V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","WRAP_ETH","UNWRAP_WETH","SWEEP","PAY_PORTION","OWNER_CHECK_721","OWNER_CHECK_1155","RoutePlanner","commands","inputs","addCommand","type","parameters","allowRevert","command","createCommand","push","encodedInput","has","Error","concat","toString","padStart","defaultAbiCoder","encode","UNIVERSAL_ROUTER_ADDRESS","chainId","WETH_ADDRESS","PERMIT2_ADDRESS","CONTRACT_BALANCE","BigNumber","from","pow","ETH_ADDRESS","SENDER_AS_RECIPIENT","ROUTER_AS_RECIPIENT","REFUND_ETH_PRICE_IMPACT_THRESHOLD","Percent","JSBI","BigInt","UniswapTrade","trade","options","planner","_config","payerIsUser","inputAmount","currency","isNative","maximumAmountIn","slippageTolerance","quotient","recipient","performAggregatedSlippageCheck","tradeType","TradeType","EXACT_INPUT","routes","length","outputIsNative","outputAmount","inputIsNative","routerMustCustody","swaps","swap","route","protocol","Protocol","V2","addV2Swap","V3","addV3Swap","MIXED","addMixedSwap","minimumAmountOut","wrapped","address","EXACT_OUTPUT","riskOfPartialFill","V2Trade","path","map","pool","V3Trade","createUncheckedTrade","encodeRouteToPath","tradeRecipient","pools","Pool","Pair","MixedRouteTrade","amountIn","amountOut","sections","partitionMixedRouteByProtocol","isLastSectionInRoute","i","outputToken","inputToken","input","section","getOutputOfPools","newRouteOriginal","MixedRouteSDK","token0","equals","token1","newRoute","MixedRoute","mixedRouteIsAllV3","every","encodeMixedRouteToPath","liquidityToken","priceImpact","greaterThan","SIGNATURE_LENGTH","EIP_2098_SIGNATURE_LENGTH","encodePermit","permit","signature","ethers","utils","arrayify","joinSignature","splitSignature","SwapRouter","swapCallParameters","trades","config","Array","isArray","nftTrades","filter","_","hasOwnProperty","orders","currentNativeValueInRouter","transactionValue","NFTTrade","nftTrade","tradePrice","getTotalPrice","lt","add","sub","uniswapTrade","swapOptions","inputTokenPermit","invariant","UnwrapWETH","amount","encodePlan","swapNFTCallParameters","totalPrice","swapERC20CallParameters","inputCurrency","nativeCurrencyValue","deadline","deadlineOrPreviousBlockhash","undefined","functionSignature","calldata","INTERFACE","encodeFunctionData","value","toHexString","Interface","abi","market","Market","TokenType","CryptopunkTrade","Cryptopunks","item","tokenId","getBuyItems","buyItems","tokenAddress","CRYPTOPUNK_ADDRESS","tokenType","Cryptopunk","total","FoundationTrade","Foundation","price","referrer","ERC721","LooksRareTrade","LooksRare","takerOrder","makerOrder","collection","ERC1155","NFT20Trade","order","tokenIds","tokenAmounts","fee","isV3","NFTXTrade","vaultId","Ether","onChain","vaultAddress","SeaportVersion","SeaportTrade","Seaport","advancedOrders","orderFulfillments","items","index","orderIndex","itemIndex","considerationFulFillments","getConsiderationFulfillments","getAdvancedOrderParams","advancedOrder","OPENSEA_CONDUIT_KEY","commandMap","version","offer","token","identifierOrCriteria","calculateValue","consideration","V1_1","V1_4","protocolDatas","considerationFulfillments","considerationRecipients","protocolData","j","findIndex","x","recipientIndex","data","numerator","denominator","extraData","considerations","reduce","amt","startAmount","SudoswapTrade","Sudoswap","swapInfo","maxCost","ethRecipient","nftRecipient","prevVal","nftIds","X2Y2Trade","X2Y2","functionSelector","getSighash","getFunction","signedInput","slice","tokenAmount","permit2","wethAddress","routerAddress","details","permit2Data"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,WAAYA,eAAe;EACzBA,gDAA6B;EAC7BA,wCAAqB;EACrBA,4CAAyB;AAC3B,CAAC,EAJWA,uBAAe,KAAfA,uBAAe;;;ACN3B,AAEA;;;;;AAKA,AAAA,IAAYC,WA+BX;AA/BD,WAAYA,WAAW;EACrBA,qEAAuB;EACvBA,uEAAwB;EACxBA,+EAA4B;EAC5BA,6EAA2B;EAC3BA,+CAAY;EACZA,qDAAe;EACfA,2DAAkB;EAElBA,qEAAuB;EACvBA,uEAAwB;EACxBA,kDAAa;EACbA,sDAAe;EACfA,4DAAkB;EAClBA,4FAAkC;EAClCA,8DAAmB;;EAGnBA,oDAAc;EACdA,kEAAqB;EACrBA,8CAAW;EACXA,4DAAkB;EAClBA,oEAAsB;EACtBA,oEAAsB;EACtBA,sEAAuB;EAEvBA,sDAAe;EACfA,sDAAe;EACfA,gDAAY;EACZA,wDAAgB;EAChBA,0DAAiB;AACnB,CAAC,EA/BWA,WAAW,KAAXA,WAAW;AAiCvB,IAAMC,aAAa,GACjB,+GAA+G;AAEjH,IAAMC,mBAAmB,GACvB,iHAAiH;AAEnH,IAAMC,iBAAiB,GAAG,IAAI;AAE9B,IAAMC,mBAAmB,gBAAG,IAAIC,GAAG,CAAc,CAC/CL,WAAW,CAACM,OAAO,EACnBN,WAAW,CAACO,YAAY,EACxBP,WAAW,CAACQ,IAAI,EAChBR,WAAW,CAACS,cAAc,EAC1BT,WAAW,CAACU,eAAe,EAC3BV,WAAW,CAACW,QAAQ,EACpBX,WAAW,CAACY,SAAS,EACrBZ,WAAW,CAACa,UAAU,EACtBb,WAAW,CAACc,QAAQ,EACpBd,WAAW,CAACe,KAAK,EACjBf,WAAW,CAACgB,WAAW,CACxB,CAAC;AAEF,IAAMC,cAAc,0CACjBjB,WAAW,CAACkB,MAAM,IAAG,CAACjB,aAAa,EAAE,OAAO,CAAC,kBAC7CD,WAAW,CAACmB,oBAAoB,IAAG,CAACjB,mBAAmB,EAAE,OAAO,CAAC,kBACjEF,WAAW,CAACoB,qBAAqB,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBACrEpB,WAAW,CAACqB,2BAA2B,IAAG,CAAC,OAAO,CAAC,kBACnDrB,WAAW,CAACsB,QAAQ,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBACxDtB,WAAW,CAACuB,gBAAgB,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,kBACjFvB,WAAW,CAACwB,iBAAiB,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,kBAClFxB,WAAW,CAACyB,gBAAgB,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,kBACrFzB,WAAW,CAAC0B,iBAAiB,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,kBACtF1B,WAAW,CAACM,OAAO,IAAG,CAAC,SAAS,EAAE,OAAO,CAAC,kBAC1CN,WAAW,CAACO,YAAY,IAAG,CAAC,SAAS,EAAE,OAAO,CAAC,kBAC/CP,WAAW,CAAC2B,QAAQ,IAAG,CAAC,SAAS,EAAE,SAAS,CAAC,kBAC7C3B,WAAW,CAAC4B,WAAW,IAAG,CAAC,SAAS,EAAE,SAAS,CAAC,kBAChD5B,WAAW,CAAC6B,KAAK,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBACrD7B,WAAW,CAACQ,IAAI,IAAG,CAAC,SAAS,EAAE,OAAO,CAAC,kBACvCR,WAAW,CAACS,cAAc,IAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAClFT,WAAW,CAACU,eAAe,IAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC9FV,WAAW,CAACW,QAAQ,IAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC5EX,WAAW,CAACY,SAAS,IAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBACxFZ,WAAW,CAACa,UAAU,IAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC9Eb,WAAW,CAAC8B,WAAW,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC3D9B,WAAW,CAACc,QAAQ,IAAG,CAAC,SAAS,EAAE,OAAO,CAAC,kBAC3Cd,WAAW,CAAC+B,eAAe,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC/D/B,WAAW,CAACgC,gBAAgB,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC3EhC,WAAW,CAACe,KAAK,IAAG,CAAC,SAAS,EAAE,OAAO,CAAC,kBACxCf,WAAW,CAACgB,WAAW,IAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,kBAC7D;AAED,IAAaiB,YAAY;EAIvB;IACE,IAAI,CAACC,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,MAAM,GAAG,EAAE;;EACjB;EAAA,OAEDC,UAAU,GAAV,oBAAWC,IAAiB,EAAEC,UAAiB,EAAEC,WAAW;QAAXA,WAAW;MAAXA,WAAW,GAAG,KAAK;;IAClE,IAAIC,OAAO,GAAGC,aAAa,CAACJ,IAAI,EAAEC,UAAU,CAAC;IAC7C,IAAI,CAACH,MAAM,CAACO,IAAI,CAACF,OAAO,CAACG,YAAY,CAAC;IACtC,IAAIJ,WAAW,EAAE;MACf,IAAI,CAACnC,mBAAmB,CAACwC,GAAG,CAACJ,OAAO,CAACH,IAAI,CAAC,EAAE;QAC1C,MAAM,IAAIQ,KAAK,oBAAkBL,OAAO,CAACH,IAAI,kCAA+B;;MAE9EG,OAAO,CAACH,IAAI,GAAGG,OAAO,CAACH,IAAI,GAAGlC,iBAAiB;;IAGjD,IAAI,CAAC+B,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACY,MAAM,CAACN,OAAO,CAACH,IAAI,CAACU,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;GACjF;EAAA;AAAA;AAQH,SAAgBP,aAAa,CAACJ,IAAiB,EAAEC,UAAiB;EAChE,IAAMK,YAAY,GAAGM,qBAAe,CAACC,MAAM,CAACjC,cAAc,CAACoB,IAAI,CAAC,EAAEC,UAAU,CAAC;EAC7E,OAAO;IAAED,IAAI,EAAJA,IAAI;IAAEM,YAAY,EAAZA;GAAc;AAC/B;;ICxHaQ,wBAAwB,GAAG,SAA3BA,wBAAwB,CAAIC,OAAe;EACtD,QAAQA,OAAO;IACb,KAAK,CAAC;;MACJ,OAAO,4CAA4C;IACrD,KAAK,CAAC;;MACJ,OAAO,4CAA4C;IACrD,KAAK,GAAG;;MACN,OAAO,4CAA4C;IACrD,KAAK,KAAK;;MACR,OAAO,4CAA4C;IACrD,KAAK,EAAE;;MACL,OAAO,4CAA4C;IACrD,KAAK,GAAG;;MACN,OAAO,4CAA4C;IACrD,KAAK,KAAK;;MACR,OAAO,4CAA4C;IACrD,KAAK,MAAM;;MACT,OAAO,4CAA4C;IACrD,KAAK,KAAK;;MACR,OAAO,4CAA4C;IACrD,KAAK,KAAK;;MACR,OAAO,4CAA4C;IACrD,KAAK,EAAE;;MACL,OAAO,4CAA4C;IACrD;MACE,MAAM,IAAIP,KAAK,6CAA2CO,OAAO,CAAG;;AAE1E,CAAC;AAED,IAAaC,YAAY,GAAG,SAAfA,YAAY,CAAID,OAAe;EAC1C,QAAQA,OAAO;IACb,KAAK,CAAC;;MACJ,OAAO,4CAA4C;IACrD,KAAK,CAAC;;MACJ,OAAO,4CAA4C;IACrD,KAAK,GAAG;;MACN,OAAO,4CAA4C;IACrD,KAAK,KAAK;;MACR,OAAO,4CAA4C;IACrD,KAAK,EAAE;;MACL,OAAO,4CAA4C;IACrD,KAAK,GAAG;;MACN,OAAO,4CAA4C;IACrD,KAAK,KAAK;;MACR,OAAO,4CAA4C;IACrD,KAAK,MAAM;;MACT,OAAO,4CAA4C;IACrD,KAAK,EAAE;;MACL,OAAO,4CAA4C;IACrD;MACE,MAAM,IAAIP,KAAK,qDAAmDO,OAAO,CAAG;;AAElF,CAAC;AAED,IAAaE,eAAe,GAAG,4CAA4C;AAE3E,AAAO,IAAMC,gBAAgB,gBAAGC,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAAC,GAAG,CAAC;AAC1D,AAAO,IAAMC,WAAW,GAAG,4CAA4C;AAEvE,AAAO,IAAMC,mBAAmB,GAAG,4CAA4C;AAC/E,IAAaC,mBAAmB,GAAG,4CAA4C;;ACjC/E,IAAMC,iCAAiC,gBAAG,IAAIC,eAAO,eAACC,IAAI,CAACC,MAAM,CAAC,EAAE,CAAC,eAAED,IAAI,CAACC,MAAM,CAAC,GAAG,CAAC,CAAC;AAQxF;AACA;AACA,IAAaC,YAAY;EAEvB,sBAAmBC,KAAiD,EAASC,OAAoB;IAA9E,UAAK,GAALD,KAAK;IAAqD,YAAO,GAAPC,OAAO;IAD3E,cAAS,GAAoBrE,uBAAe,CAACmE,YAAY;;EACmC;EAAA,OAErGhB,MAAM,GAAN,gBAAOmB,OAAqB,EAAEC,OAAoB;;IAChD,IAAIC,WAAW,GAAG,IAAI;IACtB,IAAI,IAAI,CAACJ,KAAK,CAACK,WAAW,CAACC,QAAQ,CAACC,QAAQ,EAAE;;MAE5CL,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC2B,QAAQ,EAAE,CACvCkC,mBAAmB,EACnB,IAAI,CAACM,KAAK,CAACQ,eAAe,CAAC,IAAI,CAACP,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,CAC/E,CAAC;;MAEFwB,WAAW,GAAG,KAAK;;IAErB,IAAI,CAACH,OAAO,CAACU,SAAS,4BAAG,IAAI,CAACV,OAAO,CAACU,SAAS,oCAAIlB,mBAAmB;;;;;IAMtE,IAAMmB,8BAA8B,GAClC,IAAI,CAACZ,KAAK,CAACa,SAAS,KAAKC,iBAAS,CAACC,WAAW,IAAI,IAAI,CAACf,KAAK,CAACgB,MAAM,CAACC,MAAM,GAAG,CAAC;IAChF,IAAMC,cAAc,GAAG,IAAI,CAAClB,KAAK,CAACmB,YAAY,CAACb,QAAQ,CAACC,QAAQ;IAChE,IAAMa,aAAa,GAAG,IAAI,CAACpB,KAAK,CAACK,WAAW,CAACC,QAAQ,CAACC,QAAQ;IAC9D,IAAMc,iBAAiB,GAAGT,8BAA8B,IAAIM,cAAc;IAE1E,qDAAmB,IAAI,CAAClB,KAAK,CAACsB,KAAK,wCAAE;MAAA,IAA1BC,IAAI;MACb,QAAQA,IAAI,CAACC,KAAK,CAACC,QAAQ;QACzB,KAAKC,kBAAQ,CAACC,EAAE;UACdC,SAAS,CAAC1B,OAAO,EAAEqB,IAAI,EAAE,IAAI,CAACvB,KAAK,CAACa,SAAS,EAAE,IAAI,CAACZ,OAAO,EAAEG,WAAW,EAAEiB,iBAAiB,CAAC;UAC5F;QACF,KAAKK,kBAAQ,CAACG,EAAE;UACdC,SAAS,CAAC5B,OAAO,EAAEqB,IAAI,EAAE,IAAI,CAACvB,KAAK,CAACa,SAAS,EAAE,IAAI,CAACZ,OAAO,EAAEG,WAAW,EAAEiB,iBAAiB,CAAC;UAC5F;QACF,KAAKK,kBAAQ,CAACK,KAAK;UACjBC,YAAY,CAAC9B,OAAO,EAAEqB,IAAI,EAAE,IAAI,CAACvB,KAAK,CAACa,SAAS,EAAE,IAAI,CAACZ,OAAO,EAAEG,WAAW,EAAEiB,iBAAiB,CAAC;UAC/F;QACF;UACE,MAAM,IAAI3C,KAAK,CAAC,4BAA4B,CAAC;;;IAInD,IAAI2C,iBAAiB,EAAE;MACrB,IAAIH,cAAc,EAAE;QAClBhB,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC4B,WAAW,EAAE,CAC1C,IAAI,CAACwC,OAAO,CAACU,SAAS,EACtB,IAAI,CAACX,KAAK,CAACiC,gBAAgB,CAAC,IAAI,CAAChC,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,CAChF,CAAC;OACH,MAAM;QACLsB,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC6B,KAAK,EAAE,CACpC,IAAI,CAACsC,KAAK,CAACmB,YAAY,CAACb,QAAQ,CAAC4B,OAAO,CAACC,OAAO,EAChD,IAAI,CAAClC,OAAO,CAACU,SAAS,EACtB,IAAI,CAACX,KAAK,CAACiC,gBAAgB,CAAC,IAAI,CAAChC,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,CAChF,CAAC;;;IAIN,IAAIwC,aAAa,KAAK,IAAI,CAACpB,KAAK,CAACa,SAAS,KAAKC,iBAAS,CAACsB,YAAY,IAAIC,iBAAiB,CAAC,IAAI,CAACrC,KAAK,CAAC,CAAC,EAAE;;;MAGvGE,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC4B,WAAW,EAAE,CAAC,IAAI,CAACwC,OAAO,CAACU,SAAS,EAAE,CAAC,CAAC,CAAC;;GAE3E;EAAA;AAAA;AAGH;AACA,SAASiB,SAAS,CAChB1B,OAAqB,QAErBW,SAAoB,EACpBZ,OAAoB,EACpBG,WAAoB,EACpBiB,iBAA0B;MAJxBG,KAAK,QAALA,KAAK;IAAEnB,WAAW,QAAXA,WAAW;IAAEc,YAAY,QAAZA,YAAY;EAMlC,IAAMnB,KAAK,GAAG,IAAIsC,WAAO,CACvBd,KAAiC,EACjCX,SAAS,IAAIC,iBAAS,CAACC,WAAW,GAAGV,WAAW,GAAGc,YAAY,EAC/DN,SAAS,CACV;EAED,IAAIA,SAAS,IAAIC,iBAAS,CAACC,WAAW,EAAE;IACtCb,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACyB,gBAAgB,EAAE;;IAE/C+D,iBAAiB,GAAG3B,mBAAmB,GAAGO,OAAO,CAACU,SAAS,EAC3DX,KAAK,CAACQ,eAAe,CAACP,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACpEoB,KAAK,CAACiC,gBAAgB,CAAChC,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACrE4C,KAAK,CAACe,IAAI,CAACC,GAAG,CAAC,UAACC,IAAI;MAAA,OAAKA,IAAI,CAACN,OAAO;MAAC,EACtC/B,WAAW,CACZ,CAAC;GACH,MAAM,IAAIS,SAAS,IAAIC,iBAAS,CAACsB,YAAY,EAAE;IAC9ClC,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC0B,iBAAiB,EAAE,CAChD8D,iBAAiB,GAAG3B,mBAAmB,GAAGO,OAAO,CAACU,SAAS,EAC3DX,KAAK,CAACiC,gBAAgB,CAAChC,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACrEoB,KAAK,CAACQ,eAAe,CAACP,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACpE4C,KAAK,CAACe,IAAI,CAACC,GAAG,CAAC,UAACC,IAAI;MAAA,OAAKA,IAAI,CAACN,OAAO;MAAC,EACtC/B,WAAW,CACZ,CAAC;;AAEN;AAEA;AACA,SAAS0B,SAAS,CAChB5B,OAAqB,SAErBW,SAAoB,EACpBZ,OAAoB,EACpBG,WAAoB,EACpBiB,iBAA0B;MAJxBG,KAAK,SAALA,KAAK;IAAEnB,WAAW,SAAXA,WAAW;IAAEc,YAAY,SAAZA,YAAY;EAMlC,IAAMnB,KAAK,GAAG0C,WAAO,CAACC,oBAAoB,CAAC;IACzCnB,KAAK,EAAEA,KAAiC;IACxCnB,WAAW,EAAXA,WAAW;IACXc,YAAY,EAAZA,YAAY;IACZN,SAAS,EAATA;GACD,CAAC;EAEF,IAAM0B,IAAI,GAAGK,uBAAiB,CAACpB,KAAiC,EAAExB,KAAK,CAACa,SAAS,KAAKC,iBAAS,CAACsB,YAAY,CAAC;EAC7G,IAAIvB,SAAS,IAAIC,iBAAS,CAACC,WAAW,EAAE;IACtCb,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACuB,gBAAgB,EAAE,CAC/CiE,iBAAiB,GAAG3B,mBAAmB,GAAGO,OAAO,CAACU,SAAS,EAC3DX,KAAK,CAACQ,eAAe,CAACP,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACpEoB,KAAK,CAACiC,gBAAgB,CAAChC,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACrE2D,IAAI,EACJnC,WAAW,CACZ,CAAC;GACH,MAAM,IAAIS,SAAS,IAAIC,iBAAS,CAACsB,YAAY,EAAE;IAC9ClC,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACwB,iBAAiB,EAAE,CAChDgE,iBAAiB,GAAG3B,mBAAmB,GAAGO,OAAO,CAACU,SAAS,EAC3DX,KAAK,CAACiC,gBAAgB,CAAChC,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACrEoB,KAAK,CAACQ,eAAe,CAACP,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,EACpE2D,IAAI,EACJnC,WAAW,CACZ,CAAC;;AAEN;AAEA;AACA,SAAS4B,YAAY,CACnB9B,OAAqB,EACrBqB,IAA2B,EAC3BV,SAAoB,EACpBZ,OAAoB,EACpBG,WAAoB,EACpBiB,iBAA0B;EAE1B,IAAQG,KAAK,GAAgCD,IAAI,CAAzCC,KAAK;IAAEnB,WAAW,GAAmBkB,IAAI,CAAlClB,WAAW;IAAEc,YAAY,GAAKI,IAAI,CAArBJ,YAAY;EACxC,IAAM0B,cAAc,GAAGxB,iBAAiB,GAAG3B,mBAAmB,GAAGO,OAAO,CAACU,SAAS;;EAGlF,IAAIa,KAAK,CAACsB,KAAK,CAAC7B,MAAM,KAAK,CAAC,EAAE;IAC5B,IAAIO,KAAK,CAACsB,KAAK,CAAC,CAAC,CAAC,YAAYC,UAAI,EAAE;MAClC,OAAOjB,SAAS,CAAC5B,OAAO,EAAEqB,IAAI,EAAEV,SAAS,EAAEZ,OAAO,EAAEG,WAAW,EAAEiB,iBAAiB,CAAC;KACpF,MAAM,IAAIG,KAAK,CAACsB,KAAK,CAAC,CAAC,CAAC,YAAYE,UAAI,EAAE;MACzC,OAAOpB,SAAS,CAAC1B,OAAO,EAAEqB,IAAI,EAAEV,SAAS,EAAEZ,OAAO,EAAEG,WAAW,EAAEiB,iBAAiB,CAAC;KACpF,MAAM;MACL,MAAM,IAAI3C,KAAK,CAAC,oBAAoB,CAAC;;;EAIzC,IAAMsB,KAAK,GAAGiD,yBAAe,CAACN,oBAAoB,CAAC;IACjDnB,KAAK,EAAEA,KAAoC;IAC3CnB,WAAW,EAAXA,WAAW;IACXc,YAAY,EAAZA,YAAY;IACZN,SAAS,EAATA;GACD,CAAC;EAEF,IAAMqC,QAAQ,GAAGlD,KAAK,CAACQ,eAAe,CAACP,OAAO,CAACQ,iBAAiB,EAAEJ,WAAW,CAAC,CAACK,QAAQ,CAAC9B,QAAQ,EAAE;EAClG,IAAMuE,SAAS,GAAGnD,KAAK,CAACiC,gBAAgB,CAAChC,OAAO,CAACQ,iBAAiB,EAAEU,YAAY,CAAC,CAACT,QAAQ,CAAC9B,QAAQ,EAAE;;;EAIrG,IAAMwE,QAAQ,GAAGC,uCAA6B,CAAC7B,KAAoC,CAAC;EACpF,IAAM8B,oBAAoB,GAAG,SAAvBA,oBAAoB,CAAIC,CAAS;IACrC,OAAOA,CAAC,KAAKH,QAAQ,CAACnC,MAAM,GAAG,CAAC;GACjC;EAED,IAAIuC,WAAW;EACf,IAAIC,UAAU,GAAGjC,KAAK,CAACkC,KAAK,CAACxB,OAAO;EAEpC,KAAK,IAAIqB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAACnC,MAAM,EAAEsC,CAAC,EAAE,EAAE;IACxC,IAAMI,OAAO,GAAGP,QAAQ,CAACG,CAAC,CAAC;;IAE3BC,WAAW,GAAGI,0BAAgB,CAACD,OAAO,EAAEF,UAAU,CAAC;IAEnD,IAAMI,gBAAgB,GAAG,IAAIC,uBAAa,WACpCH,OAAO,GACXA,OAAO,CAAC,CAAC,CAAC,CAACI,MAAM,CAACC,MAAM,CAACP,UAAU,CAAC,GAAGE,OAAO,CAAC,CAAC,CAAC,CAACI,MAAM,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACM,MAAM,EAC5ET,WAAW,CACZ;IACD,IAAMU,QAAQ,GAAG,IAAIC,oBAAU,CAACN,gBAAgB,CAAC;;IAGjDJ,UAAU,GAAGD,WAAW;IAExB,IAAMY,iBAAiB,GAAG,SAApBA,iBAAiB,CAAI5C,KAAwC;MACjE,OAAOA,KAAK,CAACsB,KAAK,CAACuB,KAAK,CAAC,UAAC5B,IAAI;QAAA,OAAKA,IAAI,YAAYM,UAAI;QAAC;KACzD;IAED,IAAIqB,iBAAiB,CAACF,QAAQ,CAAC,EAAE;MAC/B,IAAM3B,IAAI,GAAW+B,gCAAsB,CAACJ,QAAQ,CAAC;MAErDhE,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACuB,gBAAgB,EAAE;;;MAG/CkG,oBAAoB,CAACC,CAAC,CAAC,GAAGV,cAAc,GAAIO,QAAQ,CAACG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAU,CAACgB,cAAc,CAACpC,OAAO,EAC9FoB,CAAC,IAAI,CAAC,GAAGL,QAAQ,GAAG9D,gBAAgB,EACpC,CAACkE,oBAAoB,CAACC,CAAC,CAAC,GAAG,CAAC,GAAGJ,SAAS,EACxCZ,IAAI,EACJnC,WAAW,IAAImD,CAAC,KAAK,CAAC,CACvB,CAAC;KACH,MAAM;MACLrD,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACyB,gBAAgB,EAAE,CAC/CgG,oBAAoB,CAACC,CAAC,CAAC,GAAGV,cAAc,GAAGnD,mBAAmB,EAC9D6D,CAAC,KAAK,CAAC,GAAGL,QAAQ,GAAG9D,gBAAgB,EACrC,CAACkE,oBAAoB,CAACC,CAAC,CAAC,GAAG,CAAC,GAAGJ,SAAS,EACxCe,QAAQ,CAAC3B,IAAI,CAACC,GAAG,CAAC,UAACC,IAAI;QAAA,OAAKA,IAAI,CAACN,OAAO;QAAC,EACzC/B,WAAW,IAAImD,CAAC,KAAK,CAAC,CACvB,CAAC;;;AAGR;AAEA;AACA,SAASlB,iBAAiB,CAACrC,KAAiD;EAC1E,OAAOA,KAAK,CAACwE,WAAW,CAACC,WAAW,CAAC9E,iCAAiC,CAAC;AACzE;;ACjQA,IAAM+E,gBAAgB,GAAG,EAAE;AAC3B,IAAMC,yBAAyB,GAAG,EAAE;AAEpC,SAAgBC,YAAY,CAAC1E,OAAqB,EAAE2E,MAAqB;EACvE,IAAIC,SAAS,GAAGD,MAAM,CAACC,SAAS;EAEhC,IAAM7D,MAAM,GAAG8D,aAAM,CAACC,KAAK,CAACC,QAAQ,CAACJ,MAAM,CAACC,SAAS,CAAC,CAAC7D,MAAM;;EAE7D,IAAIA,MAAM,KAAKyD,gBAAgB,IAAIzD,MAAM,KAAK0D,yBAAyB,EAAE;;IAEvEG,SAAS,GAAGC,aAAM,CAACC,KAAK,CAACE,aAAa,CAACH,aAAM,CAACC,KAAK,CAACG,cAAc,CAACN,MAAM,CAACC,SAAS,CAAC,CAAC;;EAGvF5E,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACkB,MAAM,EAAE,CAAC8H,MAAM,EAAEC,SAAS,CAAC,CAAC;AAC7D;;ICAsBM,UAAU;EAAA;EAAA,WAGhBC,kBAAkB,GAAzB,4BAA0BC,MAA2B,EAAEC;QAAAA;MAAAA,SAA2B,EAAE;;IACzF,IAAI,CAACC,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,EAAEA,MAAM,GAAG,CAACA,MAAM,CAAC;IAE7C,IAAMI,SAAS,GAAGJ,MAAM,CAACK,MAAM,CAAC,UAAC3F,KAAK,EAAE4F,CAAC;MAAA,OAAS5F,KAAK,CAAC6F,cAAc,CAAC,QAAQ,CAAC;MAAwB;IACxG,IAAMzH,WAAW,GAAGsH,SAAS,CAACzE,MAAM,IAAI,CAAC,IAAIyE,SAAS,CAAC,CAAC,CAAC,CAACI,MAAM,CAAC7E,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI;IAC3F,IAAMf,OAAO,GAAG,IAAIpC,YAAY,EAAE;;IAGlC,IAAIiI,0BAA0B,GAAG1G,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI0G,gBAAgB,GAAG3G,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC;IAExC,qDAAoBgG,MAAM,wCAAE;MAAA,IAAjBtF,KAAK;;;;MAId,IAAIA,KAAK,CAACa,SAAS,IAAIjF,uBAAe,CAACqK,QAAQ,EAAE;QAC/C,IAAMC,QAAQ,GAAGlG,KAA0B;QAC3CkG,QAAQ,CAACnH,MAAM,CAACmB,OAAO,EAAE;UAAE9B,WAAW,EAAXA;SAAa,CAAC;QACzC,IAAM+H,UAAU,GAAGD,QAAQ,CAACE,aAAa,EAAE;;QAG3C,IAAIL,0BAA0B,CAACM,EAAE,CAACF,UAAU,CAAC,EAAE;UAC7CH,gBAAgB,GAAGA,gBAAgB,CAACM,GAAG,CAACH,UAAU,CAACI,GAAG,CAACR,0BAA0B,CAAC,CAAC;UACnFA,0BAA0B,GAAG1G,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC;SAC/C,MAAM;UACLyG,0BAA0B,GAAGA,0BAA0B,CAACQ,GAAG,CAACJ,UAAU,CAAC;;;;;OAK1E,MAAM,IAAInG,KAAK,CAACa,SAAS,IAAIjF,uBAAe,CAACmE,YAAY,EAAE;QAC1D,IAAMyG,YAAY,GAAGxG,KAAqB;QAC1C,IAAMoB,aAAa,GAAGoF,YAAY,CAACxG,KAAK,CAACK,WAAW,CAACC,QAAQ,CAACC,QAAQ;QACtE,IAAMW,cAAc,GAAGsF,YAAY,CAACxG,KAAK,CAACmB,YAAY,CAACb,QAAQ,CAACC,QAAQ;QACxE,IAAMkG,WAAW,GAAGD,YAAY,CAACvG,OAAO;QAExC,CAAU,EAAEmB,aAAa,IAAI,CAAC,CAACqF,WAAW,CAACC,gBAAgB,CAAC,IAA5DC,SAAS,QAAqD,qBAAqB;QAEnF,IAAI,CAAC,CAACF,WAAW,CAACC,gBAAgB,EAAE;UAClC9B,YAAY,CAAC1E,OAAO,EAAEuG,WAAW,CAACC,gBAAgB,CAAC;;QAGrD,IAAItF,aAAa,EAAE;UACjB4E,gBAAgB,GAAGA,gBAAgB,CAACM,GAAG,CACrCjH,gBAAS,CAACC,IAAI,CAACkH,YAAY,CAACxG,KAAK,CAACQ,eAAe,CAACiG,WAAW,CAAChG,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,CAAC,CACtG;;;QAGH,IAAIsC,cAAc,IAAIuF,WAAW,CAAC9F,SAAS,IAAIjB,mBAAmB,EAAE;UAClEqG,0BAA0B,GAAGA,0BAA0B,CAACO,GAAG,CACzDjH,gBAAS,CAACC,IAAI,CAACkH,YAAY,CAACxG,KAAK,CAACiC,gBAAgB,CAACwE,WAAW,CAAChG,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,CAAC,CACvG;;QAEH4H,YAAY,CAACzH,MAAM,CAACmB,OAAO,EAAE;UAAE9B,WAAW,EAAE;SAAO,CAAC;;;;OAIrD,MAAM,IAAI4B,KAAK,CAACa,SAAS,IAAIjF,uBAAe,CAACgL,UAAU,EAAE;QACxD,IAAMA,UAAU,GAAG5G,KAAmB;QACtCA,KAAK,CAACjB,MAAM,CAACmB,OAAO,EAAE;UAAE9B,WAAW,EAAE;SAAO,CAAC;QAC7C2H,0BAA0B,GAAGA,0BAA0B,CAACO,GAAG,CAACM,UAAU,CAACC,MAAM,CAAC;;;;OAI/E,MAAM;QACL,MAAM,qDAAqD;;;;;IAM/D,IAAInB,SAAS,CAACzE,MAAM,GAAG,CAAC,EAAEf,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC6B,KAAK,EAAE,CAAC8B,WAAW,EAAEC,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACtG,OAAO2F,UAAU,CAAC0B,UAAU,CAAC5G,OAAO,EAAE8F,gBAAgB,EAAET,MAAM,CAAC;;;;;;;EAGjE,WAKcwB,qBAAqB,GAA5B,+BAA6BzB,MAA2B,EAAEC;QAAAA;MAAAA,SAA2B,EAAE;;IAC5F,IAAIrF,OAAO,GAAG,IAAIpC,YAAY,EAAE;IAChC,IAAIkJ,UAAU,GAAG3H,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC;IAElC,IAAMlB,WAAW,GAAGkH,MAAM,CAACrE,MAAM,IAAI,CAAC,IAAIqE,MAAM,CAAC,CAAC,CAAC,CAACQ,MAAM,CAAC7E,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI;IAErF,sDAAoBqE,MAAM,2CAAE;MAAA,IAAjBtF,KAAK;MACdA,KAAK,CAACjB,MAAM,CAACmB,OAAO,EAAE;QAAE9B,WAAW,EAAXA;OAAa,CAAC;MACtC4I,UAAU,GAAGA,UAAU,CAACV,GAAG,CAACtG,KAAK,CAACoG,aAAa,EAAE,CAAC;;IAGpDlG,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAAC6B,KAAK,EAAE,CAAC8B,WAAW,EAAEC,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC5E,OAAO2F,UAAU,CAAC0B,UAAU,CAAC5G,OAAO,EAAE8G,UAAU,EAAEzB,MAAM,CAAC;;;;;;;;EAG3D,WAMc0B,uBAAuB,GAA9B,iCACL3B,MAAkD,EAClDrF,OAAoB;;IAGpB,IAAMC,OAAO,GAAG,IAAIpC,YAAY,EAAE;IAElC,IAAMkC,KAAK,GAAiB,IAAID,YAAY,CAACuF,MAAM,EAAErF,OAAO,CAAC;IAE7D,IAAMiH,aAAa,GAAGlH,KAAK,CAACA,KAAK,CAACK,WAAW,CAACC,QAAQ;IACtD,CAAU,EAAE4G,aAAa,CAAC3G,QAAQ,IAAI,CAAC,CAACN,OAAO,CAACyG,gBAAgB,CAAC,IAAjEC,SAAS,QAA0D,qBAAqB;IAExF,IAAI1G,OAAO,CAACyG,gBAAgB,EAAE;MAC5B9B,YAAY,CAAC1E,OAAO,EAAED,OAAO,CAACyG,gBAAgB,CAAC;;IAGjD,IAAMS,mBAAmB,GAAGD,aAAa,CAAC3G,QAAQ,GAC9ClB,gBAAS,CAACC,IAAI,CAACU,KAAK,CAACA,KAAK,CAACQ,eAAe,CAACP,OAAO,CAACQ,iBAAiB,CAAC,CAACC,QAAQ,CAAC9B,QAAQ,EAAE,CAAC,GAC1FS,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC;IAErBU,KAAK,CAACjB,MAAM,CAACmB,OAAO,EAAE;MAAE9B,WAAW,EAAE;KAAO,CAAC;IAC7C,OAAOgH,UAAU,CAAC0B,UAAU,CAAC5G,OAAO,EAAEiH,mBAAmB,EAAE;MACzDC,QAAQ,EAAEnH,OAAO,CAACoH,2BAA2B,GAAGhI,gBAAS,CAACC,IAAI,CAACW,OAAO,CAACoH,2BAA2B,CAAC,GAAGC;KACvG,CAAC;;;;;;;;EAIJ,WAMeR,UAAU,GAAjB,oBACN5G,OAAqB,EACrBiH,mBAA8B,EAC9B5B;QAAAA;MAAAA,SAA2B,EAAE;;IAE7B,IAAQxH,QAAQ,GAAamC,OAAO,CAA5BnC,QAAQ;MAAEC,MAAM,GAAKkC,OAAO,CAAlBlC,MAAM;IACxB,IAAMuJ,iBAAiB,GAAG,CAAC,CAAChC,MAAM,CAAC6B,QAAQ,GAAG,gCAAgC,GAAG,wBAAwB;IACzG,IAAMjJ,UAAU,GAAG,CAAC,CAACoH,MAAM,CAAC6B,QAAQ,GAAG,CAACrJ,QAAQ,EAAEC,MAAM,EAAEuH,MAAM,CAAC6B,QAAQ,CAAC,GAAG,CAACrJ,QAAQ,EAAEC,MAAM,CAAC;IAC/F,IAAMwJ,QAAQ,GAAGpC,UAAU,CAACqC,SAAS,CAACC,kBAAkB,CAACH,iBAAiB,EAAEpJ,UAAU,CAAC;IACvF,OAAO;MAAEqJ,QAAQ,EAARA,QAAQ;MAAEG,KAAK,EAAER,mBAAmB,CAACS,WAAW;KAAI;GAC9D;EAAA;AAAA;AAlJaxC,oBAAS,gBAAc,IAAIyC,eAAS,CAACC,wBAAG,CAAC;;ICAnC7B,QAAQ,GAK5B,kBAAY8B,MAAc,EAAEjC,MAAW;EAJ9B,cAAS,GAAoBlK,uBAAe,CAACqK,QAAQ;EAK5D,EAAUH,MAAM,CAAC7E,MAAM,GAAG,CAAC,KAA3B0F,SAAS,QAAoB,cAAc;EAC3C,IAAI,CAACoB,MAAM,GAAGA,MAAM;EACpB,IAAI,CAACjC,MAAM,GAAGA,MAAM;AACtB,CAAC;AAgBH,AAAA,WAAYkC,MAAM;EAChBA,mCAAyB;EACzBA,iCAAuB;EACvBA,yBAAe;EACfA,uBAAa;EACbA,6BAAmB;EACnBA,+BAAqB;EACrBA,qCAA2B;EAC3BA,uBAAa;AACf,CAAC,EATWA,cAAM,KAANA,cAAM;AAWlB,AAAA,WAAYC,SAAS;EACnBA,8BAAiB;EACjBA,gCAAmB;EACnBA,sCAAyB;AAC3B,CAAC,EAJWA,iBAAS,KAATA,iBAAS;;IChDRC,eAAgB;EAAA;EAG3B,yBAAYpC,MAAwB;WAClC,qBAAMkC,cAAM,CAACG,WAAW,EAAErC,MAAM,CAAC;;EAClC;EAAA,OAED/G,MAAM,GAAN,gBAAOmB,OAAqB,EAAEqF,MAAmB;IAC/C,qDAAmB,IAAI,CAACO,MAAM,wCAAE;MAAA,IAArBsC,IAAI;MACblI,OAAO,CAACjC,UAAU,CAACpC,WAAW,CAACgB,WAAW,EAAE,CAACuL,IAAI,CAACC,OAAO,EAAED,IAAI,CAACzH,SAAS,EAAEyH,IAAI,CAACT,KAAK,CAAC,EAAEpC,MAAM,CAACnH,WAAW,CAAC;;GAE9G;EAAA,OAEDkK,WAAW,GAAX;IACE,IAAIC,QAAQ,GAAc,EAAE;IAC5B,sDAAmB,IAAI,CAACzC,MAAM,2CAAE;MAAA,IAArBsC,IAAI;MACbG,QAAQ,CAAChK,IAAI,CAAC;QACZiK,YAAY,EAAEN,eAAe,CAACO,kBAAkB;QAChDJ,OAAO,EAAED,IAAI,CAACC,OAAO;QACrBK,SAAS,EAAET,iBAAS,CAACU;OACtB,CAAC;;IAEJ,OAAOJ,QAAQ;GAChB;EAAA,OAEDnC,aAAa,GAAb;IACE,IAAIwC,KAAK,GAAGvJ,gBAAS,CAACC,IAAI,CAAC,CAAC,CAAC;IAC7B,sDAAmB,IAAI,CAACwG,MAAM,2CAAE;MAAA,IAArBsC,IAAI;MACbQ,KAAK,GAAGA,KAAK,CAACtC,GAAG,CAAC8B,IAAI,CAACT,KAAK,CAAC;;IAE/B,OAAOiB,KAAK;GACb;EAAA;AAAA,EA/BkC3C,QAAwB;AAC7CiC,kCAAkB,GAAW,4CAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}