UNPKG

ulysses-sdk

Version:

An sdk for interacting with the Ulysses contracts

30,118 lines 1.02 MB
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

var JSBI = _interopDefault(require('jsbi'));
var maiaCoreSdk = require('maia-core-sdk');
var abi$7 = require('@ethersproject/abi');
var solidity = require('@ethersproject/solidity');
var solady = require('solady');
var invariant = _interopDefault(require('tiny-invariant'));
var address = require('@ethersproject/address');

var _EVM_CHAIN_ID_TO_ROOT, _DEFAULT_GAS_PARAMS;
var ROOT_CHAIN_IDS = [maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, maiaCoreSdk.SupportedChainId.SEPOLIA];
var EVM_CHAIN_ID_TO_ROOT_CHAIN_ID = (_EVM_CHAIN_ID_TO_ROOT = {}, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.MAINNET] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.ARBITRUM_ONE] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.OPTIMISM] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.POLYGON] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.BSC] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.AVAX] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.METIS] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.BASE] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.SONIC] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.BERA] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.FRAXTAL] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.SWELL] = maiaCoreSdk.SupportedChainId.ARBITRUM_ONE, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.SEPOLIA] = maiaCoreSdk.SupportedChainId.SEPOLIA, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.ARBITRUM_SEPOLIA] = maiaCoreSdk.SupportedChainId.SEPOLIA, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.OPTIMISM_SEPOLIA] = maiaCoreSdk.SupportedChainId.SEPOLIA, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.BASE_SEPOLIA] = maiaCoreSdk.SupportedChainId.SEPOLIA, _EVM_CHAIN_ID_TO_ROOT[maiaCoreSdk.SupportedChainId.POLYGON_AMOY] = maiaCoreSdk.SupportedChainId.SEPOLIA, _EVM_CHAIN_ID_TO_ROOT);
/**
 * Holds the action ids for the branch router.
 * @param NO_ASSET_DEPOSIT - The action doesn't require any asset to be deposited.
 * @param SINGLE_ASSET_DEPOSIT - The action requires a single asset to be deposited.
 * @param MULTIPLE_ASSET_DEPOSIT - The action requires multiple assets to be deposited.
 */
var BRANCH_BRIDGE_AGENT_ACTION_ID = {
  NO_ASSET_DEPOSIT: 1,
  SINGLE_ASSET_DEPOSIT: 2,
  MULTIPLE_ASSET_DEPOSIT: 3,
  RETRIEVE_SETTLEMENT: 4,
  FALLBACK: 5
};
/**
 * Holds the base gas for the branch bridge agent actions.
 * @param NO_ASSET_DEPOSIT
 * @param SINGLE_ASSET_DEPOSIT
 * @param MULTIPLE_ASSET_DEPOSIT
 */
var BRANCH_BRIDGE_AGENT_ACTION_BASE_GAS = {
  NO_ASSET_DEPOSIT: 100000,
  SINGLE_ASSET_DEPOSIT: 150000,
  MULTIPLE_ASSET_DEPOSIT: 200000,
  SINGLE_ASSET_DEPOSIT_WITH_FALLBACK: 290000,
  MULTIPLE_ASSET_DEPOSIT_WITH_FALLBACK: 340000,
  RETRIEVE_SETTLEMENT: 100000,
  FALLBACK: 140000
};
/**
 * Holds the action ids for the Core Branch Router.
 * @param RECEIVE_ADD_GLOBAL_TOKEN
 * @param RECEIVE_ADD_BRIDGE_AGENT
 * @param TOGGLE_BRANCH_BRIDGE_AGENT_FATORY
 * @param TOGGLE_STRATEGY_TOKEN
 * @param UPDATE_STRATEGY_TOKEN
 * @param TOGGLE_PORT_STRATEGY
 * @param UPDATE_PORT_STRATEGY
 * @param SET_CORE_BRANCH_ROUTER
 * @param SWEEP
 */
var CORE_BRANCH_ROUTER_FUNC_ID = {
  RECEIVE_ADD_GLOBAL_TOKEN: 1,
  RECEIVE_ADD_BRIDGE_AGENT: 2,
  TOGGLE_BRANCH_BRIDGE_AGENT_FATORY: 3,
  TOGGLE_STRATEGY_TOKEN: 4,
  UPDATE_STRATEGY_TOKEN: 5,
  TOGGLE_PORT_STRATEGY: 6,
  UPDATE_PORT_STRATEGY: 7,
  SET_CORE_BRANCH_ROUTER: 8,
  SWEEP: 9
};
/**
 * Holds the action ids for the Core Root Router.
 */
var CORE_ROOT_ROUTER_FUNC_ID = {
  ADD_GLOBAL_TOKEN: 1,
  ADD_LOCAL_TOKEN: 2,
  SET_LOCAL_TOKEN: 3,
  SYNC_BRANCH_BRIDGE_AGENT: 4
};
/**
 * Holds the action ids for the Root Bridge Agent.
 * @param NO_ASSET_DEPOSIT
 * @param SINGLE_ASSET_DEPOSIT
 * @param MULTIPLE_ASSET_DEPOSIT
 * @param SIGNED_NO_ASSET_DEPOSIT
 * @param SIGNED_SINGLE_ASSET_DEPOSIT
 * @param SIGNED_MULTIPLE_ASSET_DEPOSIT
 * @param RETRY_SETTLEMENT
 * @param RETRIEVE_DEPOSIT
 * @param FALLBACK
 */
var ROOT_BRIDGE_AGENT_ACTION_ID = {
  NO_ASSET_DEPOSIT: 1,
  SINGLE_ASSET_DEPOSIT: 2,
  MULTIPLE_ASSET_DEPOSIT: 3,
  SIGNED_NO_ASSET_DEPOSIT: 4,
  SIGNED_SINGLE_ASSET_DEPOSIT: 5,
  SIGNED_MULTIPLE_ASSET_DEPOSIT: 6,
  RETRY_SETTLEMENT: 7,
  RETRIEVE_DEPOSIT: 8,
  FALLBACK: 9
};
/**
 * Holds the base gas for the Root Bridge Agent actions.
 * @param NO_ASSET_DEPOSIT
 * @param SINGLE_ASSET_DEPOSIT
 * @param MULTIPLE_ASSET_DEPOSIT
 * @param SIGNED_NO_ASSET_DEPOSIT
 * @param SIGNED_SINGLE_ASSET_DEPOSIT
 * @param SIGNED_MULTIPLE_ASSET_DEPOSIT
 * @param RETRY_SETTLEMENT
 * @param RETRIEVE_DEPOSIT
 * @param FALLBACK
 */
var ROOT_BRIDGE_AGENT_ACTION_BASE_GAS = {
  NO_ASSET_DEPOSIT: 100000,
  SINGLE_ASSET_DEPOSIT: 150000,
  MULTIPLE_ASSET_DEPOSIT: 200000,
  SIGNED_NO_ASSET_DEPOSIT: 100000,
  SIGNED_SINGLE_ASSET_DEPOSIT: 150000,
  SIGNED_MULTIPLE_ASSET_DEPOSIT: 200000,
  SIGNED_SINGLE_ASSET_DEPOSIT_WITH_FALLBACK: 290000,
  SIGNED_MULTIPLE_ASSET_DEPOSIT_WITH_FALLBACK: 340000,
  RETRY_SETTLEMENT: 100000,
  RETRIEVE_DEPOSIT: 100000,
  FALLBACK: 140000
};
/**
 * Holds the functions ids to be passed on the multicall calldata first byte.
 * ```
 *   0x01         | multicallNoOutput
 *   0x02         | multicallSingleOutput
 *   0x03         | multicallMultipleOutput
 *   0x04         | multicallSignedNoOutput
 *   0x05         | multicallSignedSingleOutput
 *   0x06         | multicallSignedMultipleOutput
 * ```
 * @param NO_OUTPUT - The multicall doesn't return any output.
 * @param SINGLE_OUTPUT - The multicall returns a single output.
 * @param MULTIPLE_OUTPUT - The multicall returns multiple outputs.
 * @param SIGNED_NO_OUTPUT - The multicall doesn't return any output and is using the virtual account.
 * @param SIGNED_SINGLE_OUTPUT - The multicall returns a single output and is using the virtual account.
 * @param SIGNED_MULTIPLE_OUTPUT - The multicall returns multiple outputs and is using the virtual account.
 */
var MULTICALL_FUNCID = {
  NO_OUTPUT: '0x01',
  SINGLE_OUTPUT: '0x02',
  MULTIPLE_OUTPUT: '0x03',
  SIGNED_NO_OUTPUT: '0x04',
  SIGNED_SINGLE_OUTPUT: '0x05',
  SIGNED_MULTIPLE_OUTPUT: '0x06'
};
/**
 * Holds the default Supported Chain Id to gas params used in gas estimation.
 */
var DEFAULT_GAS_PARAMS = (_DEFAULT_GAS_PARAMS = {}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.MAINNET] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.ARBITRUM_ONE] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(2000000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.OPTIMISM] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.BASE] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.POLYGON] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.BSC] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.AVAX] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.METIS] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.SONIC] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.BERA] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.FRAXTAL] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.SWELL] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e16).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.SEPOLIA] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(2000000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.ARBITRUM_SEPOLIA] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.OPTIMISM_SEPOLIA] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.BASE_SEPOLIA] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS[maiaCoreSdk.SupportedChainId.POLYGON_AMOY] = {
  gasLimit: /*#__PURE__*/JSBI.BigInt(600000).toString(),
  remoteBranchExecutionGas: /*#__PURE__*/JSBI.BigInt(1e17).toString()
}, _DEFAULT_GAS_PARAMS);

var abi = [
	{
		type: "constructor",
		inputs: [
		],
		stateMutability: "nonpayable"
	},
	{
		type: "function",
		name: "bridgeAgentExecutorAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "callOut",
		inputs: [
			{
				name: "_params",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "_gParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "callOutAndBridge",
		inputs: [
			{
				name: "_params",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "_dParams",
				type: "tuple",
				internalType: "struct DepositInput",
				components: [
					{
						name: "hToken",
						type: "address",
						internalType: "address"
					},
					{
						name: "token",
						type: "address",
						internalType: "address"
					},
					{
						name: "amount",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "deposit",
						type: "uint256",
						internalType: "uint256"
					}
				]
			},
			{
				name: "_gParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "callOutAndBridgeMultiple",
		inputs: [
			{
				name: "_params",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "_dParams",
				type: "tuple",
				internalType: "struct DepositMultipleInput",
				components: [
					{
						name: "hTokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "tokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "amounts",
						type: "uint256[]",
						internalType: "uint256[]"
					},
					{
						name: "deposits",
						type: "uint256[]",
						internalType: "uint256[]"
					}
				]
			},
			{
				name: "_gParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "cancelOwnershipHandover",
		inputs: [
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "completeOwnershipHandover",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeNoSettlement",
		inputs: [
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeSettlement",
		inputs: [
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "tuple",
				internalType: "struct SettlementParams",
				components: [
					{
						name: "settlementNonce",
						type: "uint32",
						internalType: "uint32"
					},
					{
						name: "recipient",
						type: "address",
						internalType: "address"
					},
					{
						name: "hToken",
						type: "address",
						internalType: "address"
					},
					{
						name: "token",
						type: "address",
						internalType: "address"
					},
					{
						name: "amount",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "deposit",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeSettlementMultiple",
		inputs: [
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "tuple",
				internalType: "struct SettlementMultipleParams",
				components: [
					{
						name: "numberOfAssets",
						type: "uint8",
						internalType: "uint8"
					},
					{
						name: "recipient",
						type: "address",
						internalType: "address"
					},
					{
						name: "settlementNonce",
						type: "uint32",
						internalType: "uint32"
					},
					{
						name: "hTokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "tokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "amounts",
						type: "uint256[]",
						internalType: "uint256[]"
					},
					{
						name: "deposits",
						type: "uint256[]",
						internalType: "uint256[]"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "getDepositEntry",
		inputs: [
			{
				name: "_depositNonce",
				type: "uint32",
				internalType: "uint32"
			}
		],
		outputs: [
			{
				name: "",
				type: "tuple",
				internalType: "struct Deposit",
				components: [
					{
						name: "status",
						type: "uint8",
						internalType: "uint8"
					},
					{
						name: "isSigned",
						type: "uint88",
						internalType: "uint88"
					},
					{
						name: "owner",
						type: "address",
						internalType: "address"
					},
					{
						name: "hTokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "tokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "amounts",
						type: "uint256[]",
						internalType: "uint256[]"
					},
					{
						name: "deposits",
						type: "uint256[]",
						internalType: "uint256[]"
					}
				]
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "initialize",
		inputs: [
			{
				name: "_localBridgeAgentAddress",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
		],
		stateMutability: "nonpayable"
	},
	{
		type: "function",
		name: "localBridgeAgentAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "localPortAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "owner",
		inputs: [
		],
		outputs: [
			{
				name: "result",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "ownershipHandoverExpiresAt",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
			{
				name: "result",
				type: "uint256",
				internalType: "uint256"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "renounceOwnership",
		inputs: [
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "requestOwnershipHandover",
		inputs: [
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "retryDeposit",
		inputs: [
			{
				name: "_depositNonce",
				type: "uint32",
				internalType: "uint32"
			},
			{
				name: "_params",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "_gParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "transferOwnership",
		inputs: [
			{
				name: "newOwner",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "event",
		name: "OwnershipHandoverCanceled",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			}
		],
		anonymous: false
	},
	{
		type: "event",
		name: "OwnershipHandoverRequested",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			}
		],
		anonymous: false
	},
	{
		type: "event",
		name: "OwnershipTransferred",
		inputs: [
			{
				name: "oldOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			},
			{
				name: "newOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			}
		],
		anonymous: false
	},
	{
		type: "error",
		name: "AlreadyInitialized",
		inputs: [
		]
	},
	{
		type: "error",
		name: "NewOwnerIsZeroAddress",
		inputs: [
		]
	},
	{
		type: "error",
		name: "NoHandoverRequest",
		inputs: [
		]
	},
	{
		type: "error",
		name: "Unauthorized",
		inputs: [
		]
	},
	{
		type: "error",
		name: "UnrecognizedBridgeAgentExecutor",
		inputs: [
		]
	},
	{
		type: "error",
		name: "UnrecognizedFunctionId",
		inputs: [
		]
	}
];
var bytecode = {
	object: "0x6080604052600160005534801561001557600080fd5b5061001f33610024565b610060565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6118a18061006f6000396000f3fe6080604052600436106101145760003560e01c806383dd527d116100a0578063f04e283e11610064578063f04e283e14610270578063f2fde38b14610283578063f4f79eb514610296578063fa536bec146102a9578063fee81cf4146102b757600080fd5b806383dd527d146101d757806384cb82b6146102045780638da5cb5b14610217578063c4d66de814610230578063cd9f60311461025057600080fd5b806351e372b0116100e757806351e372b01461015c578063546af9311461016a57806354d1f13d146101a75780635abfaf6c146101af578063715018a6146101cf57600080fd5b806315859950146101195780631e2bcb1a1461012e578063256929621461014157806346fcff1814610149575b600080fd5b61012c610127366004610bee565b6102f8565b005b61012c61013c366004610c54565b6103ce565b61012c610530565b61012c610157366004610cc3565b61057f565b61012c610157366004610ed9565b34801561017657600080fd5b5060035461018a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61012c610598565b3480156101bb57600080fd5b5060015461018a906001600160a01b031681565b61012c6105d4565b3480156101e357600080fd5b506101f76101f2366004611010565b6105e8565b60405161019e91906110a6565b61012c610212366004611166565b610698565b34801561022357600080fd5b50638b78c6d8195461018a565b34801561023c57600080fd5b5061012c61024b3660046111c0565b61070a565b34801561025c57600080fd5b5060025461018a906001600160a01b031681565b61012c61027e3660046111c0565b610898565b61012c6102913660046111c0565b6108d8565b61012c6102a43660046111dd565b6108ff565b61012c610157366004611231565b3480156102c357600080fd5b506102ea6102d23660046111c0565b63389a75e1600c908152600091909152602090205490565b60405190815260200161019e565b6000546001146103235760405162461bcd60e51b815260040161031a906112f2565b60405180910390fd5b600260005561035761033860208401846111c0565b61034860408501602086016111c0565b8460400135856060013561099a565b60025460405163a507c54360e01b81526001600160a01b039091169063a507c543903490610391903390899089908990899060040161133f565b6000604051808303818588803b1580156103aa57600080fd5b505af11580156103be573d6000803e3d6000fd5b5050600160005550505050505050565b6000546001146103f05760405162461bcd60e51b815260040161031a906112f2565b60026000556104f661040283806113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506104419250505060208501856113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506104809250505060408601866113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506104bf9250505060608701876113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506109fe92505050565b600254604051630dbf61bb60e31b81526001600160a01b0390911690636dfb0dd890349061039190339089908990899089906004016114c5565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6040516348d3a3f760e01b815260040160405180910390fd5b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6105dc610a89565b6105e66000610aa4565b565b6040805160e0810182526000808252602082018190528183015260608082018190526080820181905260a0820181905260c082015260025491516383dd527d60e01b815263ffffffff8416600482015290916001600160a01b0316906383dd527d90602401600060405180830381865afa15801561066a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106929190810190611686565b92915050565b600254604051635515a13360e01b81526001600160a01b0390911690635515a1339034906106d29033908990899089908990600401611791565b6000604051808303818588803b1580156106eb57600080fd5b505af11580156106ff573d6000803e3d6000fd5b505050505050505050565b610712610a89565b6001600160a01b0381166107685760405162461bcd60e51b815260206004820181905260248201527f427269646765204167656e7420616464726573732063616e6e6f742062652030604482015260640161031a565b6107706105d4565b600280546001600160a01b0319166001600160a01b038316908117909155604080516316afebdb60e21b81529051635abfaf6c916004808201926020929091908290030181865afa1580156107c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ed91906117da565b600160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663546af9316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087591906117da565b600380546001600160a01b0319166001600160a01b039290921691909117905550565b6108a0610a89565b63389a75e1600c52806000526020600c2080544211156108c857636f5e88186000526004601cfd5b600090556108d581610aa4565b50565b6108e0610a89565b8060601b6108f657637448fbae6000526004601cfd5b6108d581610aa4565b6000546001146109215760405162461bcd60e51b815260040161031a906112f2565b600260008190555460405163114357cb60e01b81526001600160a01b039091169063114357cb90349061095e9033908890889088906004016117f7565b6000604051808303818588803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b50506001600055505050505050565b60006109a68284611834565b11156109c3576109c36001600160a01b0385163330848603610ae2565b80156109f8576109de6001600160a01b038416333084610ae2565b6001546109f8906001600160a01b03858116911683610b36565b50505050565b60005b8451811015610a8257610a7a858281518110610a1f57610a1f611855565b6020026020010151858381518110610a3957610a39611855565b6020026020010151858481518110610a5357610a53611855565b6020026020010151858581518110610a6d57610a6d611855565b602002602001015161099a565b600101610a01565b5050505050565b638b78c6d8195433146105e6576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af13d156001600051141716610b2857637939f4246000526004601cfd5b600060605260405250505050565b816014528060345263095ea7b360601b60005260206000604460106000875af13d156001600051141716610b7257633e3f8f736000526004601cfd5b6000603452505050565b60008083601f840112610b8e57600080fd5b5081356001600160401b03811115610ba557600080fd5b602083019150836020828501011115610bbd57600080fd5b9250929050565b600060808284031215610bd657600080fd5b50919050565b600060408284031215610bd657600080fd5b60008060008060e08587031215610c0457600080fd5b84356001600160401b03811115610c1a57600080fd5b610c2687828801610b7c565b9095509350610c3a90508660208701610bc4565b9150610c498660a08701610bdc565b905092959194509250565b60008060008060808587031215610c6a57600080fd5b84356001600160401b0380821115610c8157600080fd5b610c8d88838901610b7c565b90965094506020870135915080821115610ca657600080fd5b50610cb387828801610bc4565b925050610c498660408701610bdc565b60008060208385031215610cd657600080fd5b82356001600160401b03811115610cec57600080fd5b610cf885828601610b7c565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715610d3c57610d3c610d04565b60405290565b60405160c081016001600160401b0381118282101715610d3c57610d3c610d04565b604051601f8201601f191681016001600160401b0381118282101715610d8c57610d8c610d04565b604052919050565b60ff811681146108d557600080fd5b8035610dae81610d94565b919050565b6001600160a01b03811681146108d557600080fd5b8035610dae81610db3565b803563ffffffff81168114610dae57600080fd5b60006001600160401b03821115610e0057610e00610d04565b5060051b60200190565b600082601f830112610e1b57600080fd5b81356020610e30610e2b83610de7565b610d64565b82815260059290921b84018101918181019086841115610e4f57600080fd5b8286015b84811015610e73578035610e6681610db3565b8352918301918301610e53565b509695505050505050565b600082601f830112610e8f57600080fd5b81356020610e9f610e2b83610de7565b82815260059290921b84018101918181019086841115610ebe57600080fd5b8286015b84811015610e735780358352918301918301610ec2565b600080600060408486031215610eee57600080fd5b83356001600160401b0380821115610f0557600080fd5b610f1187838801610b7c565b90955093506020860135915080821115610f2a57600080fd5b9085019060e08288031215610f3e57600080fd5b610f46610d1a565b610f4f83610da3565b8152610f5d60208401610dc8565b6020820152610f6e60408401610dd3565b6040820152606083013582811115610f8557600080fd5b610f9189828601610e0a565b606083015250608083013582811115610fa957600080fd5b610fb589828601610e0a565b60808301525060a083013582811115610fcd57600080fd5b610fd989828601610e7e565b60a08301525060c083013582811115610ff157600080fd5b610ffd89828601610e7e565b60c0830152508093505050509250925092565b60006020828403121561102257600080fd5b61102b82610dd3565b9392505050565b600081518084526020808501945080840160005b8381101561106b5781516001600160a01b031687529582019590820190600101611046565b509495945050505050565b600081518084526020808501945080840160005b8381101561106b5781518752958201959082019060010161108a565b6020815260ff8251166020820152600060208301516110d460408401826affffffffffffffffffffff169052565b5060408301516001600160a01b038116606084015250606083015160e06080840152611104610100840182611032565b90506080840151601f19808584030160a08601526111228383611032565b925060a08601519150808584030160c086015261113f8383611076565b925060c08601519150808584030160e08601525061115d8282611076565b95945050505050565b6000806000806080858703121561117c57600080fd5b61118585610dd3565b935060208501356001600160401b038111156111a057600080fd5b6111ac87828801610b7c565b9094509250610c4990508660408701610bdc565b6000602082840312156111d257600080fd5b813561102b81610db3565b6000806000606084860312156111f257600080fd5b83356001600160401b0381111561120857600080fd5b61121486828701610b7c565b909450925061122890508560208601610bdc565b90509250925092565b600080600083850360e081121561124757600080fd5b84356001600160401b0381111561125d57600080fd5b61126987828801610b7c565b90955093505060c0601f198201121561128157600080fd5b5061128a610d42565b61129660208601610dd3565b815260408501356112a681610db3565b602082015260608501356112b981610db3565b604082015260808501356112cc81610db3565b8060608301525060a0850135608082015260c085013560a0820152809150509250925092565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03868116825261010060208301819052600091611366848301888a611316565b92508535915061137582610db3565b908116604084015260208501359061138c82610db3565b166060838101919091526040850135608084015284013560a0830152823560c0830152602083013560e08301525b9695505050505050565b6000808335601e198436030181126113db57600080fd5b8301803591506001600160401b038211156113f557600080fd5b6020019150600581901b3603821315610bbd57600080fd5b6000808335601e1984360301811261142457600080fd5b83016020810192503590506001600160401b0381111561144357600080fd5b8060051b3603821315610bbd57600080fd5b8183526000602080850194508260005b8581101561106b57813561147881610db3565b6001600160a01b031687529582019590820190600101611465565b81835260006001600160fb1b038311156114ac57600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b038616815260a0602082018190526000906114ea9083018688611316565b82810360408401526114fc858661140d565b6080835261150e608084018284611455565b91505061151e602087018761140d565b8383036020850152611531838284611455565b92505050611542604087018761140d565b8383036040850152611555838284611493565b92505050611566606087018761140d565b8383036060850152611579838284611493565b873560608801526020880135608088015294506113ba9350505050565b8051610dae81610d94565b80516affffffffffffffffffffff81168114610dae57600080fd5b8051610dae81610db3565b600082601f8301126115d857600080fd5b815160206115e8610e2b83610de7565b82815260059290921b8401810191818101908684111561160757600080fd5b8286015b84811015610e7357805161161e81610db3565b835291830191830161160b565b600082601f83011261163c57600080fd5b8151602061164c610e2b83610de7565b82815260059290921b8401810191818101908684111561166b57600080fd5b8286015b84811015610e73578051835291830191830161166f565b60006020828403121561169857600080fd5b81516001600160401b03808211156116af57600080fd5b9083019060e082860312156116c357600080fd5b6116cb610d1a565b6116d483611596565b81526116e2602084016115a1565b60208201526116f3604084016115bc565b604082015260608301518281111561170a57600080fd5b611716878286016115c7565b60608301525060808301518281111561172e57600080fd5b61173a878286016115c7565b60808301525060a08301518281111561175257600080fd5b61175e8782860161162b565b60a08301525060c08301518281111561177657600080fd5b6117828782860161162b565b60c08301525095945050505050565b6001600160a01b038616815263ffffffff8516602082015260a0604082018190526000906117c29083018587611316565b833560608401526020840135608084015290506113ba565b6000602082840312156117ec57600080fd5b815161102b81610db3565b6001600160a01b038516815260806020820181905260009061181c9083018587611316565b8335604084015260208401356060840152905061115d565b8181038181111561069257634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220793f9104d14cdc05836f5888789d38adefd3fa873022af933e724fea979e888964736f6c63430008130033",
	sourceMap: "676:7112:82:-:0;;;454:1:77;429:26;;1461:59:82;;;;;;;;;-1:-1:-1;1485:28:82;1502:10;1485:16;:28::i;:::-;676:7112;;4883:1190:30;-1:-1:-1;;;;;5793:26:30;-1:-1:-1;;5876:29:30;;;5793:26;6031:1;5991:38;6031:1;;5980:63;4883:1190;:::o;676:7112:82:-;;;;;;;",
	linkReferences: {
	}
};
var deployedBytecode = {
	object: "0x6080604052600436106101145760003560e01c806383dd527d116100a0578063f04e283e11610064578063f04e283e14610270578063f2fde38b14610283578063f4f79eb514610296578063fa536bec146102a9578063fee81cf4146102b757600080fd5b806383dd527d146101d757806384cb82b6146102045780638da5cb5b14610217578063c4d66de814610230578063cd9f60311461025057600080fd5b806351e372b0116100e757806351e372b01461015c578063546af9311461016a57806354d1f13d146101a75780635abfaf6c146101af578063715018a6146101cf57600080fd5b806315859950146101195780631e2bcb1a1461012e578063256929621461014157806346fcff1814610149575b600080fd5b61012c610127366004610bee565b6102f8565b005b61012c61013c366004610c54565b6103ce565b61012c610530565b61012c610157366004610cc3565b61057f565b61012c610157366004610ed9565b34801561017657600080fd5b5060035461018a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61012c610598565b3480156101bb57600080fd5b5060015461018a906001600160a01b031681565b61012c6105d4565b3480156101e357600080fd5b506101f76101f2366004611010565b6105e8565b60405161019e91906110a6565b61012c610212366004611166565b610698565b34801561022357600080fd5b50638b78c6d8195461018a565b34801561023c57600080fd5b5061012c61024b3660046111c0565b61070a565b34801561025c57600080fd5b5060025461018a906001600160a01b031681565b61012c61027e3660046111c0565b610898565b61012c6102913660046111c0565b6108d8565b61012c6102a43660046111dd565b6108ff565b61012c610157366004611231565b3480156102c357600080fd5b506102ea6102d23660046111c0565b63389a75e1600c908152600091909152602090205490565b60405190815260200161019e565b6000546001146103235760405162461bcd60e51b815260040161031a906112f2565b60405180910390fd5b600260005561035761033860208401846111c0565b61034860408501602086016111c0565b8460400135856060013561099a565b60025460405163a507c54360e01b81526001600160a01b039091169063a507c543903490610391903390899089908990899060040161133f565b6000604051808303818588803b1580156103aa57600080fd5b505af11580156103be573d6000803e3d6000fd5b5050600160005550505050505050565b6000546001146103f05760405162461bcd60e51b815260040161031a906112f2565b60026000556104f661040283806113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506104419250505060208501856113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506104809250505060408601866113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506104bf9250505060608701876113c4565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506109fe92505050565b600254604051630dbf61bb60e31b81526001600160a01b0390911690636dfb0dd890349061039190339089908990899089906004016114c5565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6040516348d3a3f760e01b815260040160405180910390fd5b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6105dc610a89565b6105e66000610aa4565b565b6040805160e0810182526000808252602082018190528183015260608082018190526080820181905260a0820181905260c082015260025491516383dd527d60e01b815263ffffffff8416600482015290916001600160a01b0316906383dd527d90602401600060405180830381865afa15801561066a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106929190810190611686565b92915050565b600254604051635515a13360e01b81526001600160a01b0390911690635515a1339034906106d29033908990899089908990600401611791565b6000604051808303818588803b1580156106eb57600080fd5b505af11580156106ff573d6000803e3d6000fd5b505050505050505050565b610712610a89565b6001600160a01b0381166107685760405162461bcd60e51b815260206004820181905260248201527f427269646765204167656e7420616464726573732063616e6e6f742062652030604482015260640161031a565b6107706105d4565b600280546001600160a01b0319166001600160a01b038316908117909155604080516316afebdb60e21b81529051635abfaf6c916004808201926020929091908290030181865afa1580156107c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ed91906117da565b600160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663546af9316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087591906117da565b600380546001600160a01b0319166001600160a01b039290921691909117905550565b6108a0610a89565b63389a75e1600c52806000526020600c2080544211156108c857636f5e88186000526004601cfd5b600090556108d581610aa4565b50565b6108e0610a89565b8060601b6108f657637448fbae6000526004601cfd5b6108d581610aa4565b6000546001146109215760405162461bcd60e51b815260040161031a906112f2565b600260008190555460405163114357cb60e01b81526001600160a01b039091169063114357cb90349061095e9033908890889088906004016117f7565b6000604051808303818588803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b50506001600055505050505050565b60006109a68284611834565b11156109c3576109c36001600160a01b0385163330848603610ae2565b80156109f8576109de6001600160a01b038416333084610ae2565b6001546109f8906001600160a01b03858116911683610b36565b50505050565b60005b8451811015610a8257610a7a858281518110610a1f57610a1f611855565b6020026020010151858381518110610a3957610a39611855565b6020026020010151858481518110610a5357610a53611855565b6020026020010151858581518110610a6d57610a6d611855565b602002602001015161099a565b600101610a01565b5050505050565b638b78c6d8195433146105e6576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af13d156001600051141716610b2857637939f4246000526004601cfd5b600060605260405250505050565b816014528060345263095ea7b360601b60005260206000604460106000875af13d156001600051141716610b7257633e3f8f736000526004601cfd5b6000603452505050565b60008083601f840112610b8e57600080fd5b5081356001600160401b03811115610ba557600080fd5b602083019150836020828501011115610bbd57600080fd5b9250929050565b600060808284031215610bd657600080fd5b50919050565b600060408284031215610bd657600080fd5b60008060008060e08587031215610c0457600080fd5b84356001600160401b03811115610c1a57600080fd5b610c2687828801610b7c565b9095509350610c3a90508660208701610bc4565b9150610c498660a08701610bdc565b905092959194509250565b60008060008060808587031215610c6a57600080fd5b84356001600160401b0380821115610c8157600080fd5b610c8d88838901610b7c565b90965094506020870135915080821115610ca657600080fd5b50610cb387828801610bc4565b925050610c498660408701610bdc565b60008060208385031215610cd657600080fd5b82356001600160401b03811115610cec57600080fd5b610cf885828601610b7c565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715610d3c57610d3c610d04565b60405290565b60405160c081016001600160401b0381118282101715610d3c57610d3c610d04565b604051601f8201601f191681016001600160401b0381118282101715610d8c57610d8c610d04565b604052919050565b60ff811681146108d557600080fd5b8035610dae81610d94565b919050565b6001600160a01b03811681146108d557600080fd5b8035610dae81610db3565b803563ffffffff81168114610dae57600080fd5b60006001600160401b03821115610e0057610e00610d04565b5060051b60200190565b600082601f830112610e1b57600080fd5b81356020610e30610e2b83610de7565b610d64565b82815260059290921b84018101918181019086841115610e4f57600080fd5b8286015b84811015610e73578035610e6681610db3565b8352918301918301610e53565b509695505050505050565b600082601f830112610e8f57600080fd5b81356020610e9f610e2b83610de7565b82815260059290921b84018101918181019086841115610ebe57600080fd5b8286015b84811015610e735780358352918301918301610ec2565b600080600060408486031215610eee57600080fd5b83356001600160401b0380821115610f0557600080fd5b610f1187838801610b7c565b90955093506020860135915080821115610f2a57600080fd5b9085019060e08288031215610f3e57600080fd5b610f46610d1a565b610f4f83610da3565b8152610f5d60208401610dc8565b6020820152610f6e60408401610dd3565b6040820152606083013582811115610f8557600080fd5b610f9189828601610e0a565b606083015250608083013582811115610fa957600080fd5b610fb589828601610e0a565b60808301525060a083013582811115610fcd57600080fd5b610fd989828601610e7e565b60a08301525060c083013582811115610ff157600080fd5b610ffd89828601610e7e565b60c0830152508093505050509250925092565b60006020828403121561102257600080fd5b61102b82610dd3565b9392505050565b600081518084526020808501945080840160005b8381101561106b5781516001600160a01b031687529582019590820190600101611046565b509495945050505050565b600081518084526020808501945080840160005b8381101561106b5781518752958201959082019060010161108a565b6020815260ff8251166020820152600060208301516110d460408401826affffffffffffffffffffff169052565b5060408301516001600160a01b038116606084015250606083015160e06080840152611104610100840182611032565b90506080840151601f19808584030160a08601526111228383611032565b925060a08601519150808584030160c086015261113f8383611076565b925060c08601519150808584030160e08601525061115d8282611076565b95945050505050565b6000806000806080858703121561117c57600080fd5b61118585610dd3565b935060208501356001600160401b038111156111a057600080fd5b6111ac87828801610b7c565b9094509250610c4990508660408701610bdc565b6000602082840312156111d257600080fd5b813561102b81610db3565b6000806000606084860312156111f257600080fd5b83356001600160401b0381111561120857600080fd5b61121486828701610b7c565b909450925061122890508560208601610bdc565b90509250925092565b600080600083850360e081121561124757600080fd5b84356001600160401b0381111561125d57600080fd5b61126987828801610b7c565b90955093505060c0601f198201121561128157600080fd5b5061128a610d42565b61129660208601610dd3565b815260408501356112a681610db3565b602082015260608501356112b981610db3565b604082015260808501356112cc81610db3565b8060608301525060a0850135608082015260c085013560a0820152809150509250925092565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03868116825261010060208301819052600091611366848301888a611316565b92508535915061137582610db3565b908116604084015260208501359061138c82610db3565b166060838101919091526040850135608084015284013560a0830152823560c0830152602083013560e08301525b9695505050505050565b6000808335601e198436030181126113db57600080fd5b8301803591506001600160401b038211156113f557600080fd5b6020019150600581901b3603821315610bbd57600080fd5b6000808335601e1984360301811261142457600080fd5b83016020810192503590506001600160401b0381111561144357600080fd5b8060051b3603821315610bbd57600080fd5b8183526000602080850194508260005b8581101561106b57813561147881610db3565b6001600160a01b031687529582019590820190600101611465565b81835260006001600160fb1b038311156114ac57600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b038616815260a0602082018190526000906114ea9083018688611316565b82810360408401526114fc858661140d565b6080835261150e608084018284611455565b91505061151e602087018761140d565b8383036020850152611531838284611455565b92505050611542604087018761140d565b8383036040850152611555838284611493565b92505050611566606087018761140d565b8383036060850152611579838284611493565b873560608801526020880135608088015294506113ba9350505050565b8051610dae81610d94565b80516affffffffffffffffffffff81168114610dae57600080fd5b8051610dae81610db3565b600082601f8301126115d857600080fd5b815160206115e8610e2b83610de7565b82815260059290921b8401810191818101908684111561160757600080fd5b8286015b84811015610e7357805161161e81610db3565b835291830191830161160b565b600082601f83011261163c57600080fd5b8151602061164c610e2b83610de7565b82815260059290921b8401810191818101908684111561166b57600080fd5b8286015b84811015610e73578051835291830191830161166f565b60006020828403121561169857600080fd5b81516001600160401b03808211156116af57600080fd5b9083019060e082860312156116c357600080fd5b6116cb610d1a565b6116d483611596565b81526116e2602084016115a1565b60208201526116f3604084016115bc565b604082015260608301518281111561170a57600080fd5b611716878286016115c7565b60608301525060808301518281111561172e57600080fd5b61173a878286016115c7565b60808301525060a08301518281111561175257600080fd5b61175e8782860161162b565b60a08301525060c08301518281111561177657600080fd5b6117828782860161162b565b60c08301525095945050505050565b6001600160a01b038616815263ffffffff8516602082015260a0604082018190526000906117c29083018587611316565b833560608401526020840135608084015290506113ba565b6000602082840312156117ec57600080fd5b815161102b81610db3565b6001600160a01b038516815260806020820181905260009061181c9083018587611316565b8335604084015260208401356060840152905061115d565b8181038181111561069257634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220793f9104d14cdc05836f5888789d38adefd3fa873022af933e724fea979e888964736f6c63430008130033",
	sourceMap: "676:7112:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3228:534;;;;;;:::i;:::-;;:::i;:::-;;3802:565;;;;;;:::i;:::-;;:::i;9021:617:30:-;;;:::i;4991:127:82:-;;;;;;:::i;:::-;;:::i;5348:202::-;;;;;;:::i;1171:50::-;;;;;;;;;;-1:-1:-1;1171:50:82;;;;-1:-1:-1;;;;;1171:50:82;;;;;;-1:-1:-1;;;;;7784:32:178;;;7766:51;;7754:2;7739:18;1171:50:82;;;;;;;;9720:456:30;;;:::i;1011:31:82:-;;;;;;;;;;-1:-1:-1;1011:31:82;;;;-1:-1:-1;;;;;1011:31:82;;;8762:100:30;;;:::i;2545:187:82:-;;;;;;;;;;-1:-1:-1;2545:187:82;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4407:345::-;;;;;;:::i;:::-;;:::i;11408:182:30:-;;;;;;;;;;-1:-1:-1;;;11556:18:30;11408:182;;1860:461:82;;;;;;;;;;-1:-1:-1;1860:461:82;;;;;:::i;:::-;;:::i;1083:47::-;;;;;;;;;;-1:-1:-1;1083:47:82;;;;-1:-1:-1;;;;;1083:47:82;;;10363:708:30;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;2959:229:82:-;;;;;;:::i;:::-;;:::i;5158:150::-;;;;;;:::i;11693:435:30:-;;;;;;;;;;-1:-1:-1;11693:435:30;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;;;;13101:25:178;;;13089:2;13074:18;11693:435:30;12955:177:178;3228:534:82;512:6:77;;522:1;512:11;504:34;;;;-1:-1:-1;;;504:34:77;;;;;;;:::i;:::-;;;;;;;;;558:1;549:6;:10;3468:92:82::1;3493:15;;::::0;::::1;:8:::0;:15:::1;:::i;:::-;3510:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;3526:8;:15;;;3543:8;:16;;;3468:24;:92::i;:::-;3624:23;::::0;3611:144:::1;::::0;-1:-1:-1;;;3611:144:82;;-1:-1:-1;;;;;3624:23:82;;::::1;::::0;3611:54:::1;::::0;3673:9:::1;::::0;3611:144:::1;::::0;3705:10:::1;::::0;3718:7;;;;3727:8;;3737;;3611:144:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;591:1:77;582:6;:10;-1:-1:-1;;;;;;;3228:534:82:o;3802:565::-;512:6:77;;522:1;512:11;504:34;;;;-1:-1:-1;;;504:34:77;;;;;;;:::i;:::-;558:1;549:6;:10;4052:105:82::1;4086:16;:8:::0;;:16:::1;:::i;:::-;4052:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4104:15:82::1;::::0;-1:-1:-1;;;4104:15:82::1;::::0;::::1;::::0;::::1;:::i;:::-;4052:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4121:16:82::1;::::0;-1:-1:-1;;;4121:16:82::1;::::0;::::1;::::0;::::1;:::i;:::-;4052:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4139:17:82::1;::::0;-1:-1:-1;;;4139:17:82::1;::::0;::::1;::::0;::::1;:::i;:::-;4052:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4052:33:82::1;::::0;-1:-1:-1;;;4052:105:82:i:1;:::-;4221:23;::::0;4208:152:::1;::::0;-1:-1:-1;;;4208:152:82;;-1:-1:-1;;;;;4221:23:82;;::::1;::::0;4208:62:::1;::::0;4278:9:::1;::::0;4208:152:::1;::::0;4310:10:::1;::::0;4323:7;;;;4332:8;;4342;;4208:152:::1;;;:::i;9021:617:30:-:0;9114:15;7972:9;-1:-1:-1;;;;;9132:46:30;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;4991:127:82:-;5087:24;;-1:-1:-1;;;5087:24:82;;;;;;;;;;;9720:456:30;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;2545:187:82:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:23:82;;2657:68;;-1:-1:-1;;;2657:68:82;;19373:10:178;19361:23;;2657:68:82;;;19343:42:178;-1:-1:-1;;;;;;;2670:23:82;;2657:53;;19316:18:178;;2657:68:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2657:68:82;;;;;;;;;;;;:::i;:::-;2650:75;2545:187;-1:-1:-1;;2545:187:82:o;4407:345::-;4622:23;;4609:136;;-1:-1:-1;;;4609:136:82;;-1:-1:-1;;;;;4622:23:82;;;;4609:50;;4667:9;;4609:136;;4691:10;;4703:13;;4718:7;;;;4727:8;;4609:136;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4407:345;;;;:::o;1860:461::-;12517:13:30;:11;:13::i;:::-;-1:-1:-1;;;;;1957:38:82;::::1;1949:83;;;::::0;-1:-1:-1;;;1949:83:82;;23488:2:178;1949:83:82::1;::::0;::::1;23470:21:178::0;;;23507:18;;;23500:30;23566:34;23546:18;;;23539:62;23618:18;;1949:83:82::1;23286:356:178::0;1949:83:82::1;2042:19;:17;:19::i;:::-;2072:23;:50:::0;;-1:-1:-1;;;;;;2072:50:82::1;-1:-1:-1::0;;;;;2072:50:82;::::1;::::0;;::::1;::::0;;;2151:57:::1;::::0;;-1:-1:-1;;;2151:57:82;;;;:55:::1;::::0;:57:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;2072:50;2151:57:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2132:16;;:76;;;;;-1:-1:-1::0;;;;;2132:76:82::1;;;;;-1:-1:-1::0;;;;;2132:76:82::1;;;;;;2260:24;-1:-1:-1::0;;;;;2247:65:82::1;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2218:26;:96:::0;;-1:-1:-1;;;;;;2218:96:82::1;-1:-1:-1::0;;;;;2218:96:82;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;1860:461:82:o;10363:708:30:-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;2959:229:82:-:0;512:6:77;;522:1;512:11;504:34;;;;-1:-1:-1;;;504:34:77;;;;;;;:::i;:::-;558:1;549:6;:10;;;3091:23:82;3078:103:::1;::::0;-1:-1:-1;;;3078:103:82;;-1:-1:-1;;;;;3091:23:82;;::::1;::::0;3078:45:::1;::::0;3131:9:::1;::::0;3078:103:::1;::::0;3150:10:::1;::::0;3163:7;;;;3172:8;;3078:103:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;591:1:77;582:6;:10;-1:-1:-1;;;;;;2959:229:82:o;6027:612::-;6261:1;6240:18;6250:8;6240:7;:18;:::i;:::-;:22;6236:166;;;6306:71;-1:-1:-1;;;;;6306:24:82;;6331:10;6351:4;6358:18;;;6306:24;:71::i;:::-;6474:12;;6470:163;;6502:60;-1:-1:-1;;;;;6502:23:82;;6526:10;6546:4;6553:8;6502:23;:60::i;:::-;6595:16;;6576:46;;-1:-1:-1;;;;;6576:18:82;;;;6595:16;6613:8;6576:18;:46::i;:::-;6027:612;;;;:::o;6953:417::-;7166:9;7161:203;7185:8;:15;7181:1;:19;7161:203;;;7217:76;7242:8;7251:1;7242:11;;;;;;;;:::i;:::-;;;;;;;7255:7;7263:1;7255:10;;;;;;;;:::i;:::-;;;;;;;7267:8;7276:1;7267:11;;;;;;;;:::i;:::-;;;;;;;7280:9;7290:1;7280:12;;;;;;;;:::i;:::-;;;;;;;7217:24;:76::i;:::-;7336:3;;7161:203;;;;6953:417;;;;:::o;7292:355:30:-;-1:-1:-1;;7498:18:30;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;6145:1089;-1:-1:-1;;7093:16:30;;-1:-1:-1;;;;;6941:26:30;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;8181:1139:66:-;8364:4;8358:11;8429:6;8423:4;8416:20;8494:2;8488:4;8481:16;8559:4;8555:2;8551:13;8545:4;8538:27;-1:-1:-1;;;8615:4:66;8608:48;9022:4;9016;9010;9004;9001:1;8994:5;8987;8982:45;8916:16;8909:24;8905:1;8898:4;8892:11;8889:18;8886:48;8801:244;8774:404;;9091:10;9085:4;9078:24;9159:4;9153;9146:18;8774:404;9204:1;9198:4;9191:15;9260:4;9253:15;-1:-1:-1;;;;8181:1139:66:o;14171:936::-;14333:2;14327:4;14320:16;14390:6;14384:4;14377:20;-1:-1:-1;;;14449:4:66;14442:48;14843:4;14837;14831;14825;14822:1;14815:5;14808;14803:45;14737:16;14730:24;14726:1;14719:4;14713:11;14710:18;14707:48;14622:244;14595:399;;14912:10;14906:4;14899:24;14975:4;14969;14962:18;14595:399;15020:1;15014:4;15007:15;14171:936;;;:::o;14:347:178:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:178;;-1:-1:-1;;;;;202:30:178;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:161::-;431:5;476:3;467:6;462:3;458:16;454:26;451:46;;;493:1;490;483:12;451:46;-1:-1:-1;515:6:178;366:161;-1:-1:-1;366:161:178:o;532:157::-;594:5;639:2;630:6;625:3;621:16;617:25;614:45;;;655:1;652;645:12;694:679;845:6;853;861;869;922:3;910:9;901:7;897:23;893:33;890:53;;;939:1;936;929:12;890:53;979:9;966:23;-1:-1:-1;;;;;1004:6:178;1001:30;998:50;;;1044:1;1041;1034:12;998:50;1083:58;1133:7;1124:6;1113:9;1109:22;1083:58;:::i;:::-;1160:8;;-1:-1:-1;1057:84:178;-1:-1:-1;1214:68:178;;-1:-1:-1;1274:7:178;1269:2;1254:18;;1214:68;:::i;:::-;1204:78;;1301:66;1359:7;1353:3;1342:9;1338:19;1301:66;:::i;:::-;1291:76;;694:679;;;;;;;:::o;1378:815::-;1537:6;1545;1553;1561;1614:3;1602:9;1593:7;1589:23;1585:33;1582:53;;;1631:1;1628;1621:12;1582:53;1671:9;1658:23;-1:-1:-1;;;;;1741:2:178;1733:6;1730:14;1727:34;;;1757:1;1754;1747:12;1727:34;1796:58;1846:7;1837:6;1826:9;1822:22;1796:58;:::i;:::-;1873:8;;-1:-1:-1;1770:84:178;-1:-1:-1;1961:2:178;1946:18;;1933:32;;-1:-1:-1;1977:16:178;;;1974:36;;;2006:1;2003;1996:12;1974:36;;2029:74;2095:7;2084:8;2073:9;2069:24;2029:74;:::i;:::-;2019:84;;;2122:65;2179:7;2174:2;2163:9;2159:18;2122:65;:::i;2198:409::-;2268:6;2276;2329:2;2317:9;2308:7;2304:23;2300:32;2297:52;;;2345:1;2342;2335:12;2297:52;2385:9;2372:23;-1:-1:-1;;;;;2410:6:178;2407:30;2404:50;;;2450:1;2447;2440:12;2404:50;2489:58;2539:7;2530:6;2519:9;2515:22;2489:58;:::i;:::-;2566:8;;2463:84;;-1:-1:-1;2198:409:178;-1:-1:-1;;;;2198:409:178:o;2612:127::-;2673:10;2668:3;2664:20;2661:1;2654:31;2704:4;2701:1;2694:15;2728:4;2725:1;2718:15;2744:253;2816:2;2810:9;2858:4;2846:17;;-1:-1:-1;;;;;2878:34:178;;2914:22;;;2875:62;2872:88;;;2940:18;;:::i;:::-;2976:2;2969:22;2744:253;:::o;3002:::-;3074:2;3068:9;3116:4;3104:17;;-1:-1:-1;;;;;3136:34:178;;3172:22;;;3133:62;3130:88;;;3198:18;;:::i;3260:275::-;3331:2;3325:9;3396:2;3377:13;;-1:-1:-1;;3373:27:178;3361:40;;-1:-1:-1;;;;;3416:34:178;;3452:22;;;3413:62;3410:88;;;3478:18;;:::i;:::-;3514:2;3507:22;3260:275;;-1:-1:-1;3260:275:178:o;3540:114::-;3624:4;3617:5;3613:16;3606:5;3603:27;3593:55;;3644:1;3641;3634:12;3659:130;3725:20;;3754:29;3725:20;3754:29;:::i;:::-;3659:130;;;:::o;3794:131::-;-1:-1:-1;;;;;3869:31:178;;3859:42;;3849:70;;3915:1;3912;3905:12;3930:134;3998:20;;4027:31;3998:20;4027:31;:::i;4069:163::-;4136:20;;4196:10;4185:22;;4175:33;;4165:61;;4222:1;4219;4212:12;4237:183;4297:4;-1:-1:-1;;;;;4322:6:178;4319:30;4316:56;;;4352:18;;:::i;:::-;-1:-1:-1;4397:1:178;4393:14;4409:4;4389:25;;4237:183::o;4425:737::-;4479:5;4532:3;4525:4;4517:6;4513:17;4509:27;4499:55;;4550:1;4547;4540:12;4499:55;4586:6;4573:20;4612:4;4636:60;4652:43;4692:2;4652:43;:::i;:::-;4636:60;:::i;:::-;4730:15;;;4816:1;4812:10;;;;4800:23;;4796:32;;;4761:12;;;;4840:15;;;4837:35;;;4868:1;4865;4858:12;4837:35;4904:2;4896:6;4892:15;4916:217;4932:6;4927:3;4924:15;4916:217;;;5012:3;4999:17;5029:31;5054:5;5029:31;:::i;:::-;5073:18;;5111:12;;;;4949;;4916:217;;;-1:-1:-1;5151:5:178;4425:737;-1:-1:-1;;;;;;4425:737:178:o;5167:662::-;5221:5;5274:3;5267:4;5259:6;5255:17;5251:27;5241:55;;5292:1;5289;5282:12;5241:55;5328:6;5315:20;5354:4;5378:60;5394:43;5434:2;5394:43;:::i;5378:60::-;5472:15;;;5558:1;5554:10;;;;5542:23;;5538:32;;;5503:12;;;;5582:15;;;5579:35;;;5610:1;5607;5600:12;5579:35;5646:2;5638:6;5634:15;5658:142;5674:6;5669:3;5666:15;5658:142;;;5740:17;;5728:30;;5778:12;;;;5691;;5658:142;;5834:1672;5956:6;5964;5972;6025:2;6013:9;6004:7;6000:23;5996:32;5993:52;;;6041:1;6038;6031:12;5993:52;6081:9;6068:23;-1:-1:-1;;;;;6151:2:178;6143:6;6140:14;6137:34;;;6167:1;6164;6157:12;6137:34;6206:58;6256:7;6247:6;6236:9;6232:22;6206:58;:::i;:::-;6283:8;;-1:-1:-1;6180:84:178;-1:-1:-1;6371:2:178;6356:18;;6343:32;;-1:-1:-1;6387:16:178;;;6384:36;;;6416:1;6413;6406:12;6384:36;6439:24;;;;6497:4;6479:16;;;6475:27;6472:47;;;6515:1;6512;6505:12;6472:47;6541:22;;:::i;:::-;6586:20;6603:2;6586:20;:::i;:::-;6579:5;6572:35;6639:31;6666:2;6662;6658:11;6639:31;:::i;:::-;6634:2;6627:5;6623:14;6616:55;6703:30;6729:2;6725;6721:11;6703:30;:::i;:::-;6698:2;6691:5;6687:14;6680:54;6780:2;6776;6772:11;6759:25;6809:2;6799:8;6796:16;6793:36;;;6825:1;6822;6815:12;6793:36;6861:56;6909:7;6898:8;6894:2;6890:17;6861:56;:::i;:::-;6856:2;6849:5;6845:14;6838:80;;6964:3;6960:2;6956:12;6943:26;6994:2;6984:8;6981:16;6978:36;;;7010:1;7007;7000:12;6978:36;7047:56;7095:7;7084:8;7080:2;7076:17;7047:56;:::i;:::-;7041:3;7034:5;7030:15;7023:81;;7150:3;7146:2;7142:12;7129:26;7180:2;7170:8;7167:16;7164:36;;;7196:1;7193;7186:12;7164:36;7233:56;7281:7;7270:8;7266:2;7262:17;7233:56;:::i;:::-;7227:3;7220:5;7216:15;7209:81;;7336:3;7332:2;7328:12;7315:26;7366:2;7356:8;7353:16;7350:36;;;7382:1;7379;7372:12;7350:36;7419:56;7467:7;7456:8;7452:2;7448:17;7419:56;:::i;:::-;7413:3;7406:5;7402:15;7395:81;;7495:5;7485:15;;;;;5834:1672;;;;;:::o;7828:184::-;7886:6;7939:2;7927:9;7918:7;7914:23;7910:32;7907:52;;;7955:1;7952;7945:12;7907:52;7978:28;7996:9;7978:28;:::i;:::-;7968:38;7828:184;-1:-1:-1;;;7828:184:178:o;8130:461::-;8183:3;8221:5;8215:12;8248:6;8243:3;8236:19;8274:4;8303:2;8298:3;8294:12;8287:19;;8340:2;8333:5;8329:14;8361:1;8371:195;8385:6;8382:1;8379:13;8371:195;;;8450:13;;-1:-1:-1;;;;;8446:39:178;8434:52;;8506:12;;;;8541:15;;;;8482:1;8400:9;8371:195;;;-1:-1:-1;8582:3:178;;8130:461;-1:-1:-1;;;;;8130:461:178:o;8596:435::-;8649:3;8687:5;8681:12;8714:6;8709:3;8702:19;8740:4;8769:2;8764:3;8760:12;8753:19;;8806:2;8799:5;8795:14;8827:1;8837:169;8851:6;8848:1;8845:13;8837:169;;;8912:13;;8900:26;;8946:12;;;;8981:15;;;;8873:1;8866:9;8837:169;;9036:1276;9217:2;9206:9;9199:21;9275:4;9266:6;9260:13;9256:24;9251:2;9240:9;9236:18;9229:52;9180:4;9328:2;9320:6;9316:15;9310:22;9341:51;9388:2;9377:9;9373:18;9359:12;8093:24;8082:36;8070:49;;8017:108;9341:51;-1:-1:-1;9441:2:178;9429:15;;9423:22;-1:-1:-1;;;;;7577:31:178;;9504:2;9489:18;;7565:44;9454:54;9557:2;9549:6;9545:15;9539:22;9598:4;9592:3;9581:9;9577:19;9570:33;9626:65;9686:3;9675:9;9671:19;9655:14;9626:65;:::i;:::-;9612:79;;9740:3;9732:6;9728:16;9722:23;9768:2;9764:7;9836:2;9824:9;9816:6;9812:22;9808:31;9802:3;9791:9;9787:19;9780:60;9863:52;9908:6;9892:14;9863:52;:::i;:::-;9849:66;;9964:3;9956:6;9952:16;9946:23;9924:45;;10034:2;10022:9;10014:6;10010:22;10006:31;10000:3;9989:9;9985:19;9978:60;10061:52;10106:6;10090:14;10061:52;:::i;:::-;10047:66;;10162:3;10154:6;10150:16;10144:23;10122:45;;10233:2;10221:9;10213:6;10209:22;10205:31;10198:4;10187:9;10183:20;10176:61;;10254:52;10299:6;10283:14;10254:52;:::i;:::-;10246:60;9036:1276;-1:-1:-1;;;;;9036:1276:178:o;10317:613::-;10434:6;10442;10450;10458;10511:3;10499:9;10490:7;10486:23;10482:33;10479:53;;;10528:1;10525;10518:12;10479:53;10551:28;10569:9;10551:28;:::i;:::-;10541:38;;10630:2;10619:9;10615:18;10602:32;-1:-1:-1;;;;;10649:6:178;10646:30;10643:50;;;10689:1;10686;10679:12;10643:50;10728:58;10778:7;10769:6;10758:9;10754:22;10728:58;:::i;:::-;10805:8;;-1:-1:-1;10702:84:178;-1:-1:-1;10859:65:178;;-1:-1:-1;10916:7:178;10911:2;10896:18;;10859:65;:::i;10935:247::-;10994:6;11047:2;11035:9;11026:7;11022:23;11018:32;11015:52;;;11063:1;11060;11053:12;11015:52;11102:9;11089:23;11121:31;11146:5;11121:31;:::i;11187:540::-;11296:6;11304;11312;11365:2;11353:9;11344:7;11340:23;11336:32;11333:52;;;11381:1;11378;11371:12;11333:52;11421:9;11408:23;-1:-1:-1;;;;;11446:6:178;11443:30;11440:50;;;11486:1;11483;11476:12;11440:50;11525:58;11575:7;11566:6;11555:9;11551:22;11525:58;:::i;:::-;11602:8;;-1:-1:-1;11499:84:178;-1:-1:-1;11656:65:178;;-1:-1:-1;11713:7:178;11708:2;11693:18;;11656:65;:::i;:::-;11646:75;;11187:540;;;;;:::o;11732:1218::-;11846:6;11854;11862;11906:9;11897:7;11893:23;11936:3;11932:2;11928:12;11925:32;;;11953:1;11950;11943:12;11925:32;11993:9;11980:23;-1:-1:-1;;;;;12018:6:178;12015:30;12012:50;;;12058:1;12055;12048:12;12012:50;12097:58;12147:7;12138:6;12127:9;12123:22;12097:58;:::i;:::-;12174:8;;-1:-1:-1;12071:84:178;-1:-1:-1;;12243:4:178;-1:-1:-1;;12225:16:178;;12221:27;12218:47;;;12261:1;12258;12251:12;12218:47;;12287:22;;:::i;:::-;12332:37;12365:2;12354:9;12350:18;12332:37;:::i;:::-;12325:5;12318:52;12422:2;12411:9;12407:18;12394:32;12435:33;12460:7;12435:33;:::i;:::-;12495:2;12484:14;;12477:31;12560:2;12545:18;;12532:32;12573:33;12532:32;12573:33;:::i;:::-;12633:2;12622:14;;12615:31;12698:3;12683:19;;12670:33;12712;12670;12712;:::i;:::-;12777:7;12772:2;12765:5;12761:14;12754:31;;12846:3;12835:9;12831:19;12818:33;12812:3;12805:5;12801:15;12794:58;12913:4;12902:9;12898:20;12885:34;12879:3;12872:5;12868:15;12861:59;12939:5;12929:15;;;11732:1218;;;;;:::o;13137:334::-;13339:2;13321:21;;;13378:2;13358:18;;;13351:30;-1:-1:-1;;;13412:2:178;13397:18;;13390:40;13462:2;13447:18;;13137:334::o;13476:266::-;13564:6;13559:3;13552:19;13616:6;13609:5;13602:4;13597:3;13593:14;13580:43;-1:-1:-1;13668:1:178;13643:16;;;13661:4;13639:27;;;13632:38;;;;13724:2;13703:15;;;-1:-1:-1;;13699:29:178;13690:39;;;13686:50;;13476:266::o;13925:1067::-;-1:-1:-1;;;;;14364:15:178;;;14346:34;;14296:3;14411:2;14396:18;;14389:30;;;14267:4;;14436:61;14478:18;;;14470:6;14462;14436:61;:::i;:::-;14428:69;;14532:6;14519:20;14506:33;;14548:31;14573:5;14548:31;:::i;:::-;14615:14;;;14610:2;14595:18;;14588:42;14679:2;14667:15;;14654:29;;14692:33;14654:29;14692:33;:::i;:::-;14761:16;14756:2;14741:18;;;14734:44;;;;14840:2;14828:15;;14815:29;14809:3;14794:19;;14787:58;14895:15;;14882:29;14876:3;14861:19;;14854:58;13831:19;;14981:3;14966:19;;13819:32;13907:4;13896:16;;13883:30;13867:14;;;13860:54;14921:65;13925:1067;;;;;;;;:::o;14997:545::-;15090:4;15096:6;15156:11;15143:25;15250:2;15246:7;15235:8;15219:14;15215:29;15211:43;15191:18;15187:68;15177:96;;15269:1;15266;15259:12;15177:96;15296:33;;15348:20;;;-1:-1:-1;;;;;;15380:30:178;;15377:50;;;15423:1;15420;15413:12;15377:50;15456:4;15444:17;;-1:-1:-1;15507:1:178;15503:14;;;15487;15483:35;15473:46;;15470:66;;;15532:1;15529;15522:12;16097:520;16167:5;16174:6;16234:3;16221:17;16320:2;16316:7;16305:8;16289:14;16285:29;16281:43;16261:18;16257:68;16247:96;;16339:1;16336;16329:12;16247:96;16367:33;;16471:4;16458:18;;;-1:-1:-1;16419:21:178;;-1:-1:-1;;;;;;16488:30:178;;16485:50;;;16531:1;16528;16521:12;16485:50;16585:6;16582:1;16578:14;16562;16558:35;16551:5;16547:47;16544:67;;;16607:1;16604;16597:12;16622:522;16722:6;16717:3;16710:19;16692:3;16748:4;16777:2;16772:3;16768:12;16761:19;;16803:5;16826:1;16836:283;16850:6;16847:1;16844:13;16836:283;;;16927:6;16914:20;16947:33;16972:7;16947:33;:::i;:::-;-1:-1:-1;;;;;17005:33:178;16993:46;;17059:12;;;;17094:15;;;;17035:1;16865:9;16836:283;;17149:311;17237:19;;;17219:3;-1:-1:-1;;;;;17268:31:178;;17265:51;;;17312:1;17309;17302:12;17265:51;17348:6;17345:1;17341:14;17400:8;17393:5;17386:4;17381:3;17377:14;17364:45;17429:18;;;;17449:4;17425:29;;17149:311;-1:-1:-1;;;17149:311:178:o;17465:1729::-;-1:-1:-1;;;;;17860:32:178;;17842:51;;17880:3;17924:2;17909:18;;17902:31;;;-1:-1:-1;;17956:62:178;;17998:19;;17990:6;17982;17956:62;:::i;:::-;18066:9;18058:6;18054:22;18049:2;18038:9;18034:18;18027:50;18120:58;18171:6;18163;18120:58;:::i;:::-;18202:4;18194:6;18187:20;18230:84;18308:4;18300:6;18296:17;18282:12;18268;18230:84;:::i;:::-;18216:98;;;18361:67;18424:2;18416:6;18412:15;18404:6;18361:67;:::i;:::-;18473:6;18465;18461:19;18456:2;18448:6;18444:15;18437:44;18504:77;18574:6;18558:14;18542;18504:77;:::i;:::-;18490:91;;;;18628:67;18691:2;18683:6;18679:15;18671:6;18628:67;:::i;:::-;18740:6;18732;18728:19;18723:2;18715:6;18711:15;18704:44;18771:77;18841:6;18825:14;18809;18771:77;:::i;:::-;18757:91;;;;18895:69;18958:4;18950:6;18946:17;18938:6;18895:69;:::i;:::-;19011:6;19003;18999:19;18992:4;18984:6;18980:17;18973:46;19036:77;19106:6;19090:14;19074;19036:77;:::i;:::-;13831:19;;19182:4;19167:20;;13819:32;13907:4;13896:16;;13883:30;13867:14;;;13860:54;19028:85;-1:-1:-1;19122:66:178;;-1:-1:-1;;;;13747:173:178;19396:134;19473:13;;19495:29;19473:13;19495:29;:::i;19535:181::-;19613:13;;19666:24;19655:36;;19645:47;;19635:75;;19706:1;19703;19696:12;19721:138;19800:13;;19822:31;19800:13;19822:31;:::i;19864:734::-;19929:5;19982:3;19975:4;19967:6;19963:17;19959:27;19949:55;;20000:1;19997;19990:12;19949:55;20029:6;20023:13;20055:4;20079:60;20095:43;20135:2;20095:43;:::i;20079:60::-;20173:15;;;20259:1;20255:10;;;;20243:23;;20239:32;;;20204:12;;;;20283:15;;;20280:35;;;20311:1;20308;20301:12;20280:35;20347:2;20339:6;20335:15;20359:210;20375:6;20370:3;20367:15;20359:210;;;20448:3;20442:10;20465:31;20490:5;20465:31;:::i;:::-;20509:18;;20547:12;;;;20392;;20359:210;;20603:659;20668:5;20721:3;20714:4;20706:6;20702:17;20698:27;20688:55;;20739:1;20736;20729:12;20688:55;20768:6;20762:13;20794:4;20818:60;20834:43;20874:2;20834:43;:::i;20818:60::-;20912:15;;;20998:1;20994:10;;;;20982:23;;20978:32;;;20943:12;;;;21022:15;;;21019:35;;;21050:1;21047;21040:12;21019:35;21086:2;21078:6;21074:15;21098:135;21114:6;21109:3;21106:15;21098:135;;;21180:10;;21168:23;;21211:12;;;;21131;;21098:135;;21267:1421;21363:6;21416:2;21404:9;21395:7;21391:23;21387:32;21384:52;;;21432:1;21429;21422:12;21384:52;21465:9;21459:16;-1:-1:-1;;;;;21535:2:178;21527:6;21524:14;21521:34;;;21551:1;21548;21541:12;21521:34;21574:22;;;;21630:4;21612:16;;;21608:27;21605:47;;;21648:1;21645;21638:12;21605:47;21674:22;;:::i;:::-;21719:31;21747:2;21719:31;:::i;:::-;21712:5;21705:46;21783:41;21820:2;21816;21812:11;21783:41;:::i;:::-;21778:2;21771:5;21767:14;21760:65;21857:42;21895:2;21891;21887:11;21857:42;:::i;:::-;21852:2;21845:5;21841:14;21834:66;21939:2;21935;21931:11;21925:18;21968:2;21958:8;21955:16;21952:36;;;21984:1;21981;21974:12;21952:36;22020:67;22079:7;22068:8;22064:2;22060:17;22020:67;:::i;:::-;22015:2;22008:5;22004:14;21997:91;;22127:3;22123:2;22119:12;22113:19;22157:2;22147:8;22144:16;22141:36;;;22173:1;22170;22163:12;22141:36;22210:67;22269:7;22258:8;22254:2;22250:17;22210:67;:::i;:::-;22204:3;22197:5;22193:15;22186:92;;22317:3;22313:2;22309:12;22303:19;22347:2;22337:8;22334:16;22331:36;;;22363:1;22360;22353:12;22331:36;22400:67;22459:7;22448:8;22444:2;22440:17;22400:67;:::i;:::-;22394:3;22387:5;22383:15;22376:92;;22507:3;22503:2;22499:12;22493:19;22537:2;22527:8;22524:16;22521:36;;;22553:1;22550;22543:12;22521:36;22590:67;22649:7;22638:8;22634:2;22630:17;22590:67;:::i;:::-;22584:3;22573:15;;22566:92;-1:-1:-1;22577:5:178;21267:1421;-1:-1:-1;;;;;21267:1421:178:o;22693:588::-;-1:-1:-1;;;;;22990:32:178;;22972:51;;23071:10;23059:23;;23054:2;23039:18;;23032:51;23010:3;23114:2;23099:18;;23092:31;;;-1:-1:-1;;23140:62:178;;23182:19;;23174:6;23166;23140:62;:::i;:::-;13831:19;;23271:2;23256:18;;13819:32;13907:4;13896:16;;13883:30;13867:14;;;13860:54;23132:70;-1:-1:-1;23211:64:178;13747:173;23647:251;23717:6;23770:2;23758:9;23749:7;23745:23;23741:32;23738:52;;;23786:1;23783;23776:12;23738:52;23818:9;23812:16;23837:31;23862:5;23837:31;:::i;23903:518::-;-1:-1:-1;;;;;24190:32:178;;24172:51;;24259:3;24254:2;24239:18;;24232:31;;;-1:-1:-1;;24280:62:178;;24322:19;;24314:6;24306;24280:62;:::i;:::-;13831:19;;24411:2;24396:18;;13819:32;13907:4;13896:16;;13883:30;13867:14;;;13860:54;24272:70;-1:-1:-1;24351:64:178;13747:173;24426:225;24493:9;;;24514:11;;;24511:134;;;24567:10;24562:3;24558:20;24555:1;24548:31;24602:4;24599:1;24592:15;24630:4;24627:1;24620:15;24656:127;24717:10;24712:3;24708:20;24705:1;24698:31;24748:4;24745:1;24738:15;24772:4;24769:1;24762:15",
	linkReferences: {
	}
};
var methodIdentifiers = {
	"bridgeAgentExecutorAddress()": "546af931",
	"callOut(bytes,(uint256,uint256))": "f4f79eb5",
	"callOutAndBridge(bytes,(address,address,uint256,uint256),(uint256,uint256))": "15859950",
	"callOutAndBridgeMultiple(bytes,(address[],address[],uint256[],uint256[]),(uint256,uint256))": "1e2bcb1a",
	"cancelOwnershipHandover()": "54d1f13d",
	"completeOwnershipHandover(address)": "f04e283e",
	"executeNoSettlement(bytes)": "46fcff18",
	"executeSettlement(bytes,(uint32,address,address,address,uint256,uint256))": "fa536bec",
	"executeSettlementMultiple(bytes,(uint8,address,uint32,address[],address[],uint256[],uint256[]))": "51e372b0",
	"getDepositEntry(uint32)": "83dd527d",
	"initialize(address)": "c4d66de8",
	"localBridgeAgentAddress()": "cd9f6031",
	"localPortAddress()": "5abfaf6c",
	"owner()": "8da5cb5b",
	"ownershipHandoverExpiresAt(address)": "fee81cf4",
	"renounceOwnership()": "715018a6",
	"requestOwnershipHandover()": "25692962",
	"retryDeposit(uint32,bytes,(uint256,uint256))": "84cb82b6",
	"transferOwnership(address)": "f2fde38b"
};
var rawMetadata = "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnrecognizedBridgeAgentExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnrecognizedFunctionId\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeAgentExecutorAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_params\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"_gParams\",\"type\":\"tuple\"}],\"name\":\"callOut\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_params\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"hToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"}],\"internalType\":\"struct DepositInput\",\"name\":\"_dParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"_gParams\",\"type\":\"tuple\"}],\"name\":\"callOutAndBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_params\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"hTokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"deposits\",\"type\":\"uint256[]\"}],\"internalType\":\"struct DepositMultipleInput\",\"name\":\"_dParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"_gParams\",\"type\":\"tuple\"}],\"name\":\"callOutAndBridgeMultiple\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeNoSettlement\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"settlementNonce\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"hToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"}],\"internalType\":\"struct SettlementParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"executeSettlement\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"numberOfAssets\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"settlementNonce\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"hTokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"deposits\",\"type\":\"uint256[]\"}],\"internalType\":\"struct SettlementMultipleParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"executeSettlementMultiple\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_depositNonce\",\"type\":\"uint32\"}],\"name\":\"getDepositEntry\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint88\",\"name\":\"isSigned\",\"type\":\"uint88\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"hTokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"deposits\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Deposit\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localBridgeAgentAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localBridgeAgentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localPortAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_depositNonce\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_params\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"_gParams\",\"type\":\"tuple\"}],\"name\":\"retryDeposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"MaiaDAO\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"Cannot double-initialize.\"}],\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"events\":{\"OwnershipHandoverCanceled(address)\":{\"details\":\"The ownership handover to `pendingOwner` has been canceled.\"},\"OwnershipHandoverRequested(address)\":{\"details\":\"An ownership handover to `pendingOwner` has been requested.\"},\"OwnershipTransferred(address,address)\":{\"details\":\"The ownership is transferred from `oldOwner` to `newOwner`. This event is intentionally kept the same as OpenZeppelin's Ownable to be compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), despite it not being as lightweight as a single argument event.\"}},\"kind\":\"dev\",\"methods\":{\"callOut(bytes,(uint256,uint256))\":{\"details\":\"ACTION ID: 1 (Call without deposit)\",\"params\":{\"gParams\":\"gas parameters for the cross-chain call.\",\"params\":\"enconded parameters to execute on the root chain.\"}},\"callOutAndBridge(bytes,(address,address,uint256,uint256),(uint256,uint256))\":{\"details\":\"ACTION ID: 2 (Call with single deposit)\",\"params\":{\"dParams\":\"additional token deposit parameters.\",\"gParams\":\"gas parameters for the cross-chain call.\",\"params\":\"encoded parameters to execute on the root chain.\"}},\"callOutAndBridgeMultiple(bytes,(address[],address[],uint256[],uint256[]),(uint256,uint256))\":{\"details\":\"ACTION ID: 3 (Call with multiple deposit)\",\"params\":{\"dParams\":\"additional token deposit parameters.\",\"gParams\":\"gas parameters for the cross-chain call.\",\"params\":\"encoded parameters to execute on the root chain.\"}},\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"executeNoSettlement(bytes)\":{\"params\":{\"params\":\"data received from messaging layer.\"}},\"executeSettlement(bytes,(uint32,address,address,address,uint256,uint256))\":{\"details\":\"Function responsible of executing a crosschain request without any deposit.\",\"params\":{\"params\":\"data received from messaging layer.\",\"sParams\":\"SettlementParams struct.\"}},\"executeSettlementMultiple(bytes,(uint8,address,uint32,address[],address[],uint256[],uint256[]))\":{\"details\":\"Function responsible of executing a crosschain request which contains      cross-chain deposit information attached.\",\"params\":{\"params\":\"data received from messaging layer.\",\"sParams\":\"SettlementParams struct containing deposit information.\"}},\"getDepositEntry(uint32)\":{\"params\":{\"depositNonce\":\"Identifier for user deposit.\"}},\"initialize(address)\":{\"params\":{\"_localBridgeAgentAddress\":\"The address of the local Bridge Agent.\"}},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default.\"},\"retryDeposit(uint32,bytes,(uint256,uint256))\":{\"params\":{\"_depositNonce\":\"Identifier for user deposit.\",\"_gParams\":\"gas parameters for the cross-chain call.\",\"_params\":\"encoded router parameters to execute on the root chain.\"}},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"title\":\"Base Branch Router Contract\",\"version\":1},\"userdoc\":{\"errors\":{\"UnrecognizedBridgeAgentExecutor()\":[{\"notice\":\"Error emitted when caller is not the Branch Bridge Agent Executor.\"}],\"UnrecognizedFunctionId()\":[{\"notice\":\"Error emitted when the Branch Router does not recognize the function ID.\"}]},\"kind\":\"user\",\"methods\":{\"bridgeAgentExecutorAddress()\":{\"notice\":\"Local Bridge Agent Executor Address.\"},\"callOut(bytes,(uint256,uint256))\":{\"notice\":\"Function to perform a call to the Root Omnichain Router without token deposit.\"},\"callOutAndBridge(bytes,(address,address,uint256,uint256),(uint256,uint256))\":{\"notice\":\"Function to perform a call to the Root Omnichain Router while depositing a single asset.\"},\"callOutAndBridgeMultiple(bytes,(address[],address[],uint256[],uint256[]),(uint256,uint256))\":{\"notice\":\"Function to perform a call to the Root Omnichain Router while depositing two or more assets.\"},\"constructor\":{\"notice\":\"Constructor for Base Branch Router.\"},\"executeNoSettlement(bytes)\":{\"notice\":\"Function responsible of executing a branch router response.\"},\"getDepositEntry(uint32)\":{\"notice\":\"External function that returns a given deposit entry.\"},\"initialize(address)\":{\"notice\":\"Initializes the Base Branch Router.\"},\"localBridgeAgentAddress()\":{\"notice\":\"Address for local Branch Bridge Agent who processes requests and interacts with local port.\"},\"localPortAddress()\":{\"notice\":\"External function to return the Branch Chain's Local Port Address.\"},\"retryDeposit(uint32,bytes,(uint256,uint256))\":{\"notice\":\"Function to retry a deposit that has failed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BaseBranchRouter.sol\":\"BaseBranchRouter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@lib/=lib/\",\":@omni/=src/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@test/=test/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/solady/src/auth/Ownable.sol\":{\"keccak256\":\"0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3\",\"dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs\"]},\"lib/solady/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a\",\"dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb282dd78aa7375d6b200b9a5d8dd214b2e5df1004f8217a4b4c2b07f0c5bfd01\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://5fca62eb8d3dbd2b3b7e4bb051f6da16f4d0ff9cee61c39cebb80f031f6a8800\",\"dweb:/ipfs/QmbrsXPK91iBFwHKwJs2HLRud2KzMoBDRiWYMUtyV5H57j\"]},\"src/BaseBranchRouter.sol\":{\"keccak256\":\"0x9b7fc0ff5353f54c594cac6bd56ad355b357b6954f4b511acd2f3c2ba2626975\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edaa582d5f295e3890112acaa4b87d91d9bba09babc252e69c6cc0e8c46d665d\",\"dweb:/ipfs/QmNaLU1B7neAcJkPrMVidGZyXfP526DsrufVb9Bb9D8Gyv\"]},\"src/interfaces/BridgeAgentStructs.sol\":{\"keccak256\":\"0xb6a224b12e369966ac8de74487b71e38c6e06ac933b4e3a148547464bc511822\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa3bee57ab7c686d12cf82c08bbe11096145ba9630278f5ad63f9e425d06e684\",\"dweb:/ipfs/QmeZgdqzn9Qa7gtzaCqkcMioVhaYbdSNRfhYcSh7sJp9Yk\"]},\"src/interfaces/IBranchBridgeAgent.sol\":{\"keccak256\":\"0x066594685bb0fabcbc88cc8ad06328464b660ec1abb675d9f7ee70f8774eb813\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d108c59f77cfd24abed58a88ca42a13634490ddca3b86398dba71413d26eca45\",\"dweb:/ipfs/QmQdDFqAcfK2YfKd8Pz7omLzaJDw9FRnNNZRaRsAK7rRTm\"]},\"src/interfaces/IBranchRouter.sol\":{\"keccak256\":\"0xd0f4470b629a6f4e809a2ed82bb660c7e9b4e1fb4c1e482e2c4d3e2f9ff3c5f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd88690bfa73442080e7b40b7e469aa55e0f3d59822e764c8a9116e5f4259d47\",\"dweb:/ipfs/QmTxbzHqV7vBrX553Hu5trhenxLae9QsyQiS7qWC13vzA8\"]},\"src/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x50ab4088fc49832e1536f9b39c0cb6c1c51c0c9506830847c739cf37eaa68449\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://adc6524746e06e6b45f903934a4c1e5c4cd37b7cf983b02fcb4b73d40808bdf6\",\"dweb:/ipfs/QmcS5gDnwcnBWEr64jK4UbcTGbvTDPH1ChzV7t3gKyK8SW\"]}},\"version\":1}";
var metadata = {
	compiler: {
		version: "0.8.19+commit.7dd6d404"
	},
	language: "Solidity",
	output: {
		abi: [
			{
				inputs: [
				],
				stateMutability: "nonpayable",
				type: "constructor"
			},
			{
				inputs: [
				],
				type: "error",
				name: "AlreadyInitialized"
			},
			{
				inputs: [
				],
				type: "error",
				name: "NewOwnerIsZeroAddress"
			},
			{
				inputs: [
				],
				type: "error",
				name: "NoHandoverRequest"
			},
			{
				inputs: [
				],
				type: "error",
				name: "Unauthorized"
			},
			{
				inputs: [
				],
				type: "error",
				name: "UnrecognizedBridgeAgentExecutor"
			},
			{
				inputs: [
				],
				type: "error",
				name: "UnrecognizedFunctionId"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address",
						indexed: true
					}
				],
				type: "event",
				name: "OwnershipHandoverCanceled",
				anonymous: false
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address",
						indexed: true
					}
				],
				type: "event",
				name: "OwnershipHandoverRequested",
				anonymous: false
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "oldOwner",
						type: "address",
						indexed: true
					},
					{
						internalType: "address",
						name: "newOwner",
						type: "address",
						indexed: true
					}
				],
				type: "event",
				name: "OwnershipTransferred",
				anonymous: false
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "bridgeAgentExecutorAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "_params",
						type: "bytes"
					},
					{
						internalType: "struct GasParams",
						name: "_gParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "callOut"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "_params",
						type: "bytes"
					},
					{
						internalType: "struct DepositInput",
						name: "_dParams",
						type: "tuple",
						components: [
							{
								internalType: "address",
								name: "hToken",
								type: "address"
							},
							{
								internalType: "address",
								name: "token",
								type: "address"
							},
							{
								internalType: "uint256",
								name: "amount",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "deposit",
								type: "uint256"
							}
						]
					},
					{
						internalType: "struct GasParams",
						name: "_gParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "callOutAndBridge"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "_params",
						type: "bytes"
					},
					{
						internalType: "struct DepositMultipleInput",
						name: "_dParams",
						type: "tuple",
						components: [
							{
								internalType: "address[]",
								name: "hTokens",
								type: "address[]"
							},
							{
								internalType: "address[]",
								name: "tokens",
								type: "address[]"
							},
							{
								internalType: "uint256[]",
								name: "amounts",
								type: "uint256[]"
							},
							{
								internalType: "uint256[]",
								name: "deposits",
								type: "uint256[]"
							}
						]
					},
					{
						internalType: "struct GasParams",
						name: "_gParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "callOutAndBridgeMultiple"
			},
			{
				inputs: [
				],
				stateMutability: "payable",
				type: "function",
				name: "cancelOwnershipHandover"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "completeOwnershipHandover"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeNoSettlement"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					},
					{
						internalType: "struct SettlementParams",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint32",
								name: "settlementNonce",
								type: "uint32"
							},
							{
								internalType: "address",
								name: "recipient",
								type: "address"
							},
							{
								internalType: "address",
								name: "hToken",
								type: "address"
							},
							{
								internalType: "address",
								name: "token",
								type: "address"
							},
							{
								internalType: "uint256",
								name: "amount",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "deposit",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeSettlement"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					},
					{
						internalType: "struct SettlementMultipleParams",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint8",
								name: "numberOfAssets",
								type: "uint8"
							},
							{
								internalType: "address",
								name: "recipient",
								type: "address"
							},
							{
								internalType: "uint32",
								name: "settlementNonce",
								type: "uint32"
							},
							{
								internalType: "address[]",
								name: "hTokens",
								type: "address[]"
							},
							{
								internalType: "address[]",
								name: "tokens",
								type: "address[]"
							},
							{
								internalType: "uint256[]",
								name: "amounts",
								type: "uint256[]"
							},
							{
								internalType: "uint256[]",
								name: "deposits",
								type: "uint256[]"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeSettlementMultiple"
			},
			{
				inputs: [
					{
						internalType: "uint32",
						name: "_depositNonce",
						type: "uint32"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getDepositEntry",
				outputs: [
					{
						internalType: "struct Deposit",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint8",
								name: "status",
								type: "uint8"
							},
							{
								internalType: "uint88",
								name: "isSigned",
								type: "uint88"
							},
							{
								internalType: "address",
								name: "owner",
								type: "address"
							},
							{
								internalType: "address[]",
								name: "hTokens",
								type: "address[]"
							},
							{
								internalType: "address[]",
								name: "tokens",
								type: "address[]"
							},
							{
								internalType: "uint256[]",
								name: "amounts",
								type: "uint256[]"
							},
							{
								internalType: "uint256[]",
								name: "deposits",
								type: "uint256[]"
							}
						]
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_localBridgeAgentAddress",
						type: "address"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "initialize"
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "localBridgeAgentAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "localPortAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "owner",
				outputs: [
					{
						internalType: "address",
						name: "result",
						type: "address"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "ownershipHandoverExpiresAt",
				outputs: [
					{
						internalType: "uint256",
						name: "result",
						type: "uint256"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "payable",
				type: "function",
				name: "renounceOwnership"
			},
			{
				inputs: [
				],
				stateMutability: "payable",
				type: "function",
				name: "requestOwnershipHandover"
			},
			{
				inputs: [
					{
						internalType: "uint32",
						name: "_depositNonce",
						type: "uint32"
					},
					{
						internalType: "bytes",
						name: "_params",
						type: "bytes"
					},
					{
						internalType: "struct GasParams",
						name: "_gParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "retryDeposit"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "newOwner",
						type: "address"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "transferOwnership"
			}
		],
		devdoc: {
			kind: "dev",
			methods: {
				"callOut(bytes,(uint256,uint256))": {
					details: "ACTION ID: 1 (Call without deposit)",
					params: {
						gParams: "gas parameters for the cross-chain call.",
						params: "enconded parameters to execute on the root chain."
					}
				},
				"callOutAndBridge(bytes,(address,address,uint256,uint256),(uint256,uint256))": {
					details: "ACTION ID: 2 (Call with single deposit)",
					params: {
						dParams: "additional token deposit parameters.",
						gParams: "gas parameters for the cross-chain call.",
						params: "encoded parameters to execute on the root chain."
					}
				},
				"callOutAndBridgeMultiple(bytes,(address[],address[],uint256[],uint256[]),(uint256,uint256))": {
					details: "ACTION ID: 3 (Call with multiple deposit)",
					params: {
						dParams: "additional token deposit parameters.",
						gParams: "gas parameters for the cross-chain call.",
						params: "encoded parameters to execute on the root chain."
					}
				},
				"cancelOwnershipHandover()": {
					details: "Cancels the two-step ownership handover to the caller, if any."
				},
				"completeOwnershipHandover(address)": {
					details: "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
				},
				"executeNoSettlement(bytes)": {
					params: {
						params: "data received from messaging layer."
					}
				},
				"executeSettlement(bytes,(uint32,address,address,address,uint256,uint256))": {
					details: "Function responsible of executing a crosschain request without any deposit.",
					params: {
						params: "data received from messaging layer.",
						sParams: "SettlementParams struct."
					}
				},
				"executeSettlementMultiple(bytes,(uint8,address,uint32,address[],address[],uint256[],uint256[]))": {
					details: "Function responsible of executing a crosschain request which contains      cross-chain deposit information attached.",
					params: {
						params: "data received from messaging layer.",
						sParams: "SettlementParams struct containing deposit information."
					}
				},
				"getDepositEntry(uint32)": {
					params: {
						depositNonce: "Identifier for user deposit."
					}
				},
				"initialize(address)": {
					params: {
						_localBridgeAgentAddress: "The address of the local Bridge Agent."
					}
				},
				"owner()": {
					details: "Returns the owner of the contract."
				},
				"ownershipHandoverExpiresAt(address)": {
					details: "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
				},
				"renounceOwnership()": {
					details: "Allows the owner to renounce their ownership."
				},
				"requestOwnershipHandover()": {
					details: "Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default."
				},
				"retryDeposit(uint32,bytes,(uint256,uint256))": {
					params: {
						_depositNonce: "Identifier for user deposit.",
						_gParams: "gas parameters for the cross-chain call.",
						_params: "encoded router parameters to execute on the root chain."
					}
				},
				"transferOwnership(address)": {
					details: "Allows the owner to transfer the ownership to `newOwner`."
				}
			},
			version: 1
		},
		userdoc: {
			kind: "user",
			methods: {
				"bridgeAgentExecutorAddress()": {
					notice: "Local Bridge Agent Executor Address."
				},
				"callOut(bytes,(uint256,uint256))": {
					notice: "Function to perform a call to the Root Omnichain Router without token deposit."
				},
				"callOutAndBridge(bytes,(address,address,uint256,uint256),(uint256,uint256))": {
					notice: "Function to perform a call to the Root Omnichain Router while depositing a single asset."
				},
				"callOutAndBridgeMultiple(bytes,(address[],address[],uint256[],uint256[]),(uint256,uint256))": {
					notice: "Function to perform a call to the Root Omnichain Router while depositing two or more assets."
				},
				constructor: {
					notice: "Constructor for Base Branch Router."
				},
				"executeNoSettlement(bytes)": {
					notice: "Function responsible of executing a branch router response."
				},
				"getDepositEntry(uint32)": {
					notice: "External function that returns a given deposit entry."
				},
				"initialize(address)": {
					notice: "Initializes the Base Branch Router."
				},
				"localBridgeAgentAddress()": {
					notice: "Address for local Branch Bridge Agent who processes requests and interacts with local port."
				},
				"localPortAddress()": {
					notice: "External function to return the Branch Chain's Local Port Address."
				},
				"retryDeposit(uint32,bytes,(uint256,uint256))": {
					notice: "Function to retry a deposit that has failed."
				}
			},
			version: 1
		}
	},
	settings: {
		remappings: [
			"@lib/=lib/",
			"@omni/=src/",
			"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
			"@test/=test/",
			"ds-test/=lib/forge-std/lib/ds-test/src/",
			"forge-std/=lib/forge-std/src/",
			"openzeppelin-contracts/=lib/openzeppelin-contracts/",
			"solady/=lib/solady/src/",
			"solmate/=lib/solmate/src/"
		],
		optimizer: {
			enabled: true,
			runs: 200
		},
		metadata: {
			bytecodeHash: "ipfs"
		},
		compilationTarget: {
			"src/BaseBranchRouter.sol": "BaseBranchRouter"
		},
		evmVersion: "paris",
		libraries: {
		}
	},
	sources: {
		"lib/solady/src/auth/Ownable.sol": {
			keccak256: "0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3",
			urls: [
				"bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3",
				"dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs"
			],
			license: "MIT"
		},
		"lib/solady/src/utils/SafeTransferLib.sol": {
			keccak256: "0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c",
			urls: [
				"bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a",
				"dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg"
			],
			license: "MIT"
		},
		"lib/solmate/src/tokens/ERC20.sol": {
			keccak256: "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10",
			urls: [
				"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35",
				"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"
			],
			license: "AGPL-3.0-only"
		},
		"lib/solmate/src/utils/ReentrancyGuard.sol": {
			keccak256: "0xb282dd78aa7375d6b200b9a5d8dd214b2e5df1004f8217a4b4c2b07f0c5bfd01",
			urls: [
				"bzz-raw://5fca62eb8d3dbd2b3b7e4bb051f6da16f4d0ff9cee61c39cebb80f031f6a8800",
				"dweb:/ipfs/QmbrsXPK91iBFwHKwJs2HLRud2KzMoBDRiWYMUtyV5H57j"
			],
			license: "AGPL-3.0-only"
		},
		"src/BaseBranchRouter.sol": {
			keccak256: "0x9b7fc0ff5353f54c594cac6bd56ad355b357b6954f4b511acd2f3c2ba2626975",
			urls: [
				"bzz-raw://edaa582d5f295e3890112acaa4b87d91d9bba09babc252e69c6cc0e8c46d665d",
				"dweb:/ipfs/QmNaLU1B7neAcJkPrMVidGZyXfP526DsrufVb9Bb9D8Gyv"
			],
			license: "MIT"
		},
		"src/interfaces/BridgeAgentStructs.sol": {
			keccak256: "0xb6a224b12e369966ac8de74487b71e38c6e06ac933b4e3a148547464bc511822",
			urls: [
				"bzz-raw://aa3bee57ab7c686d12cf82c08bbe11096145ba9630278f5ad63f9e425d06e684",
				"dweb:/ipfs/QmeZgdqzn9Qa7gtzaCqkcMioVhaYbdSNRfhYcSh7sJp9Yk"
			],
			license: "MIT"
		},
		"src/interfaces/IBranchBridgeAgent.sol": {
			keccak256: "0x066594685bb0fabcbc88cc8ad06328464b660ec1abb675d9f7ee70f8774eb813",
			urls: [
				"bzz-raw://d108c59f77cfd24abed58a88ca42a13634490ddca3b86398dba71413d26eca45",
				"dweb:/ipfs/QmQdDFqAcfK2YfKd8Pz7omLzaJDw9FRnNNZRaRsAK7rRTm"
			],
			license: "MIT"
		},
		"src/interfaces/IBranchRouter.sol": {
			keccak256: "0xd0f4470b629a6f4e809a2ed82bb660c7e9b4e1fb4c1e482e2c4d3e2f9ff3c5f1",
			urls: [
				"bzz-raw://fd88690bfa73442080e7b40b7e469aa55e0f3d59822e764c8a9116e5f4259d47",
				"dweb:/ipfs/QmTxbzHqV7vBrX553Hu5trhenxLae9QsyQiS7qWC13vzA8"
			],
			license: "MIT"
		},
		"src/interfaces/ILayerZeroReceiver.sol": {
			keccak256: "0x50ab4088fc49832e1536f9b39c0cb6c1c51c0c9506830847c739cf37eaa68449",
			urls: [
				"bzz-raw://adc6524746e06e6b45f903934a4c1e5c4cd37b7cf983b02fcb4b73d40808bdf6",
				"dweb:/ipfs/QmcS5gDnwcnBWEr64jK4UbcTGbvTDPH1ChzV7t3gKyK8SW"
			],
			license: "BUSL-1.1"
		}
	},
	version: 1
};
var ast = {
	absolutePath: "src/BaseBranchRouter.sol",
	id: 50464,
	exportedSymbols: {
		BaseBranchRouter: [
			50463
		],
		Deposit: [
			64011
		],
		DepositInput: [
			64020
		],
		DepositMultipleInput: [
			64033
		],
		DepositMultipleParams: [
			64061
		],
		DepositParams: [
			64044
		],
		ERC20: [
			48366
		],
		GasParams: [
			63992
		],
		IBranchRouter: [
			64886
		],
		IBridgeAgent: [
			64454
		],
		Ownable: [
			30399
		],
		ReentrancyGuard: [
			48956
		],
		SafeTransferLib: [
			46111
		],
		SettlementMultipleParams: [
			64131
		],
		SettlementParams: [
			64112
		]
	},
	nodeType: "SourceUnit",
	src: "32:7757:82",
	nodes: [
		{
			id: 50050,
			nodeType: "PragmaDirective",
			src: "32:23:82",
			nodes: [
			],
			literals: [
				"solidity",
				"^",
				"0.8",
				".0"
			]
		},
		{
			id: 50052,
			nodeType: "ImportDirective",
			src: "57:48:82",
			nodes: [
			],
			absolutePath: "lib/solady/src/auth/Ownable.sol",
			file: "solady/auth/Ownable.sol",
			nameLocation: "-1:-1:-1",
			scope: 50464,
			sourceUnit: 30400,
			symbolAliases: [
				{
					foreign: {
						id: 50051,
						name: "Ownable",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 30399,
						src: "65:7:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 50054,
			nodeType: "ImportDirective",
			src: "106:65:82",
			nodes: [
			],
			absolutePath: "lib/solady/src/utils/SafeTransferLib.sol",
			file: "solady/utils/SafeTransferLib.sol",
			nameLocation: "-1:-1:-1",
			scope: 50464,
			sourceUnit: 46112,
			symbolAliases: [
				{
					foreign: {
						id: 50053,
						name: "SafeTransferLib",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 46111,
						src: "114:15:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 50056,
			nodeType: "ImportDirective",
			src: "173:47:82",
			nodes: [
			],
			absolutePath: "lib/solmate/src/tokens/ERC20.sol",
			file: "solmate/tokens/ERC20.sol",
			nameLocation: "-1:-1:-1",
			scope: 50464,
			sourceUnit: 48367,
			symbolAliases: [
				{
					foreign: {
						id: 50055,
						name: "ERC20",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 48366,
						src: "181:5:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 50058,
			nodeType: "ImportDirective",
			src: "221:66:82",
			nodes: [
			],
			absolutePath: "lib/solmate/src/utils/ReentrancyGuard.sol",
			file: "solmate/utils/ReentrancyGuard.sol",
			nameLocation: "-1:-1:-1",
			scope: 50464,
			sourceUnit: 48957,
			symbolAliases: [
				{
					foreign: {
						id: 50057,
						name: "ReentrancyGuard",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 48956,
						src: "229:15:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 50060,
			nodeType: "ImportDirective",
			src: "289:61:82",
			nodes: [
			],
			absolutePath: "src/interfaces/IBranchRouter.sol",
			file: "./interfaces/IBranchRouter.sol",
			nameLocation: "-1:-1:-1",
			scope: 50464,
			sourceUnit: 64887,
			symbolAliases: [
				{
					foreign: {
						id: 50059,
						name: "IBranchRouter",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64886,
						src: "297:13:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 50070,
			nodeType: "ImportDirective",
			src: "352:263:82",
			nodes: [
			],
			absolutePath: "src/interfaces/IBranchBridgeAgent.sol",
			file: "./interfaces/IBranchBridgeAgent.sol",
			nameLocation: "-1:-1:-1",
			scope: 50464,
			sourceUnit: 64455,
			symbolAliases: [
				{
					foreign: {
						id: 50061,
						name: "IBranchBridgeAgent",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64454,
						src: "365:18:82",
						typeDescriptions: {
						}
					},
					local: "IBridgeAgent",
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50062,
						name: "GasParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 63992,
						src: "405:9:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50063,
						name: "Deposit",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64011,
						src: "420:7:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50064,
						name: "DepositInput",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64020,
						src: "433:12:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50065,
						name: "DepositParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64044,
						src: "451:13:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50066,
						name: "DepositMultipleInput",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64033,
						src: "470:20:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50067,
						name: "DepositMultipleParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64061,
						src: "496:21:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50068,
						name: "SettlementParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64112,
						src: "523:16:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 50069,
						name: "SettlementMultipleParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64131,
						src: "545:24:82",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 50463,
			nodeType: "ContractDefinition",
			src: "676:7112:82",
			nodes: [
				{
					id: 50080,
					nodeType: "UsingForDirective",
					src: "751:34:82",
					nodes: [
					],
					global: false,
					libraryName: {
						id: 50078,
						name: "SafeTransferLib",
						nameLocations: [
							"757:15:82"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 46111,
						src: "757:15:82"
					},
					typeName: {
						id: 50079,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "777:7:82",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					}
				},
				{
					id: 50083,
					nodeType: "VariableDeclaration",
					src: "1011:31:82",
					nodes: [
					],
					baseFunctions: [
						64790
					],
					constant: false,
					documentation: {
						id: 50081,
						nodeType: "StructuredDocumentation",
						src: "977:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "5abfaf6c",
					mutability: "mutable",
					name: "localPortAddress",
					nameLocation: "1026:16:82",
					scope: 50463,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 50082,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1011:7:82",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "public"
				},
				{
					id: 50087,
					nodeType: "VariableDeclaration",
					src: "1083:47:82",
					nodes: [
					],
					baseFunctions: [
						64796
					],
					constant: false,
					documentation: {
						id: 50084,
						nodeType: "StructuredDocumentation",
						src: "1049:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "cd9f6031",
					mutability: "mutable",
					name: "localBridgeAgentAddress",
					nameLocation: "1107:23:82",
					overrides: {
						id: 50086,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "1098:8:82"
					},
					scope: 50463,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 50085,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1083:7:82",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "public"
				},
				{
					id: 50091,
					nodeType: "VariableDeclaration",
					src: "1171:50:82",
					nodes: [
					],
					baseFunctions: [
						64802
					],
					constant: false,
					documentation: {
						id: 50088,
						nodeType: "StructuredDocumentation",
						src: "1137:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "546af931",
					mutability: "mutable",
					name: "bridgeAgentExecutorAddress",
					nameLocation: "1195:26:82",
					overrides: {
						id: 50090,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "1186:8:82"
					},
					scope: 50463,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 50089,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1171:7:82",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "public"
				},
				{
					id: 50101,
					nodeType: "FunctionDefinition",
					src: "1461:59:82",
					nodes: [
					],
					body: {
						id: 50100,
						nodeType: "Block",
						src: "1475:45:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											expression: {
												id: 50096,
												name: "msg",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: -15,
												src: "1502:3:82",
												typeDescriptions: {
													typeIdentifier: "t_magic_message",
													typeString: "msg"
												}
											},
											id: 50097,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "1506:6:82",
											memberName: "sender",
											nodeType: "MemberAccess",
											src: "1502:10:82",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											}
										],
										id: 50095,
										name: "_initializeOwner",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 30278,
										src: "1485:16:82",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_address_$returns$__$",
											typeString: "function (address)"
										}
									},
									id: 50098,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "1485:28:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50099,
								nodeType: "ExpressionStatement",
								src: "1485:28:82"
							}
						]
					},
					documentation: {
						id: 50092,
						nodeType: "StructuredDocumentation",
						src: "1409:47:82",
						text: "@notice Constructor for Base Branch Router."
					},
					implemented: true,
					kind: "constructor",
					modifiers: [
					],
					name: "",
					nameLocation: "-1:-1:-1",
					parameters: {
						id: 50093,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "1472:2:82"
					},
					returnParameters: {
						id: 50094,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "1475:0:82"
					},
					scope: 50463,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "public"
				},
				{
					id: 50143,
					nodeType: "FunctionDefinition",
					src: "1860:461:82",
					nodes: [
					],
					body: {
						id: 50142,
						nodeType: "Block",
						src: "1939:382:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											commonType: {
												typeIdentifier: "t_address",
												typeString: "address"
											},
											id: 50115,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											leftExpression: {
												id: 50110,
												name: "_localBridgeAgentAddress",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50104,
												src: "1957:24:82",
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											nodeType: "BinaryOperation",
											operator: "!=",
											rightExpression: {
												"arguments": [
													{
														hexValue: "30",
														id: 50113,
														isConstant: false,
														isLValue: false,
														isPure: true,
														kind: "number",
														lValueRequested: false,
														nodeType: "Literal",
														src: "1993:1:82",
														typeDescriptions: {
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														},
														value: "0"
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														}
													],
													id: 50112,
													isConstant: false,
													isLValue: false,
													isPure: true,
													lValueRequested: false,
													nodeType: "ElementaryTypeNameExpression",
													src: "1985:7:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_address_$",
														typeString: "type(address)"
													},
													typeName: {
														id: 50111,
														name: "address",
														nodeType: "ElementaryTypeName",
														src: "1985:7:82",
														typeDescriptions: {
														}
													}
												},
												id: 50114,
												isConstant: false,
												isLValue: false,
												isPure: true,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "1985:10:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											src: "1957:38:82",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										},
										{
											hexValue: "427269646765204167656e7420616464726573732063616e6e6f742062652030",
											id: 50116,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "1997:34:82",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_1e2b21a946d9397de82cc94780442c5fad9a8d8f91d91f8615315a0b1eb7a55a",
												typeString: "literal_string \"Bridge Agent address cannot be 0\""
											},
											value: "Bridge Agent address cannot be 0"
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											},
											{
												typeIdentifier: "t_stringliteral_1e2b21a946d9397de82cc94780442c5fad9a8d8f91d91f8615315a0b1eb7a55a",
												typeString: "literal_string \"Bridge Agent address cannot be 0\""
											}
										],
										id: 50109,
										name: "require",
										nodeType: "Identifier",
										overloadedDeclarations: [
											-18,
											-18
										],
										referencedDeclaration: -18,
										src: "1949:7:82",
										typeDescriptions: {
											typeIdentifier: "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
											typeString: "function (bool,string memory) pure"
										}
									},
									id: 50117,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "1949:83:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50118,
								nodeType: "ExpressionStatement",
								src: "1949:83:82"
							},
							{
								expression: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 50119,
										name: "renounceOwnership",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 30337,
										src: "2042:17:82",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$__$returns$__$",
											typeString: "function ()"
										}
									},
									id: 50120,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "2042:19:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50121,
								nodeType: "ExpressionStatement",
								src: "2042:19:82"
							},
							{
								expression: {
									id: 50124,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 50122,
										name: "localBridgeAgentAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50087,
										src: "2072:23:82",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										id: 50123,
										name: "_localBridgeAgentAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50104,
										src: "2098:24:82",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "2072:50:82",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								id: 50125,
								nodeType: "ExpressionStatement",
								src: "2072:50:82"
							},
							{
								expression: {
									id: 50132,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 50126,
										name: "localPortAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50083,
										src: "2132:16:82",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										"arguments": [
										],
										expression: {
											argumentTypes: [
											],
											expression: {
												"arguments": [
													{
														id: 50128,
														name: "_localBridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50104,
														src: "2164:24:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 50127,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 64454,
													src: "2151:12:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
														typeString: "type(contract IBranchBridgeAgent)"
													}
												},
												id: 50129,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "2151:38:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
													typeString: "contract IBranchBridgeAgent"
												}
											},
											id: 50130,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "2190:16:82",
											memberName: "localPortAddress",
											nodeType: "MemberAccess",
											referencedDeclaration: 64203,
											src: "2151:55:82",
											typeDescriptions: {
												typeIdentifier: "t_function_external_view$__$returns$_t_address_$",
												typeString: "function () view external returns (address)"
											}
										},
										id: 50131,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "2151:57:82",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "2132:76:82",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								id: 50133,
								nodeType: "ExpressionStatement",
								src: "2132:76:82"
							},
							{
								expression: {
									id: 50140,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 50134,
										name: "bridgeAgentExecutorAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50091,
										src: "2218:26:82",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										"arguments": [
										],
										expression: {
											argumentTypes: [
											],
											expression: {
												"arguments": [
													{
														id: 50136,
														name: "_localBridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50104,
														src: "2260:24:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 50135,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 64454,
													src: "2247:12:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
														typeString: "type(contract IBranchBridgeAgent)"
													}
												},
												id: 50137,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "2247:38:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
													typeString: "contract IBranchBridgeAgent"
												}
											},
											id: 50138,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "2286:26:82",
											memberName: "bridgeAgentExecutorAddress",
											nodeType: "MemberAccess",
											referencedDeclaration: 64209,
											src: "2247:65:82",
											typeDescriptions: {
												typeIdentifier: "t_function_external_view$__$returns$_t_address_$",
												typeString: "function () view external returns (address)"
											}
										},
										id: 50139,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "2247:67:82",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "2218:96:82",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								id: 50141,
								nodeType: "ExpressionStatement",
								src: "2218:96:82"
							}
						]
					},
					documentation: {
						id: 50102,
						nodeType: "StructuredDocumentation",
						src: "1715:140:82",
						text: " @notice Initializes the Base Branch Router.\n @param _localBridgeAgentAddress The address of the local Bridge Agent."
					},
					functionSelector: "c4d66de8",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 50107,
							kind: "modifierInvocation",
							modifierName: {
								id: 50106,
								name: "onlyOwner",
								nameLocations: [
									"1929:9:82"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 30398,
								src: "1929:9:82"
							},
							nodeType: "ModifierInvocation",
							src: "1929:9:82"
						}
					],
					name: "initialize",
					nameLocation: "1869:10:82",
					parameters: {
						id: 50105,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50104,
								mutability: "mutable",
								name: "_localBridgeAgentAddress",
								nameLocation: "1888:24:82",
								nodeType: "VariableDeclaration",
								scope: 50143,
								src: "1880:32:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 50103,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "1880:7:82",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "1879:34:82"
					},
					returnParameters: {
						id: 50108,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "1939:0:82"
					},
					scope: 50463,
					stateMutability: "nonpayable",
					virtual: true,
					visibility: "public"
				},
				{
					id: 50161,
					nodeType: "FunctionDefinition",
					src: "2545:187:82",
					nodes: [
					],
					body: {
						id: 50160,
						nodeType: "Block",
						src: "2640:92:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											id: 50157,
											name: "_depositNonce",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50146,
											src: "2711:13:82",
											typeDescriptions: {
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											}
										],
										expression: {
											"arguments": [
												{
													id: 50154,
													name: "localBridgeAgentAddress",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 50087,
													src: "2670:23:82",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													}
												],
												id: 50153,
												name: "IBridgeAgent",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 64454,
												src: "2657:12:82",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
													typeString: "type(contract IBranchBridgeAgent)"
												}
											},
											id: 50155,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "2657:37:82",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
												typeString: "contract IBranchBridgeAgent"
											}
										},
										id: 50156,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "2695:15:82",
										memberName: "getDepositEntry",
										nodeType: "MemberAccess",
										referencedDeclaration: 64218,
										src: "2657:53:82",
										typeDescriptions: {
											typeIdentifier: "t_function_external_view$_t_uint32_$returns$_t_struct$_Deposit_$64011_memory_ptr_$",
											typeString: "function (uint32) view external returns (struct Deposit memory)"
										}
									},
									id: 50158,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "2657:68:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_struct$_Deposit_$64011_memory_ptr",
										typeString: "struct Deposit memory"
									}
								},
								functionReturnParameters: 50152,
								id: 50159,
								nodeType: "Return",
								src: "2650:75:82"
							}
						]
					},
					baseFunctions: [
						64811
					],
					documentation: {
						id: 50144,
						nodeType: "StructuredDocumentation",
						src: "2511:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "83dd527d",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "getDepositEntry",
					nameLocation: "2554:15:82",
					overrides: {
						id: 50148,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "2606:8:82"
					},
					parameters: {
						id: 50147,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50146,
								mutability: "mutable",
								name: "_depositNonce",
								nameLocation: "2577:13:82",
								nodeType: "VariableDeclaration",
								scope: 50161,
								src: "2570:20:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint32",
									typeString: "uint32"
								},
								typeName: {
									id: 50145,
									name: "uint32",
									nodeType: "ElementaryTypeName",
									src: "2570:6:82",
									typeDescriptions: {
										typeIdentifier: "t_uint32",
										typeString: "uint32"
									}
								},
								visibility: "internal"
							}
						],
						src: "2569:22:82"
					},
					returnParameters: {
						id: 50152,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50151,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 50161,
								src: "2624:14:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_Deposit_$64011_memory_ptr",
									typeString: "struct Deposit"
								},
								typeName: {
									id: 50150,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50149,
										name: "Deposit",
										nameLocations: [
											"2624:7:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64011,
										src: "2624:7:82"
									},
									referencedDeclaration: 64011,
									src: "2624:7:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_Deposit_$64011_storage_ptr",
										typeString: "struct Deposit"
									}
								},
								visibility: "internal"
							}
						],
						src: "2623:16:82"
					},
					scope: 50463,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 50190,
					nodeType: "FunctionDefinition",
					src: "2959:229:82",
					nodes: [
					],
					body: {
						id: 50189,
						nodeType: "Block",
						src: "3068:120:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											"arguments": [
												{
													expression: {
														id: 50182,
														name: "msg",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: -15,
														src: "3150:3:82",
														typeDescriptions: {
															typeIdentifier: "t_magic_message",
															typeString: "msg"
														}
													},
													id: 50183,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "3154:6:82",
													memberName: "sender",
													nodeType: "MemberAccess",
													src: "3150:10:82",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													}
												],
												id: 50181,
												isConstant: false,
												isLValue: false,
												isPure: true,
												lValueRequested: false,
												nodeType: "ElementaryTypeNameExpression",
												src: "3142:8:82",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_address_payable_$",
													typeString: "type(address payable)"
												},
												typeName: {
													id: 50180,
													name: "address",
													nodeType: "ElementaryTypeName",
													src: "3142:8:82",
													stateMutability: "payable",
													typeDescriptions: {
													}
												}
											},
											id: 50184,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "3142:19:82",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											}
										},
										{
											id: 50185,
											name: "_params",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50164,
											src: "3163:7:82",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 50186,
											name: "_gParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50167,
											src: "3172:8:82",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											},
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address_payable",
													typeString: "address payable"
												},
												{
													typeIdentifier: "t_bytes_calldata_ptr",
													typeString: "bytes calldata"
												},
												{
													typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
													typeString: "struct GasParams calldata"
												}
											],
											expression: {
												"arguments": [
													{
														id: 50174,
														name: "localBridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50087,
														src: "3091:23:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 50173,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 64454,
													src: "3078:12:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
														typeString: "type(contract IBranchBridgeAgent)"
													}
												},
												id: 50175,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "3078:37:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
													typeString: "contract IBranchBridgeAgent"
												}
											},
											id: 50176,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "3116:7:82",
											memberName: "callOut",
											nodeType: "MemberAccess",
											referencedDeclaration: 64229,
											src: "3078:45:82",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$",
												typeString: "function (address payable,bytes memory,struct GasParams memory) payable external"
											}
										},
										id: 50179,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 50177,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "3131:3:82",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 50178,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "3135:5:82",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "3131:9:82",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "3078:63:82",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$value",
											typeString: "function (address payable,bytes memory,struct GasParams memory) payable external"
										}
									},
									id: 50187,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "3078:103:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50188,
								nodeType: "ExpressionStatement",
								src: "3078:103:82"
							}
						]
					},
					baseFunctions: [
						64820
					],
					documentation: {
						id: 50162,
						nodeType: "StructuredDocumentation",
						src: "2925:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "f4f79eb5",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 50171,
							kind: "modifierInvocation",
							modifierName: {
								id: 50170,
								name: "nonReentrant",
								nameLocations: [
									"3055:12:82"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "3055:12:82"
							},
							nodeType: "ModifierInvocation",
							src: "3055:12:82"
						}
					],
					name: "callOut",
					nameLocation: "2968:7:82",
					overrides: {
						id: 50169,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "3046:8:82"
					},
					parameters: {
						id: 50168,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50164,
								mutability: "mutable",
								name: "_params",
								nameLocation: "2991:7:82",
								nodeType: "VariableDeclaration",
								scope: 50190,
								src: "2976:22:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50163,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "2976:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50167,
								mutability: "mutable",
								name: "_gParams",
								nameLocation: "3019:8:82",
								nodeType: "VariableDeclaration",
								scope: 50190,
								src: "3000:27:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 50166,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50165,
										name: "GasParams",
										nameLocations: [
											"3000:9:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 63992,
										src: "3000:9:82"
									},
									referencedDeclaration: 63992,
									src: "3000:9:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$63992_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "2975:53:82"
					},
					returnParameters: {
						id: 50172,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "3068:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 50234,
					nodeType: "FunctionDefinition",
					src: "3228:534:82",
					nodes: [
					],
					body: {
						id: 50233,
						nodeType: "Block",
						src: "3414:348:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											expression: {
												id: 50206,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50196,
												src: "3493:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
													typeString: "struct DepositInput calldata"
												}
											},
											id: 50207,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "3502:6:82",
											memberName: "hToken",
											nodeType: "MemberAccess",
											referencedDeclaration: 64013,
											src: "3493:15:82",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											expression: {
												id: 50208,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50196,
												src: "3510:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
													typeString: "struct DepositInput calldata"
												}
											},
											id: 50209,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "3519:5:82",
											memberName: "token",
											nodeType: "MemberAccess",
											referencedDeclaration: 64015,
											src: "3510:14:82",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											expression: {
												id: 50210,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50196,
												src: "3526:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
													typeString: "struct DepositInput calldata"
												}
											},
											id: 50211,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "3535:6:82",
											memberName: "amount",
											nodeType: "MemberAccess",
											referencedDeclaration: 64017,
											src: "3526:15:82",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										{
											expression: {
												id: 50212,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50196,
												src: "3543:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
													typeString: "struct DepositInput calldata"
												}
											},
											id: 50213,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "3552:7:82",
											memberName: "deposit",
											nodeType: "MemberAccess",
											referencedDeclaration: 64019,
											src: "3543:16:82",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											},
											{
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										],
										id: 50205,
										name: "_transferAndApproveToken",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50403,
										src: "3468:24:82",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
											typeString: "function (address,address,uint256,uint256)"
										}
									},
									id: 50214,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "3468:92:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50215,
								nodeType: "ExpressionStatement",
								src: "3468:92:82"
							},
							{
								expression: {
									"arguments": [
										{
											"arguments": [
												{
													expression: {
														id: 50225,
														name: "msg",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: -15,
														src: "3705:3:82",
														typeDescriptions: {
															typeIdentifier: "t_magic_message",
															typeString: "msg"
														}
													},
													id: 50226,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "3709:6:82",
													memberName: "sender",
													nodeType: "MemberAccess",
													src: "3705:10:82",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													}
												],
												id: 50224,
												isConstant: false,
												isLValue: false,
												isPure: true,
												lValueRequested: false,
												nodeType: "ElementaryTypeNameExpression",
												src: "3697:8:82",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_address_payable_$",
													typeString: "type(address payable)"
												},
												typeName: {
													id: 50223,
													name: "address",
													nodeType: "ElementaryTypeName",
													src: "3697:8:82",
													stateMutability: "payable",
													typeDescriptions: {
													}
												}
											},
											id: 50227,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "3697:19:82",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											}
										},
										{
											id: 50228,
											name: "_params",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50193,
											src: "3718:7:82",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 50229,
											name: "_dParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50196,
											src: "3727:8:82",
											typeDescriptions: {
												typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
												typeString: "struct DepositInput calldata"
											}
										},
										{
											id: 50230,
											name: "_gParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50199,
											src: "3737:8:82",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											},
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
												typeString: "struct DepositInput calldata"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address_payable",
													typeString: "address payable"
												},
												{
													typeIdentifier: "t_bytes_calldata_ptr",
													typeString: "bytes calldata"
												},
												{
													typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
													typeString: "struct DepositInput calldata"
												},
												{
													typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
													typeString: "struct GasParams calldata"
												}
											],
											expression: {
												"arguments": [
													{
														id: 50217,
														name: "localBridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50087,
														src: "3624:23:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 50216,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 64454,
													src: "3611:12:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
														typeString: "type(contract IBranchBridgeAgent)"
													}
												},
												id: 50218,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "3611:37:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
													typeString: "contract IBranchBridgeAgent"
												}
											},
											id: 50219,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "3649:16:82",
											memberName: "callOutAndBridge",
											nodeType: "MemberAccess",
											referencedDeclaration: 64243,
											src: "3611:54:82",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_bytes_memory_ptr_$_t_struct$_DepositInput_$64020_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$",
												typeString: "function (address payable,bytes memory,struct DepositInput memory,struct GasParams memory) payable external"
											}
										},
										id: 50222,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 50220,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "3673:3:82",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 50221,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "3677:5:82",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "3673:9:82",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "3611:72:82",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_bytes_memory_ptr_$_t_struct$_DepositInput_$64020_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$value",
											typeString: "function (address payable,bytes memory,struct DepositInput memory,struct GasParams memory) payable external"
										}
									},
									id: 50231,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "3611:144:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50232,
								nodeType: "ExpressionStatement",
								src: "3611:144:82"
							}
						]
					},
					baseFunctions: [
						64832
					],
					documentation: {
						id: 50191,
						nodeType: "StructuredDocumentation",
						src: "3194:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "15859950",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 50203,
							kind: "modifierInvocation",
							modifierName: {
								id: 50202,
								name: "nonReentrant",
								nameLocations: [
									"3397:12:82"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "3397:12:82"
							},
							nodeType: "ModifierInvocation",
							src: "3397:12:82"
						}
					],
					name: "callOutAndBridge",
					nameLocation: "3237:16:82",
					overrides: {
						id: 50201,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "3380:8:82"
					},
					parameters: {
						id: 50200,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50193,
								mutability: "mutable",
								name: "_params",
								nameLocation: "3269:7:82",
								nodeType: "VariableDeclaration",
								scope: 50234,
								src: "3254:22:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50192,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3254:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50196,
								mutability: "mutable",
								name: "_dParams",
								nameLocation: "3300:8:82",
								nodeType: "VariableDeclaration",
								scope: 50234,
								src: "3278:30:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_DepositInput_$64020_calldata_ptr",
									typeString: "struct DepositInput"
								},
								typeName: {
									id: 50195,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50194,
										name: "DepositInput",
										nameLocations: [
											"3278:12:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64020,
										src: "3278:12:82"
									},
									referencedDeclaration: 64020,
									src: "3278:12:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_DepositInput_$64020_storage_ptr",
										typeString: "struct DepositInput"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50199,
								mutability: "mutable",
								name: "_gParams",
								nameLocation: "3329:8:82",
								nodeType: "VariableDeclaration",
								scope: 50234,
								src: "3310:27:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 50198,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50197,
										name: "GasParams",
										nameLocations: [
											"3310:9:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 63992,
										src: "3310:9:82"
									},
									referencedDeclaration: 63992,
									src: "3310:9:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$63992_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "3253:85:82"
					},
					returnParameters: {
						id: 50204,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "3414:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 50278,
					nodeType: "FunctionDefinition",
					src: "3802:565:82",
					nodes: [
					],
					body: {
						id: 50277,
						nodeType: "Block",
						src: "3998:369:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											expression: {
												id: 50250,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50240,
												src: "4086:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
													typeString: "struct DepositMultipleInput calldata"
												}
											},
											id: 50251,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4095:7:82",
											memberName: "hTokens",
											nodeType: "MemberAccess",
											referencedDeclaration: 64023,
											src: "4086:16:82",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_address_$dyn_calldata_ptr",
												typeString: "address[] calldata"
											}
										},
										{
											expression: {
												id: 50252,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50240,
												src: "4104:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
													typeString: "struct DepositMultipleInput calldata"
												}
											},
											id: 50253,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4113:6:82",
											memberName: "tokens",
											nodeType: "MemberAccess",
											referencedDeclaration: 64026,
											src: "4104:15:82",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_address_$dyn_calldata_ptr",
												typeString: "address[] calldata"
											}
										},
										{
											expression: {
												id: 50254,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50240,
												src: "4121:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
													typeString: "struct DepositMultipleInput calldata"
												}
											},
											id: 50255,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4130:7:82",
											memberName: "amounts",
											nodeType: "MemberAccess",
											referencedDeclaration: 64029,
											src: "4121:16:82",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_uint256_$dyn_calldata_ptr",
												typeString: "uint256[] calldata"
											}
										},
										{
											expression: {
												id: 50256,
												name: "_dParams",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 50240,
												src: "4139:8:82",
												typeDescriptions: {
													typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
													typeString: "struct DepositMultipleInput calldata"
												}
											},
											id: 50257,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4148:8:82",
											memberName: "deposits",
											nodeType: "MemberAccess",
											referencedDeclaration: 64032,
											src: "4139:17:82",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_uint256_$dyn_calldata_ptr",
												typeString: "uint256[] calldata"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_array$_t_address_$dyn_calldata_ptr",
												typeString: "address[] calldata"
											},
											{
												typeIdentifier: "t_array$_t_address_$dyn_calldata_ptr",
												typeString: "address[] calldata"
											},
											{
												typeIdentifier: "t_array$_t_uint256_$dyn_calldata_ptr",
												typeString: "uint256[] calldata"
											},
											{
												typeIdentifier: "t_array$_t_uint256_$dyn_calldata_ptr",
												typeString: "uint256[] calldata"
											}
										],
										id: 50249,
										name: "_transferAndApproveMultipleTokens",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50449,
										src: "4052:33:82",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
											typeString: "function (address[] memory,address[] memory,uint256[] memory,uint256[] memory)"
										}
									},
									id: 50258,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "4052:105:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50259,
								nodeType: "ExpressionStatement",
								src: "4052:105:82"
							},
							{
								expression: {
									"arguments": [
										{
											"arguments": [
												{
													expression: {
														id: 50269,
														name: "msg",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: -15,
														src: "4310:3:82",
														typeDescriptions: {
															typeIdentifier: "t_magic_message",
															typeString: "msg"
														}
													},
													id: 50270,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "4314:6:82",
													memberName: "sender",
													nodeType: "MemberAccess",
													src: "4310:10:82",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													}
												],
												id: 50268,
												isConstant: false,
												isLValue: false,
												isPure: true,
												lValueRequested: false,
												nodeType: "ElementaryTypeNameExpression",
												src: "4302:8:82",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_address_payable_$",
													typeString: "type(address payable)"
												},
												typeName: {
													id: 50267,
													name: "address",
													nodeType: "ElementaryTypeName",
													src: "4302:8:82",
													stateMutability: "payable",
													typeDescriptions: {
													}
												}
											},
											id: 50271,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "4302:19:82",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											}
										},
										{
											id: 50272,
											name: "_params",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50237,
											src: "4323:7:82",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 50273,
											name: "_dParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50240,
											src: "4332:8:82",
											typeDescriptions: {
												typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
												typeString: "struct DepositMultipleInput calldata"
											}
										},
										{
											id: 50274,
											name: "_gParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50243,
											src: "4342:8:82",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											},
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
												typeString: "struct DepositMultipleInput calldata"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address_payable",
													typeString: "address payable"
												},
												{
													typeIdentifier: "t_bytes_calldata_ptr",
													typeString: "bytes calldata"
												},
												{
													typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
													typeString: "struct DepositMultipleInput calldata"
												},
												{
													typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
													typeString: "struct GasParams calldata"
												}
											],
											expression: {
												"arguments": [
													{
														id: 50261,
														name: "localBridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50087,
														src: "4221:23:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 50260,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 64454,
													src: "4208:12:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
														typeString: "type(contract IBranchBridgeAgent)"
													}
												},
												id: 50262,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "4208:37:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
													typeString: "contract IBranchBridgeAgent"
												}
											},
											id: 50263,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4246:24:82",
											memberName: "callOutAndBridgeMultiple",
											nodeType: "MemberAccess",
											referencedDeclaration: 64257,
											src: "4208:62:82",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_bytes_memory_ptr_$_t_struct$_DepositMultipleInput_$64033_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$",
												typeString: "function (address payable,bytes memory,struct DepositMultipleInput memory,struct GasParams memory) payable external"
											}
										},
										id: 50266,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 50264,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "4278:3:82",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 50265,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "4282:5:82",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "4278:9:82",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "4208:80:82",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_bytes_memory_ptr_$_t_struct$_DepositMultipleInput_$64033_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$value",
											typeString: "function (address payable,bytes memory,struct DepositMultipleInput memory,struct GasParams memory) payable external"
										}
									},
									id: 50275,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "4208:152:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50276,
								nodeType: "ExpressionStatement",
								src: "4208:152:82"
							}
						]
					},
					baseFunctions: [
						64844
					],
					documentation: {
						id: 50235,
						nodeType: "StructuredDocumentation",
						src: "3768:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "1e2bcb1a",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 50247,
							kind: "modifierInvocation",
							modifierName: {
								id: 50246,
								name: "nonReentrant",
								nameLocations: [
									"3985:12:82"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "3985:12:82"
							},
							nodeType: "ModifierInvocation",
							src: "3985:12:82"
						}
					],
					name: "callOutAndBridgeMultiple",
					nameLocation: "3811:24:82",
					overrides: {
						id: 50245,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "3976:8:82"
					},
					parameters: {
						id: 50244,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50237,
								mutability: "mutable",
								name: "_params",
								nameLocation: "3860:7:82",
								nodeType: "VariableDeclaration",
								scope: 50278,
								src: "3845:22:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50236,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3845:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50240,
								mutability: "mutable",
								name: "_dParams",
								nameLocation: "3907:8:82",
								nodeType: "VariableDeclaration",
								scope: 50278,
								src: "3877:38:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_DepositMultipleInput_$64033_calldata_ptr",
									typeString: "struct DepositMultipleInput"
								},
								typeName: {
									id: 50239,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50238,
										name: "DepositMultipleInput",
										nameLocations: [
											"3877:20:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64033,
										src: "3877:20:82"
									},
									referencedDeclaration: 64033,
									src: "3877:20:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_DepositMultipleInput_$64033_storage_ptr",
										typeString: "struct DepositMultipleInput"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50243,
								mutability: "mutable",
								name: "_gParams",
								nameLocation: "3944:8:82",
								nodeType: "VariableDeclaration",
								scope: 50278,
								src: "3925:27:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 50242,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50241,
										name: "GasParams",
										nameLocations: [
											"3925:9:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 63992,
										src: "3925:9:82"
									},
									referencedDeclaration: 63992,
									src: "3925:9:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$63992_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "3835:123:82"
					},
					returnParameters: {
						id: 50248,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "3998:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 50305,
					nodeType: "FunctionDefinition",
					src: "4407:345:82",
					nodes: [
					],
					body: {
						id: 50304,
						nodeType: "Block",
						src: "4558:194:82",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											expression: {
												id: 50297,
												name: "msg",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: -15,
												src: "4691:3:82",
												typeDescriptions: {
													typeIdentifier: "t_magic_message",
													typeString: "msg"
												}
											},
											id: 50298,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4695:6:82",
											memberName: "sender",
											nodeType: "MemberAccess",
											src: "4691:10:82",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 50299,
											name: "_depositNonce",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50281,
											src: "4703:13:82",
											typeDescriptions: {
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											}
										},
										{
											id: 50300,
											name: "_params",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50283,
											src: "4718:7:82",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 50301,
											name: "_gParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50286,
											src: "4727:8:82",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											},
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_uint32",
													typeString: "uint32"
												},
												{
													typeIdentifier: "t_bytes_calldata_ptr",
													typeString: "bytes calldata"
												},
												{
													typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
													typeString: "struct GasParams calldata"
												}
											],
											expression: {
												"arguments": [
													{
														id: 50291,
														name: "localBridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50087,
														src: "4622:23:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 50290,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 64454,
													src: "4609:12:82",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IBranchBridgeAgent_$64454_$",
														typeString: "type(contract IBranchBridgeAgent)"
													}
												},
												id: 50292,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "4609:37:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IBranchBridgeAgent_$64454",
													typeString: "contract IBranchBridgeAgent"
												}
											},
											id: 50293,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4647:12:82",
											memberName: "retryDeposit",
											nodeType: "MemberAccess",
											referencedDeclaration: 64307,
											src: "4609:50:82",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_$_t_uint32_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$",
												typeString: "function (address,uint32,bytes memory,struct GasParams memory) payable external"
											}
										},
										id: 50296,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 50294,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "4667:3:82",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 50295,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "4671:5:82",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "4667:9:82",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "4609:68:82",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_$_t_uint32_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$63992_memory_ptr_$returns$__$value",
											typeString: "function (address,uint32,bytes memory,struct GasParams memory) payable external"
										}
									},
									id: 50302,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "4609:136:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50303,
								nodeType: "ExpressionStatement",
								src: "4609:136:82"
							}
						]
					},
					baseFunctions: [
						64855
					],
					documentation: {
						id: 50279,
						nodeType: "StructuredDocumentation",
						src: "4373:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "84cb82b6",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "retryDeposit",
					nameLocation: "4416:12:82",
					overrides: {
						id: 50288,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "4545:8:82"
					},
					parameters: {
						id: 50287,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50281,
								mutability: "mutable",
								name: "_depositNonce",
								nameLocation: "4436:13:82",
								nodeType: "VariableDeclaration",
								scope: 50305,
								src: "4429:20:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint32",
									typeString: "uint32"
								},
								typeName: {
									id: 50280,
									name: "uint32",
									nodeType: "ElementaryTypeName",
									src: "4429:6:82",
									typeDescriptions: {
										typeIdentifier: "t_uint32",
										typeString: "uint32"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50283,
								mutability: "mutable",
								name: "_params",
								nameLocation: "4466:7:82",
								nodeType: "VariableDeclaration",
								scope: 50305,
								src: "4451:22:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50282,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "4451:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50286,
								mutability: "mutable",
								name: "_gParams",
								nameLocation: "4494:8:82",
								nodeType: "VariableDeclaration",
								scope: 50305,
								src: "4475:27:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$63992_calldata_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 50285,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50284,
										name: "GasParams",
										nameLocations: [
											"4475:9:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 63992,
										src: "4475:9:82"
									},
									referencedDeclaration: 63992,
									src: "4475:9:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$63992_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "4428:75:82"
					},
					returnParameters: {
						id: 50289,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "4558:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 50316,
					nodeType: "FunctionDefinition",
					src: "4991:127:82",
					nodes: [
					],
					body: {
						id: 50315,
						nodeType: "Block",
						src: "5070:48:82",
						nodes: [
						],
						statements: [
							{
								errorCall: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 50312,
										name: "UnrecognizedFunctionId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 64882,
										src: "5087:22:82",
										typeDescriptions: {
											typeIdentifier: "t_function_error_pure$__$returns$__$",
											typeString: "function () pure"
										}
									},
									id: 50313,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "5087:24:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50314,
								nodeType: "RevertStatement",
								src: "5080:31:82"
							}
						]
					},
					baseFunctions: [
						64861
					],
					documentation: {
						id: 50306,
						nodeType: "StructuredDocumentation",
						src: "4957:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "46fcff18",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "executeNoSettlement",
					nameLocation: "5000:19:82",
					overrides: {
						id: 50310,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "5061:8:82"
					},
					parameters: {
						id: 50309,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50308,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 50316,
								src: "5020:14:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50307,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "5020:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "5019:16:82"
					},
					returnParameters: {
						id: 50311,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "5070:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: true,
					visibility: "external"
				},
				{
					id: 50330,
					nodeType: "FunctionDefinition",
					src: "5158:150:82",
					nodes: [
					],
					body: {
						id: 50329,
						nodeType: "Block",
						src: "5260:48:82",
						nodes: [
						],
						statements: [
							{
								errorCall: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 50326,
										name: "UnrecognizedFunctionId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 64882,
										src: "5277:22:82",
										typeDescriptions: {
											typeIdentifier: "t_function_error_pure$__$returns$__$",
											typeString: "function () pure"
										}
									},
									id: 50327,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "5277:24:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50328,
								nodeType: "RevertStatement",
								src: "5270:31:82"
							}
						]
					},
					baseFunctions: [
						64870
					],
					documentation: {
						id: 50317,
						nodeType: "StructuredDocumentation",
						src: "5124:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "fa536bec",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "executeSettlement",
					nameLocation: "5167:17:82",
					overrides: {
						id: 50324,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "5251:8:82"
					},
					parameters: {
						id: 50323,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50319,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 50330,
								src: "5185:14:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50318,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "5185:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50322,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 50330,
								src: "5201:23:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_SettlementParams_$64112_memory_ptr",
									typeString: "struct SettlementParams"
								},
								typeName: {
									id: 50321,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50320,
										name: "SettlementParams",
										nameLocations: [
											"5201:16:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64112,
										src: "5201:16:82"
									},
									referencedDeclaration: 64112,
									src: "5201:16:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_SettlementParams_$64112_storage_ptr",
										typeString: "struct SettlementParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "5184:41:82"
					},
					returnParameters: {
						id: 50325,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "5260:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: true,
					visibility: "external"
				},
				{
					id: 50344,
					nodeType: "FunctionDefinition",
					src: "5348:202:82",
					nodes: [
					],
					body: {
						id: 50343,
						nodeType: "Block",
						src: "5502:48:82",
						nodes: [
						],
						statements: [
							{
								errorCall: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 50340,
										name: "UnrecognizedFunctionId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 64882,
										src: "5519:22:82",
										typeDescriptions: {
											typeIdentifier: "t_function_error_pure$__$returns$__$",
											typeString: "function () pure"
										}
									},
									id: 50341,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "5519:24:82",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 50342,
								nodeType: "RevertStatement",
								src: "5512:31:82"
							}
						]
					},
					baseFunctions: [
						64879
					],
					documentation: {
						id: 50331,
						nodeType: "StructuredDocumentation",
						src: "5314:29:82",
						text: "@inheritdoc IBranchRouter"
					},
					functionSelector: "51e372b0",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "executeSettlementMultiple",
					nameLocation: "5357:25:82",
					overrides: {
						id: 50338,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "5489:8:82"
					},
					parameters: {
						id: 50337,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50333,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 50344,
								src: "5383:14:82",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 50332,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "5383:5:82",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50336,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 50344,
								src: "5399:31:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_SettlementMultipleParams_$64131_memory_ptr",
									typeString: "struct SettlementMultipleParams"
								},
								typeName: {
									id: 50335,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 50334,
										name: "SettlementMultipleParams",
										nameLocations: [
											"5399:24:82"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64131,
										src: "5399:24:82"
									},
									referencedDeclaration: 64131,
									src: "5399:24:82",
									typeDescriptions: {
										typeIdentifier: "t_struct$_SettlementMultipleParams_$64131_storage_ptr",
										typeString: "struct SettlementMultipleParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "5382:49:82"
					},
					returnParameters: {
						id: 50339,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "5502:0:82"
					},
					scope: 50463,
					stateMutability: "payable",
					virtual: true,
					visibility: "external"
				},
				{
					id: 50403,
					nodeType: "FunctionDefinition",
					src: "6027:612:82",
					nodes: [
					],
					body: {
						id: 50402,
						nodeType: "Block",
						src: "6166:473:82",
						nodes: [
						],
						statements: [
							{
								condition: {
									commonType: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									},
									id: 50360,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										commonType: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										},
										id: 50358,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										leftExpression: {
											id: 50356,
											name: "_amount",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50351,
											src: "6240:7:82",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										nodeType: "BinaryOperation",
										operator: "-",
										rightExpression: {
											id: 50357,
											name: "_deposit",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50353,
											src: "6250:8:82",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										src: "6240:18:82",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "BinaryOperation",
									operator: ">",
									rightExpression: {
										hexValue: "30",
										id: 50359,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "6261:1:82",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									src: "6240:22:82",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 50377,
								nodeType: "IfStatement",
								src: "6236:166:82",
								trueBody: {
									id: 50376,
									nodeType: "Block",
									src: "6264:138:82",
									statements: [
										{
											id: 50375,
											nodeType: "UncheckedBlock",
											src: "6278:114:82",
											statements: [
												{
													expression: {
														"arguments": [
															{
																expression: {
																	id: 50364,
																	name: "msg",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: -15,
																	src: "6331:3:82",
																	typeDescriptions: {
																		typeIdentifier: "t_magic_message",
																		typeString: "msg"
																	}
																},
																id: 50365,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																memberLocation: "6335:6:82",
																memberName: "sender",
																nodeType: "MemberAccess",
																src: "6331:10:82",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															{
																"arguments": [
																	{
																		id: 50368,
																		name: "this",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: -28,
																		src: "6351:4:82",
																		typeDescriptions: {
																			typeIdentifier: "t_contract$_BaseBranchRouter_$50463",
																			typeString: "contract BaseBranchRouter"
																		}
																	}
																],
																expression: {
																	argumentTypes: [
																		{
																			typeIdentifier: "t_contract$_BaseBranchRouter_$50463",
																			typeString: "contract BaseBranchRouter"
																		}
																	],
																	id: 50367,
																	isConstant: false,
																	isLValue: false,
																	isPure: true,
																	lValueRequested: false,
																	nodeType: "ElementaryTypeNameExpression",
																	src: "6343:7:82",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_address_$",
																		typeString: "type(address)"
																	},
																	typeName: {
																		id: 50366,
																		name: "address",
																		nodeType: "ElementaryTypeName",
																		src: "6343:7:82",
																		typeDescriptions: {
																		}
																	}
																},
																id: 50369,
																isConstant: false,
																isLValue: false,
																isPure: false,
																kind: "typeConversion",
																lValueRequested: false,
																nameLocations: [
																],
																names: [
																],
																nodeType: "FunctionCall",
																src: "6343:13:82",
																tryCall: false,
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															{
																commonType: {
																	typeIdentifier: "t_uint256",
																	typeString: "uint256"
																},
																id: 50372,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																leftExpression: {
																	id: 50370,
																	name: "_amount",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 50351,
																	src: "6358:7:82",
																	typeDescriptions: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																},
																nodeType: "BinaryOperation",
																operator: "-",
																rightExpression: {
																	id: 50371,
																	name: "_deposit",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 50353,
																	src: "6368:8:82",
																	typeDescriptions: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																},
																src: "6358:18:82",
																typeDescriptions: {
																	typeIdentifier: "t_uint256",
																	typeString: "uint256"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																},
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																},
																{
																	typeIdentifier: "t_uint256",
																	typeString: "uint256"
																}
															],
															expression: {
																id: 50361,
																name: "_hToken",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 50347,
																src: "6306:7:82",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															id: 50363,
															isConstant: false,
															isLValue: false,
															isPure: false,
															lValueRequested: false,
															memberLocation: "6314:16:82",
															memberName: "safeTransferFrom",
															nodeType: "MemberAccess",
															referencedDeclaration: 46036,
															src: "6306:24:82",
															typeDescriptions: {
																typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
																typeString: "function (address,address,address,uint256)"
															}
														},
														id: 50373,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "6306:71:82",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$__$",
															typeString: "tuple()"
														}
													},
													id: 50374,
													nodeType: "ExpressionStatement",
													src: "6306:71:82"
												}
											]
										}
									]
								}
							},
							{
								condition: {
									commonType: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									},
									id: 50380,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										id: 50378,
										name: "_deposit",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50353,
										src: "6474:8:82",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "BinaryOperation",
									operator: ">",
									rightExpression: {
										hexValue: "30",
										id: 50379,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "6485:1:82",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									src: "6474:12:82",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 50401,
								nodeType: "IfStatement",
								src: "6470:163:82",
								trueBody: {
									id: 50400,
									nodeType: "Block",
									src: "6488:145:82",
									statements: [
										{
											expression: {
												"arguments": [
													{
														expression: {
															id: 50384,
															name: "msg",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: -15,
															src: "6526:3:82",
															typeDescriptions: {
																typeIdentifier: "t_magic_message",
																typeString: "msg"
															}
														},
														id: 50385,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														memberLocation: "6530:6:82",
														memberName: "sender",
														nodeType: "MemberAccess",
														src: "6526:10:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														"arguments": [
															{
																id: 50388,
																name: "this",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: -28,
																src: "6546:4:82",
																typeDescriptions: {
																	typeIdentifier: "t_contract$_BaseBranchRouter_$50463",
																	typeString: "contract BaseBranchRouter"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_contract$_BaseBranchRouter_$50463",
																	typeString: "contract BaseBranchRouter"
																}
															],
															id: 50387,
															isConstant: false,
															isLValue: false,
															isPure: true,
															lValueRequested: false,
															nodeType: "ElementaryTypeNameExpression",
															src: "6538:7:82",
															typeDescriptions: {
																typeIdentifier: "t_type$_t_address_$",
																typeString: "type(address)"
															},
															typeName: {
																id: 50386,
																name: "address",
																nodeType: "ElementaryTypeName",
																src: "6538:7:82",
																typeDescriptions: {
																}
															}
														},
														id: 50389,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "typeConversion",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "6538:13:82",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														id: 50390,
														name: "_deposit",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50353,
														src: "6553:8:82",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													],
													expression: {
														id: 50381,
														name: "_token",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50349,
														src: "6502:6:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													id: 50383,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "6509:16:82",
													memberName: "safeTransferFrom",
													nodeType: "MemberAccess",
													referencedDeclaration: 46036,
													src: "6502:23:82",
													typeDescriptions: {
														typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
														typeString: "function (address,address,address,uint256)"
													}
												},
												id: 50391,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "6502:60:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_tuple$__$",
													typeString: "tuple()"
												}
											},
											id: 50392,
											nodeType: "ExpressionStatement",
											src: "6502:60:82"
										},
										{
											expression: {
												"arguments": [
													{
														id: 50396,
														name: "localPortAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50083,
														src: "6595:16:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														id: 50397,
														name: "_deposit",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50353,
														src: "6613:8:82",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													],
													expression: {
														id: 50393,
														name: "_token",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 50349,
														src: "6576:6:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													id: 50395,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "6583:11:82",
													memberName: "safeApprove",
													nodeType: "MemberAccess",
													referencedDeclaration: 46086,
													src: "6576:18:82",
													typeDescriptions: {
														typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
														typeString: "function (address,address,uint256)"
													}
												},
												id: 50398,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "6576:46:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_tuple$__$",
													typeString: "tuple()"
												}
											},
											id: 50399,
											nodeType: "ExpressionStatement",
											src: "6576:46:82"
										}
									]
								}
							}
						]
					},
					documentation: {
						id: 50345,
						nodeType: "StructuredDocumentation",
						src: "5743:279:82",
						text: " @notice Internal function to transfer token into a contract.\n   @param _hToken The address of the hToken.\n   @param _token The address of the token.\n   @param _amount The amount of the hToken.\n   @param _deposit The amount of the token."
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_transferAndApproveToken",
					nameLocation: "6036:24:82",
					parameters: {
						id: 50354,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50347,
								mutability: "mutable",
								name: "_hToken",
								nameLocation: "6069:7:82",
								nodeType: "VariableDeclaration",
								scope: 50403,
								src: "6061:15:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 50346,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "6061:7:82",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50349,
								mutability: "mutable",
								name: "_token",
								nameLocation: "6086:6:82",
								nodeType: "VariableDeclaration",
								scope: 50403,
								src: "6078:14:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 50348,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "6078:7:82",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50351,
								mutability: "mutable",
								name: "_amount",
								nameLocation: "6102:7:82",
								nodeType: "VariableDeclaration",
								scope: 50403,
								src: "6094:15:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 50350,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "6094:7:82",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50353,
								mutability: "mutable",
								name: "_deposit",
								nameLocation: "6119:8:82",
								nodeType: "VariableDeclaration",
								scope: 50403,
								src: "6111:16:82",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 50352,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "6111:7:82",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							}
						],
						src: "6060:68:82"
					},
					returnParameters: {
						id: 50355,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "6166:0:82"
					},
					scope: 50463,
					stateMutability: "nonpayable",
					virtual: true,
					visibility: "internal"
				},
				{
					id: 50449,
					nodeType: "FunctionDefinition",
					src: "6953:417:82",
					nodes: [
					],
					body: {
						id: 50448,
						nodeType: "Block",
						src: "7151:219:82",
						nodes: [
						],
						statements: [
							{
								body: {
									id: 50446,
									nodeType: "Block",
									src: "7203:161:82",
									statements: [
										{
											expression: {
												"arguments": [
													{
														baseExpression: {
															id: 50428,
															name: "_hTokens",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50407,
															src: "7242:8:82",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																typeString: "address[] memory"
															}
														},
														id: 50430,
														indexExpression: {
															id: 50429,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50420,
															src: "7251:1:82",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "7242:11:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														baseExpression: {
															id: 50431,
															name: "_tokens",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50410,
															src: "7255:7:82",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																typeString: "address[] memory"
															}
														},
														id: 50433,
														indexExpression: {
															id: 50432,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50420,
															src: "7263:1:82",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "7255:10:82",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														baseExpression: {
															id: 50434,
															name: "_amounts",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50413,
															src: "7267:8:82",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																typeString: "uint256[] memory"
															}
														},
														id: 50436,
														indexExpression: {
															id: 50435,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50420,
															src: "7276:1:82",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "7267:11:82",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													{
														baseExpression: {
															id: 50437,
															name: "_deposits",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50416,
															src: "7280:9:82",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																typeString: "uint256[] memory"
															}
														},
														id: 50439,
														indexExpression: {
															id: 50438,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50420,
															src: "7290:1:82",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "7280:12:82",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														},
														{
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													],
													id: 50427,
													name: "_transferAndApproveToken",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 50403,
													src: "7217:24:82",
													typeDescriptions: {
														typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
														typeString: "function (address,address,uint256,uint256)"
													}
												},
												id: 50440,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "7217:76:82",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_tuple$__$",
													typeString: "tuple()"
												}
											},
											id: 50441,
											nodeType: "ExpressionStatement",
											src: "7217:76:82"
										},
										{
											id: 50445,
											nodeType: "UncheckedBlock",
											src: "7308:46:82",
											statements: [
												{
													expression: {
														id: 50443,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														nodeType: "UnaryOperation",
														operator: "++",
														prefix: true,
														src: "7336:3:82",
														subExpression: {
															id: 50442,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 50420,
															src: "7338:1:82",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													id: 50444,
													nodeType: "ExpressionStatement",
													src: "7336:3:82"
												}
											]
										}
									]
								},
								condition: {
									commonType: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									},
									id: 50426,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										id: 50423,
										name: "i",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50420,
										src: "7181:1:82",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "BinaryOperation",
									operator: "<",
									rightExpression: {
										expression: {
											id: 50424,
											name: "_hTokens",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 50407,
											src: "7185:8:82",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
												typeString: "address[] memory"
											}
										},
										id: 50425,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "7194:6:82",
										memberName: "length",
										nodeType: "MemberAccess",
										src: "7185:15:82",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									src: "7181:19:82",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 50447,
								initializationExpression: {
									assignments: [
										50420
									],
									declarations: [
										{
											constant: false,
											id: 50420,
											mutability: "mutable",
											name: "i",
											nameLocation: "7174:1:82",
											nodeType: "VariableDeclaration",
											scope: 50447,
											src: "7166:9:82",
											stateVariable: false,
											storageLocation: "default",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											},
											typeName: {
												id: 50419,
												name: "uint256",
												nodeType: "ElementaryTypeName",
												src: "7166:7:82",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											},
											visibility: "internal"
										}
									],
									id: 50422,
									initialValue: {
										hexValue: "30",
										id: 50421,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "7178:1:82",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									nodeType: "VariableDeclarationStatement",
									src: "7166:13:82"
								},
								nodeType: "ForStatement",
								src: "7161:203:82"
							}
						]
					},
					documentation: {
						id: 50404,
						nodeType: "StructuredDocumentation",
						src: "6645:303:82",
						text: " @notice Internal function to transfer multiple tokens into a contract.\n   @param _hTokens The addresses of the hTokens.\n   @param _tokens The addresses of the tokens.\n   @param _amounts The amounts of the hTokens.\n   @param _deposits The amounts of the tokens."
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_transferAndApproveMultipleTokens",
					nameLocation: "6962:33:82",
					parameters: {
						id: 50417,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 50407,
								mutability: "mutable",
								name: "_hTokens",
								nameLocation: "7022:8:82",
								nodeType: "VariableDeclaration",
								scope: 50449,
								src: "7005:25:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
									typeString: "address[]"
								},
								typeName: {
									baseType: {
										id: 50405,
										name: "address",
										nodeType: "ElementaryTypeName",
										src: "7005:7:82",
										stateMutability: "nonpayable",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									id: 50406,
									nodeType: "ArrayTypeName",
									src: "7005:9:82",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_address_$dyn_storage_ptr",
										typeString: "address[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50410,
								mutability: "mutable",
								name: "_tokens",
								nameLocation: "7057:7:82",
								nodeType: "VariableDeclaration",
								scope: 50449,
								src: "7040:24:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
									typeString: "address[]"
								},
								typeName: {
									baseType: {
										id: 50408,
										name: "address",
										nodeType: "ElementaryTypeName",
										src: "7040:7:82",
										stateMutability: "nonpayable",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									id: 50409,
									nodeType: "ArrayTypeName",
									src: "7040:9:82",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_address_$dyn_storage_ptr",
										typeString: "address[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50413,
								mutability: "mutable",
								name: "_amounts",
								nameLocation: "7091:8:82",
								nodeType: "VariableDeclaration",
								scope: 50449,
								src: "7074:25:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
									typeString: "uint256[]"
								},
								typeName: {
									baseType: {
										id: 50411,
										name: "uint256",
										nodeType: "ElementaryTypeName",
										src: "7074:7:82",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									id: 50412,
									nodeType: "ArrayTypeName",
									src: "7074:9:82",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
										typeString: "uint256[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 50416,
								mutability: "mutable",
								name: "_deposits",
								nameLocation: "7126:9:82",
								nodeType: "VariableDeclaration",
								scope: 50449,
								src: "7109:26:82",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
									typeString: "uint256[]"
								},
								typeName: {
									baseType: {
										id: 50414,
										name: "uint256",
										nodeType: "ElementaryTypeName",
										src: "7109:7:82",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									id: 50415,
									nodeType: "ArrayTypeName",
									src: "7109:9:82",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
										typeString: "uint256[]"
									}
								},
								visibility: "internal"
							}
						],
						src: "6995:146:82"
					},
					returnParameters: {
						id: 50418,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "7151:0:82"
					},
					scope: 50463,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "internal"
				},
				{
					id: 50462,
					nodeType: "ModifierDefinition",
					src: "7639:147:82",
					nodes: [
					],
					body: {
						id: 50461,
						nodeType: "Block",
						src: "7672:114:82",
						nodes: [
						],
						statements: [
							{
								condition: {
									commonType: {
										typeIdentifier: "t_address",
										typeString: "address"
									},
									id: 50455,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										expression: {
											id: 50452,
											name: "msg",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: -15,
											src: "7686:3:82",
											typeDescriptions: {
												typeIdentifier: "t_magic_message",
												typeString: "msg"
											}
										},
										id: 50453,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "7690:6:82",
										memberName: "sender",
										nodeType: "MemberAccess",
										src: "7686:10:82",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "BinaryOperation",
									operator: "!=",
									rightExpression: {
										id: 50454,
										name: "bridgeAgentExecutorAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 50091,
										src: "7700:26:82",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "7686:40:82",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 50459,
								nodeType: "IfStatement",
								src: "7682:86:82",
								trueBody: {
									errorCall: {
										"arguments": [
										],
										expression: {
											argumentTypes: [
											],
											id: 50456,
											name: "UnrecognizedBridgeAgentExecutor",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 64885,
											src: "7735:31:82",
											typeDescriptions: {
												typeIdentifier: "t_function_error_pure$__$returns$__$",
												typeString: "function () pure"
											}
										},
										id: 50457,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "7735:33:82",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_tuple$__$",
											typeString: "tuple()"
										}
									},
									id: 50458,
									nodeType: "RevertStatement",
									src: "7728:40:82"
								}
							},
							{
								id: 50460,
								nodeType: "PlaceholderStatement",
								src: "7778:1:82"
							}
						]
					},
					documentation: {
						id: 50450,
						nodeType: "StructuredDocumentation",
						src: "7559:75:82",
						text: "@notice Modifier that verifies msg sender is the Bridge Agent Executor."
					},
					name: "requiresAgentExecutor",
					nameLocation: "7648:21:82",
					parameters: {
						id: 50451,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "7669:2:82"
					},
					virtual: false,
					visibility: "internal"
				}
			],
			abstract: false,
			baseContracts: [
				{
					baseName: {
						id: 50072,
						name: "IBranchRouter",
						nameLocations: [
							"705:13:82"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 64886,
						src: "705:13:82"
					},
					id: 50073,
					nodeType: "InheritanceSpecifier",
					src: "705:13:82"
				},
				{
					baseName: {
						id: 50074,
						name: "ReentrancyGuard",
						nameLocations: [
							"720:15:82"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 48956,
						src: "720:15:82"
					},
					id: 50075,
					nodeType: "InheritanceSpecifier",
					src: "720:15:82"
				},
				{
					baseName: {
						id: 50076,
						name: "Ownable",
						nameLocations: [
							"737:7:82"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 30399,
						src: "737:7:82"
					},
					id: 50077,
					nodeType: "InheritanceSpecifier",
					src: "737:7:82"
				}
			],
			canonicalName: "BaseBranchRouter",
			contractDependencies: [
			],
			contractKind: "contract",
			documentation: {
				id: 50071,
				nodeType: "StructuredDocumentation",
				src: "617:59:82",
				text: "@title Base Branch Router Contract\n @author MaiaDAO"
			},
			fullyImplemented: true,
			linearizedBaseContracts: [
				50463,
				30399,
				48956,
				64886
			],
			name: "BaseBranchRouter",
			nameLocation: "685:16:82",
			scope: 50464,
			usedErrors: [
				30211,
				30214,
				30217,
				30220,
				64882,
				64885
			]
		}
	],
	license: "MIT"
};
var id = 82;
var BaseBranchRouterABI = {
	abi: abi,
	bytecode: bytecode,
	deployedBytecode: deployedBytecode,
	methodIdentifiers: methodIdentifiers,
	rawMetadata: rawMetadata,
	metadata: metadata,
	ast: ast,
	id: id
};

function formatCall(call) {
  return [call.target, call.callData];
}
function formatCalls(calls) {
  return calls.map(function (call) {
    return [call.target, call.callData];
  });
}
function formatPayableCall(call) {
  return [call.target, call.callData, call.value];
}
function formatPayableCalls(calls) {
  return calls.map(function (call) {
    return [call.target, call.callData, call.value];
  });
}
function formatGasParams(gasParams) {
  return [gasParams.gasLimit, gasParams.remoteBranchExecutionGas];
}
function formatGasParamsArray(gasParams) {
  return gasParams.map(function (gasParam) {
    return [gasParam.gasLimit, gasParam.remoteBranchExecutionGas];
  });
}
function formatDeposit(depositParams) {
  return [depositParams.hToken, depositParams.token, depositParams.amount, depositParams.deposit];
}
function formatMultipleDeposit(depositParams) {
  return [depositParams.hTokens, depositParams.tokens, depositParams.amounts, depositParams.deposits];
}

/**
 * Checks if the single deposit params are valid.
 * @param depositParams
 */
function singleDepositInvariantHelper(depositParams) {
  !maiaCoreSdk.checkValidAddress(depositParams.token) ?  invariant(false, 'token must be a valid address')  : void 0;
  !maiaCoreSdk.checkValidAddress(depositParams.hToken) ?  invariant(false, 'token must be a valid address')  : void 0;
  !(depositParams.hToken !== maiaCoreSdk.ZERO_ADDRESS) ?  invariant(false, 'hToken cannot be zero address')  : void 0;
  !(depositParams.hToken !== depositParams.token) ?  invariant(false, 'hToken and token must be different')  : void 0;
  !(JSBI.BigInt(depositParams.amount) >= maiaCoreSdk.ZERO) ?  invariant(false, 'Amount must be greater than ZERO')  : void 0;
  !(JSBI.BigInt(depositParams.deposit) >= maiaCoreSdk.ZERO) ?  invariant(false, 'Deposit must be greater than ZERO')  : void 0;
  !(depositParams.amount >= depositParams.deposit) ?  invariant(false, 'Amount must be greater than or equal to deposit')  : void 0;
}
/**
 * Checks if the multipledeposit params are valid.
 * @param depositParams
 */
function multipleDepositInvariantHelper(depositParams) {
  depositParams.tokens.forEach(function (token, index) {
    !maiaCoreSdk.checkValidAddress(token) ?  invariant(false, 'token must be a valid address')  : void 0;
    !(JSBI.BigInt(depositParams.deposits[index]) >= maiaCoreSdk.ZERO) ?  invariant(false, 'Deposit must be greater than 0')  : void 0;
    !(depositParams.amounts[index] >= depositParams.deposits[index]) ?  invariant(false, 'Amount must be greater than or equal to deposit')  : void 0;
  });
  depositParams.hTokens.forEach(function (hToken, index) {
    !maiaCoreSdk.checkValidAddress(hToken) ?  invariant(false, 'htoken must be a valid address')  : void 0;
    !(hToken !== maiaCoreSdk.ZERO_ADDRESS) ?  invariant(false, 'hToken cannot be zero address')  : void 0;
    !(hToken !== depositParams.tokens[index]) ?  invariant(false, 'hToken and token must be different')  : void 0;
    !(JSBI.BigInt(depositParams.amounts[index]) >= maiaCoreSdk.ZERO) ?  invariant(false, 'Amount must be greater or equal than 0')  : void 0;
  });
}
/**
 * Invariant helper for the virtual account function that encodes multiple calls, either payable or not.
 * @param calls
 */
function virtualAccountCallInvariantHelper(calls) {
  !(calls.length > 0) ?  invariant(false, 'Must have at least one call')  : void 0;
  calls.forEach(function (call) {
    !maiaCoreSdk.checkValidAddress(call.target) ?  invariant(false, 'Target must be valid address')  : void 0;
    !(call.target !== '') ?  invariant(false, 'Target must be defined')  : void 0;
    !(call.callData !== '') ?  invariant(false, ' Call data must be defined')  : void 0;
    if ('value' in call) {
      !(JSBI.BigInt(call.value) >= maiaCoreSdk.ZERO) ?  invariant(false, 'Value must be greater than or equal to 0')  : void 0;
    }
  });
}
function virtualAccountWithdrawInvariantHelper(token, amount, tokenId) {
  !maiaCoreSdk.checkValidAddress(token) ?  invariant(false, 'Token must be valid address')  : void 0;
  !(token !== maiaCoreSdk.ZERO_ADDRESS) ?  invariant(false, 'Token cannot be zero address')  : void 0;
  if (amount) {
    !(amount >= maiaCoreSdk.ZERO) ?  invariant(false, 'Amount must be greater than or equal to 0')  : void 0;
  } else {
    !tokenId ?  invariant(false, 'TokenId must be defined')  : void 0;
    !(tokenId >= maiaCoreSdk.ZERO) ?  invariant(false, ' TokenId must be greater than or equal to 0')  : void 0;
  }
}

/**
 * Class to create the calldata to pass as argument for a given call to the branch router.
 */
var BaseBranchRouter = /*#__PURE__*/function () {
  /**
   * Cannot be constructed.
   */
  /* eslint-disable @typescript-eslint/no-empty-function */
  function BaseBranchRouter() {}
  /**
   * Encodes the calldata to pass as argument to a BaseBranchRouter attached to a MulticallRootRouter.
   * Produces the on-chain calldata to pass as argument for a call that does not require a token deposit.
   * Eg: Claiming rewards,withdraw liq, etc.
   *
   * @param params The parameters to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   */
  BaseBranchRouter.encodeCallOutCalldata = function encodeCallOutCalldata(params, gasParams) {
    return BaseBranchRouter.INTERFACE.encodeFunctionData('callOut', [params, formatGasParams(gasParams)]);
  }
  /**
   * Encodes the calldata to pass as argument to a BaseBranchRouter attached to a MulticallRootRouter.
   * Produces the on chain parameters to pass as arguments for a given call that requires a single token deposit.
   * Eg: ERC4626 Deposit, swap, etc.
   *
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit token and amount.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns
   */;
  BaseBranchRouter.encodeCallOutAndBridgeCalldata = function encodeCallOutAndBridgeCalldata(_ref) {
    var params = _ref.params,
      depositParams = _ref.depositParams,
      gasParams = _ref.gasParams;
    //performs safety checks
    singleDepositInvariantHelper(depositParams);
    return BaseBranchRouter.INTERFACE.encodeFunctionData('callOutAndBridge', [params, [depositParams.hToken, depositParams.token, depositParams.amount, depositParams.deposit], formatGasParams(gasParams)]);
  }
  /**
   * Encodes the calldata to pass as argument to a BaseBranchRouter attached to a MulticallRootRouter.
   * Produces the on chain parameters to pass as arguments for a given call that requires multiple token deposit.
   * Eg: Adding Liquidity, etc.
   *
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit tokens and amounts.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns
   */;
  BaseBranchRouter.encodeCallOutAndBridgeMultipleCalldata = function encodeCallOutAndBridgeMultipleCalldata(_ref2) {
    var params = _ref2.params,
      depositParams = _ref2.depositParams,
      gasParams = _ref2.gasParams;
    //performs safety checks
    multipleDepositInvariantHelper(depositParams);
    return BaseBranchRouter.INTERFACE.encodeFunctionData('callOutAndBridgeMultiple', [params, [depositParams.hTokens, depositParams.tokens, depositParams.amounts, depositParams.deposits], formatGasParams(gasParams)]);
  }
  /**
   * Used to request the retry of a failed deposit from the origin branch chain.
   * @param depositNonce The nonce of the deposit to retry.
   * @param params The encoded params to pass to the root router
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns encoded calldata for the retryDeposit function
   */;
  BaseBranchRouter.encodeRetryDepositCalldata = function encodeRetryDepositCalldata(depositNonce, params, gasParams) {
    return BaseBranchRouter.INTERFACE.encodeFunctionData('retryDeposit', [depositNonce, params, formatGasParams(gasParams)]);
  }
  /**
   * Encodes the calldata to pass as argument to a BaseBranchRouter attached to a MulticallRootRouterLibZip.
   * Produces the on-chain calldata to pass as argument for a call that does not require a token deposit.
   * Eg: Claiming rewards,withdraw liq, etc.
   *
   * @param params The parameters to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns the encoded calldata and message value for the call
   *
   */;
  BaseBranchRouter.encodeCallOutLibZipCalldata = function encodeCallOutLibZipCalldata(params, gasParams) {
    // Format Calls
    var formattedCalls = formatCalls(params.callData);
    // Encoded Calls
    var encodedCalls = solady.LibZip.cdCompress(abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]'], [formattedCalls]));
    // Encode Multicall Root Router Parameters, pack Router function ID and compress using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [params.funcId, encodedCalls]);
    // Encode the function data.
    var encodedParams = this.encodeCallOutCalldata(libZipEncodedParams, gasParams);
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  }
  /**
   * Encodes the calldata to pass as argument to a BaseBranchRouter attached to a MulticallRootRouterLibZip.
   * Produces the on chain parameters to pass as arguments for a given call that requires a single token deposit.
   * Eg: ERC4626 Deposit, swap, etc.
   *
   * @param params parameters to pass to the branch router function.
   * @param dParams deposit params to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns the encoded calldata and message value for the call
   */;
  BaseBranchRouter.encodeCallOutAndBridgeLibZipCalldata = function encodeCallOutAndBridgeLibZipCalldata(params, dParams, gasParams) {
    // Format Calls
    var formattedCalls = formatCalls(params.callData);
    // Encoded Calls
    var encodedCalls = solady.LibZip.cdCompress(abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]'], [formattedCalls]));
    // Encode Multicall Root Router Parameters, pack Router function ID and compress using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [params.funcId, encodedCalls]);
    // Encode Branch Router function data.
    var encodedParams = this.encodeCallOutAndBridgeCalldata({
      params: libZipEncodedParams,
      depositParams: dParams,
      gasParams: gasParams
    });
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  }
  /**
   * Encodes the calldata to pass as argument to a BaseBranchRouter attached to a MulticallRootRouterLibZip.
   * Produces the on chain parameters to pass as arguments for a given call that requires multiple token deposit.
   * Eg: Adding Liquidity, etc.
   *
   * @param params parameters to pass to the branch router function.
   * @param mdParams multiple deposit params to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns the encoded calldata and message value for the call
   */;
  BaseBranchRouter.encodeCallOutAndBridgeMultipleLibZipCalldata = function encodeCallOutAndBridgeMultipleLibZipCalldata(params, mdParams, gasParams) {
    // Format Calls
    var formattedCalls = formatCalls(params.callData);
    // Encoded Calls
    var encodedCalls = solady.LibZip.cdCompress(abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]'], [formattedCalls]));
    // Encode Multicall Root Router Parameters, pack Router function ID and compress using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [params.funcId, encodedCalls]);
    // Encode function data with params & mdParams.
    var encodedParams = this.encodeCallOutAndBridgeMultipleCalldata({
      params: libZipEncodedParams,
      depositParams: mdParams,
      gasParams: gasParams
    });
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  }
  /**
   * Used to request the retry of a failed deposit from the origin branch chain to a MulticallRootRouterLibZip.
   * @param depositNonce The nonce of the deposit to retry.
   * @param params The encoded params to pass to the root router
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns encoded calldata for the retryDeposit function
   */;
  BaseBranchRouter.encodeRetryDepositLibZipCalldata = function encodeRetryDepositLibZipCalldata(depositNonce, params, gasParams) {
    // Format Calls
    var formattedCalls = formatCalls(params.callData);
    // Encoded Calls
    var encodedCalls = solady.LibZip.cdCompress(abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]'], [formattedCalls]));
    // Encode Multicall Root Router Parameters, pack Router function ID and compress using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [params.funcId, encodedCalls]);
    // Encode the function data.
    var encodedParams = this.encodeRetryDepositCalldata(depositNonce, libZipEncodedParams, gasParams);
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  };
  return BaseBranchRouter;
}();
BaseBranchRouter.INTERFACE = /*#__PURE__*/new abi$7.Interface(BaseBranchRouterABI.abi);

var abi$1 = [
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_rootChainId",
				type: "uint16"
			},
			{
				internalType: "uint16",
				name: "_localChainId",
				type: "uint16"
			},
			{
				internalType: "address",
				name: "_rootBridgeAgentAddress",
				type: "address"
			},
			{
				internalType: "address",
				name: "_lzEndpointAddress",
				type: "address"
			},
			{
				internalType: "address",
				name: "_localRouterAddress",
				type: "address"
			},
			{
				internalType: "address",
				name: "_localPortAddress",
				type: "address"
			}
		],
		stateMutability: "nonpayable",
		type: "constructor"
	},
	{
		inputs: [
		],
		name: "AlreadyExecutedTransaction",
		type: "error"
	},
	{
		inputs: [
		],
		name: "DepositAlreadyRetrieved",
		type: "error"
	},
	{
		inputs: [
		],
		name: "DepositRedeemUnavailable",
		type: "error"
	},
	{
		inputs: [
		],
		name: "DepositRetryUnavailableUseCallout",
		type: "error"
	},
	{
		inputs: [
		],
		name: "ExecutionFailure",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidBranchPortAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidEndpointAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidInput",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidLocalAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidRootBridgeAgentAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "LayerZeroUnauthorizedCaller",
		type: "error"
	},
	{
		inputs: [
		],
		name: "LayerZeroUnauthorizedEndpoint",
		type: "error"
	},
	{
		inputs: [
		],
		name: "NotDepositOwner",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnknownFlag",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedBridgeAgentExecutor",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedRouter",
		type: "error"
	},
	{
		inputs: [
		],
		name: "WrongDepositType",
		type: "error"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint256",
				name: "nonce",
				type: "uint256"
			}
		],
		name: "LogExecute",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint256",
				name: "nonce",
				type: "uint256"
			}
		],
		name: "LogFallback",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint256",
				name: "gasLimit",
				type: "uint256"
			},
			{
				indexed: true,
				internalType: "uint256",
				name: "remoteBranchExecutionGas",
				type: "uint256"
			}
		],
		name: "LogGasParams",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				indexed: false,
				internalType: "address",
				name: "_recipient",
				type: "address"
			}
		],
		name: "RedeemDeposit",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: false,
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				indexed: false,
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				indexed: false,
				internalType: "address",
				name: "_localTokenAddress",
				type: "address"
			}
		],
		name: "RedeemDeposit",
		type: "event"
	},
	{
		inputs: [
		],
		name: "bridgeAgentExecutorAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				internalType: "address",
				name: "_hToken",
				type: "address"
			},
			{
				internalType: "address",
				name: "_token",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "_amount",
				type: "uint256"
			},
			{
				internalType: "uint256",
				name: "_deposit",
				type: "uint256"
			}
		],
		name: "bridgeIn",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				components: [
					{
						internalType: "uint8",
						name: "numberOfAssets",
						type: "uint8"
					},
					{
						internalType: "address",
						name: "recipient",
						type: "address"
					},
					{
						internalType: "uint32",
						name: "settlementNonce",
						type: "uint32"
					},
					{
						internalType: "address[]",
						name: "hTokens",
						type: "address[]"
					},
					{
						internalType: "address[]",
						name: "tokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct SettlementMultipleParams",
				name: "_sParams",
				type: "tuple"
			}
		],
		name: "bridgeInMultiple",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address payable",
				name: "_depositOwnerAndGasRefundee",
				type: "address"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "callOut",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address payable",
				name: "_depositOwnerAndGasRefundee",
				type: "address"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "address",
						name: "hToken",
						type: "address"
					},
					{
						internalType: "address",
						name: "token",
						type: "address"
					},
					{
						internalType: "uint256",
						name: "amount",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "deposit",
						type: "uint256"
					}
				],
				internalType: "struct DepositInput",
				name: "_dParams",
				type: "tuple"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "callOutAndBridge",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address payable",
				name: "_depositOwnerAndGasRefundee",
				type: "address"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "address[]",
						name: "hTokens",
						type: "address[]"
					},
					{
						internalType: "address[]",
						name: "tokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct DepositMultipleInput",
				name: "_dParams",
				type: "tuple"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "callOutAndBridgeMultiple",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "callOutSigned",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "address",
						name: "hToken",
						type: "address"
					},
					{
						internalType: "address",
						name: "token",
						type: "address"
					},
					{
						internalType: "uint256",
						name: "amount",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "deposit",
						type: "uint256"
					}
				],
				internalType: "struct DepositInput",
				name: "_dParams",
				type: "tuple"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "callOutSignedAndBridge",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "address[]",
						name: "hTokens",
						type: "address[]"
					},
					{
						internalType: "address[]",
						name: "tokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct DepositMultipleInput",
				name: "_dParams",
				type: "tuple"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "callOutSignedAndBridgeMultiple",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "depositNonce",
		outputs: [
			{
				internalType: "uint32",
				name: "",
				type: "uint32"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "settlementNonce",
				type: "uint256"
			}
		],
		name: "executionState",
		outputs: [
			{
				internalType: "uint256",
				name: "state",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			}
		],
		name: "forceResumeReceive",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "depositNonce",
				type: "uint256"
			}
		],
		name: "getDeposit",
		outputs: [
			{
				internalType: "uint8",
				name: "status",
				type: "uint8"
			},
			{
				internalType: "uint88",
				name: "isSigned",
				type: "uint88"
			},
			{
				internalType: "address",
				name: "owner",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			}
		],
		name: "getDepositEntry",
		outputs: [
			{
				components: [
					{
						internalType: "uint8",
						name: "status",
						type: "uint8"
					},
					{
						internalType: "uint88",
						name: "isSigned",
						type: "uint88"
					},
					{
						internalType: "address",
						name: "owner",
						type: "address"
					},
					{
						internalType: "address[]",
						name: "hTokens",
						type: "address[]"
					},
					{
						internalType: "address[]",
						name: "tokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct Deposit",
				name: "",
				type: "tuple"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "localChainId",
		outputs: [
			{
				internalType: "uint16",
				name: "",
				type: "uint16"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "localPortAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "localRouterAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "lzEndpointAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			},
			{
				internalType: "uint64",
				name: "",
				type: "uint64"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			}
		],
		name: "lzReceive",
		outputs: [
			{
				internalType: "bool",
				name: "success",
				type: "bool"
			}
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_endpoint",
				type: "address"
			},
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			}
		],
		name: "lzReceiveNonBlocking",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				internalType: "address",
				name: "_localTokenAddress",
				type: "address"
			}
		],
		name: "redeemDeposit",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			}
		],
		name: "redeemDeposit",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "retrieveDeposit",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_owner",
				type: "address"
			},
			{
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "retryDeposit",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_depositNonce",
				type: "uint32"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "retryDepositSigned",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_settlementNonce",
				type: "uint32"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams[2]",
				name: "_gParams",
				type: "tuple[2]"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "retrySettlement",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "rootBridgeAgentAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "rootChainId",
		outputs: [
			{
				internalType: "uint16",
				name: "",
				type: "uint16"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		stateMutability: "payable",
		type: "receive"
	}
];
var BranchBridgeAgentABI = {
	abi: abi$1
};

/**
 * Class to create the calldata to pass as argument for a given call to the branch router.
 */
var BranchBridgeAgent = /*#__PURE__*/function () {
  /**
   * Cannot be constructed.
   */
  /* eslint-disable @typescript-eslint/no-empty-function */
  function BranchBridgeAgent() {}
  /**
   * Produces the on-chain calldata to pass as argument for a signed call (using the user's Virtual Account)
   * that does not require a token deposit.
   * Eg: Claiming rewards,withdraw, etc.
   * @param params The parameters to pass to the branch router function.
   */
  BranchBridgeAgent.encodeCallOutSignedCalldata = function encodeCallOutSignedCalldata(params, gasParams) {
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('callOutSigned', [params, formatGasParams(gasParams)]);
  }
  /**
   * Produces the on-chain calldata to pass as argument for a signed call (using the user's Virtual Account) that requires a token deposit.
   *
   * @param account user account that's used for the refund of gas if applicable
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit token and amount.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @param hasFallbackToggled defaults to true.
   * @returns
   */;
  BranchBridgeAgent.encodeCallOutSignedAndBridgeCalldata = function encodeCallOutSignedAndBridgeCalldata(_ref) {
    var params = _ref.params,
      depositParams = _ref.depositParams,
      gasParams = _ref.gasParams,
      _ref$hasFallbackToggl = _ref.hasFallbackToggled,
      hasFallbackToggled = _ref$hasFallbackToggl === void 0 ? true : _ref$hasFallbackToggl;
    //performs safety checks
    singleDepositInvariantHelper(depositParams);
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('callOutSignedAndBridge', [params, [depositParams.hToken, depositParams.token, depositParams.amount, depositParams.deposit], formatGasParams(gasParams), hasFallbackToggled]);
  }
  /**
   * Produces the on-chain calldata to pass as argument for a signed call (using the user's Virtual Account)
   * that requires multiple token deposits.
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit tokens and amounts.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @param hasFallbackToggled defaults to true
   * @returns
   */;
  BranchBridgeAgent.encodeCallOutSignedAndBridgeMultipleCalldata = function encodeCallOutSignedAndBridgeMultipleCalldata(_ref2) {
    var params = _ref2.params,
      depositParams = _ref2.depositParams,
      gasParams = _ref2.gasParams,
      _ref2$hasFallbackTogg = _ref2.hasFallbackToggled,
      hasFallbackToggled = _ref2$hasFallbackTogg === void 0 ? true : _ref2$hasFallbackTogg;
    //performs safety checks
    multipleDepositInvariantHelper(depositParams);
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('callOutSignedAndBridgeMultiple', [params, [depositParams.hTokens, depositParams.tokens, depositParams.amounts, depositParams.deposits], formatGasParams(gasParams), hasFallbackToggled]);
  }
  /**
   * Used to retry a failed signed deposit on the branch chain.
   * @param depositNonce The nonce of the deposit to retry.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns encoded calldata for the retryDeposit function
   */;
  BranchBridgeAgent.encodeRetryDepositSigned = function encodeRetryDepositSigned(_ref3) {
    var depositNonce = _ref3.depositNonce,
      params = _ref3.params,
      gasParams = _ref3.gasParams,
      _ref3$hasFallbackTogg = _ref3.hasFallbackToggled,
      hasFallbackToggled = _ref3$hasFallbackTogg === void 0 ? true : _ref3$hasFallbackTogg;
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('retryDepositSigned', [maiaCoreSdk.toHex(depositNonce), params, formatGasParams(gasParams), hasFallbackToggled]);
  }
  /**
   * Used to retry a failed settlement.
   * @param settlementNonce The nonce of the settlement to retry.
   * @param params The encoded params to pass to the destination branch router.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @param hasFallbackToggled defaults to true
   * @returns encoded calldata for the retrySettlement function
   */;
  BranchBridgeAgent.encodeRetrySettlement = function encodeRetrySettlement(_ref4) {
    var settlementNonce = _ref4.settlementNonce,
      params = _ref4.params,
      gasParams = _ref4.gasParams,
      _ref4$hasFallbackTogg = _ref4.hasFallbackToggled,
      hasFallbackToggled = _ref4$hasFallbackTogg === void 0 ? true : _ref4$hasFallbackTogg;
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('retrySettlement', [maiaCoreSdk.toHex(settlementNonce), params, formatGasParams(gasParams), hasFallbackToggled]);
  }
  /**
   * Used to request tokens back to the branch chain after an call fails.
   * @param depositNonce The nonce of the deposit to retrieve.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns encoded calldata for the retrieveDeposit function
   */;
  BranchBridgeAgent.encodeRetrieveDeposit = function encodeRetrieveDeposit(_ref5) {
    var depositNonce = _ref5.depositNonce,
      gasParams = _ref5.gasParams;
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('retrieveDeposit', [maiaCoreSdk.toHex(depositNonce), formatGasParams(gasParams)]);
  }
  /**
   * Used to transfer tokens from the branch port to the owner of the deposit after an call fails.
   * @param depositNonce The nonce of the deposit to retrieve.
   * @param account user account that's used for receive the redeemed tokens.
   * @returns encoded calldata for the redeemDeposit function
   */;
  BranchBridgeAgent.encodeRedeemDeposit = function encodeRedeemDeposit(_ref6) {
    var depositNonce = _ref6.depositNonce,
      account = _ref6.account;
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('redeemDeposit(uint32,address)', [maiaCoreSdk.toHex(depositNonce), account]);
  }
  /**
   * Used to transfer one of the deposited tokens from the branch port to the owner of the deposit after an call fails.
   * @param depositNonce The nonce of the deposit to retrieve.
   * @param account user account that's used for receive the redeemed tokens.
   * @param localToken local token address to redeem
   * @returns encoded calldata for the redeemDeposit function
   */;
  BranchBridgeAgent.encodeRedeemDepositSingle = function encodeRedeemDepositSingle(_ref7) {
    var depositNonce = _ref7.depositNonce,
      account = _ref7.account,
      localToken = _ref7.localToken;
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('redeemDeposit(uint32,address,address)', [maiaCoreSdk.toHex(depositNonce), account, localToken]);
  }
  /**
   * Creates the calldata to pass as argument to a BranchBridgeAgent during a signed call (using the user's Virtual Account) to a MulticallRootRouterLibZip.
   * Produces the on-chain calldata to pass as argument for a call that does not require a token deposit.
   * Eg: Claiming rewards,withdraw liq, etc.
   *
   * @param params The parameters to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns the encoded calldata and message value for the call
   *
   */;
  BranchBridgeAgent.encodeCallOutSignedLibZipCalldata = function encodeCallOutSignedLibZipCalldata(params, gasParams) {
    // Save first hex byte of the params
    var firstByte = params.slice(0, 4);
    // Compress remote Multicall Root Router Parameters using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [firstByte, solady.LibZip.cdCompress(params.slice(4))]);
    // Encode the function data.
    var encodedParams = this.encodeCallOutSignedCalldata(libZipEncodedParams, gasParams);
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  }
  /**
   * Creates the calldata to pass as argument to a BranchBridgeAgent during a signed call (using the user's Virtual Account) to a MulticallRootRouterLibZip.
   * Produces the on chain parameters to pass as arguments for a given call that requires a single token deposit.
   * Eg: ERC4626 Deposit, swap, etc.
   *
   * @param params parameters to pass to the branch router function.
   * @param dParams deposit params to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns the encoded calldata and message value for the call
   */;
  BranchBridgeAgent.encodeCallOutSignedAndBridgeLibZipCalldata = function encodeCallOutSignedAndBridgeLibZipCalldata(params, dParams, gasParams, hasFallbackToggled) {
    if (hasFallbackToggled === void 0) {
      hasFallbackToggled = true;
    }
    // Save first hex byte of the params
    var firstByte = params.slice(0, 4);
    // Compress remote Multicall Root Router Parameters using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [firstByte, solady.LibZip.cdCompress(params.slice(4))]);
    // Encode Branch Router function data.
    var encodedParams = this.encodeCallOutSignedAndBridgeCalldata({
      params: libZipEncodedParams,
      depositParams: dParams,
      gasParams: gasParams,
      hasFallbackToggled: hasFallbackToggled
    });
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  }
  /**
   * Creates the calldata to pass as argument to a BranchBridgeAgent during a signed call (using the user's Virtual Account) to a MulticallRootRouterLibZip.
   * Produces the on chain parameters to pass as arguments for a given call that requires multiple token deposit.
   * Eg: Adding Liquidity, etc.
   *
   * @param params parameters to pass to the branch router function.
   * @param mdParams multiple deposit params to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns the encoded calldata and message value for the call
   */;
  BranchBridgeAgent.encodeCallOutSignedAndBridgeMultipleLibZipCalldata = function encodeCallOutSignedAndBridgeMultipleLibZipCalldata(params, mdParams, gasParams, hasFallbackToggled) {
    if (hasFallbackToggled === void 0) {
      hasFallbackToggled = true;
    }
    // Save first hex byte of the params
    var firstByte = params.slice(0, 4);
    // Compress remote Multicall Root Router Parameters using libZip.
    var libZipEncodedParams = solidity.pack(['bytes1', 'bytes'], [firstByte, solady.LibZip.cdCompress(params.slice(4))]);
    // Encode function data with params & mdParams.
    var encodedParams = this.encodeCallOutSignedAndBridgeMultipleCalldata({
      params: libZipEncodedParams,
      depositParams: mdParams,
      gasParams: gasParams,
      hasFallbackToggled: hasFallbackToggled
    });
    return {
      calldata: encodedParams,
      value: maiaCoreSdk.toHex(0)
    };
  };
  return BranchBridgeAgent;
}();
BranchBridgeAgent.INTERFACE = /*#__PURE__*/new abi$7.Interface(BranchBridgeAgentABI.abi);

var abi$2 = [
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "address",
				name: "owner",
				type: "address"
			},
			{
				indexed: true,
				internalType: "address",
				name: "spender",
				type: "address"
			},
			{
				indexed: false,
				internalType: "uint256",
				name: "amount",
				type: "uint256"
			}
		],
		name: "Approval",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "address",
				name: "from",
				type: "address"
			},
			{
				indexed: true,
				internalType: "address",
				name: "to",
				type: "address"
			},
			{
				indexed: false,
				internalType: "uint256",
				name: "amount",
				type: "uint256"
			}
		],
		name: "Transfer",
		type: "event"
	},
	{
		inputs: [
		],
		name: "DOMAIN_SEPARATOR",
		outputs: [
			{
				internalType: "bytes32",
				name: "",
				type: "bytes32"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		name: "allowance",
		outputs: [
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "spender",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "amount",
				type: "uint256"
			}
		],
		name: "approve",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		name: "balanceOf",
		outputs: [
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "decimals",
		outputs: [
			{
				internalType: "uint8",
				name: "",
				type: "uint8"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "name",
		outputs: [
			{
				internalType: "string",
				name: "",
				type: "string"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		name: "nonces",
		outputs: [
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "owner",
				type: "address"
			},
			{
				internalType: "address",
				name: "spender",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "value",
				type: "uint256"
			},
			{
				internalType: "uint256",
				name: "deadline",
				type: "uint256"
			},
			{
				internalType: "uint8",
				name: "v",
				type: "uint8"
			},
			{
				internalType: "bytes32",
				name: "r",
				type: "bytes32"
			},
			{
				internalType: "bytes32",
				name: "s",
				type: "bytes32"
			}
		],
		name: "permit",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "symbol",
		outputs: [
			{
				internalType: "string",
				name: "",
				type: "string"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "totalSupply",
		outputs: [
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "to",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "amount",
				type: "uint256"
			}
		],
		name: "transfer",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "from",
				type: "address"
			},
			{
				internalType: "address",
				name: "to",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "amount",
				type: "uint256"
			}
		],
		name: "transferFrom",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "nonpayable",
		type: "function"
	}
];
var ERC20 = {
	abi: abi$2
};

/**
 * Class to handle ERC20 specific contract functions.
 */
var ERC20Token = /*#__PURE__*/function () {
  /* eslint-disable @typescript-eslint/no-empty-function */
  function ERC20Token() {}
  ERC20Token.encodeApproveToken = function encodeApproveToken(amount, spender) {
    return ERC20Token.INTERFACE.encodeFunctionData('approve', [spender, amount.toString()]);
  };
  ERC20Token.encodeTransfer = function encodeTransfer(amount, recipient) {
    return ERC20Token.INTERFACE.encodeFunctionData('transfer', [recipient, amount.toString()]);
  };
  return ERC20Token;
}();
ERC20Token.INTERFACE = /*#__PURE__*/new abi$7.Interface(ERC20.abi);

var abi$3 = [
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_dstChainId",
				type: "uint16"
			},
			{
				internalType: "address",
				name: "_userApplication",
				type: "address"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			},
			{
				internalType: "bool",
				name: "_payInZRO",
				type: "bool"
			},
			{
				internalType: "bytes",
				name: "_adapterParam",
				type: "bytes"
			}
		],
		name: "estimateFees",
		outputs: [
			{
				internalType: "uint256",
				name: "nativeFee",
				type: "uint256"
			},
			{
				internalType: "uint256",
				name: "zroFee",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			}
		],
		name: "forceResumeReceive",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "getChainId",
		outputs: [
			{
				internalType: "uint16",
				name: "",
				type: "uint16"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_version",
				type: "uint16"
			},
			{
				internalType: "uint16",
				name: "_chainId",
				type: "uint16"
			},
			{
				internalType: "address",
				name: "_userApplication",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "_configType",
				type: "uint256"
			}
		],
		name: "getConfig",
		outputs: [
			{
				internalType: "bytes",
				name: "",
				type: "bytes"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			}
		],
		name: "getInboundNonce",
		outputs: [
			{
				internalType: "uint64",
				name: "",
				type: "uint64"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_dstChainId",
				type: "uint16"
			},
			{
				internalType: "address",
				name: "_srcAddress",
				type: "address"
			}
		],
		name: "getOutboundNonce",
		outputs: [
			{
				internalType: "uint64",
				name: "",
				type: "uint64"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_userApplication",
				type: "address"
			}
		],
		name: "getReceiveLibraryAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_userApplication",
				type: "address"
			}
		],
		name: "getReceiveVersion",
		outputs: [
			{
				internalType: "uint16",
				name: "",
				type: "uint16"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_userApplication",
				type: "address"
			}
		],
		name: "getSendLibraryAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_userApplication",
				type: "address"
			}
		],
		name: "getSendVersion",
		outputs: [
			{
				internalType: "uint16",
				name: "",
				type: "uint16"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			}
		],
		name: "hasStoredPayload",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "isReceivingPayload",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "isSendingPayload",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			},
			{
				internalType: "address",
				name: "_dstAddress",
				type: "address"
			},
			{
				internalType: "uint64",
				name: "_nonce",
				type: "uint64"
			},
			{
				internalType: "uint256",
				name: "_gasLimit",
				type: "uint256"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			}
		],
		name: "receivePayload",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			}
		],
		name: "retryPayload",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_dstChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_destination",
				type: "bytes"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			},
			{
				internalType: "address payable",
				name: "_refundAddress",
				type: "address"
			},
			{
				internalType: "address",
				name: "_zroPaymentAddress",
				type: "address"
			},
			{
				internalType: "bytes",
				name: "_adapterParams",
				type: "bytes"
			}
		],
		name: "send",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_version",
				type: "uint16"
			},
			{
				internalType: "uint16",
				name: "_chainId",
				type: "uint16"
			},
			{
				internalType: "uint256",
				name: "_configType",
				type: "uint256"
			},
			{
				internalType: "bytes",
				name: "_config",
				type: "bytes"
			}
		],
		name: "setConfig",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_version",
				type: "uint16"
			}
		],
		name: "setReceiveVersion",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_version",
				type: "uint16"
			}
		],
		name: "setSendVersion",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	}
];
var bytecode$1 = {
	object: "0x",
	sourceMap: "",
	linkReferences: {
	}
};
var deployedBytecode$1 = {
	object: "0x",
	sourceMap: "",
	linkReferences: {
	}
};
var methodIdentifiers$1 = {
	"estimateFees(uint16,address,bytes,bool,bytes)": "40a7bb10",
	"forceResumeReceive(uint16,bytes)": "42d65a8d",
	"getChainId()": "3408e470",
	"getConfig(uint16,uint16,address,uint256)": "f5ecbdbc",
	"getInboundNonce(uint16,bytes)": "fdc07c70",
	"getOutboundNonce(uint16,address)": "7a145748",
	"getReceiveLibraryAddress(address)": "71ba2fd6",
	"getReceiveVersion(address)": "da1a7c9a",
	"getSendLibraryAddress(address)": "9c729da1",
	"getSendVersion(address)": "096568f6",
	"hasStoredPayload(uint16,bytes)": "0eaf6ea6",
	"isReceivingPayload()": "ca066b35",
	"isSendingPayload()": "e97a448a",
	"receivePayload(uint16,bytes,address,uint64,uint256,bytes)": "c2fa4813",
	"retryPayload(uint16,bytes,bytes)": "aaff5f16",
	"send(uint16,bytes,bytes,address,address,bytes)": "c5803100",
	"setConfig(uint16,uint16,uint256,bytes)": "cbed8b9c",
	"setReceiveVersion(uint16)": "10ddb137",
	"setSendVersion(uint16)": "07e0db17"
};
var rawMetadata$1 = "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"_userApplication\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInZRO\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_adapterParam\",\"type\":\"bytes\"}],\"name\":\"estimateFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"zroFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"}],\"name\":\"forceResumeReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_chainId\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"_userApplication\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_configType\",\"type\":\"uint256\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"}],\"name\":\"getInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"_srcAddress\",\"type\":\"address\"}],\"name\":\"getOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userApplication\",\"type\":\"address\"}],\"name\":\"getReceiveLibraryAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userApplication\",\"type\":\"address\"}],\"name\":\"getReceiveVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userApplication\",\"type\":\"address\"}],\"name\":\"getSendLibraryAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userApplication\",\"type\":\"address\"}],\"name\":\"getSendVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"}],\"name\":\"hasStoredPayload\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isReceivingPayload\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingPayload\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"receivePayload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_srcAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"retryPayload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_destination\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"address payable\",\"name\":\"_refundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zroPaymentAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_adapterParams\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_chainId\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_configType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_config\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"setReceiveVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"setSendVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ILayerZeroEndpoint.sol\":\"ILayerZeroEndpoint\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@lib/=lib/\",\":@omni/=src/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@test/=test/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/solmate/src/\"],\"viaIR\":true},\"sources\":{\"src/interfaces/ILayerZeroEndpoint.sol\":{\"keccak256\":\"0x43e2207b989a35c1ab43b877f5ee144595fd36b8d8d63f16af85e21211b343db\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4c45be187e52bb747ec2f91a2293f54b0fb3ae36328a847e1f2553e05820532c\",\"dweb:/ipfs/QmXkLuZvbZJB4K1xZYfE7rLdU8M656kCJaKf8RtqUKzbK1\"]},\"src/interfaces/ILayerZeroUserApplicationConfig.sol\":{\"keccak256\":\"0x1992fd6caf6ef0a6e7136ef01e46decea7960f9124501009895389a9f0db3dde\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://488674ac804b1c76bfa157c0fd2f6230e1782300c6b1e5631bfe61e1a6d0556d\",\"dweb:/ipfs/QmemFK8LSHFJtjrc1h4WixBTraeVHm84aLYJyXePYcn5QT\"]}},\"version\":1}";
var metadata$1 = {
	compiler: {
		version: "0.8.19+commit.7dd6d404"
	},
	language: "Solidity",
	output: {
		abi: [
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_dstChainId",
						type: "uint16"
					},
					{
						internalType: "address",
						name: "_userApplication",
						type: "address"
					},
					{
						internalType: "bytes",
						name: "_payload",
						type: "bytes"
					},
					{
						internalType: "bool",
						name: "_payInZRO",
						type: "bool"
					},
					{
						internalType: "bytes",
						name: "_adapterParam",
						type: "bytes"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "estimateFees",
				outputs: [
					{
						internalType: "uint256",
						name: "nativeFee",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "zroFee",
						type: "uint256"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_srcChainId",
						type: "uint16"
					},
					{
						internalType: "bytes",
						name: "_srcAddress",
						type: "bytes"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "forceResumeReceive"
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "getChainId",
				outputs: [
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_version",
						type: "uint16"
					},
					{
						internalType: "uint16",
						name: "_chainId",
						type: "uint16"
					},
					{
						internalType: "address",
						name: "_userApplication",
						type: "address"
					},
					{
						internalType: "uint256",
						name: "_configType",
						type: "uint256"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getConfig",
				outputs: [
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_srcChainId",
						type: "uint16"
					},
					{
						internalType: "bytes",
						name: "_srcAddress",
						type: "bytes"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getInboundNonce",
				outputs: [
					{
						internalType: "uint64",
						name: "",
						type: "uint64"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_dstChainId",
						type: "uint16"
					},
					{
						internalType: "address",
						name: "_srcAddress",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getOutboundNonce",
				outputs: [
					{
						internalType: "uint64",
						name: "",
						type: "uint64"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_userApplication",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getReceiveLibraryAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_userApplication",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getReceiveVersion",
				outputs: [
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_userApplication",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getSendLibraryAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_userApplication",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "getSendVersion",
				outputs: [
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_srcChainId",
						type: "uint16"
					},
					{
						internalType: "bytes",
						name: "_srcAddress",
						type: "bytes"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "hasStoredPayload",
				outputs: [
					{
						internalType: "bool",
						name: "",
						type: "bool"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "isReceivingPayload",
				outputs: [
					{
						internalType: "bool",
						name: "",
						type: "bool"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "isSendingPayload",
				outputs: [
					{
						internalType: "bool",
						name: "",
						type: "bool"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_srcChainId",
						type: "uint16"
					},
					{
						internalType: "bytes",
						name: "_srcAddress",
						type: "bytes"
					},
					{
						internalType: "address",
						name: "_dstAddress",
						type: "address"
					},
					{
						internalType: "uint64",
						name: "_nonce",
						type: "uint64"
					},
					{
						internalType: "uint256",
						name: "_gasLimit",
						type: "uint256"
					},
					{
						internalType: "bytes",
						name: "_payload",
						type: "bytes"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "receivePayload"
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_srcChainId",
						type: "uint16"
					},
					{
						internalType: "bytes",
						name: "_srcAddress",
						type: "bytes"
					},
					{
						internalType: "bytes",
						name: "_payload",
						type: "bytes"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "retryPayload"
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_dstChainId",
						type: "uint16"
					},
					{
						internalType: "bytes",
						name: "_destination",
						type: "bytes"
					},
					{
						internalType: "bytes",
						name: "_payload",
						type: "bytes"
					},
					{
						internalType: "address payable",
						name: "_refundAddress",
						type: "address"
					},
					{
						internalType: "address",
						name: "_zroPaymentAddress",
						type: "address"
					},
					{
						internalType: "bytes",
						name: "_adapterParams",
						type: "bytes"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "send"
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_version",
						type: "uint16"
					},
					{
						internalType: "uint16",
						name: "_chainId",
						type: "uint16"
					},
					{
						internalType: "uint256",
						name: "_configType",
						type: "uint256"
					},
					{
						internalType: "bytes",
						name: "_config",
						type: "bytes"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "setConfig"
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_version",
						type: "uint16"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "setReceiveVersion"
			},
			{
				inputs: [
					{
						internalType: "uint16",
						name: "_version",
						type: "uint16"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "setSendVersion"
			}
		],
		devdoc: {
			kind: "dev",
			methods: {
			},
			version: 1
		},
		userdoc: {
			kind: "user",
			methods: {
			},
			version: 1
		}
	},
	settings: {
		remappings: [
			"@lib/=lib/",
			"@omni/=src/",
			"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
			"@test/=test/",
			"ds-test/=lib/forge-std/lib/ds-test/src/",
			"forge-std/=lib/forge-std/src/",
			"openzeppelin-contracts/=lib/openzeppelin-contracts/",
			"solady/=lib/solady/src/",
			"solmate/=lib/solmate/src/"
		],
		optimizer: {
			enabled: true,
			runs: 200
		},
		metadata: {
			bytecodeHash: "ipfs"
		},
		compilationTarget: {
			"src/interfaces/ILayerZeroEndpoint.sol": "ILayerZeroEndpoint"
		},
		libraries: {
		},
		viaIR: true
	},
	sources: {
		"src/interfaces/ILayerZeroEndpoint.sol": {
			keccak256: "0x43e2207b989a35c1ab43b877f5ee144595fd36b8d8d63f16af85e21211b343db",
			urls: [
				"bzz-raw://4c45be187e52bb747ec2f91a2293f54b0fb3ae36328a847e1f2553e05820532c",
				"dweb:/ipfs/QmXkLuZvbZJB4K1xZYfE7rLdU8M656kCJaKf8RtqUKzbK1"
			],
			license: "BUSL-1.1"
		},
		"src/interfaces/ILayerZeroUserApplicationConfig.sol": {
			keccak256: "0x1992fd6caf6ef0a6e7136ef01e46decea7960f9124501009895389a9f0db3dde",
			urls: [
				"bzz-raw://488674ac804b1c76bfa157c0fd2f6230e1782300c6b1e5631bfe61e1a6d0556d",
				"dweb:/ipfs/QmemFK8LSHFJtjrc1h4WixBTraeVHm84aLYJyXePYcn5QT"
			],
			license: "BUSL-1.1"
		}
	},
	version: 1
};
var ast$1 = {
	absolutePath: "src/interfaces/ILayerZeroEndpoint.sol",
	id: 64230,
	exportedSymbols: {
		ILayerZeroEndpoint: [
			64229
		],
		ILayerZeroUserApplicationConfig: [
			64297
		]
	},
	nodeType: "SourceUnit",
	src: "38:5861:106",
	nodes: [
		{
			id: 64086,
			nodeType: "PragmaDirective",
			src: "38:24:106",
			nodes: [
			],
			literals: [
				"solidity",
				">=",
				"0.5",
				".0"
			]
		},
		{
			id: 64087,
			nodeType: "ImportDirective",
			src: "64:47:106",
			nodes: [
			],
			absolutePath: "src/interfaces/ILayerZeroUserApplicationConfig.sol",
			file: "./ILayerZeroUserApplicationConfig.sol",
			nameLocation: "-1:-1:-1",
			scope: 64230,
			sourceUnit: 64298,
			symbolAliases: [
			],
			unitAlias: ""
		},
		{
			id: 64229,
			nodeType: "ContractDefinition",
			src: "113:5785:106",
			nodes: [
				{
					id: 64104,
					nodeType: "FunctionDefinition",
					src: "919:250:106",
					nodes: [
					],
					functionSelector: "c5803100",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "send",
					nameLocation: "928:4:106",
					parameters: {
						id: 64102,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64091,
								mutability: "mutable",
								name: "_dstChainId",
								nameLocation: "949:11:106",
								nodeType: "VariableDeclaration",
								scope: 64104,
								src: "942:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64090,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "942:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64093,
								mutability: "mutable",
								name: "_destination",
								nameLocation: "985:12:106",
								nodeType: "VariableDeclaration",
								scope: 64104,
								src: "970:27:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64092,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "970:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64095,
								mutability: "mutable",
								name: "_payload",
								nameLocation: "1022:8:106",
								nodeType: "VariableDeclaration",
								scope: 64104,
								src: "1007:23:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64094,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "1007:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64097,
								mutability: "mutable",
								name: "_refundAddress",
								nameLocation: "1056:14:106",
								nodeType: "VariableDeclaration",
								scope: 64104,
								src: "1040:30:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address_payable",
									typeString: "address payable"
								},
								typeName: {
									id: 64096,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "1040:15:106",
									stateMutability: "payable",
									typeDescriptions: {
										typeIdentifier: "t_address_payable",
										typeString: "address payable"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64099,
								mutability: "mutable",
								name: "_zroPaymentAddress",
								nameLocation: "1088:18:106",
								nodeType: "VariableDeclaration",
								scope: 64104,
								src: "1080:26:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64098,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "1080:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64101,
								mutability: "mutable",
								name: "_adapterParams",
								nameLocation: "1131:14:106",
								nodeType: "VariableDeclaration",
								scope: 64104,
								src: "1116:29:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64100,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "1116:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "932:219:106"
					},
					returnParameters: {
						id: 64103,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "1168:0:106"
					},
					scope: 64229,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64119,
					nodeType: "FunctionDefinition",
					src: "1652:215:106",
					nodes: [
					],
					functionSelector: "c2fa4813",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "receivePayload",
					nameLocation: "1661:14:106",
					parameters: {
						id: 64117,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64106,
								mutability: "mutable",
								name: "_srcChainId",
								nameLocation: "1692:11:106",
								nodeType: "VariableDeclaration",
								scope: 64119,
								src: "1685:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64105,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "1685:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64108,
								mutability: "mutable",
								name: "_srcAddress",
								nameLocation: "1728:11:106",
								nodeType: "VariableDeclaration",
								scope: 64119,
								src: "1713:26:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64107,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "1713:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64110,
								mutability: "mutable",
								name: "_dstAddress",
								nameLocation: "1757:11:106",
								nodeType: "VariableDeclaration",
								scope: 64119,
								src: "1749:19:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64109,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "1749:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64112,
								mutability: "mutable",
								name: "_nonce",
								nameLocation: "1785:6:106",
								nodeType: "VariableDeclaration",
								scope: 64119,
								src: "1778:13:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint64",
									typeString: "uint64"
								},
								typeName: {
									id: 64111,
									name: "uint64",
									nodeType: "ElementaryTypeName",
									src: "1778:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint64",
										typeString: "uint64"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64114,
								mutability: "mutable",
								name: "_gasLimit",
								nameLocation: "1809:9:106",
								nodeType: "VariableDeclaration",
								scope: 64119,
								src: "1801:17:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 64113,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "1801:7:106",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64116,
								mutability: "mutable",
								name: "_payload",
								nameLocation: "1843:8:106",
								nodeType: "VariableDeclaration",
								scope: 64119,
								src: "1828:23:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64115,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "1828:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "1675:182:106"
					},
					returnParameters: {
						id: 64118,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "1866:0:106"
					},
					scope: 64229,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64128,
					nodeType: "FunctionDefinition",
					src: "2097:104:106",
					nodes: [
					],
					functionSelector: "fdc07c70",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getInboundNonce",
					nameLocation: "2106:15:106",
					parameters: {
						id: 64124,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64121,
								mutability: "mutable",
								name: "_srcChainId",
								nameLocation: "2129:11:106",
								nodeType: "VariableDeclaration",
								scope: 64128,
								src: "2122:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64120,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "2122:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64123,
								mutability: "mutable",
								name: "_srcAddress",
								nameLocation: "2157:11:106",
								nodeType: "VariableDeclaration",
								scope: 64128,
								src: "2142:26:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64122,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "2142:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "2121:48:106"
					},
					returnParameters: {
						id: 64127,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64126,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64128,
								src: "2193:6:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint64",
									typeString: "uint64"
								},
								typeName: {
									id: 64125,
									name: "uint64",
									nodeType: "ElementaryTypeName",
									src: "2193:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint64",
										typeString: "uint64"
									}
								},
								visibility: "internal"
							}
						],
						src: "2192:8:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64137,
					nodeType: "FunctionDefinition",
					src: "2367:98:106",
					nodes: [
					],
					functionSelector: "7a145748",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getOutboundNonce",
					nameLocation: "2376:16:106",
					parameters: {
						id: 64133,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64130,
								mutability: "mutable",
								name: "_dstChainId",
								nameLocation: "2400:11:106",
								nodeType: "VariableDeclaration",
								scope: 64137,
								src: "2393:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64129,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "2393:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64132,
								mutability: "mutable",
								name: "_srcAddress",
								nameLocation: "2421:11:106",
								nodeType: "VariableDeclaration",
								scope: 64137,
								src: "2413:19:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64131,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "2413:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "2392:41:106"
					},
					returnParameters: {
						id: 64136,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64135,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64137,
								src: "2457:6:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint64",
									typeString: "uint64"
								},
								typeName: {
									id: 64134,
									name: "uint64",
									nodeType: "ElementaryTypeName",
									src: "2457:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint64",
										typeString: "uint64"
									}
								},
								visibility: "internal"
							}
						],
						src: "2456:8:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64154,
					nodeType: "FunctionDefinition",
					src: "2979:243:106",
					nodes: [
					],
					functionSelector: "40a7bb10",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "estimateFees",
					nameLocation: "2988:12:106",
					parameters: {
						id: 64148,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64139,
								mutability: "mutable",
								name: "_dstChainId",
								nameLocation: "3017:11:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3010:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64138,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "3010:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64141,
								mutability: "mutable",
								name: "_userApplication",
								nameLocation: "3046:16:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3038:24:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64140,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "3038:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64143,
								mutability: "mutable",
								name: "_payload",
								nameLocation: "3087:8:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3072:23:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64142,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3072:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64145,
								mutability: "mutable",
								name: "_payInZRO",
								nameLocation: "3110:9:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3105:14:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_bool",
									typeString: "bool"
								},
								typeName: {
									id: 64144,
									name: "bool",
									nodeType: "ElementaryTypeName",
									src: "3105:4:106",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64147,
								mutability: "mutable",
								name: "_adapterParam",
								nameLocation: "3144:13:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3129:28:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64146,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3129:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "3000:163:106"
					},
					returnParameters: {
						id: 64153,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64150,
								mutability: "mutable",
								name: "nativeFee",
								nameLocation: "3195:9:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3187:17:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 64149,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "3187:7:106",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64152,
								mutability: "mutable",
								name: "zroFee",
								nameLocation: "3214:6:106",
								nodeType: "VariableDeclaration",
								scope: 64154,
								src: "3206:14:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 64151,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "3206:7:106",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							}
						],
						src: "3186:35:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64159,
					nodeType: "FunctionDefinition",
					src: "3291:53:106",
					nodes: [
					],
					functionSelector: "3408e470",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getChainId",
					nameLocation: "3300:10:106",
					parameters: {
						id: 64155,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "3310:2:106"
					},
					returnParameters: {
						id: 64158,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64157,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64159,
								src: "3336:6:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64156,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "3336:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "3335:8:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64168,
					nodeType: "FunctionDefinition",
					src: "3601:104:106",
					nodes: [
					],
					functionSelector: "aaff5f16",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "retryPayload",
					nameLocation: "3610:12:106",
					parameters: {
						id: 64166,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64161,
								mutability: "mutable",
								name: "_srcChainId",
								nameLocation: "3630:11:106",
								nodeType: "VariableDeclaration",
								scope: 64168,
								src: "3623:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64160,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "3623:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64163,
								mutability: "mutable",
								name: "_srcAddress",
								nameLocation: "3658:11:106",
								nodeType: "VariableDeclaration",
								scope: 64168,
								src: "3643:26:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64162,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3643:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64165,
								mutability: "mutable",
								name: "_payload",
								nameLocation: "3686:8:106",
								nodeType: "VariableDeclaration",
								scope: 64168,
								src: "3671:23:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64164,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3671:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "3622:73:106"
					},
					returnParameters: {
						id: 64167,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "3704:0:106"
					},
					scope: 64229,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64177,
					nodeType: "FunctionDefinition",
					src: "3908:103:106",
					nodes: [
					],
					functionSelector: "0eaf6ea6",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "hasStoredPayload",
					nameLocation: "3917:16:106",
					parameters: {
						id: 64173,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64170,
								mutability: "mutable",
								name: "_srcChainId",
								nameLocation: "3941:11:106",
								nodeType: "VariableDeclaration",
								scope: 64177,
								src: "3934:18:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64169,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "3934:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64172,
								mutability: "mutable",
								name: "_srcAddress",
								nameLocation: "3969:11:106",
								nodeType: "VariableDeclaration",
								scope: 64177,
								src: "3954:26:106",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64171,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "3954:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "3933:48:106"
					},
					returnParameters: {
						id: 64176,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64175,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64177,
								src: "4005:4:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_bool",
									typeString: "bool"
								},
								typeName: {
									id: 64174,
									name: "bool",
									nodeType: "ElementaryTypeName",
									src: "4005:4:106",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								visibility: "internal"
							}
						],
						src: "4004:6:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64184,
					nodeType: "FunctionDefinition",
					src: "4160:89:106",
					nodes: [
					],
					functionSelector: "9c729da1",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getSendLibraryAddress",
					nameLocation: "4169:21:106",
					parameters: {
						id: 64180,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64179,
								mutability: "mutable",
								name: "_userApplication",
								nameLocation: "4199:16:106",
								nodeType: "VariableDeclaration",
								scope: 64184,
								src: "4191:24:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64178,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "4191:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "4190:26:106"
					},
					returnParameters: {
						id: 64183,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64182,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64184,
								src: "4240:7:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64181,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "4240:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "4239:9:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64191,
					nodeType: "FunctionDefinition",
					src: "4400:92:106",
					nodes: [
					],
					functionSelector: "71ba2fd6",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getReceiveLibraryAddress",
					nameLocation: "4409:24:106",
					parameters: {
						id: 64187,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64186,
								mutability: "mutable",
								name: "_userApplication",
								nameLocation: "4442:16:106",
								nodeType: "VariableDeclaration",
								scope: 64191,
								src: "4434:24:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64185,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "4434:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "4433:26:106"
					},
					returnParameters: {
						id: 64190,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64189,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64191,
								src: "4483:7:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64188,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "4483:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "4482:9:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64196,
					nodeType: "FunctionDefinition",
					src: "4620:57:106",
					nodes: [
					],
					functionSelector: "e97a448a",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "isSendingPayload",
					nameLocation: "4629:16:106",
					parameters: {
						id: 64192,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "4645:2:106"
					},
					returnParameters: {
						id: 64195,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64194,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64196,
								src: "4671:4:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_bool",
									typeString: "bool"
								},
								typeName: {
									id: 64193,
									name: "bool",
									nodeType: "ElementaryTypeName",
									src: "4671:4:106",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								visibility: "internal"
							}
						],
						src: "4670:6:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64201,
					nodeType: "FunctionDefinition",
					src: "4808:59:106",
					nodes: [
					],
					functionSelector: "ca066b35",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "isReceivingPayload",
					nameLocation: "4817:18:106",
					parameters: {
						id: 64197,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "4835:2:106"
					},
					returnParameters: {
						id: 64200,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64199,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64201,
								src: "4861:4:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_bool",
									typeString: "bool"
								},
								typeName: {
									id: 64198,
									name: "bool",
									nodeType: "ElementaryTypeName",
									src: "4861:4:106",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								visibility: "internal"
							}
						],
						src: "4860:6:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64214,
					nodeType: "FunctionDefinition",
					src: "5265:161:106",
					nodes: [
					],
					functionSelector: "f5ecbdbc",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getConfig",
					nameLocation: "5274:9:106",
					parameters: {
						id: 64210,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64203,
								mutability: "mutable",
								name: "_version",
								nameLocation: "5291:8:106",
								nodeType: "VariableDeclaration",
								scope: 64214,
								src: "5284:15:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64202,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "5284:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64205,
								mutability: "mutable",
								name: "_chainId",
								nameLocation: "5308:8:106",
								nodeType: "VariableDeclaration",
								scope: 64214,
								src: "5301:15:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64204,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "5301:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64207,
								mutability: "mutable",
								name: "_userApplication",
								nameLocation: "5326:16:106",
								nodeType: "VariableDeclaration",
								scope: 64214,
								src: "5318:24:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64206,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "5318:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 64209,
								mutability: "mutable",
								name: "_configType",
								nameLocation: "5352:11:106",
								nodeType: "VariableDeclaration",
								scope: 64214,
								src: "5344:19:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 64208,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "5344:7:106",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							}
						],
						src: "5283:81:106"
					},
					returnParameters: {
						id: 64213,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64212,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64214,
								src: "5412:12:106",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_bytes_memory_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 64211,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "5412:5:106",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "5411:14:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64221,
					nodeType: "FunctionDefinition",
					src: "5576:81:106",
					nodes: [
					],
					functionSelector: "096568f6",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getSendVersion",
					nameLocation: "5585:14:106",
					parameters: {
						id: 64217,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64216,
								mutability: "mutable",
								name: "_userApplication",
								nameLocation: "5608:16:106",
								nodeType: "VariableDeclaration",
								scope: 64221,
								src: "5600:24:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64215,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "5600:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "5599:26:106"
					},
					returnParameters: {
						id: 64220,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64219,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64221,
								src: "5649:6:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64218,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "5649:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "5648:8:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				},
				{
					id: 64228,
					nodeType: "FunctionDefinition",
					src: "5812:84:106",
					nodes: [
					],
					functionSelector: "da1a7c9a",
					implemented: false,
					kind: "function",
					modifiers: [
					],
					name: "getReceiveVersion",
					nameLocation: "5821:17:106",
					parameters: {
						id: 64224,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64223,
								mutability: "mutable",
								name: "_userApplication",
								nameLocation: "5847:16:106",
								nodeType: "VariableDeclaration",
								scope: 64228,
								src: "5839:24:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 64222,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "5839:7:106",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "5838:26:106"
					},
					returnParameters: {
						id: 64227,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 64226,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 64228,
								src: "5888:6:106",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 64225,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "5888:6:106",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "5887:8:106"
					},
					scope: 64229,
					stateMutability: "view",
					virtual: false,
					visibility: "external"
				}
			],
			abstract: false,
			baseContracts: [
				{
					baseName: {
						id: 64088,
						name: "ILayerZeroUserApplicationConfig",
						nameLocations: [
							"145:31:106"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 64297,
						src: "145:31:106"
					},
					id: 64089,
					nodeType: "InheritanceSpecifier",
					src: "145:31:106"
				}
			],
			canonicalName: "ILayerZeroEndpoint",
			contractDependencies: [
			],
			contractKind: "interface",
			fullyImplemented: false,
			linearizedBaseContracts: [
				64229,
				64297
			],
			name: "ILayerZeroEndpoint",
			nameLocation: "123:18:106",
			scope: 64230,
			usedErrors: [
			]
		}
	],
	license: "BUSL-1.1"
};
var id$1 = 106;
var LayerZeroEndpointABI = {
	abi: abi$3,
	bytecode: bytecode$1,
	deployedBytecode: deployedBytecode$1,
	methodIdentifiers: methodIdentifiers$1,
	rawMetadata: rawMetadata$1,
	metadata: metadata$1,
	ast: ast$1,
	id: id$1
};

var abi$4 = [
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_localChainId",
				type: "uint16"
			},
			{
				internalType: "address",
				name: "_lzEndpointAddress",
				type: "address"
			},
			{
				internalType: "address",
				name: "_rootPortAddress",
				type: "address"
			},
			{
				internalType: "address",
				name: "_rootRouterAddress",
				type: "address"
			}
		],
		stateMutability: "nonpayable",
		type: "constructor"
	},
	{
		inputs: [
		],
		name: "AlreadyAddedBridgeAgent",
		type: "error"
	},
	{
		inputs: [
		],
		name: "AlreadyExecutedTransaction",
		type: "error"
	},
	{
		inputs: [
		],
		name: "ContractsVirtualAccountNotAllowed",
		type: "error"
	},
	{
		inputs: [
		],
		name: "ExecutionFailure",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InsufficientBalanceForSettlement",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidEndpointAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidInputParams",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidInputParamsLength",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidRootPortAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "InvalidRootRouterAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "LayerZeroUnauthorizedCaller",
		type: "error"
	},
	{
		inputs: [
		],
		name: "LayerZeroUnauthorizedEndpoint",
		type: "error"
	},
	{
		inputs: [
		],
		name: "NotDao",
		type: "error"
	},
	{
		inputs: [
		],
		name: "NotSettlementOwner",
		type: "error"
	},
	{
		inputs: [
		],
		name: "SettlementRedeemUnavailable",
		type: "error"
	},
	{
		inputs: [
		],
		name: "SettlementRetrieveUnavailable",
		type: "error"
	},
	{
		inputs: [
		],
		name: "SettlementRetryUnavailable",
		type: "error"
	},
	{
		inputs: [
		],
		name: "SettlementRetryUnavailableUseCallout",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnknownFlag",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedBridgeAgent",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedBridgeAgentManager",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedExecutor",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedLocalAddress",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedLocalBridgeAgent",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedPort",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedRouter",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnrecognizedUnderlyingAddress",
		type: "error"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint256",
				name: "depositNonce",
				type: "uint256"
			},
			{
				indexed: true,
				internalType: "uint256",
				name: "srcChainId",
				type: "uint256"
			}
		],
		name: "LogExecute",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint256",
				name: "settlementNonce",
				type: "uint256"
			},
			{
				indexed: true,
				internalType: "uint256",
				name: "dstChainId",
				type: "uint256"
			}
		],
		name: "LogFallback",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint256",
				name: "gasLimit",
				type: "uint256"
			},
			{
				indexed: true,
				internalType: "uint256",
				name: "remoteBranchExecutionGas",
				type: "uint256"
			}
		],
		name: "LogGasParams",
		type: "event"
	},
	{
		anonymous: false,
		inputs: [
			{
				indexed: true,
				internalType: "uint32",
				name: "_settlementNonce",
				type: "uint32"
			},
			{
				indexed: false,
				internalType: "address",
				name: "_recipient",
				type: "address"
			}
		],
		name: "RedeemSettlement",
		type: "event"
	},
	{
		inputs: [
		],
		name: "acceptManagementRole",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "_branchChainId",
				type: "uint256"
			}
		],
		name: "approveBranchBridgeAgent",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "bridgeAgentExecutorAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				components: [
					{
						internalType: "uint32",
						name: "depositNonce",
						type: "uint32"
					},
					{
						internalType: "address",
						name: "hToken",
						type: "address"
					},
					{
						internalType: "address",
						name: "token",
						type: "address"
					},
					{
						internalType: "uint256",
						name: "amount",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "deposit",
						type: "uint256"
					}
				],
				internalType: "struct DepositParams",
				name: "_dParams",
				type: "tuple"
			},
			{
				internalType: "uint256",
				name: "_srcChainId",
				type: "uint256"
			}
		],
		name: "bridgeIn",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				components: [
					{
						internalType: "uint8",
						name: "numberOfAssets",
						type: "uint8"
					},
					{
						internalType: "uint32",
						name: "depositNonce",
						type: "uint32"
					},
					{
						internalType: "address[]",
						name: "hTokens",
						type: "address[]"
					},
					{
						internalType: "address[]",
						name: "tokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct DepositMultipleParams",
				name: "_dParams",
				type: "tuple"
			},
			{
				internalType: "uint256",
				name: "_srcChainId",
				type: "uint256"
			}
		],
		name: "bridgeInMultiple",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address payable",
				name: "_gasRefundee",
				type: "address"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				internalType: "uint16",
				name: "_dstChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "callOut",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address payable",
				name: "_settlementOwnerAndGasRefundee",
				type: "address"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				internalType: "uint16",
				name: "_dstChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "address",
						name: "globalAddress",
						type: "address"
					},
					{
						internalType: "uint256",
						name: "amount",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "deposit",
						type: "uint256"
					}
				],
				internalType: "struct SettlementInput",
				name: "_sParams",
				type: "tuple"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "callOutAndBridge",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address payable",
				name: "_settlementOwnerAndGasRefundee",
				type: "address"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				internalType: "uint16",
				name: "_dstChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "address[]",
						name: "globalAddresses",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct SettlementMultipleInput",
				name: "_sParams",
				type: "tuple"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "callOutAndBridgeMultiple",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "chainId",
				type: "uint256"
			},
			{
				internalType: "uint256",
				name: "nonce",
				type: "uint256"
			}
		],
		name: "executionState",
		outputs: [
			{
				internalType: "uint256",
				name: "state",
				type: "uint256"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "factoryAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			}
		],
		name: "forceResumeReceive",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "chainId",
				type: "uint256"
			}
		],
		name: "getBranchBridgeAgent",
		outputs: [
			{
				internalType: "address",
				name: "branchBridgeAgent",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "nonce",
				type: "uint256"
			}
		],
		name: "getSettlement",
		outputs: [
			{
				internalType: "uint16",
				name: "dstChainId",
				type: "uint16"
			},
			{
				internalType: "uint80",
				name: "status",
				type: "uint80"
			},
			{
				internalType: "address",
				name: "owner",
				type: "address"
			},
			{
				internalType: "address",
				name: "recipient",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_settlementNonce",
				type: "uint32"
			}
		],
		name: "getSettlementEntry",
		outputs: [
			{
				components: [
					{
						internalType: "uint16",
						name: "dstChainId",
						type: "uint16"
					},
					{
						internalType: "uint80",
						name: "status",
						type: "uint80"
					},
					{
						internalType: "address",
						name: "owner",
						type: "address"
					},
					{
						internalType: "address",
						name: "recipient",
						type: "address"
					},
					{
						internalType: "address[]",
						name: "hTokens",
						type: "address[]"
					},
					{
						internalType: "address[]",
						name: "tokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amounts",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "deposits",
						type: "uint256[]"
					}
				],
				internalType: "struct Settlement",
				name: "",
				type: "tuple"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "chainId",
				type: "uint256"
			}
		],
		name: "isBranchBridgeAgentAllowed",
		outputs: [
			{
				internalType: "bool",
				name: "allowed",
				type: "bool"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "localChainId",
		outputs: [
			{
				internalType: "uint16",
				name: "",
				type: "uint16"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			},
			{
				internalType: "uint64",
				name: "",
				type: "uint64"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			}
		],
		name: "lzReceive",
		outputs: [
			{
				internalType: "bool",
				name: "success",
				type: "bool"
			}
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_endpoint",
				type: "address"
			},
			{
				internalType: "uint16",
				name: "_srcChainId",
				type: "uint16"
			},
			{
				internalType: "bytes",
				name: "_srcAddress",
				type: "bytes"
			},
			{
				internalType: "bytes",
				name: "_payload",
				type: "bytes"
			}
		],
		name: "lzReceiveNonBlocking",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "pendingBridgeAgentManagerAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_settlementNonce",
				type: "uint32"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			}
		],
		name: "redeemSettlement",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint32",
				name: "_settlementNonce",
				type: "uint32"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			}
		],
		name: "retrieveSettlement",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_settlementOwnerAndGasRefundee",
				type: "address"
			},
			{
				internalType: "uint32",
				name: "_settlementNonce",
				type: "uint32"
			},
			{
				internalType: "address",
				name: "_recipient",
				type: "address"
			},
			{
				internalType: "bytes",
				name: "_params",
				type: "bytes"
			},
			{
				components: [
					{
						internalType: "uint256",
						name: "gasLimit",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "remoteBranchExecutionGas",
						type: "uint256"
					}
				],
				internalType: "struct GasParams",
				name: "_gParams",
				type: "tuple"
			},
			{
				internalType: "bool",
				name: "_hasFallbackToggled",
				type: "bool"
			}
		],
		name: "retrySettlement",
		outputs: [
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "rootPortAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "rootRouterAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "settlementNonce",
		outputs: [
			{
				internalType: "uint32",
				name: "",
				type: "uint32"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_newBranchBridgeAgent",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "_branchChainId",
				type: "uint256"
			}
		],
		name: "syncBranchBridgeAgent",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_newManager",
				type: "address"
			}
		],
		name: "transferManagementRole",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		stateMutability: "payable",
		type: "receive"
	}
];
var RootBridgeAgentAbi = {
	abi: abi$4
};

var _format = "hh-sol-artifact-1";
var contractName = "VirtualAccount";
var sourceName = "src/ulysses-omnichain/VirtualAccount.sol";
var abi$5 = [
	{
		inputs: [
			{
				internalType: "address",
				name: "_userAddress",
				type: "address"
			}
		],
		stateMutability: "nonpayable",
		type: "constructor"
	},
	{
		inputs: [
			{
				internalType: "bytes",
				name: "returnData",
				type: "bytes"
			}
		],
		name: "CallFailed",
		type: "error"
	},
	{
		inputs: [
		],
		name: "UnauthorizedCaller",
		type: "error"
	},
	{
		stateMutability: "payable",
		type: "fallback"
	},
	{
		inputs: [
			{
				components: [
					{
						internalType: "address",
						name: "target",
						type: "address"
					},
					{
						internalType: "bytes",
						name: "callData",
						type: "bytes"
					}
				],
				internalType: "struct Call[]",
				name: "calls",
				type: "tuple[]"
			}
		],
		name: "call",
		outputs: [
			{
				internalType: "bytes[]",
				name: "returnData",
				type: "bytes[]"
			}
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
		],
		name: "localPortAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "uint256[]",
				name: "",
				type: "uint256[]"
			},
			{
				internalType: "uint256[]",
				name: "",
				type: "uint256[]"
			},
			{
				internalType: "bytes",
				name: "",
				type: "bytes"
			}
		],
		name: "onERC1155BatchReceived",
		outputs: [
			{
				internalType: "bytes4",
				name: "",
				type: "bytes4"
			}
		],
		stateMutability: "pure",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			},
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			},
			{
				internalType: "bytes",
				name: "",
				type: "bytes"
			}
		],
		name: "onERC1155Received",
		outputs: [
			{
				internalType: "bytes4",
				name: "",
				type: "bytes4"
			}
		],
		stateMutability: "pure",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "address",
				name: "",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "",
				type: "uint256"
			},
			{
				internalType: "bytes",
				name: "",
				type: "bytes"
			}
		],
		name: "onERC721Received",
		outputs: [
			{
				internalType: "bytes4",
				name: "",
				type: "bytes4"
			}
		],
		stateMutability: "pure",
		type: "function"
	},
	{
		inputs: [
			{
				components: [
					{
						internalType: "address",
						name: "target",
						type: "address"
					},
					{
						internalType: "bytes",
						name: "callData",
						type: "bytes"
					},
					{
						internalType: "uint256",
						name: "value",
						type: "uint256"
					}
				],
				internalType: "struct PayableCall[]",
				name: "calls",
				type: "tuple[]"
			}
		],
		name: "payableCall",
		outputs: [
			{
				internalType: "bytes[]",
				name: "returnData",
				type: "bytes[]"
			}
		],
		stateMutability: "payable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "bytes4",
				name: "interfaceId",
				type: "bytes4"
			}
		],
		name: "supportsInterface",
		outputs: [
			{
				internalType: "bool",
				name: "",
				type: "bool"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
		],
		name: "userAddress",
		outputs: [
			{
				internalType: "address",
				name: "",
				type: "address"
			}
		],
		stateMutability: "view",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_token",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "_amount",
				type: "uint256"
			}
		],
		name: "withdrawERC20",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "address",
				name: "_token",
				type: "address"
			},
			{
				internalType: "uint256",
				name: "_tokenId",
				type: "uint256"
			}
		],
		name: "withdrawERC721",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		inputs: [
			{
				internalType: "uint256",
				name: "_amount",
				type: "uint256"
			}
		],
		name: "withdrawNative",
		outputs: [
		],
		stateMutability: "nonpayable",
		type: "function"
	},
	{
		stateMutability: "payable",
		type: "receive"
	}
];
var bytecode$2 = "0x60c0346100bd57601f6112b038819003918201601f19168301916001600160401b038311848410176100c2578084926020946040528339810103126100bd57516001600160a01b03811681036100bd573360a0526080526040516111d790816100d98239608051818181610453015281816105ba015281816106b2015281816107d6015281816109b80152610ac0015260a0518181816102b1015281816104d901528181610630015281816107280152818161084b0152610b350152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610015575b36610b9057005b60003560e01c806301ffc9a7146100c5578063150b7a02146100c05780635abfaf6c146100bb57806362ffbaa2146100b657806384276d81146100b157806393f29694146100ac578063a1db9782146100a7578063bc197c81146100a2578063e4128fb31461009d578063f23a6e61146100985763f3e414f80361000e57610a6d565b6109dc565b61096d565b6108a6565b610783565b61068b565b610573565b610431565b610266565b6101d5565b346101845760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361018457807f4e2312e0000000000000000000000000000000000000000000000000000000006020921490811561015a575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861014f565b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361018457565b9181601f840112156101845782359167ffffffffffffffff8311610184576020838186019501011161018457565b346101845760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101845761020f600435610189565b61021a602435610189565b60643567ffffffffffffffff81116101845761023a9036906004016101a7565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101845760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156101845782359167ffffffffffffffff8311610184576020808501948460051b01011161018457565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610184576004359067ffffffffffffffff82116101845761034f916004016102d5565b9091565b919082519283825260005b84811061039d5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b60208183018101518483018201520161035e565b602080820190808352835180925260408301928160408460051b8301019501936000915b8483106103e55750505050505090565b9091929394958480610421837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51610353565b98019301930191949392906103d5565b61043a36610306565b9073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000163303610497575b61049361048784846110c5565b604051918291826103b1565b0390f35b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290602090829060449082906000907f0000000000000000000000000000000000000000000000000000000000000000165af190811561056e57600091610540575b5015610516573861047a565b60046040517f5c427cd9000000000000000000000000000000000000000000000000000000008152fd5b610561915060203d8111610567575b6105598183610c83565b810190610cc9565b3861050a565b503d61054f565b610ce1565b346101845760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101845773ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001633036105ee575b6105ec600435610ced565b005b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290602090829060449082906000907f0000000000000000000000000000000000000000000000000000000000000000165af190811561056e5760009161066d575b501561051657386105e1565b610685915060203d8111610567576105598183610c83565b38610661565b346101845761069936610306565b9073ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001633036106e6575b6104936104878484610f7c565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290602090829060449082906000907f0000000000000000000000000000000000000000000000000000000000000000165af190811561056e57600091610765575b501561051657386106d9565b61077d915060203d8111610567576105598183610c83565b38610759565b346101845760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576004356107be81610189565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000163303610809575b6105ec60243583610d0c565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290602090829060449082906000907f0000000000000000000000000000000000000000000000000000000000000000165af190811561056e57600091610888575b501561051657386107fd565b6108a0915060203d8111610567576105598183610c83565b3861087c565b346101845760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576108e0600435610189565b6108eb602435610189565b67ffffffffffffffff6044358181116101845761090c9036906004016102d5565b5050606435818111610184576109269036906004016102d5565b5050608435908111610184576109409036906004016101a7565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101845760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101845760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457610a16600435610189565b610a21602435610189565b60843567ffffffffffffffff811161018457610a419036906004016101a7565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101845760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457600435610aa881610189565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000163303610af3575b6105ec60243583610d56565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290602090829060449082906000907f0000000000000000000000000000000000000000000000000000000000000000165af190811561056e57600091610b72575b50156105165738610ae7565b610b8a915060203d8111610567576105598183610c83565b38610b66565b3615610c50576000805b368110610bbd576000388382305af43d6000803e15610bb8573d6000f35b3d6000fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9181358383011860001a600180809401948215610c015750508153015b90610b9a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff845290850194607f9250803591011860001a81811115610c45575b160101610bfb565b838101388439610c3d565b3636f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc457604052565b610c54565b90816020910312610184575180151581036101845790565b6040513d6000823e3d90fd5b60009081803892335af115610cfe57565b63b12d13eb6000526004601cfd5b6020906010923360145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615610d4957603452565b6390b8ec1890526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff1690813b15610184576000916064839260405194859384927f23b872dd00000000000000000000000000000000000000000000000000000000845230600485015233602485015260448401525af1801561056e57610dc65750565b67ffffffffffffffff8111610cc457604052565b67ffffffffffffffff8111610cc45760051b60200190565b90610dfc82610dda565b610e096040519182610c83565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e378294610dda565b019060005b828110610e4857505050565b806060602080938501015201610e3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b35610e9281610189565b90565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610184570180359067ffffffffffffffff82116101845760200191813603831361018457565b908092918237016000815290565b3d15610f4d573d9067ffffffffffffffff8211610cc45760405191610f4160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610c83565b82523d6000602084013e565b606090565b8051821015610f665760209160051b010190565b610e59565b906020610e92928181520190610353565b9190610f8781610df2565b9260005b828110610f9757505050565b60008160051b8301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1843603018112156110815781908401610fe2610fdc82610e88565b3b151590565b61103a575b505015610ff657600101610f8b565b6110036110369186610f52565b516040519182917fa5fa8d2b00000000000000000000000000000000000000000000000000000000835260048301610f6b565b0390fd5b8161105261104783610e88565b926020810190610e95565b919061106360405180948193610ee6565b03925af161106f610ef4565b6110798388610f52565b528038610fe7565b5080fd5b9190811015610f665760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610184570190565b9190916000906110d484610df2565b93825b8181106111135750505034036110e957565b60046040517f4422bc1b000000000000000000000000000000000000000000000000000000008152fd5b61111e818385611085565b6040908181013580960195600091829161113a610fdc83610e88565b61118f575b5050501561115057506001016110d7565b61115d6110369288610f52565b5190519182917fa5fa8d2b00000000000000000000000000000000000000000000000000000000835260048301610f6b565b61119b61104783610e88565b91906111ab875180948193610ee6565b03925af16111b7610ef4565b6111c1848a610f52565b5280388061113f56fea164736f6c6343000813000a";
var testnetBytecode = "0x60c0346100bd57601f6112d738819003918201601f19168301916001600160401b038311848410176100c2578084926020946040528339810103126100bd57516001600160a01b03811681036100bd573360a0526080526040516111fe90816100d982396080518181816104e7015281816106390152818161072e0152818161084c015281816109a80152610b31015260a0518181816102b10152818161048f015281816105f1015281816106e6015281816108050152610aea0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610015575b36610b7b57005b60003560e01c806301ffc9a7146100c5578063150b7a02146100c05780635abfaf6c146100bb57806362ffbaa2146100b657806384276d81146100b157806393f29694146100ac578063a1db9782146100a7578063bc197c81146100a2578063e4128fb31461009d578063f23a6e61146100985763f3e414f80361000e57610a5d565b6109cc565b61095d565b610896565b610778565b610683565b610570565b610431565b610266565b6101d5565b346101845760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361018457807f4e2312e0000000000000000000000000000000000000000000000000000000006020921490811561015a575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861014f565b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361018457565b9181601f840112156101845782359167ffffffffffffffff8311610184576020838186019501011161018457565b346101845760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101845761020f600435610189565b61021a602435610189565b60643567ffffffffffffffff81116101845761023a9036906004016101a7565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101845760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156101845782359167ffffffffffffffff8311610184576020808501948460051b01011161018457565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610184576004359067ffffffffffffffff82116101845761034f916004016102d5565b9091565b919082519283825260005b84811061039d5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b60208183018101518483018201520161035e565b602080820190808352835180925260408301928160408460051b8301019501936000915b8483106103e55750505050505090565b9091929394958480610421837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51610353565b98019301930191949392906103d5565b61043a36610306565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290919073ffffffffffffffffffffffffffffffffffffffff9060208160448160007f000000000000000000000000000000000000000000000000000000000000000087165af190811561056b5760009161053d575b50156104e5575b6104e16104d584846110b0565b604051918291826103b1565b0390f35b7f000000000000000000000000000000000000000000000000000000000000000016330361051357386104c8565b60046040517f5c427cd9000000000000000000000000000000000000000000000000000000008152fd5b61055e915060203d8111610564575b6105568183610c6e565b810190610cb4565b386104c1565b503d61054c565b610ccc565b346101845760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015273ffffffffffffffffffffffffffffffffffffffff9060208160448160007f000000000000000000000000000000000000000000000000000000000000000087165af190811561056b57600091610665575b5015610637575b610635600435610cd8565b005b7f0000000000000000000000000000000000000000000000000000000000000000163303610513573861062a565b61067d915060203d8111610564576105568183610c6e565b38610623565b346101845761069136610306565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015290919073ffffffffffffffffffffffffffffffffffffffff9060208160448160007f000000000000000000000000000000000000000000000000000000000000000087165af190811561056b5760009161075a575b501561072c575b6104e16104d58484610f67565b7f0000000000000000000000000000000000000000000000000000000000000000163303610513573861071f565b610772915060203d8111610564576105568183610c6e565b38610718565b346101845760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576004356107b381610189565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015273ffffffffffffffffffffffffffffffffffffffff9060208160448160007f000000000000000000000000000000000000000000000000000000000000000087165af190811561056b57600091610878575b501561084a575b61063560243583610cf7565b7f0000000000000000000000000000000000000000000000000000000000000000163303610513573861083e565b610890915060203d8111610564576105568183610c6e565b38610837565b346101845760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610184576108d0600435610189565b6108db602435610189565b67ffffffffffffffff604435818111610184576108fc9036906004016102d5565b5050606435818111610184576109169036906004016102d5565b5050608435908111610184576109309036906004016101a7565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101845760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101845760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457610a06600435610189565b610a11602435610189565b60843567ffffffffffffffff811161018457610a319036906004016101a7565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101845760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018457600435610a9881610189565b6040517f065b904100000000000000000000000000000000000000000000000000000000815230600482015233602482015273ffffffffffffffffffffffffffffffffffffffff9060208160448160007f000000000000000000000000000000000000000000000000000000000000000087165af190811561056b57600091610b5d575b5015610b2f575b61063560243583610d41565b7f00000000000000000000000000000000000000000000000000000000000000001633036105135738610b23565b610b75915060203d8111610564576105568183610c6e565b38610b1c565b3615610c3b576000805b368110610ba8576000388382305af43d6000803e15610ba3573d6000f35b3d6000fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9181358383011860001a600180809401948215610bec5750508153015b90610b85565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff845290850194607f9250803591011860001a81811115610c30575b160101610be6565b838101388439610c28565b3636f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610caf57604052565b610c3f565b90816020910312610184575180151581036101845790565b6040513d6000823e3d90fd5b60009081803892335af115610ce957565b63b12d13eb6000526004601cfd5b6020906010923360145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615610d3457603452565b6390b8ec1890526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff1690813b15610184576000916064839260405194859384927f23b872dd00000000000000000000000000000000000000000000000000000000845230600485015233602485015260448401525af1801561056b57610db15750565b67ffffffffffffffff8111610caf57604052565b67ffffffffffffffff8111610caf5760051b60200190565b90610de782610dc5565b610df46040519182610c6e565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e228294610dc5565b019060005b828110610e3357505050565b806060602080938501015201610e27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b35610e7d81610189565b90565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610184570180359067ffffffffffffffff82116101845760200191813603831361018457565b908092918237016000815290565b3d15610f38573d9067ffffffffffffffff8211610caf5760405191610f2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610c6e565b82523d6000602084013e565b606090565b8051821015610f515760209160051b010190565b610e44565b906020610e7d928181520190610353565b9190610f7281610ddd565b9260005b828110610f8257505050565b60008160051b8301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18436030181121561106c5781908401610fcd610fc782610e73565b3b151590565b611025575b505015610fe157600101610f76565b610fee6110219186610f3d565b516040519182917fa5fa8d2b00000000000000000000000000000000000000000000000000000000835260048301610f56565b0390fd5b8161103d61103283610e73565b926020810190610e80565b919061104e60405180948193610ed1565b03925af161105a610edf565b6110648388610f3d565b528038610fd2565b5080fd5b9190811015610f515760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610184570190565b9190916000906110bf84610ddd565b93825b81811061113a5750505034036110d457565b6040517fa5fa8d2b000000000000000000000000000000000000000000000000000000008152806110216004820160609060208152600460208201527f5c63102a0000000000000000000000000000000000000000000000000000000060408201520190565b611145818385611070565b60409081810135809601956000918291611161610fc783610e73565b6111b6575b5050501561117757506001016110c2565b6111846110219288610f3d565b5190519182917fa5fa8d2b00000000000000000000000000000000000000000000000000000000835260048301610f56565b6111c261103283610e73565b91906111d2875180948193610ed1565b03925af16111de610edf565b6111e8848a610f3d565b5280388061116656fea164736f6c6343000813000a";
var VirtualAccountABI = {
	_format: _format,
	contractName: contractName,
	sourceName: sourceName,
	abi: abi$5,
	bytecode: bytecode$2,
	testnetBytecode: testnetBytecode
};

/**
 * Given an account address, this function will calculate the virtual account address of the given user.
 * @param account - The account address of the user.
 * @returns
 */
function computeVirtualAccount(account, chainId) {
  var _Ulysses$chainId$Root, _Ulysses$chainId;
  !ROOT_CHAIN_IDS.includes(chainId) ?  invariant(false, 'Invalid chainId')  : void 0;
  var initCodeHash = solidity.keccak256(['bytes'], [(maiaCoreSdk.SupportedChainId.ARBITRUM_ONE === chainId ? bytecode$2 : testnetBytecode).concat('000000000000000000000000').concat(account.slice(2))]);
  return address.getCreate2Address((_Ulysses$chainId$Root = (_Ulysses$chainId = maiaCoreSdk.Ulysses[chainId]) == null ? void 0 : _Ulysses$chainId.RootPort) != null ? _Ulysses$chainId$Root : maiaCoreSdk.ZERO_ADDRESS, account.concat('000000000000000000000000'), initCodeHash);
}

/**
 * Represents the balances of a user across all currencies on the chain
 */
var CurrencyBalances = /*#__PURE__*/function () {
  /**
   * @param Currency The global token of the chain
   * @param currencyBalances The balances of the user
   * @param currencyBalances.native The native balance of the user
   * @param currencyBalances.global The global balance of the user
   * @param currencyBalances.hToken The hToken balance of the user
   * @param currencyBalances.virtual The virtual balance of the user
   * @param currencyBalances.virtual.native The virtual native balance of the user
   * @param currencyBalances.virtual.global The virtual global balance of the user
   * @returns The currency balances of the user
   * @example
   * ```ts
   * const currencyBalances = new CurrencyBalances(Currency, {
   *  native: CurrencyAmount.fromRawAmount(Currency.wrapped, 100),
   *  global: CurrencyAmount.fromRawAmount(Currency, 100),
   *  hToken: CurrencyAmount.fromRawAmount(hToken, 100),
   *  virtual: {
   *    native: CurrencyAmount.fromRawAmount(Currency.wrapped, 100),
   *    global: CurrencyAmount.fromRawAmount(Currency, 100),
   *  },
   * })
   * ```
   */
  function CurrencyBalances(token, currencyBalances) {
    this.token = token;
    this.currencyBalances = currencyBalances;
  }
  /**
   * Returns the total sum of balances of the user, including the balance from the virtual account.
   * @returns The total spendable balance of the user.
   */
  var _proto = CurrencyBalances.prototype;
  _proto.getTotalBalance = function getTotalBalance() {
    var _this$_totalBalance;
    return (_this$_totalBalance = this._totalBalance) != null ? _this$_totalBalance : this._totalBalance = maiaCoreSdk.CurrencyAmount.fromRawAmount(this.token, this.getNativeBalance().asFraction.add(this.getGlobalBalance().asFraction).add(this.getHTokenBalance().asFraction).add(this.getVirtualNativeBalance().asFraction.add(this.getVirtualGlobalBalance().asFraction)).quotient);
  }
  /**
   * Returns the total sum of balances of the user, spendable from a chain.
   * @param isRootChain Whether the chain is the root chain or not.
   * @dev If isRootChain is not provided, it defaults to false.
   * @returns The total spendable balance of the user from the chain.
   */;
  _proto.getBalance = function getBalance(isRootChain) {
    return isRootChain ? this.getRootBalance() : this.getRemoteBalance();
  }
  /**
   * Returns the total sum of balances of the user, spendable from a remote chain.
   * @returns The total spendable balance of the user from the remote chain.
   */;
  _proto.getRemoteBalance = function getRemoteBalance() {
    var _this$_totalBalance2;
    return (_this$_totalBalance2 = this._totalBalance) != null ? _this$_totalBalance2 : this._totalBalance = maiaCoreSdk.CurrencyAmount.fromRawAmount(this.token, this.getNativeBalance().asFraction.add(this.getHTokenBalance().asFraction).add(this.getVirtualNativeBalance().asFraction.add(this.getVirtualGlobalBalance().asFraction)).quotient);
  }
  /**
   * Returns the total sum of balances of the user, spendable from the root chain.
   * @returns The total spendable balance of the user from the root chain.
   */;
  _proto.getRootBalance = function getRootBalance() {
    var _this$_rootBalance;
    return (_this$_rootBalance = this._rootBalance) != null ? _this$_rootBalance : this._rootBalance = maiaCoreSdk.CurrencyAmount.fromRawAmount(this.token, this.getNativeBalance().asFraction.add(this.getGlobalBalance().asFraction).add(this.getVirtualNativeBalance().asFraction.add(this.getVirtualGlobalBalance().asFraction)).quotient);
  };
  _proto.getNativeBalance = function getNativeBalance() {
    return this.parseCurrencyAmount(this.currencyBalances["native"]);
  }
  /**
   * Returns the combined native balance of the user, including the balance from the virtual account.
   * @returns
   */;
  _proto.getCombinedNativeBalance = function getCombinedNativeBalance() {
    var _native = this.parseCurrencyAmount(this.currencyBalances["native"]);
    var virtual = this.parseCurrencyAmount(this.currencyBalances.virtual["native"]);
    return {
      "native": _native,
      virtual: virtual,
      total: _native.add(virtual)
    };
  };
  _proto.getGlobalBalance = function getGlobalBalance() {
    return this.parseCurrencyAmount(this.currencyBalances.global);
  };
  _proto.getCombinedGlobalBalance = function getCombinedGlobalBalance() {
    var global = this.parseCurrencyAmount(this.currencyBalances.global);
    var virtual = this.parseCurrencyAmount(this.currencyBalances.virtual.global);
    return {
      global: global,
      virtual: virtual,
      total: global.add(virtual)
    };
  };
  _proto.getHTokenBalance = function getHTokenBalance() {
    return this.parseCurrencyAmount(this.currencyBalances.hToken);
  };
  _proto.getVirtualBalance = function getVirtualBalance() {
    return {
      virtual: {
        "native": this.getVirtualNativeBalance(),
        global: this.getVirtualGlobalBalance()
      }
    };
  };
  _proto.getVirtualNativeBalance = function getVirtualNativeBalance() {
    return this.parseCurrencyAmount(this.currencyBalances.virtual["native"]);
  };
  _proto.getVirtualGlobalBalance = function getVirtualGlobalBalance() {
    return this.parseCurrencyAmount(this.currencyBalances.virtual.global);
  };
  _proto.parseCurrencyAmount = function parseCurrencyAmount(amount) {
    return amount != null ? amount : maiaCoreSdk.CurrencyAmount.fromRawAmount(this.token.wrapped, 0);
  };
  return CurrencyBalances;
}();

var RootBridgeAgent = /*#__PURE__*/function () {
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  function RootBridgeAgent() {}
  /**
   * Used to retry call a function on a remote chain.
   * @param gasRefundee The address that will receive the gas refund.
   * @param recipient The address that will receive the tokens.
   * @param dstChainId The chain id of the destination chain.
   * @param params The encoded parameters to pass to the remote chain.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns encoded calldata for the callOut function
   */
  RootBridgeAgent.encodeRetrySettlementCalldata = function encodeRetrySettlementCalldata(_ref) {
    var settlementOwnerAndGasRefundee = _ref.settlementOwnerAndGasRefundee,
      settlementNonce = _ref.settlementNonce,
      recipient = _ref.recipient,
      params = _ref.params,
      gasParams = _ref.gasParams,
      hasFallbackToggled = _ref.hasFallbackToggled;
    return RootBridgeAgent.INTERFACE.encodeFunctionData('retrySettlement', [settlementOwnerAndGasRefundee, maiaCoreSdk.toHex(settlementNonce), recipient, params, formatGasParams(gasParams), hasFallbackToggled]);
  }
  /**
   * Used to request tokens back to the root chain after an call fails.
   * @param depositNonce The nonce of the settlement to retrieve.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @returns encoded calldata for the retrieveSettlement function
   */;
  RootBridgeAgent.encodeRetrieveSettlementCalldata = function encodeRetrieveSettlementCalldata(_ref2) {
    var settlementNonce = _ref2.settlementNonce,
      gasParams = _ref2.gasParams;
    return RootBridgeAgent.INTERFACE.encodeFunctionData('retrieveSettlement', [maiaCoreSdk.toHex(settlementNonce), formatGasParams(gasParams)]);
  }
  /**
   * Used to transfer tokens from the root port to the owner of the settlement after an call fails.
   * @param depositNonce The nonce of the settlement to retrieve.
   * @param recipient the address that's used for receive the redeemed tokens.
   * @returns encoded calldata for the redeemSettlement function
   */;
  RootBridgeAgent.encodeRedeemSettlementCalldata = function encodeRedeemSettlementCalldata(_ref3) {
    var settlementNonce = _ref3.settlementNonce,
      recipient = _ref3.recipient;
    return RootBridgeAgent.INTERFACE.encodeFunctionData('redeemSettlement', [maiaCoreSdk.toHex(settlementNonce), recipient]);
  };
  return RootBridgeAgent;
}();
RootBridgeAgent.INTERFACE = /*#__PURE__*/new abi$7.Interface(RootBridgeAgentAbi.abi);

/**
 * Class to create the calldata to pass as argument for a given call to the branch router.
 */
var LzEndpoint = /*#__PURE__*/function () {
  /**
   * Cannot be constructed.
   */
  /* eslint-disable @typescript-eslint/no-empty-function */
  function LzEndpoint() {
    /* TODO document why this constructor is empty */
  }
  /**
   * Produces the encoded bytes for version 2 adapter params.
   * @param gasLimit
   * @param nativeForDst
   * @param dstNativeAddress
   * @returns encoded adapter params.
   */
  LzEndpoint.encodeAdapterParamsV2 = function encodeAdapterParamsV2(gasLimit, nativeForDst, dstNativeAddress) {
    return solidity.pack(['uint16', 'uint256', 'uint256', 'address'], [2, gasLimit, nativeForDst, dstNativeAddress]);
  }
  /**
   * Produces the  calldata for an onchain call to the endpoint's `estimateFess` function.
   * @param dstChainId The id of the destination chain.
   * @param bridgeAgentAddress The address of the bridge agent on the source chain.
   * @param payload The payload to pass to the endpoint's `estimateFees` function and would be used in the `send` call.
   * @param gasLimit The gas limit to pass to the endpoint's `estimateFees` function and would be used in the `send` call.
   * @param nativeForDst The amount of native tokens to receive in destination chain.
   * @returns
   */;
  LzEndpoint.createEstimateFeesCalldata = function createEstimateFeesCalldata(dstChainId, bridgeAgentAddress, payload, gasLimit, nativeForDst, dstNativeAddress) {
    return LzEndpoint.INTERFACE.encodeFunctionData('estimateFees', [dstChainId, bridgeAgentAddress, payload, false, LzEndpoint.encodeAdapterParamsV2(gasLimit, nativeForDst, dstNativeAddress)]);
  }
  /**
   * Produces the endpoint calldata for a call that does not require a token deposit.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param params The parameters to pass to the branch router function.
   * @returns encoded endpoint calldata for the callOut function.
   */;
  LzEndpoint.createCallOutLzEndpointCalldata = function createCallOutLzEndpointCalldata(srcChainId, srcAddress, nonce, params) {
    var payload = solidity.pack(['bytes1', 'uint32', 'bytes'], [1, nonce, params]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the endpoint calldata for a call that requires a token deposit.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit token and amount.
   * @returns endpoint calldata for the callOutAndBridge function
   */;
  LzEndpoint.createCallOutAndBridgeLzEndpointCalldata = function createCallOutAndBridgeLzEndpointCalldata(srcChainId, srcAddress, nonce, _ref) {
    var params = _ref.params,
      depositParams = _ref.depositParams;
    var payload = solidity.pack(['bytes1', 'uint32', 'address', 'address', 'uint256', 'uint256', 'bytes'], [2, nonce, depositParams.hToken, depositParams.token, depositParams.amount, depositParams.deposit, params]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the endpoint calldata to pass as argument for a call that requires multiple token deposits.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit tokens and amounts.
   * @returns endpoint calldata for the callOutAndBridgeMultiple function
   */;
  LzEndpoint.createBranchCallOutAndBridgeMultipleLzEndpointCalldata = function createBranchCallOutAndBridgeMultipleLzEndpointCalldata(srcChainId, srcAddress, nonce, _ref2) {
    var params = _ref2.params,
      depositParams = _ref2.depositParams;
    var payload = solidity.pack(['bytes1', 'uint8', 'uint32', 'address[]', 'address[]', 'uint256[]', 'uint256[]', 'bytes'], [3, nonce, depositParams.hTokens.length, depositParams.hTokens, depositParams.tokens, depositParams.amounts, depositParams.deposits, params]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the on-chain calldata to pass as argument for a signed call (using the user's Virtual Account)
   * that does not require a token deposit.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param account The user's account as deposit owner and gas refundee.
   * @param params The parameters to pass to the branch router function.
   * @returns endpoint calldata for the callOutSigned function
   */;
  LzEndpoint.createBranchCallOutSignedLzEndpointCalldata = function createBranchCallOutSignedLzEndpointCalldata(srcChainId, srcAddress, nonce, account, params) {
    var payload = solidity.pack(['bytes1', 'address', 'uint32', 'bytes'], [4, account, nonce, params]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the on-chain calldata to pass as argument for a signed call (using the user's Virtual Account) that requires a token deposit.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param account user account that's used for the refund of gas if applicable
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit token and amount.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @param hasFallbackToggled true if the call should send a fallback message to clear assets in origin chain upon failure.
   * @returns
   */;
  LzEndpoint.createBranchCallOutSignedAndBridgeLzEndpointCalldata = function createBranchCallOutSignedAndBridgeLzEndpointCalldata(srcChainId, srcAddress, nonce, account, _ref3) {
    var params = _ref3.params,
      depositParams = _ref3.depositParams,
      hasFallbackToggled = _ref3.hasFallbackToggled;
    var payload = solidity.pack(['bytes1', 'address', 'uint32', 'address', 'address', 'uint256', 'uint256', 'bytes'], [hasFallbackToggled ? '0x85' : '0x05', account, nonce, depositParams.hToken, depositParams.token, depositParams.amount, depositParams.deposit, params]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the on-chain calldata to pass as argument for a signed call (using the user's Virtual Account)
   * that requires multiple token deposits.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param depositParams params that hold information about the deposit tokens and amounts.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @param hasFallbackToggled true if the call should send a fallback message to clear assets in origin chain upon failure.
   * @returns
   */;
  LzEndpoint.createBranchCallOutSignedAndBridgeMultipleLzEndpointCalldata = function createBranchCallOutSignedAndBridgeMultipleLzEndpointCalldata(srcChainId, srcAddress, nonce, account, _ref4) {
    var params = _ref4.params,
      depositParams = _ref4.depositParams,
      hasFallbackToggled = _ref4.hasFallbackToggled;
    var payload = solidity.pack(['bytes1', 'address', 'uint8', 'uint32', 'address[]', 'address[]', 'uint256[]', 'uint256[]', 'bytes'], [hasFallbackToggled ? '0x86' : '0x06', account, depositParams.hTokens.length, nonce, depositParams.hTokens, depositParams.tokens, depositParams.amounts, depositParams.deposits, params]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Used to encode enpoint calldata for the retry of a failed settlement.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param account The user's account as deposit owner and gas refundee.
   * @param settlementNonce The nonce of the settlement to retry.
   * @param params The parameters to pass to the branch router function.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @param hasFallbackToggled true if the call should send a fallback message to clear assets in origin chain upon failure.
   * @returns encoded calldata for the retrySettlement function
   */;
  LzEndpoint.createBranchRetrySettlementEndpointCalldata = function createBranchRetrySettlementEndpointCalldata(srcChainId, srcAddress, account, _ref5) {
    var settlementNonce = _ref5.settlementNonce,
      params = _ref5.params,
      gasParams = _ref5.gasParams,
      hasFallbackToggled = _ref5.hasFallbackToggled;
    var payload = abi$7.defaultAbiCoder.encode(['uint32', 'address', 'bytes', 'tuple(uint256, uint256)'], [settlementNonce, account, params, [gasParams.gasLimit, gasParams.remoteBranchExecutionGas]]);
    var packedPayload = solidity.pack(['bytes1', 'bytes'], [hasFallbackToggled ? '0x87' : '0x07', payload]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, packedPayload]);
  }
  /**
   * Used encode enpoint calldata for deposit retrieval request.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param account The user's account as deposit owner and gas refundee.
   * @param depositNonce The nonce of the deposit to retrieve.
   * @returns encoded calldata for the retrieveDeposit function
   */;
  LzEndpoint.createBranchRetrieveDepositEndpointCalldata = function createBranchRetrieveDepositEndpointCalldata(srcChainId, srcAddress, account, _ref6) {
    var depositNonce = _ref6.depositNonce;
    var payload = solidity.pack(['bytes1', 'address', 'uint32'], [8, account, depositNonce]);
    return RootBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the endpoit calldata for a call that does not require a token deposit.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param recipient The recipient account as deposit owner and gas refundee.
   * @param params The parameters to pass to the branch router function.
   */;
  LzEndpoint.createRootCallOutLzEndpointCalldata = function createRootCallOutLzEndpointCalldata(srcChainId, srcAddress, nonce, recipient, params) {
    var payload = solidity.pack(['bytes1', 'address', 'uint32', 'bytes'], [1, recipient, nonce, params]);
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the endpoint calldata for a call that requires a token deposit.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param recipient The recipient account of the settlement tokens.
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param settlementParams params that hold information about the settlement token and amount.
   * @param hasFallbackToggled send fallback message to clear assets in origin chain upon failure.
   * @returns encoded endpoint calldata for the callOutAndBridge function
   */;
  LzEndpoint.createRootCallOutAndBridgeLzEndpointCalldata = function createRootCallOutAndBridgeLzEndpointCalldata(srcChainId, srcAddress, nonce, _ref7) {
    var recipient = _ref7.recipient,
      params = _ref7.params,
      settlementParams = _ref7.settlementParams,
      hasFallbackToggled = _ref7.hasFallbackToggled;
    var payload = solidity.pack(['bytes1', 'address', 'uint32', 'address', 'address', 'uint256', 'uint256', 'bytes'], [hasFallbackToggled ? '0x82' : '0x02', recipient, nonce, settlementParams.hToken, settlementParams.token, settlementParams.amount, settlementParams.deposit, params]);
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  }
  /**
   * Produces the endpoint calldata for a call that requires multiple token deposits.
   * @param srcChainId The id of the source branch chain.
   * @param srcAddress The address of the source branch chain encode packed with the destination address.
   * @param nonce The nonce of the deposit to encode.
   * @param recipient The recipient account of the settlement tokens.
   * @param params The encoded params to pass to the root router. (executeSignedDepositSingle function on the router)
   * @param settlementParams params that hold information about the settlement tokens and amounts.
   * @param hasFallbackToggled send fallback message to clear assets in origin chain upon failure.
   * @returns encoded endpoint calldata for the callOutAndBridgeMultiple function
   */;
  LzEndpoint.createRootCallOutAndBridgeMultipleLzEndpointCalldata = function createRootCallOutAndBridgeMultipleLzEndpointCalldata(srcChainId, srcAddress, nonce, _ref8) {
    var recipient = _ref8.recipient,
      params = _ref8.params,
      settlementParams = _ref8.settlementParams,
      hasFallbackToggled = _ref8.hasFallbackToggled;
    var payload = solidity.pack(['bytes1', 'address', 'uint8', 'uint32', 'address[]', 'address[]', 'uint256[]', 'uint256[]', 'bytes'], [hasFallbackToggled ? '0x83' : '0x03', recipient, settlementParams.hTokens.length, nonce, settlementParams.hTokens, settlementParams.tokens, settlementParams.amounts, settlementParams.deposits, params]);
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  };
  LzEndpoint.createRootRetrieveSettlementEndpointCalldata = function createRootRetrieveSettlementEndpointCalldata(srcChainId, srcAddress, _ref9) {
    var settlementNonce = _ref9.settlementNonce;
    var payload = solidity.pack(['bytes1', 'uint32'], [4, settlementNonce]);
    return BranchBridgeAgent.INTERFACE.encodeFunctionData('lzReceive', [srcChainId, srcAddress, 0, payload]);
  };
  return LzEndpoint;
}();
LzEndpoint.INTERFACE = /*#__PURE__*/new abi$7.Interface(LayerZeroEndpointABI.abi);

var abi$6 = [
	{
		type: "constructor",
		inputs: [
			{
				name: "_localChainId",
				type: "uint256",
				internalType: "uint256"
			},
			{
				name: "_localPortAddress",
				type: "address",
				internalType: "address"
			},
			{
				name: "_multicallAddress",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "nonpayable"
	},
	{
		type: "function",
		name: "bridgeAgentAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address payable"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "bridgeAgentExecutorAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "callOutAndBridge",
		inputs: [
			{
				name: "settlementOwner",
				type: "address",
				internalType: "address"
			},
			{
				name: "recipient",
				type: "address",
				internalType: "address"
			},
			{
				name: "outputToken",
				type: "address",
				internalType: "address"
			},
			{
				name: "amountOut",
				type: "uint256",
				internalType: "uint256"
			},
			{
				name: "depositOut",
				type: "uint256",
				internalType: "uint256"
			},
			{
				name: "dstChainId",
				type: "uint16",
				internalType: "uint16"
			},
			{
				name: "gasParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "callOutAndBridgeMultiple",
		inputs: [
			{
				name: "settlementOwner",
				type: "address",
				internalType: "address"
			},
			{
				name: "recipient",
				type: "address",
				internalType: "address"
			},
			{
				name: "outputTokens",
				type: "address[]",
				internalType: "address[]"
			},
			{
				name: "amountsOut",
				type: "uint256[]",
				internalType: "uint256[]"
			},
			{
				name: "depositsOut",
				type: "uint256[]",
				internalType: "uint256[]"
			},
			{
				name: "dstChainId",
				type: "uint16",
				internalType: "uint16"
			},
			{
				name: "gasParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "cancelOwnershipHandover",
		inputs: [
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "completeOwnershipHandover",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "execute",
		inputs: [
			{
				name: "encodedData",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeDepositMultiple",
		inputs: [
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "tuple",
				internalType: "struct DepositMultipleParams",
				components: [
					{
						name: "numberOfAssets",
						type: "uint8",
						internalType: "uint8"
					},
					{
						name: "depositNonce",
						type: "uint32",
						internalType: "uint32"
					},
					{
						name: "hTokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "tokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "amounts",
						type: "uint256[]",
						internalType: "uint256[]"
					},
					{
						name: "deposits",
						type: "uint256[]",
						internalType: "uint256[]"
					}
				]
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeDepositSingle",
		inputs: [
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "tuple",
				internalType: "struct DepositParams",
				components: [
					{
						name: "depositNonce",
						type: "uint32",
						internalType: "uint32"
					},
					{
						name: "hToken",
						type: "address",
						internalType: "address"
					},
					{
						name: "token",
						type: "address",
						internalType: "address"
					},
					{
						name: "amount",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "deposit",
						type: "uint256",
						internalType: "uint256"
					}
				]
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeRetrySettlement",
		inputs: [
			{
				name: "_owner",
				type: "address",
				internalType: "address"
			},
			{
				name: "_settlementNonce",
				type: "uint32",
				internalType: "uint32"
			},
			{
				name: "_recipient",
				type: "address",
				internalType: "address"
			},
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "_gParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			},
			{
				name: "_hasFallbackToggled",
				type: "bool",
				internalType: "bool"
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeSigned",
		inputs: [
			{
				name: "encodedData",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "userAccount",
				type: "address",
				internalType: "address"
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeSignedDepositMultiple",
		inputs: [
			{
				name: "encodedData",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "tuple",
				internalType: "struct DepositMultipleParams",
				components: [
					{
						name: "numberOfAssets",
						type: "uint8",
						internalType: "uint8"
					},
					{
						name: "depositNonce",
						type: "uint32",
						internalType: "uint32"
					},
					{
						name: "hTokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "tokens",
						type: "address[]",
						internalType: "address[]"
					},
					{
						name: "amounts",
						type: "uint256[]",
						internalType: "uint256[]"
					},
					{
						name: "deposits",
						type: "uint256[]",
						internalType: "uint256[]"
					}
				]
			},
			{
				name: "userAccount",
				type: "address",
				internalType: "address"
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "executeSignedDepositSingle",
		inputs: [
			{
				name: "encodedData",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "",
				type: "tuple",
				internalType: "struct DepositParams",
				components: [
					{
						name: "depositNonce",
						type: "uint32",
						internalType: "uint32"
					},
					{
						name: "hToken",
						type: "address",
						internalType: "address"
					},
					{
						name: "token",
						type: "address",
						internalType: "address"
					},
					{
						name: "amount",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "deposit",
						type: "uint256",
						internalType: "uint256"
					}
				]
			},
			{
				name: "userAccount",
				type: "address",
				internalType: "address"
			},
			{
				name: "",
				type: "uint16",
				internalType: "uint16"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "initialize",
		inputs: [
			{
				name: "_bridgeAgentAddress",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
		],
		stateMutability: "nonpayable"
	},
	{
		type: "function",
		name: "localChainId",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "uint256",
				internalType: "uint256"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "localPortAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "multicallAddress",
		inputs: [
		],
		outputs: [
			{
				name: "",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "owner",
		inputs: [
		],
		outputs: [
			{
				name: "result",
				type: "address",
				internalType: "address"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "ownershipHandoverExpiresAt",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
			{
				name: "result",
				type: "uint256",
				internalType: "uint256"
			}
		],
		stateMutability: "view"
	},
	{
		type: "function",
		name: "renounceOwnership",
		inputs: [
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "requestOwnershipHandover",
		inputs: [
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "retrySettlement",
		inputs: [
			{
				name: "_settlementNonce",
				type: "uint32",
				internalType: "uint32"
			},
			{
				name: "_recipient",
				type: "address",
				internalType: "address"
			},
			{
				name: "",
				type: "bytes",
				internalType: "bytes"
			},
			{
				name: "_gParams",
				type: "tuple",
				internalType: "struct GasParams",
				components: [
					{
						name: "gasLimit",
						type: "uint256",
						internalType: "uint256"
					},
					{
						name: "remoteBranchExecutionGas",
						type: "uint256",
						internalType: "uint256"
					}
				]
			},
			{
				name: "_hasFallbackToggled",
				type: "bool",
				internalType: "bool"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "function",
		name: "transferOwnership",
		inputs: [
			{
				name: "newOwner",
				type: "address",
				internalType: "address"
			}
		],
		outputs: [
		],
		stateMutability: "payable"
	},
	{
		type: "event",
		name: "OwnershipHandoverCanceled",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			}
		],
		anonymous: false
	},
	{
		type: "event",
		name: "OwnershipHandoverRequested",
		inputs: [
			{
				name: "pendingOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			}
		],
		anonymous: false
	},
	{
		type: "event",
		name: "OwnershipTransferred",
		inputs: [
			{
				name: "oldOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			},
			{
				name: "newOwner",
				type: "address",
				indexed: true,
				internalType: "address"
			}
		],
		anonymous: false
	},
	{
		type: "error",
		name: "AlreadyInitialized",
		inputs: [
		]
	},
	{
		type: "error",
		name: "NewOwnerIsZeroAddress",
		inputs: [
		]
	},
	{
		type: "error",
		name: "NoHandoverRequest",
		inputs: [
		]
	},
	{
		type: "error",
		name: "Unauthorized",
		inputs: [
		]
	},
	{
		type: "error",
		name: "UnrecognizedBridgeAgent",
		inputs: [
		]
	},
	{
		type: "error",
		name: "UnrecognizedBridgeAgentExecutor",
		inputs: [
		]
	},
	{
		type: "error",
		name: "UnrecognizedFunctionId",
		inputs: [
		]
	}
];
var bytecode$3 = {
	object: "0x60e060405260016000553480156200001657600080fd5b506040516200258938038062002589833981016040819052620000399162000172565b6001600160a01b038216620000955760405162461bcd60e51b815260206004820152601e60248201527f4c6f63616c20506f727420416464726573732063616e6e6f742062652030000060448201526064015b60405180910390fd5b6001600160a01b038116620000ed5760405162461bcd60e51b815260206004820152601d60248201527f4d756c746963616c6c20416464726573732063616e6e6f74206265203000000060448201526064016200008c565b60808390526001600160a01b0380831660a052811660c052620001103362000119565b505050620001b3565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146200016d57600080fd5b919050565b6000806000606084860312156200018857600080fd5b835192506200019a6020850162000155565b9150620001aa6040850162000155565b90509250925092565b60805160a05160c051612391620001f86000396000818161016c01526111f601526000818161025401528181610efc01526110690152600061028801526123916000f3fe6080604052600436106101405760003560e01c80635b056da5116100b6578063a094139e1161006f578063a094139e14610308578063c4d66de81461031b578063e69019321461033b578063f04e283e1461034e578063f2fde38b14610361578063fee81cf41461037457600080fd5b80635b056da514610276578063617ef5b7146102b8578063715018a6146102c65780637d0cfac8146102ce5780638c252780146102dc5780638da5cb5b146102ef57600080fd5b80633779da4f116101085780633779da4f146101e657806337dcb530146101f95780634a6a99d914610207578063546af9311461021a57806354d1f13d1461023a5780635abfaf6c1461024257600080fd5b806301510d3714610145578063081786041461015a5780631f74bed3146101ab57806324e73159146101be57806325692962146101de575b600080fd5b610158610153366004611398565b6103a7565b005b34801561016657600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101586101b936600461145e565b610419565b3480156101ca57600080fd5b5060015461018e906001600160a01b031681565b61015861048d565b6101586101f43660046115a5565b6104dc565b610158610153366004611639565b61015861021536600461179a565b610509565b34801561022657600080fd5b5060025461018e906001600160a01b031681565b61015861057f565b34801561024e57600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561028257600080fd5b506102aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101a2565b61015861014036600461184d565b6101586105bb565b6101586101403660046118c8565b6101586102ea366004611924565b6105cf565b3480156102fb57600080fd5b50638b78c6d8195461018e565b61015861031636600461197a565b6107a3565b34801561032757600080fd5b506101586103363660046119d6565b610800565b6101586103493660046119fa565b610906565b61015861035c3660046119d6565b6109a7565b61015861036f3660046119d6565b6109e7565b34801561038057600080fd5b506102aa61038f3660046119d6565b63389a75e1600c908152600091909152602090205490565b6002546001600160a01b031633146103d25760405163feb5180160e01b815260040160405180910390fd5b6000546001146103fd5760405162461bcd60e51b81526004016103f490611aaa565b60405180910390fd5b600260005561040d858584610a0e565b50506001600055505050565b600154604051637954549160e01b81526001600160a01b039091169063795454919034906104539033908b908b9089908990600401611ace565b6000604051808303818588803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b5050505050505050505050565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6104f16001600160a01b038616333087610e91565b61050087878787878787610ee5565b50505050505050565b60005b855181101561056f57610567333087848151811061052c5761052c611b22565b602002602001015189858151811061054657610546611b22565b60200260200101516001600160a01b0316610e91909392919063ffffffff16565b60010161050c565b5061050087878787878787611012565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6105c3611155565b6105cd6000611170565b565b6000546001146105f15760405162461bcd60e51b81526004016103f490611aaa565b60026000819055546001600160a01b031633146106215760405163feb5180160e01b815260040160405180910390fd5b60008383600081811061063657610636611b22565b909101356001600160f81b031916915050600160f81b81900361069057600061066a6106658560018189611b38565b6111ae565b80602001905181019061067d9190611cc6565b9050610688816111f0565b505050610798565b6001600160f81b03198116600160f91b0361070c5760008080806106ba610665886001818c611b38565b8060200190518101906106cd9190611d95565b93509350935093506106de846111f0565b5050610703836000015184602001518560400151866060015187608001518787610ee5565b50505050610798565b6001600160f81b03198116600360f81b0361077f576000808080610736610665886001818c611b38565b8060200190518101906107499190611f7c565b935093509350935061075a846111f0565b5050610703836000015184602001518560400151866060015187608001518787611012565b6040516348d3a3f760e01b815260040160405180910390fd5b505060016000555050565b6000546001146107c55760405162461bcd60e51b81526004016103f490611aaa565b60026000819055546001600160a01b031633146107f55760405163feb5180160e01b815260040160405180910390fd5b610798848484610a0e565b610808611155565b6001600160a01b03811661085e5760405162461bcd60e51b815260206004820181905260248201527f427269646765204167656e7420416464726573732063616e6e6f74206265203060448201526064016103f4565b6108666105bb565b600180546001600160a01b0319166001600160a01b0383169081179091556040805163546af93160e01b8152905163546af931916004808201926020929091908290030181865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190611ff8565b600280546001600160a01b0319166001600160a01b039290921691909117905550565b6001546001600160a01b0316331461093157604051630a83747f60e31b815260040160405180910390fd5b600154604051637954549160e01b81526001600160a01b0390911690637954549190349061096b908c908c908c908a908a90600401611ace565b6000604051808303818588803b15801561098457600080fd5b505af1158015610998573d6000803e3d6000fd5b50505050505050505050505050565b6109af611155565b63389a75e1600c52806000526020600c2080544211156109d757636f5e88186000526004601cfd5b600090556109e481611170565b50565b6109ef611155565b8060601b610a0557637448fbae6000526004601cfd5b6109e481611170565b600083836000818110610a2357610a23611b22565b909101356001600160f81b031916915050600160f81b819003610ae2576000610a526106658560018189611b38565b806020019051810190610a659190611cc6565b6040516324fca5a560e21b81529091506001600160a01b038416906393f2969490610a9490849060040161205d565b6000604051808303816000875af1158015610ab3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610adb919081019061213e565b5050610e8b565b6001600160f81b03198116600160f91b03610c61576000808080610b0c610665886001818c611b38565b806020019051810190610b1f9190611d95565b9350935093509350856001600160a01b03166393f29694856040518263ffffffff1660e01b8152600401610b53919061205d565b6000604051808303816000875af1158015610b72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b9a919081019061213e565b50600160ff1b836060015103610bc8576040830151610bc2906001600160a01b031687611291565b60608401525b604080840151606085015191516350edcbc160e11b81526001600160a01b039182166004820152602481019290925287169063a1db978290604401600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b50505050610c58836000015184602001518560400151866060015187608001518787610ee5565b50505050610e8b565b6001600160f81b03198116600360f81b0361077f576000808080610c8b610665886001818c611b38565b806020019051810190610c9e9190611f7c565b9350935093509350856001600160a01b03166393f29694856040518263ffffffff1660e01b8152600401610cd2919061205d565b6000604051808303816000875af1158015610cf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d19919081019061213e565b5060005b836040015151811015610e6757600160ff1b84606001518281518110610d4557610d45611b22565b602002602001015103610dae57610d8b8785604001518381518110610d6c57610d6c611b22565b60200260200101516001600160a01b031661129190919063ffffffff16565b84606001518281518110610da157610da1611b22565b6020026020010181815250505b866001600160a01b031663a1db978285604001518381518110610dd357610dd3611b22565b602002602001015186606001518481518110610df157610df1611b22565b60200260200101516040518363ffffffff1660e01b8152600401610e2a9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b50505050806001019050610d1d565b50610c58836000015184602001518560400151866060015187608001518787611012565b50505050565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af13d156001600051141716610ed757637939f4246000526004601cfd5b600060605260405250505050565b6000610ef18486612172565b1115610f3657610f367f0000000000000000000000000000000000000000000000000000000000000000610f258587612172565b6001600160a01b03881691906112bd565b600154604080516060810182526001600160a01b0388811682526020808301898152838501898152945163fe2beab960e01b81528d841660048201528c8416602482015261ffff89166044820152610140606482015260006101448201819052945184166084820152905160a4820152935160c4850152855160e48501528501516101048401526101248301919091529091169063fe2beab9903490610164015b6000604051808303818588803b158015610ff057600080fd5b505af1158015611004573d6000803e3d6000fd5b505050505050505050505050565b60005b855181101561110057600084828151811061103257611032611b22565b602002602001015186838151811061104c5761104c611b22565b602002602001015161105e9190612172565b11156110f8576110f87f000000000000000000000000000000000000000000000000000000000000000085838151811061109a5761109a611b22565b60200260200101518784815181106110b4576110b4611b22565b60200260200101516110c69190612172565b8884815181106110d8576110d8611b22565b60200260200101516001600160a01b03166112bd9092919063ffffffff16565b600101611015565b5060015460408051606081018252878152602081018790528082018690529051637f6399b560e11b81526001600160a01b039092169163fec7336a913491610fd7918c918c91899189906000906004016121ce565b638b78c6d8195433146105cd576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b92915050565b600060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663252dba42846040518263ffffffff1660e01b815260040161124091906122c0565b6000604051808303816000875af115801561125f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112879190810190612315565b9094909350915050565b6000816014526370a0823160601b60005260208060246010865afa601f3d111660205102905092915050565b816014528060345263095ea7b360601b60005260206000604460106000875af13d1560016000511417166112f957633e3f8f736000526004601cfd5b6000603452505050565b60008083601f84011261131557600080fd5b5081356001600160401b0381111561132c57600080fd5b60208301915083602082850101111561134457600080fd5b9250929050565b600060c0828403121561135d57600080fd5b50919050565b6001600160a01b03811681146109e457600080fd5b61ffff811681146109e457600080fd5b803561139381611378565b919050565b6000806000806000608086880312156113b057600080fd5b85356001600160401b03808211156113c757600080fd5b6113d389838a01611303565b909750955060208801359150808211156113ec57600080fd5b506113f98882890161134b565b935050604086013561140a81611363565b9150606086013561141a81611378565b809150509295509295909350565b803563ffffffff8116811461139357600080fd5b60006040828403121561135d57600080fd5b8035801515811461139357600080fd5b60008060008060008060c0878903121561147757600080fd5b61148087611428565b9550602087013561149081611363565b945060408701356001600160401b038111156114ab57600080fd5b6114b789828a01611303565b90955093506114cb9050886060890161143c565b91506114d960a0880161144e565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561151d5761151d6114e5565b60405290565b60405160a081016001600160401b038111828210171561151d5761151d6114e5565b604051601f8201601f191681016001600160401b038111828210171561156d5761156d6114e5565b604052919050565b60006040828403121561158757600080fd5b61158f6114fb565b9050813581526020820135602082015292915050565b6000806000806000806000610100888a0312156115c157600080fd5b87356115cc81611363565b965060208801356115dc81611363565b955060408801356115ec81611363565b9450606088013593506080880135925060a088013561160a81611378565b91506116198960c08a01611575565b905092959891949750929550565b600060a0828403121561135d57600080fd5b6000806000806000610100868803121561165257600080fd5b85356001600160401b0381111561166857600080fd5b61167488828901611303565b909650945061168890508760208801611627565b925060c086013561169881611363565b915060e086013561141a81611378565b60006001600160401b038211156116c1576116c16114e5565b5060051b60200190565b600082601f8301126116dc57600080fd5b813560206116f16116ec836116a8565b611545565b82815260059290921b8401810191818101908684111561171057600080fd5b8286015b8481101561173457803561172781611363565b8352918301918301611714565b509695505050505050565b600082601f83011261175057600080fd5b813560206117606116ec836116a8565b82815260059290921b8401810191818101908684111561177f57600080fd5b8286015b848110156117345780358352918301918301611783565b6000806000806000806000610100888a0312156117b657600080fd5b87356117c181611363565b965060208801356117d181611363565b955060408801356001600160401b03808211156117ed57600080fd5b6117f98b838c016116cb565b965060608a013591508082111561180f57600080fd5b61181b8b838c0161173f565b955060808a013591508082111561183157600080fd5b5061183e8a828b0161173f565b93505061160a60a08901611388565b6000806000806060858703121561186357600080fd5b84356001600160401b038082111561187a57600080fd5b61188688838901611303565b9096509450602087013591508082111561189f57600080fd5b506118ac8782880161134b565b92505060408501356118bd81611378565b939692955090935050565b60008060008060e085870312156118de57600080fd5b84356001600160401b038111156118f457600080fd5b61190087828801611303565b909550935061191490508660208701611627565b915060c08501356118bd81611378565b60008060006040848603121561193957600080fd5b83356001600160401b0381111561194f57600080fd5b61195b86828701611303565b909450925050602084013561196f81611378565b809150509250925092565b6000806000806060858703121561199057600080fd5b84356001600160401b038111156119a657600080fd5b6119b287828801611303565b90955093505060208501356119c681611363565b915060408501356118bd81611378565b6000602082840312156119e857600080fd5b81356119f381611363565b9392505050565b600080600080600080600080610100898b031215611a1757600080fd5b8835611a2281611363565b9750611a3060208a01611428565b96506040890135611a4081611363565b955060608901356001600160401b03811115611a5b57600080fd5b611a678b828c01611303565b9096509450611a7b90508a60808b0161143c565b9250611a8960c08a0161144e565b915060e0890135611a9981611378565b809150509295985092959890939650565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b6001600160a01b03958616815263ffffffff9490941660208086019190915292909416604084015260e06060840181905260009084015280356080840152013560a082015290151560c08201526101000190565b634e487b7160e01b600052603260045260246000fd5b60008085851115611b4857600080fd5b83861115611b5557600080fd5b5050820193919092039150565b805161139381611363565b60005b83811015611b88578181015183820152602001611b70565b50506000910152565b600082601f830112611ba257600080fd5b81516001600160401b03811115611bbb57611bbb6114e5565b611bce601f8201601f1916602001611545565b818152846020838601011115611be357600080fd5b611bf4826020830160208701611b6d565b949350505050565b600082601f830112611c0d57600080fd5b81516020611c1d6116ec836116a8565b82815260059290921b84018101918181019086841115611c3c57600080fd5b8286015b848110156117345780516001600160401b0380821115611c605760008081fd5b908801906040828b03601f1901811315611c7a5760008081fd5b611c826114fb565b87840151611c8f81611363565b8152908301519082821115611ca45760008081fd5b611cb28c8984870101611b91565b818901528652505050918301918301611c40565b600060208284031215611cd857600080fd5b81516001600160401b03811115611cee57600080fd5b611bf484828501611bfc565b600060a08284031215611d0c57600080fd5b611d14611523565b90508151611d2181611363565b81526020820151611d3181611363565b60208201526040820151611d4481611363565b80604083015250606082015160608201526080820151608082015292915050565b600060408284031215611d7757600080fd5b611d7f6114fb565b9050815181526020820151602082015292915050565b6000806000806101208587031215611dac57600080fd5b84516001600160401b03811115611dc257600080fd5b611dce87828801611bfc565b945050611dde8660208701611cfa565b925060c0850151611dee81611378565b9150611dfd8660e08701611d65565b905092959194509250565b600082601f830112611e1957600080fd5b81516020611e296116ec836116a8565b82815260059290921b84018101918181019086841115611e4857600080fd5b8286015b84811015611734578051611e5f81611363565b8352918301918301611e4c565b600082601f830112611e7d57600080fd5b81516020611e8d6116ec836116a8565b82815260059290921b84018101918181019086841115611eac57600080fd5b8286015b848110156117345780518352918301918301611eb0565b600060a08284031215611ed957600080fd5b611ee1611523565b9050611eec82611b62565b8152611efa60208301611b62565b602082015260408201516001600160401b0380821115611f1957600080fd5b611f2585838601611e08565b60408401526060840151915080821115611f3e57600080fd5b611f4a85838601611e6c565b60608401526080840151915080821115611f6357600080fd5b50611f7084828501611e6c565b60808301525092915050565b60008060008060a08587031215611f9257600080fd5b84516001600160401b0380821115611fa957600080fd5b611fb588838901611bfc565b95506020870151915080821115611fcb57600080fd5b50611fd887828801611ec7565b9350506040850151611fe981611378565b9150611dfd8660608701611d65565b60006020828403121561200a57600080fd5b81516119f381611363565b60018060a01b03815116825260006020820151604060208501528051806040860152612048816060870160208501611b6d565b601f01601f1916939093016060019392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156120b257603f198886030184526120a0858351612015565b94509285019290850190600101612084565b5092979650505050505050565b600082601f8301126120d057600080fd5b815160206120e06116ec836116a8565b82815260059290921b840181019181810190868411156120ff57600080fd5b8286015b848110156117345780516001600160401b038111156121225760008081fd5b6121308986838b0101611b91565b845250918301918301612103565b60006020828403121561215057600080fd5b81516001600160401b0381111561216657600080fd5b611bf4848285016120bf565b818103818111156111ea57634e487b7160e01b600052601160045260246000fd5b600081518084526020808501945080840160005b838110156121c3578151875295820195908201906001016121a7565b509495945050505050565b600061010060018060a01b03808a1684526020818a168186015261ffff8916604086015282606086015260008386015261012092508260808601526101808501885160608588015281945080518083526101a0880195508382019250600091505b808210156122515782518516865294830194918301916001919091019061222f565b50505087015161011f1985840381016101408701529091506122738383612193565b9250604088015191508085840301610160860152506122928282612193565b865160a0860152602087015160c086015292506122ad915050565b82151560e0830152979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156120b257603f19888603018452612303858351612015565b945092850192908501906001016122e7565b6000806040838503121561232857600080fd5b8251915060208301516001600160401b0381111561234557600080fd5b612351858286016120bf565b915050925092905056fea2646970667358221220db2401b258ab2e42851d99c949ab54f413893886e07af4fa19fbd14d72012b6f64736f6c63430008130033",
	sourceMap: "2445:18462:88:-:0;;;454:1:77;429:26;;4216:432:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4323:31:88;;4315:74;;;;-1:-1:-1;;;4315:74:88;;757:2:178;4315:74:88;;;739:21:178;796:2;776:18;;;769:30;835:32;815:18;;;808:60;885:18;;4315:74:88;;;;;;;;;-1:-1:-1;;;;;4407:31:88;;4399:73;;;;-1:-1:-1;;;4399:73:88;;1116:2:178;4399:73:88;;;1098:21:178;1155:2;1135:18;;;1128:30;1194:31;1174:18;;;1167:59;1243:18;;4399:73:88;914:353:178;4399:73:88;4483:28;;;;-1:-1:-1;;;;;4521:36:88;;;;;4567;;;;4613:28;4630:10;4613:16;:28::i;:::-;4216:432;;;2445:18462;;4883:1190:30;-1:-1:-1;;;;;5793:26:30;-1:-1:-1;;5876:29:30;;;5793:26;6031:1;5991:38;6031:1;;5980:63;4883:1190;:::o;14:177:178:-;93:13;;-1:-1:-1;;;;;135:31:178;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:354::-;284:6;292;300;353:2;341:9;332:7;328:23;324:32;321:52;;;369:1;366;359:12;321:52;398:9;392:16;382:26;;427:49;472:2;461:9;457:18;427:49;:::i;:::-;417:59;;495:49;540:2;529:9;525:18;495:49;:::i;:::-;485:59;;196:354;;;;;:::o;914:353::-;2445:18462:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
	linkReferences: {
	}
};
var deployedBytecode$2 = {
	object: "0x6080604052600436106101405760003560e01c80635b056da5116100b6578063a094139e1161006f578063a094139e14610308578063c4d66de81461031b578063e69019321461033b578063f04e283e1461034e578063f2fde38b14610361578063fee81cf41461037457600080fd5b80635b056da514610276578063617ef5b7146102b8578063715018a6146102c65780637d0cfac8146102ce5780638c252780146102dc5780638da5cb5b146102ef57600080fd5b80633779da4f116101085780633779da4f146101e657806337dcb530146101f95780634a6a99d914610207578063546af9311461021a57806354d1f13d1461023a5780635abfaf6c1461024257600080fd5b806301510d3714610145578063081786041461015a5780631f74bed3146101ab57806324e73159146101be57806325692962146101de575b600080fd5b610158610153366004611398565b6103a7565b005b34801561016657600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101586101b936600461145e565b610419565b3480156101ca57600080fd5b5060015461018e906001600160a01b031681565b61015861048d565b6101586101f43660046115a5565b6104dc565b610158610153366004611639565b61015861021536600461179a565b610509565b34801561022657600080fd5b5060025461018e906001600160a01b031681565b61015861057f565b34801561024e57600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561028257600080fd5b506102aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101a2565b61015861014036600461184d565b6101586105bb565b6101586101403660046118c8565b6101586102ea366004611924565b6105cf565b3480156102fb57600080fd5b50638b78c6d8195461018e565b61015861031636600461197a565b6107a3565b34801561032757600080fd5b506101586103363660046119d6565b610800565b6101586103493660046119fa565b610906565b61015861035c3660046119d6565b6109a7565b61015861036f3660046119d6565b6109e7565b34801561038057600080fd5b506102aa61038f3660046119d6565b63389a75e1600c908152600091909152602090205490565b6002546001600160a01b031633146103d25760405163feb5180160e01b815260040160405180910390fd5b6000546001146103fd5760405162461bcd60e51b81526004016103f490611aaa565b60405180910390fd5b600260005561040d858584610a0e565b50506001600055505050565b600154604051637954549160e01b81526001600160a01b039091169063795454919034906104539033908b908b9089908990600401611ace565b6000604051808303818588803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b5050505050505050505050565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6104f16001600160a01b038616333087610e91565b61050087878787878787610ee5565b50505050505050565b60005b855181101561056f57610567333087848151811061052c5761052c611b22565b602002602001015189858151811061054657610546611b22565b60200260200101516001600160a01b0316610e91909392919063ffffffff16565b60010161050c565b5061050087878787878787611012565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6105c3611155565b6105cd6000611170565b565b6000546001146105f15760405162461bcd60e51b81526004016103f490611aaa565b60026000819055546001600160a01b031633146106215760405163feb5180160e01b815260040160405180910390fd5b60008383600081811061063657610636611b22565b909101356001600160f81b031916915050600160f81b81900361069057600061066a6106658560018189611b38565b6111ae565b80602001905181019061067d9190611cc6565b9050610688816111f0565b505050610798565b6001600160f81b03198116600160f91b0361070c5760008080806106ba610665886001818c611b38565b8060200190518101906106cd9190611d95565b93509350935093506106de846111f0565b5050610703836000015184602001518560400151866060015187608001518787610ee5565b50505050610798565b6001600160f81b03198116600360f81b0361077f576000808080610736610665886001818c611b38565b8060200190518101906107499190611f7c565b935093509350935061075a846111f0565b5050610703836000015184602001518560400151866060015187608001518787611012565b6040516348d3a3f760e01b815260040160405180910390fd5b505060016000555050565b6000546001146107c55760405162461bcd60e51b81526004016103f490611aaa565b60026000819055546001600160a01b031633146107f55760405163feb5180160e01b815260040160405180910390fd5b610798848484610a0e565b610808611155565b6001600160a01b03811661085e5760405162461bcd60e51b815260206004820181905260248201527f427269646765204167656e7420416464726573732063616e6e6f74206265203060448201526064016103f4565b6108666105bb565b600180546001600160a01b0319166001600160a01b0383169081179091556040805163546af93160e01b8152905163546af931916004808201926020929091908290030181865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190611ff8565b600280546001600160a01b0319166001600160a01b039290921691909117905550565b6001546001600160a01b0316331461093157604051630a83747f60e31b815260040160405180910390fd5b600154604051637954549160e01b81526001600160a01b0390911690637954549190349061096b908c908c908c908a908a90600401611ace565b6000604051808303818588803b15801561098457600080fd5b505af1158015610998573d6000803e3d6000fd5b50505050505050505050505050565b6109af611155565b63389a75e1600c52806000526020600c2080544211156109d757636f5e88186000526004601cfd5b600090556109e481611170565b50565b6109ef611155565b8060601b610a0557637448fbae6000526004601cfd5b6109e481611170565b600083836000818110610a2357610a23611b22565b909101356001600160f81b031916915050600160f81b819003610ae2576000610a526106658560018189611b38565b806020019051810190610a659190611cc6565b6040516324fca5a560e21b81529091506001600160a01b038416906393f2969490610a9490849060040161205d565b6000604051808303816000875af1158015610ab3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610adb919081019061213e565b5050610e8b565b6001600160f81b03198116600160f91b03610c61576000808080610b0c610665886001818c611b38565b806020019051810190610b1f9190611d95565b9350935093509350856001600160a01b03166393f29694856040518263ffffffff1660e01b8152600401610b53919061205d565b6000604051808303816000875af1158015610b72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b9a919081019061213e565b50600160ff1b836060015103610bc8576040830151610bc2906001600160a01b031687611291565b60608401525b604080840151606085015191516350edcbc160e11b81526001600160a01b039182166004820152602481019290925287169063a1db978290604401600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b50505050610c58836000015184602001518560400151866060015187608001518787610ee5565b50505050610e8b565b6001600160f81b03198116600360f81b0361077f576000808080610c8b610665886001818c611b38565b806020019051810190610c9e9190611f7c565b9350935093509350856001600160a01b03166393f29694856040518263ffffffff1660e01b8152600401610cd2919061205d565b6000604051808303816000875af1158015610cf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d19919081019061213e565b5060005b836040015151811015610e6757600160ff1b84606001518281518110610d4557610d45611b22565b602002602001015103610dae57610d8b8785604001518381518110610d6c57610d6c611b22565b60200260200101516001600160a01b031661129190919063ffffffff16565b84606001518281518110610da157610da1611b22565b6020026020010181815250505b866001600160a01b031663a1db978285604001518381518110610dd357610dd3611b22565b602002602001015186606001518481518110610df157610df1611b22565b60200260200101516040518363ffffffff1660e01b8152600401610e2a9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b50505050806001019050610d1d565b50610c58836000015184602001518560400151866060015187608001518787611012565b50505050565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af13d156001600051141716610ed757637939f4246000526004601cfd5b600060605260405250505050565b6000610ef18486612172565b1115610f3657610f367f0000000000000000000000000000000000000000000000000000000000000000610f258587612172565b6001600160a01b03881691906112bd565b600154604080516060810182526001600160a01b0388811682526020808301898152838501898152945163fe2beab960e01b81528d841660048201528c8416602482015261ffff89166044820152610140606482015260006101448201819052945184166084820152905160a4820152935160c4850152855160e48501528501516101048401526101248301919091529091169063fe2beab9903490610164015b6000604051808303818588803b158015610ff057600080fd5b505af1158015611004573d6000803e3d6000fd5b505050505050505050505050565b60005b855181101561110057600084828151811061103257611032611b22565b602002602001015186838151811061104c5761104c611b22565b602002602001015161105e9190612172565b11156110f8576110f87f000000000000000000000000000000000000000000000000000000000000000085838151811061109a5761109a611b22565b60200260200101518784815181106110b4576110b4611b22565b60200260200101516110c69190612172565b8884815181106110d8576110d8611b22565b60200260200101516001600160a01b03166112bd9092919063ffffffff16565b600101611015565b5060015460408051606081018252878152602081018790528082018690529051637f6399b560e11b81526001600160a01b039092169163fec7336a913491610fd7918c918c91899189906000906004016121ce565b638b78c6d8195433146105cd576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b92915050565b600060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663252dba42846040518263ffffffff1660e01b815260040161124091906122c0565b6000604051808303816000875af115801561125f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112879190810190612315565b9094909350915050565b6000816014526370a0823160601b60005260208060246010865afa601f3d111660205102905092915050565b816014528060345263095ea7b360601b60005260206000604460106000875af13d1560016000511417166112f957633e3f8f736000526004601cfd5b6000603452505050565b60008083601f84011261131557600080fd5b5081356001600160401b0381111561132c57600080fd5b60208301915083602082850101111561134457600080fd5b9250929050565b600060c0828403121561135d57600080fd5b50919050565b6001600160a01b03811681146109e457600080fd5b61ffff811681146109e457600080fd5b803561139381611378565b919050565b6000806000806000608086880312156113b057600080fd5b85356001600160401b03808211156113c757600080fd5b6113d389838a01611303565b909750955060208801359150808211156113ec57600080fd5b506113f98882890161134b565b935050604086013561140a81611363565b9150606086013561141a81611378565b809150509295509295909350565b803563ffffffff8116811461139357600080fd5b60006040828403121561135d57600080fd5b8035801515811461139357600080fd5b60008060008060008060c0878903121561147757600080fd5b61148087611428565b9550602087013561149081611363565b945060408701356001600160401b038111156114ab57600080fd5b6114b789828a01611303565b90955093506114cb9050886060890161143c565b91506114d960a0880161144e565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561151d5761151d6114e5565b60405290565b60405160a081016001600160401b038111828210171561151d5761151d6114e5565b604051601f8201601f191681016001600160401b038111828210171561156d5761156d6114e5565b604052919050565b60006040828403121561158757600080fd5b61158f6114fb565b9050813581526020820135602082015292915050565b6000806000806000806000610100888a0312156115c157600080fd5b87356115cc81611363565b965060208801356115dc81611363565b955060408801356115ec81611363565b9450606088013593506080880135925060a088013561160a81611378565b91506116198960c08a01611575565b905092959891949750929550565b600060a0828403121561135d57600080fd5b6000806000806000610100868803121561165257600080fd5b85356001600160401b0381111561166857600080fd5b61167488828901611303565b909650945061168890508760208801611627565b925060c086013561169881611363565b915060e086013561141a81611378565b60006001600160401b038211156116c1576116c16114e5565b5060051b60200190565b600082601f8301126116dc57600080fd5b813560206116f16116ec836116a8565b611545565b82815260059290921b8401810191818101908684111561171057600080fd5b8286015b8481101561173457803561172781611363565b8352918301918301611714565b509695505050505050565b600082601f83011261175057600080fd5b813560206117606116ec836116a8565b82815260059290921b8401810191818101908684111561177f57600080fd5b8286015b848110156117345780358352918301918301611783565b6000806000806000806000610100888a0312156117b657600080fd5b87356117c181611363565b965060208801356117d181611363565b955060408801356001600160401b03808211156117ed57600080fd5b6117f98b838c016116cb565b965060608a013591508082111561180f57600080fd5b61181b8b838c0161173f565b955060808a013591508082111561183157600080fd5b5061183e8a828b0161173f565b93505061160a60a08901611388565b6000806000806060858703121561186357600080fd5b84356001600160401b038082111561187a57600080fd5b61188688838901611303565b9096509450602087013591508082111561189f57600080fd5b506118ac8782880161134b565b92505060408501356118bd81611378565b939692955090935050565b60008060008060e085870312156118de57600080fd5b84356001600160401b038111156118f457600080fd5b61190087828801611303565b909550935061191490508660208701611627565b915060c08501356118bd81611378565b60008060006040848603121561193957600080fd5b83356001600160401b0381111561194f57600080fd5b61195b86828701611303565b909450925050602084013561196f81611378565b809150509250925092565b6000806000806060858703121561199057600080fd5b84356001600160401b038111156119a657600080fd5b6119b287828801611303565b90955093505060208501356119c681611363565b915060408501356118bd81611378565b6000602082840312156119e857600080fd5b81356119f381611363565b9392505050565b600080600080600080600080610100898b031215611a1757600080fd5b8835611a2281611363565b9750611a3060208a01611428565b96506040890135611a4081611363565b955060608901356001600160401b03811115611a5b57600080fd5b611a678b828c01611303565b9096509450611a7b90508a60808b0161143c565b9250611a8960c08a0161144e565b915060e0890135611a9981611378565b809150509295985092959890939650565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b6001600160a01b03958616815263ffffffff9490941660208086019190915292909416604084015260e06060840181905260009084015280356080840152013560a082015290151560c08201526101000190565b634e487b7160e01b600052603260045260246000fd5b60008085851115611b4857600080fd5b83861115611b5557600080fd5b5050820193919092039150565b805161139381611363565b60005b83811015611b88578181015183820152602001611b70565b50506000910152565b600082601f830112611ba257600080fd5b81516001600160401b03811115611bbb57611bbb6114e5565b611bce601f8201601f1916602001611545565b818152846020838601011115611be357600080fd5b611bf4826020830160208701611b6d565b949350505050565b600082601f830112611c0d57600080fd5b81516020611c1d6116ec836116a8565b82815260059290921b84018101918181019086841115611c3c57600080fd5b8286015b848110156117345780516001600160401b0380821115611c605760008081fd5b908801906040828b03601f1901811315611c7a5760008081fd5b611c826114fb565b87840151611c8f81611363565b8152908301519082821115611ca45760008081fd5b611cb28c8984870101611b91565b818901528652505050918301918301611c40565b600060208284031215611cd857600080fd5b81516001600160401b03811115611cee57600080fd5b611bf484828501611bfc565b600060a08284031215611d0c57600080fd5b611d14611523565b90508151611d2181611363565b81526020820151611d3181611363565b60208201526040820151611d4481611363565b80604083015250606082015160608201526080820151608082015292915050565b600060408284031215611d7757600080fd5b611d7f6114fb565b9050815181526020820151602082015292915050565b6000806000806101208587031215611dac57600080fd5b84516001600160401b03811115611dc257600080fd5b611dce87828801611bfc565b945050611dde8660208701611cfa565b925060c0850151611dee81611378565b9150611dfd8660e08701611d65565b905092959194509250565b600082601f830112611e1957600080fd5b81516020611e296116ec836116a8565b82815260059290921b84018101918181019086841115611e4857600080fd5b8286015b84811015611734578051611e5f81611363565b8352918301918301611e4c565b600082601f830112611e7d57600080fd5b81516020611e8d6116ec836116a8565b82815260059290921b84018101918181019086841115611eac57600080fd5b8286015b848110156117345780518352918301918301611eb0565b600060a08284031215611ed957600080fd5b611ee1611523565b9050611eec82611b62565b8152611efa60208301611b62565b602082015260408201516001600160401b0380821115611f1957600080fd5b611f2585838601611e08565b60408401526060840151915080821115611f3e57600080fd5b611f4a85838601611e6c565b60608401526080840151915080821115611f6357600080fd5b50611f7084828501611e6c565b60808301525092915050565b60008060008060a08587031215611f9257600080fd5b84516001600160401b0380821115611fa957600080fd5b611fb588838901611bfc565b95506020870151915080821115611fcb57600080fd5b50611fd887828801611ec7565b9350506040850151611fe981611378565b9150611dfd8660608701611d65565b60006020828403121561200a57600080fd5b81516119f381611363565b60018060a01b03815116825260006020820151604060208501528051806040860152612048816060870160208501611b6d565b601f01601f1916939093016060019392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156120b257603f198886030184526120a0858351612015565b94509285019290850190600101612084565b5092979650505050505050565b600082601f8301126120d057600080fd5b815160206120e06116ec836116a8565b82815260059290921b840181019181810190868411156120ff57600080fd5b8286015b848110156117345780516001600160401b038111156121225760008081fd5b6121308986838b0101611b91565b845250918301918301612103565b60006020828403121561215057600080fd5b81516001600160401b0381111561216657600080fd5b611bf4848285016120bf565b818103818111156111ea57634e487b7160e01b600052601160045260246000fd5b600081518084526020808501945080840160005b838110156121c3578151875295820195908201906001016121a7565b509495945050505050565b600061010060018060a01b03808a1684526020818a168186015261ffff8916604086015282606086015260008386015261012092508260808601526101808501885160608588015281945080518083526101a0880195508382019250600091505b808210156122515782518516865294830194918301916001919091019061222f565b50505087015161011f1985840381016101408701529091506122738383612193565b9250604088015191508085840301610160860152506122928282612193565b865160a0860152602087015160c086015292506122ad915050565b82151560e0830152979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156120b257603f19888603018452612303858351612015565b945092850192908501906001016122e7565b6000806040838503121561232857600080fd5b8251915060208301516001600160401b0381111561234557600080fd5b612351858286016120bf565b915050925092905056fea2646970667358221220db2401b258ab2e42851d99c949ab54f413893886e07af4fa19fbd14d72012b6f64736f6c63430008130033",
	sourceMap: "2445:18462:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12601:278;;;;;;:::i;:::-;;:::i;:::-;;3516:41;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2073:32:178;;;2055:51;;2043:2;2028:18;3516:41:88;;;;;;;;7765:541;;;;;;:::i;:::-;;:::i;3642:41::-;;;;;;;;;;-1:-1:-1;3642:41:88;;;;-1:-1:-1;;;;;3642:41:88;;;9021:617:30;;;:::i;6069:463:88:-;;;;;;:::i;:::-;;:::i;12288:274::-;;;;;;:::i;7055:672::-;;;;;;:::i;:::-;;:::i;3737:41::-;;;;;;;;;;-1:-1:-1;3737:41:88;;;;-1:-1:-1;;;;;3737:41:88;;;9720:456:30;;;:::i;3422:41:88:-;;;;;;;;;;;;;;;3294:37;;;;;;;;;;;;;;;;;;9850:25:178;;;9838:2;9823:18;3294:37:88;9704:177:178;11843:130:88;;;;;;:::i;8762:100:30:-;;;:::i;11677:129:88:-;;;;;;:::i;9392:2248::-;;;;;;:::i;:::-;;:::i;11408:182:30:-;;;;;;;;;;-1:-1:-1;;;11556:18:30;11408:182;;12012:237:88;;;;;;:::i;:::-;;:::i;4980:353::-;;;;;;;;;;-1:-1:-1;4980:353:88;;;;;:::i;:::-;;:::i;8532:602::-;;;;;;:::i;:::-;;:::i;10363:708:30:-;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;11693:435::-;;;;;;;;;;-1:-1:-1;11693:435:30;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;12601:278:88;20618:26;;-1:-1:-1;;;;;20618:26:88;20604:10;:40;20600:86;;20653:33;;-1:-1:-1;;;20653:33:88;;;;;;;;;;;20600:86;512:6:77::1;;522:1;512:11;504:34;;;;-1:-1:-1::0;;;504:34:77::1;;;;;;;:::i;:::-;;;;;;;;;558:1;549:6;:10:::0;12832:40:88::2;12847:11:::0;;12860;12832:14:::2;:40::i;:::-;-1:-1:-1::0;;591:1:77::1;582:6;:10:::0;-1:-1:-1;;;12601:278:88:o;7765:541::-;8147:18;;8134:165;;-1:-1:-1;;;8134:165:88;;-1:-1:-1;;;;;8147:18:88;;;;8134:48;;8190:9;;8134:165;;8214:10;;8226:16;;8244:10;;8260:8;;8270:19;;8134:165;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7765:541;;;;;;:::o;9021:617:30:-;9114:15;7972:9;-1:-1:-1;;;;;9132:46:30;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;6069:463:88:-;6343:66;-1:-1:-1;;;;;6343:28:88;;6372:10;6392:4;6399:9;6343:28;:66::i;:::-;6420:105;6439:15;6456:9;6467:11;6480:9;6491:10;6503;6515:9;6420:18;:105::i;:::-;6069:463;;;;;;;:::o;7055:672::-;7372:9;7367:205;7391:12;:19;7387:1;:23;7367:205;;;7427:74;7460:10;7480:4;7487:10;7498:1;7487:13;;;;;;;;:::i;:::-;;;;;;;7427:12;7440:1;7427:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7427:32:88;;;:74;;;;;;:::i;:::-;7544:3;;7367:205;;;;7582:138;7622:15;7639:9;7650:12;7664:10;7676:11;7689:10;7701:9;7582:26;:138::i;9720:456:30:-;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;9392:2248:88:-;512:6:77;;522:1;512:11;504:34;;;;-1:-1:-1;;;504:34:77;;;;;;;:::i;:::-;558:1;549:6;:10;;;20618:26:88;-1:-1:-1;;;;;20618:26:88::1;20604:10;:40;20600:86;;20653:33;;-1:-1:-1::0;;;20653:33:88::1;;;;;;;;;;;20600:86;9535:13:::2;9551:11;;9563:1;9551:14;;;;;;;:::i;:::-;::::0;;::::2;;-1:-1:-1::0;;;;;;9551:14:88;;-1:-1:-1;;;;;9623:14:88;;;9619:2015:::2;;9683:33;9731:24;9739:15;:11:::0;9751:1:::2;9739:11:::0;;:15:::2;:::i;:::-;9731:7;:24::i;:::-;9720:57;;;;;;;;;;;;:::i;:::-;9682:95;;9821:20;9832:8;9821:10;:20::i;:::-;;;9639:265;9619:2015;;;-1:-1:-1::0;;;;;;9914:14:88;::::2;-1:-1:-1::0;;;9914:14:88;9910:1724:::2;;9991:33;::::0;;;10181:24:::2;10189:15;:11:::0;10201:1:::2;10189:11:::0;;:15:::2;:::i;10181:24::-;10170:90;;;;;;;;;;;;:::i;:::-;9973:287;;;;;;;;10304:20;10315:8;10304:10;:20::i;:::-;;;10372:296;10408:12;:28;;;10454:12;:22;;;10494:12;:24;;;10536:12;:22;;;10576:12;:23;;;10617:10;10645:9;10372:18;:296::i;:::-;9930:803;;;;9910:1724;;;-1:-1:-1::0;;;;;;10743:14:88;::::2;-1:-1:-1::0;;;10743:14:88;10739:895:::2;;10820:33;::::0;;;11018:24:::2;11026:15;:11:::0;11038:1:::2;11026:11:::0;;:15:::2;:::i;11018:24::-;11007:98;;;;;;;;;;;;:::i;:::-;10802:303;;;;;;;;11149:20;11160:8;11149:10;:20::i;:::-;;;11217:307;11261:12;:28;;;11307:12;:22;;;11347:12;:25;;;11390:12;:23;;;11431:12;:24;;;11473:10;11501:9;11217:26;:307::i;10739:895::-;11599:24;;-1:-1:-1::0;;;11599:24:88::2;;;;;;;;;;;10739:895;-1:-1:-1::0;;591:1:77;582:6;:10;-1:-1:-1;;9392:2248:88:o;12012:237::-;512:6:77;;522:1;512:11;504:34;;;;-1:-1:-1;;;504:34:77;;;;;;;:::i;:::-;558:1;549:6;:10;;;20618:26:88;-1:-1:-1;;;;;20618:26:88::1;20604:10;:40;20600:86;;20653:33;;-1:-1:-1::0;;;20653:33:88::1;;;;;;;;;;;20600:86;12202:40:::2;12217:11;;12230;12202:14;:40::i;4980:353::-:0;12517:13:30;:11;:13::i;:::-;-1:-1:-1;;;;;5066:33:88;::::1;5058:78;;;::::0;-1:-1:-1;;;5058:78:88;;23859:2:178;5058:78:88::1;::::0;::::1;23841:21:178::0;;;23878:18;;;23871:30;23937:34;23917:18;;;23910:62;23989:18;;5058:78:88::1;23657:356:178::0;5058:78:88::1;5146:19;:17;:19::i;:::-;5176:18;:49:::0;;-1:-1:-1;;;;;;5176:49:88::1;-1:-1:-1::0;;;;;5176:49:88;::::1;::::0;;::::1;::::0;;;5264:62:::1;::::0;;-1:-1:-1;;;5264:62:88;;;;:60:::1;::::0;:62:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;5176:49;5264:62:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5235:26;:91:::0;;-1:-1:-1;;;;;;5235:91:88::1;-1:-1:-1::0;;;;;5235:91:88;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;4980:353:88:o;8532:602::-;20835:18;;-1:-1:-1;;;;;20835:18:88;20821:10;:32;20817:70;;20862:25;;-1:-1:-1;;;20862:25:88;;;;;;;;;;;20817:70;8979:18:::1;::::0;8966:161:::1;::::0;-1:-1:-1;;;8966:161:88;;-1:-1:-1;;;;;8979:18:88;;::::1;::::0;8966:48:::1;::::0;9022:9:::1;::::0;8966:161:::1;::::0;9046:6;;9054:16;;9072:10;;9088:8;;9098:19;;8966:161:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;8532:602:::0;;;;;;;;:::o;10363:708:30:-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;13098:3218:88:-:0;13214:13;13230:11;;13242:1;13230:14;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;13230:14:88;;-1:-1:-1;;;;;13302:14:88;;;13298:3012;;13361:19;13394:24;13402:15;:11;13414:1;13402:11;;:15;:::i;13394:24::-;13383:46;;;;;;;;;;;;:::i;:::-;13480:40;;-1:-1:-1;;;13480:40:88;;13361:68;;-1:-1:-1;;;;;;13480:33:88;;;;;:40;;13361:68;;13480:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13480:40:88;;;;;;;;;;;;:::i;:::-;;13318:265;13298:3012;;;-1:-1:-1;;;;;;13593:14:88;;-1:-1:-1;;;13593:14:88;13589:2721;;13653:19;;;;13784:24;13792:15;:11;13804:1;13792:11;;:15;:::i;13784:24::-;13773:79;;;;;;;;;;;;:::i;:::-;13652:200;;;;;;;;13919:11;-1:-1:-1;;;;;13903:33:88;;13937:5;13903:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13903:40:88;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;14064:12:88;:22;;;:42;14060:153;;14151:24;;;;:47;;-1:-1:-1;;;;;14151:34:88;14186:11;14151:34;:47::i;:::-;14126:22;;;:72;14060:153;14322:24;;;;;14348:22;;;;14279:92;;-1:-1:-1;;;14279:92:88;;-1:-1:-1;;;;;28217:32:178;;;14279:92:88;;;28199:51:178;28266:18;;;28259:34;;;;14279:42:88;;;;;28172:18:178;;14279:92:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14419:296;14455:12;:28;;;14501:12;:22;;;14541:12;:24;;;14583:12;:22;;;14623:12;:23;;;14664:10;14692:9;14419:18;:296::i;:::-;13609:1171;;;;13589:2721;;;-1:-1:-1;;;;;;14790:14:88;;-1:-1:-1;;;14790:14:88;14786:1524;;14867:19;;;;15051:24;15059:15;:11;15071:1;15059:11;;:15;:::i;15051:24::-;15040:87;;;;;;;;;;;;:::i;:::-;14849:278;;;;;;;;15194:11;-1:-1:-1;;;;;15178:33:88;;15212:5;15178:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15178:40:88;;;;;;;;;;;;:::i;:::-;;15290:9;15285:561;15309:12;:25;;;:32;15305:1;:36;15285:561;;;-1:-1:-1;;;15472:12:88;:23;;;15496:1;15472:26;;;;;;;;:::i;:::-;;;;;;;:46;15468:173;;15571:51;15610:11;15571:12;:25;;;15597:1;15571:28;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15571:38:88;;;:51;;;;:::i;:::-;15542:12;:23;;;15566:1;15542:26;;;;;;;;:::i;:::-;;;;;;:80;;;;;15468:173;15675:11;-1:-1:-1;;;;;15659:42:88;;15702:12;:25;;;15728:1;15702:28;;;;;;;;:::i;:::-;;;;;;;15732:12;:23;;;15756:1;15732:26;;;;;;;;:::i;:::-;;;;;;;15659:100;;;;;;;;;;;;;;;-1:-1:-1;;;;;28217:32:178;;;;28199:51;;28281:2;28266:18;;28259:34;28187:2;28172:18;;28025:274;15659:100:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15810:3;;;;;15285:561;;;;15893:307;15937:12;:28;;;15983:12;:22;;;16023:12;:25;;;16066:12;:23;;;16107:12;:24;;;16149:10;16177:9;15893:26;:307::i;14786:1524::-;13180:3136;13098:3218;;;:::o;8181:1139:66:-;8364:4;8358:11;8429:6;8423:4;8416:20;8494:2;8488:4;8481:16;8559:4;8555:2;8551:13;8545:4;8538:27;-1:-1:-1;;;8615:4:66;8608:48;9022:4;9016;9010;9004;9001:1;8994:5;8987;8982:45;8916:16;8909:24;8905:1;8898:4;8892:11;8889:18;8886:48;8801:244;8774:404;;9091:10;9085:4;9078:24;9159:4;9153;9146:18;8774:404;9204:1;9198:4;9191:15;9260:4;9253:15;-1:-1:-1;;;;8181:1139:66:o;17651:828:88:-;17948:1;17923:22;17935:10;17923:9;:22;:::i;:::-;:26;17919:185;;;18028:65;18052:16;18070:22;18082:10;18070:9;:22;:::i;:::-;-1:-1:-1;;;;;18028:23:88;;;:65;:23;:65::i;:::-;18200:18;;18369:51;;;;;;;;-1:-1:-1;;;;;18369:51:88;;;;;;;;;;;;;;;;;;18187:285;;-1:-1:-1;;;18187:285:88;;30178:15:178;;;18187:285:88;;;30160:34:178;30230:15;;;30210:18;;;30203:43;30294:6;30282:19;;30262:18;;;30255:47;30110:3;30318:18;;;30311:30;-1:-1:-1;30357:18:178;;;30350:29;;;30456:13;;30452:22;;30431:19;;;30424:51;30512:22;;30491:19;;;30484:51;30572:22;;30551:19;;;30544:51;29537:12;;30640:19;;;29525:25;29588:16;;29582:23;29566:14;;;29559:47;30676:19;;;30669:51;;;;18200:18:88;;;;18187:49;;18244:9;;30396:19:178;;18187:285:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17651:828;;;;;;;:::o;18976:1076::-;19320:9;19315:342;19339:12;:19;19335:1;:23;19315:342;;;19412:1;19395:11;19407:1;19395:14;;;;;;;;:::i;:::-;;;;;;;19379:10;19390:1;19379:13;;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;:34;19375:212;;;19495:77;19523:16;19557:11;19569:1;19557:14;;;;;;;;:::i;:::-;;;;;;;19541:10;19552:1;19541:13;;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;19495:12;19508:1;19495:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19495:27:88;;;:77;;;;;:::i;:::-;19629:3;;19315:342;;;-1:-1:-1;19754:18:88;;19931:62;;;;;;;;;;;;;;;;;;;;;;;19741:304;;-1:-1:-1;;;19741:304:88;;-1:-1:-1;;;;;19754:18:88;;;;19741:57;;19806:9;;19741:304;;19838:15;;19868:9;;19891:10;;20007:9;;19754:18;;19741:304;;;:::i;7292:355:30:-;-1:-1:-1;;7498:18:30;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;6145:1089;-1:-1:-1;;7093:16:30;;-1:-1:-1;;;;;6941:26:30;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;20379:111:88:-;20448:12;20479:4;;20472:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20472:11:88;;-1:-1:-1;;;;20379:111:88;;;;;:::o;16687:260::-;16773:19;16794:25;16906:16;-1:-1:-1;;;;;16895:38:88;;16934:5;16895:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16895:45:88;;;;;;;;;;;;:::i;:::-;16867:73;;;;-1:-1:-1;16687:260:88;-1:-1:-1;;16687:260:88:o;17169:679:66:-;17243:14;17348:7;17342:4;17335:21;-1:-1:-1;;;17409:4:66;17402:48;17787:4;17781;17775;17769;17762:5;17755;17744:48;17682:4;17664:16;17661:26;17572:242;17545:4;17539:11;17514:318;17488:344;;17169:679;;;;:::o;14171:936::-;14333:2;14327:4;14320:16;14390:6;14384:4;14377:20;-1:-1:-1;;;14449:4:66;14442:48;14843:4;14837;14831;14825;14822:1;14815:5;14808;14803:45;14737:16;14730:24;14726:1;14719:4;14713:11;14710:18;14707:48;14622:244;14595:399;;14912:10;14906:4;14899:24;14975:4;14969;14962:18;14595:399;15020:1;15014:4;15007:15;14171:936;;;:::o;14:347:178:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:178;;-1:-1:-1;;;;;202:30:178;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:170::-;440:5;485:3;476:6;471:3;467:16;463:26;460:46;;;502:1;499;492:12;460:46;-1:-1:-1;524:6:178;366:170;-1:-1:-1;366:170:178:o;541:131::-;-1:-1:-1;;;;;616:31:178;;606:42;;596:70;;662:1;659;652:12;677:117;762:6;755:5;751:18;744:5;741:29;731:57;;784:1;781;774:12;799:132;866:20;;895:30;866:20;895:30;:::i;:::-;799:132;;;:::o;936:968::-;1074:6;1082;1090;1098;1106;1159:3;1147:9;1138:7;1134:23;1130:33;1127:53;;;1176:1;1173;1166:12;1127:53;1216:9;1203:23;-1:-1:-1;;;;;1286:2:178;1278:6;1275:14;1272:34;;;1302:1;1299;1292:12;1272:34;1341:58;1391:7;1382:6;1371:9;1367:22;1341:58;:::i;:::-;1418:8;;-1:-1:-1;1315:84:178;-1:-1:-1;1506:2:178;1491:18;;1478:32;;-1:-1:-1;1522:16:178;;;1519:36;;;1551:1;1548;1541:12;1519:36;;1574:83;1649:7;1638:8;1627:9;1623:24;1574:83;:::i;:::-;1564:93;;;1707:2;1696:9;1692:18;1679:32;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:178;1812:18;;1799:32;1840;1799;1840;:::i;:::-;1891:7;1881:17;;;936:968;;;;;;;;:::o;2117:163::-;2184:20;;2244:10;2233:22;;2223:33;;2213:61;;2270:1;2267;2260:12;2285:157;2347:5;2392:2;2383:6;2378:3;2374:16;2370:25;2367:45;;;2408:1;2405;2398:12;2447:160;2512:20;;2568:13;;2561:21;2551:32;;2541:60;;2597:1;2594;2587:12;2612:817;2744:6;2752;2760;2768;2776;2784;2837:3;2825:9;2816:7;2812:23;2808:33;2805:53;;;2854:1;2851;2844:12;2805:53;2877:28;2895:9;2877:28;:::i;:::-;2867:38;;2955:2;2944:9;2940:18;2927:32;2968:31;2993:5;2968:31;:::i;:::-;3018:5;-1:-1:-1;3074:2:178;3059:18;;3046:32;-1:-1:-1;;;;;3090:30:178;;3087:50;;;3133:1;3130;3123:12;3087:50;3172:58;3222:7;3213:6;3202:9;3198:22;3172:58;:::i;:::-;3249:8;;-1:-1:-1;3146:84:178;-1:-1:-1;3303:65:178;;-1:-1:-1;3360:7:178;3355:2;3340:18;;3303:65;:::i;:::-;3293:75;;3387:36;3418:3;3407:9;3403:19;3387:36;:::i;:::-;3377:46;;2612:817;;;;;;;;:::o;3658:127::-;3719:10;3714:3;3710:20;3707:1;3700:31;3750:4;3747:1;3740:15;3774:4;3771:1;3764:15;3790:257;3862:4;3856:11;;;3894:17;;-1:-1:-1;;;;;3926:34:178;;3962:22;;;3923:62;3920:88;;;3988:18;;:::i;:::-;4024:4;4017:24;3790:257;:::o;4052:253::-;4124:2;4118:9;4166:4;4154:17;;-1:-1:-1;;;;;4186:34:178;;4222:22;;;4183:62;4180:88;;;4248:18;;:::i;4310:275::-;4381:2;4375:9;4446:2;4427:13;;-1:-1:-1;;4423:27:178;4411:40;;-1:-1:-1;;;;;4466:34:178;;4502:22;;;4463:62;4460:88;;;4528:18;;:::i;:::-;4564:2;4557:22;4310:275;;-1:-1:-1;4310:275:178:o;4590:284::-;4646:5;4694:4;4682:9;4677:3;4673:19;4669:30;4666:50;;;4712:1;4709;4702:12;4666:50;4734:22;;:::i;:::-;4725:31;;4792:9;4779:23;4772:5;4765:38;4863:2;4852:9;4848:18;4835:32;4830:2;4823:5;4819:14;4812:56;4590:284;;;;:::o;4879:928::-;5019:6;5027;5035;5043;5051;5059;5067;5120:3;5108:9;5099:7;5095:23;5091:33;5088:53;;;5137:1;5134;5127:12;5088:53;5176:9;5163:23;5195:31;5220:5;5195:31;:::i;:::-;5245:5;-1:-1:-1;5302:2:178;5287:18;;5274:32;5315:33;5274:32;5315:33;:::i;:::-;5367:7;-1:-1:-1;5426:2:178;5411:18;;5398:32;5439:33;5398:32;5439:33;:::i;:::-;5491:7;-1:-1:-1;5545:2:178;5530:18;;5517:32;;-1:-1:-1;5596:3:178;5581:19;;5568:33;;-1:-1:-1;5653:3:178;5638:19;;5625:33;5667:32;5625:33;5667:32;:::i;:::-;5718:7;-1:-1:-1;5744:57:178;5793:7;5787:3;5772:19;;5744:57;:::i;:::-;5734:67;;4879:928;;;;;;;;;;:::o;5812:162::-;5878:5;5923:3;5914:6;5909:3;5905:16;5901:26;5898:46;;;5940:1;5937;5930:12;5979:825;6109:6;6117;6125;6133;6141;6194:3;6182:9;6173:7;6169:23;6165:33;6162:53;;;6211:1;6208;6201:12;6162:53;6251:9;6238:23;-1:-1:-1;;;;;6276:6:178;6273:30;6270:50;;;6316:1;6313;6306:12;6270:50;6355:58;6405:7;6396:6;6385:9;6381:22;6355:58;:::i;:::-;6432:8;;-1:-1:-1;6329:84:178;-1:-1:-1;6486:69:178;;-1:-1:-1;6547:7:178;6542:2;6527:18;;6486:69;:::i;:::-;6476:79;;6605:3;6594:9;6590:19;6577:33;6619:31;6644:5;6619:31;:::i;:::-;6669:5;-1:-1:-1;6726:3:178;6711:19;;6698:33;6740:32;6698:33;6740:32;:::i;6809:183::-;6869:4;-1:-1:-1;;;;;6894:6:178;6891:30;6888:56;;;6924:18;;:::i;:::-;-1:-1:-1;6969:1:178;6965:14;6981:4;6961:25;;6809:183::o;6997:737::-;7051:5;7104:3;7097:4;7089:6;7085:17;7081:27;7071:55;;7122:1;7119;7112:12;7071:55;7158:6;7145:20;7184:4;7208:60;7224:43;7264:2;7224:43;:::i;:::-;7208:60;:::i;:::-;7302:15;;;7388:1;7384:10;;;;7372:23;;7368:32;;;7333:12;;;;7412:15;;;7409:35;;;7440:1;7437;7430:12;7409:35;7476:2;7468:6;7464:15;7488:217;7504:6;7499:3;7496:15;7488:217;;;7584:3;7571:17;7601:31;7626:5;7601:31;:::i;:::-;7645:18;;7683:12;;;;7521;;7488:217;;;-1:-1:-1;7723:5:178;6997:737;-1:-1:-1;;;;;;6997:737:178:o;7739:662::-;7793:5;7846:3;7839:4;7831:6;7827:17;7823:27;7813:55;;7864:1;7861;7854:12;7813:55;7900:6;7887:20;7926:4;7950:60;7966:43;8006:2;7966:43;:::i;7950:60::-;8044:15;;;8130:1;8126:10;;;;8114:23;;8110:32;;;8075:12;;;;8154:15;;;8151:35;;;8182:1;8179;8172:12;8151:35;8218:2;8210:6;8206:15;8230:142;8246:6;8241:3;8238:15;8230:142;;;8312:17;;8300:30;;8350:12;;;;8263;;8230:142;;8406:1293;8621:6;8629;8637;8645;8653;8661;8669;8722:3;8710:9;8701:7;8697:23;8693:33;8690:53;;;8739:1;8736;8729:12;8690:53;8778:9;8765:23;8797:31;8822:5;8797:31;:::i;:::-;8847:5;-1:-1:-1;8904:2:178;8889:18;;8876:32;8917:33;8876:32;8917:33;:::i;:::-;8969:7;-1:-1:-1;9027:2:178;9012:18;;8999:32;-1:-1:-1;;;;;9080:14:178;;;9077:34;;;9107:1;9104;9097:12;9077:34;9130:61;9183:7;9174:6;9163:9;9159:22;9130:61;:::i;:::-;9120:71;;9244:2;9233:9;9229:18;9216:32;9200:48;;9273:2;9263:8;9260:16;9257:36;;;9289:1;9286;9279:12;9257:36;9312:63;9367:7;9356:8;9345:9;9341:24;9312:63;:::i;:::-;9302:73;;9428:3;9417:9;9413:19;9400:33;9384:49;;9458:2;9448:8;9445:16;9442:36;;;9474:1;9471;9464:12;9442:36;;9497:63;9552:7;9541:8;9530:9;9526:24;9497:63;:::i;:::-;9487:73;;;9579:38;9612:3;9601:9;9597:19;9579:38;:::i;9886:826::-;10015:6;10023;10031;10039;10092:2;10080:9;10071:7;10067:23;10063:32;10060:52;;;10108:1;10105;10098:12;10060:52;10148:9;10135:23;-1:-1:-1;;;;;10218:2:178;10210:6;10207:14;10204:34;;;10234:1;10231;10224:12;10204:34;10273:58;10323:7;10314:6;10303:9;10299:22;10273:58;:::i;:::-;10350:8;;-1:-1:-1;10247:84:178;-1:-1:-1;10438:2:178;10423:18;;10410:32;;-1:-1:-1;10454:16:178;;;10451:36;;;10483:1;10480;10473:12;10451:36;;10506:83;10581:7;10570:8;10559:9;10555:24;10506:83;:::i;:::-;10496:93;;;10639:2;10628:9;10624:18;10611:32;10652:30;10676:5;10652:30;:::i;:::-;9886:826;;;;-1:-1:-1;9886:826:178;;-1:-1:-1;;9886:826:178:o;10717:683::-;10838:6;10846;10854;10862;10915:3;10903:9;10894:7;10890:23;10886:33;10883:53;;;10932:1;10929;10922:12;10883:53;10972:9;10959:23;-1:-1:-1;;;;;10997:6:178;10994:30;10991:50;;;11037:1;11034;11027:12;10991:50;11076:58;11126:7;11117:6;11106:9;11102:22;11076:58;:::i;:::-;11153:8;;-1:-1:-1;11050:84:178;-1:-1:-1;11207:69:178;;-1:-1:-1;11268:7:178;11263:2;11248:18;;11207:69;:::i;:::-;11197:79;;11326:3;11315:9;11311:19;11298:33;11340:30;11364:5;11340:30;:::i;11405:542::-;11483:6;11491;11499;11552:2;11540:9;11531:7;11527:23;11523:32;11520:52;;;11568:1;11565;11558:12;11520:52;11608:9;11595:23;-1:-1:-1;;;;;11633:6:178;11630:30;11627:50;;;11673:1;11670;11663:12;11627:50;11712:58;11762:7;11753:6;11742:9;11738:22;11712:58;:::i;:::-;11789:8;;-1:-1:-1;11686:84:178;-1:-1:-1;;11874:2:178;11859:18;;11846:32;11887:30;11846:32;11887:30;:::i;:::-;11936:5;11926:15;;;11405:542;;;;;:::o;11952:683::-;12039:6;12047;12055;12063;12116:2;12104:9;12095:7;12091:23;12087:32;12084:52;;;12132:1;12129;12122:12;12084:52;12172:9;12159:23;-1:-1:-1;;;;;12197:6:178;12194:30;12191:50;;;12237:1;12234;12227:12;12191:50;12276:58;12326:7;12317:6;12306:9;12302:22;12276:58;:::i;:::-;12353:8;;-1:-1:-1;12250:84:178;-1:-1:-1;;12438:2:178;12423:18;;12410:32;12451:31;12410:32;12451:31;:::i;:::-;12501:5;-1:-1:-1;12558:2:178;12543:18;;12530:32;12571;12530;12571;:::i;12640:247::-;12699:6;12752:2;12740:9;12731:7;12727:23;12723:32;12720:52;;;12768:1;12765;12758:12;12720:52;12807:9;12794:23;12826:31;12851:5;12826:31;:::i;:::-;12876:5;12640:247;-1:-1:-1;;;12640:247:178:o;12892:1099::-;13041:6;13049;13057;13065;13073;13081;13089;13097;13150:3;13138:9;13129:7;13125:23;13121:33;13118:53;;;13167:1;13164;13157:12;13118:53;13206:9;13193:23;13225:31;13250:5;13225:31;:::i;:::-;13275:5;-1:-1:-1;13299:37:178;13332:2;13317:18;;13299:37;:::i;:::-;13289:47;;13388:2;13377:9;13373:18;13360:32;13401:33;13426:7;13401:33;:::i;:::-;13453:7;-1:-1:-1;13511:2:178;13496:18;;13483:32;-1:-1:-1;;;;;13527:30:178;;13524:50;;;13570:1;13567;13560:12;13524:50;13609:58;13659:7;13650:6;13639:9;13635:22;13609:58;:::i;:::-;13686:8;;-1:-1:-1;13583:84:178;-1:-1:-1;13740:66:178;;-1:-1:-1;13798:7:178;13792:3;13777:19;;13740:66;:::i;:::-;13730:76;;13825:36;13856:3;13845:9;13841:19;13825:36;:::i;:::-;13815:46;;13913:3;13902:9;13898:19;13885:33;13927:32;13951:7;13927:32;:::i;:::-;13978:7;13968:17;;;12892:1099;;;;;;;;;;;:::o;13996:334::-;14198:2;14180:21;;;14237:2;14217:18;;;14210:30;-1:-1:-1;;;14271:2:178;14256:18;;14249:40;14321:2;14306:18;;13996:334::o;14431:863::-;-1:-1:-1;;;;;14860:15:178;;;14842:34;;14924:10;14912:23;;;;14907:2;14892:18;;;14885:51;;;;14972:15;;;;14967:2;14952:18;;14945:43;15024:3;15019:2;15004:18;;14997:31;;;14785:4;15044:19;;;15037:30;15140:20;;15134:3;15119:19;;15112:49;15211:15;15198:29;14822:3;15177:19;;15170:58;15272:14;;15265:22;15259:3;15244:19;;15237:51;15099:3;15084:19;;14431:863::o;15299:127::-;15360:10;15355:3;15351:20;15348:1;15341:31;15391:4;15388:1;15381:15;15415:4;15412:1;15405:15;15431:331;15536:9;15547;15589:8;15577:10;15574:24;15571:44;;;15611:1;15608;15601:12;15571:44;15640:6;15630:8;15627:20;15624:40;;;15660:1;15657;15650:12;15624:40;-1:-1:-1;;15686:23:178;;;15731:25;;;;;-1:-1:-1;15431:331:178:o;15767:138::-;15846:13;;15868:31;15846:13;15868:31;:::i;15910:250::-;15995:1;16005:113;16019:6;16016:1;16013:13;16005:113;;;16095:11;;;16089:18;16076:11;;;16069:39;16041:2;16034:10;16005:113;;;-1:-1:-1;;16152:1:178;16134:16;;16127:27;15910:250::o;16165:509::-;16218:5;16271:3;16264:4;16256:6;16252:17;16248:27;16238:55;;16289:1;16286;16279:12;16238:55;16318:6;16312:13;-1:-1:-1;;;;;16340:2:178;16337:26;16334:52;;;16366:18;;:::i;:::-;16410:55;16453:2;16434:13;;-1:-1:-1;;16430:27:178;16459:4;16426:38;16410:55;:::i;:::-;16490:2;16481:7;16474:19;16536:3;16529:4;16524:2;16516:6;16512:15;16508:26;16505:35;16502:55;;;16553:1;16550;16543:12;16502:55;16566:77;16640:2;16633:4;16624:7;16620:18;16613:4;16605:6;16601:17;16566:77;:::i;:::-;16661:7;16165:509;-1:-1:-1;;;;16165:509:178:o;16679:1513::-;16748:5;16801:3;16794:4;16786:6;16782:17;16778:27;16768:55;;16819:1;16816;16809:12;16768:55;16848:6;16842:13;16874:4;16898:60;16914:43;16954:2;16914:43;:::i;16898:60::-;16992:15;;;17078:1;17074:10;;;;17062:23;;17058:32;;;17023:12;;;;17102:15;;;17099:35;;;17130:1;17127;17120:12;17099:35;17166:2;17158:6;17154:15;17178:985;17194:6;17189:3;17186:15;17178:985;;;17273:3;17267:10;-1:-1:-1;;;;;17350:2:178;17337:11;17334:19;17331:109;;;17394:1;17423:2;17419;17412:14;17331:109;17463:24;;;;17510:4;17538:12;;;-1:-1:-1;;17534:26:178;17530:35;-1:-1:-1;17527:125:178;;;17606:1;17635:2;17631;17624:14;17527:125;17678:22;;:::i;:::-;17742:2;17738;17734:11;17728:18;17759:33;17784:7;17759:33;:::i;:::-;17805:22;;17862:11;;;17856:18;;17890:16;;;17887:106;;;17947:1;17976:2;17972;17965:14;17887:106;18029:60;18085:3;18080:2;18069:8;18065:2;18061:17;18057:26;18029:60;:::i;:::-;18013:14;;;18006:84;18103:18;;-1:-1:-1;;;18141:12:178;;;;17211;;17178:985;;18197:390;18315:6;18368:2;18356:9;18347:7;18343:23;18339:32;18336:52;;;18384:1;18381;18374:12;18336:52;18417:9;18411:16;-1:-1:-1;;;;;18442:6:178;18439:30;18436:50;;;18482:1;18479;18472:12;18436:50;18505:76;18573:7;18564:6;18553:9;18549:22;18505:76;:::i;18592:679::-;18662:5;18710:4;18698:9;18693:3;18689:19;18685:30;18682:50;;;18728:1;18725;18718:12;18682:50;18750:22;;:::i;:::-;18741:31;;18802:9;18796:16;18821:33;18846:7;18821:33;:::i;:::-;18863:22;;18930:2;18915:18;;18909:25;18943:33;18909:25;18943:33;:::i;:::-;19003:2;18992:14;;18985:31;19061:2;19046:18;;19040:25;19074:33;19040:25;19074:33;:::i;:::-;19139:7;19134:2;19127:5;19123:14;19116:31;;19200:2;19189:9;19185:18;19179:25;19174:2;19167:5;19163:14;19156:49;19259:3;19248:9;19244:19;19238:26;19232:3;19225:5;19221:15;19214:51;18592:679;;;;:::o;19276:281::-;19343:5;19391:4;19379:9;19374:3;19370:19;19366:30;19363:50;;;19409:1;19406;19399:12;19363:50;19431:22;;:::i;:::-;19422:31;;19482:9;19476:16;19469:5;19462:31;19546:2;19535:9;19531:18;19525:25;19520:2;19513:5;19509:14;19502:49;19276:281;;;;:::o;19562:787::-;19765:6;19773;19781;19789;19842:3;19830:9;19821:7;19817:23;19813:33;19810:53;;;19859:1;19856;19849:12;19810:53;19892:9;19886:16;-1:-1:-1;;;;;19917:6:178;19914:30;19911:50;;;19957:1;19954;19947:12;19911:50;19980:76;20048:7;20039:6;20028:9;20024:22;19980:76;:::i;:::-;19970:86;;;20075:70;20137:7;20132:2;20121:9;20117:18;20075:70;:::i;:::-;20065:80;;20188:3;20177:9;20173:19;20167:26;20202:30;20226:5;20202:30;:::i;:::-;20251:5;-1:-1:-1;20275:68:178;20335:7;20329:3;20314:19;;20275:68;:::i;:::-;20265:78;;19562:787;;;;;;;:::o;20354:734::-;20419:5;20472:3;20465:4;20457:6;20453:17;20449:27;20439:55;;20490:1;20487;20480:12;20439:55;20519:6;20513:13;20545:4;20569:60;20585:43;20625:2;20585:43;:::i;20569:60::-;20663:15;;;20749:1;20745:10;;;;20733:23;;20729:32;;;20694:12;;;;20773:15;;;20770:35;;;20801:1;20798;20791:12;20770:35;20837:2;20829:6;20825:15;20849:210;20865:6;20860:3;20857:15;20849:210;;;20938:3;20932:10;20955:31;20980:5;20955:31;:::i;:::-;20999:18;;21037:12;;;;20882;;20849:210;;21093:659;21158:5;21211:3;21204:4;21196:6;21192:17;21188:27;21178:55;;21229:1;21226;21219:12;21178:55;21258:6;21252:13;21284:4;21308:60;21324:43;21364:2;21324:43;:::i;21308:60::-;21402:15;;;21488:1;21484:10;;;;21472:23;;21468:32;;;21433:12;;;;21512:15;;;21509:35;;;21540:1;21537;21530:12;21509:35;21576:2;21568:6;21564:15;21588:135;21604:6;21599:3;21596:15;21588:135;;;21670:10;;21658:23;;21701:12;;;;21621;;21588:135;;21757:967;21835:5;21883:4;21871:9;21866:3;21862:19;21858:30;21855:50;;;21901:1;21898;21891:12;21855:50;21923:22;;:::i;:::-;21914:31;;21968:40;21998:9;21968:40;:::i;:::-;21961:5;21954:55;22041:49;22086:2;22075:9;22071:18;22041:49;:::i;:::-;22036:2;22029:5;22025:14;22018:73;22135:2;22124:9;22120:18;22114:25;-1:-1:-1;;;;;22199:2:178;22191:6;22188:14;22185:34;;;22215:1;22212;22205:12;22185:34;22251:68;22315:3;22306:6;22295:9;22291:22;22251:68;:::i;:::-;22246:2;22239:5;22235:14;22228:92;22366:2;22355:9;22351:18;22345:25;22329:41;;22395:2;22385:8;22382:16;22379:36;;;22411:1;22408;22401:12;22379:36;22447:70;22513:3;22502:8;22491:9;22487:24;22447:70;:::i;:::-;22442:2;22435:5;22431:14;22424:94;22564:3;22553:9;22549:19;22543:26;22527:42;;22594:2;22584:8;22581:16;22578:36;;;22610:1;22607;22600:12;22578:36;;22647:70;22713:3;22702:8;22691:9;22687:24;22647:70;:::i;:::-;22641:3;22634:5;22630:15;22623:95;;21757:967;;;;:::o;22729:923::-;22940:6;22948;22956;22964;23017:3;23005:9;22996:7;22992:23;22988:33;22985:53;;;23034:1;23031;23024:12;22985:53;23067:9;23061:16;-1:-1:-1;;;;;23137:2:178;23129:6;23126:14;23123:34;;;23153:1;23150;23143:12;23123:34;23176:76;23244:7;23235:6;23224:9;23220:22;23176:76;:::i;:::-;23166:86;;23298:2;23287:9;23283:18;23277:25;23261:41;;23327:2;23317:8;23314:16;23311:36;;;23343:1;23340;23333:12;23311:36;;23366:84;23442:7;23431:8;23420:9;23416:24;23366:84;:::i;:::-;23356:94;;;23493:2;23482:9;23478:18;23472:25;23506:30;23530:5;23506:30;:::i;:::-;23555:5;-1:-1:-1;23579:67:178;23638:7;23633:2;23618:18;;23579:67;:::i;24018:251::-;24088:6;24141:2;24129:9;24120:7;24116:23;24112:32;24109:52;;;24157:1;24154;24147:12;24109:52;24189:9;24183:16;24208:31;24233:5;24208:31;:::i;24669:446::-;24781:1;24777;24772:3;24768:11;24764:19;24756:5;24750:12;24746:38;24741:3;24734:51;24716:3;24831:4;24824:5;24820:16;24814:23;24869:4;24862;24857:3;24853:14;24846:28;24903:12;24897:19;24948:6;24941:4;24936:3;24932:14;24925:30;24964:81;25038:6;25033:2;25028:3;25024:12;25017:4;25003:12;24999:23;24964:81;:::i;:::-;25099:2;25078:15;-1:-1:-1;;25074:29:178;25065:39;;;;25106:2;25061:48;;24669:446;-1:-1:-1;;;24669:446:178:o;25120:834::-;25308:4;25337:2;25377;25366:9;25362:18;25407:2;25396:9;25389:21;25430:6;25465;25459:13;25496:6;25488;25481:22;25534:2;25523:9;25519:18;25512:25;;25596:2;25586:6;25583:1;25579:14;25568:9;25564:30;25560:39;25546:53;;25634:2;25626:6;25622:15;25655:1;25665:260;25679:6;25676:1;25673:13;25665:260;;;25772:2;25768:7;25756:9;25748:6;25744:22;25740:36;25735:3;25728:49;25800:45;25838:6;25829;25823:13;25800:45;:::i;:::-;25790:55;-1:-1:-1;25903:12:178;;;;25868:15;;;;25701:1;25694:9;25665:260;;;-1:-1:-1;25942:6:178;;25120:834;-1:-1:-1;;;;;;;25120:834:178:o;25959:894::-;26022:5;26075:3;26068:4;26060:6;26056:17;26052:27;26042:55;;26093:1;26090;26083:12;26042:55;26122:6;26116:13;26148:4;26172:60;26188:43;26228:2;26188:43;:::i;26172:60::-;26266:15;;;26352:1;26348:10;;;;26336:23;;26332:32;;;26297:12;;;;26376:15;;;26373:35;;;26404:1;26401;26394:12;26373:35;26440:2;26432:6;26428:15;26452:372;26468:6;26463:3;26460:15;26452:372;;;26547:3;26541:10;-1:-1:-1;;;;;26570:11:178;26567:35;26564:125;;;26643:1;26672:2;26668;26661:14;26564:125;26714:67;26777:3;26772:2;26758:11;26750:6;26746:24;26742:33;26714:67;:::i;:::-;26702:80;;-1:-1:-1;26802:12:178;;;;26485;;26452:372;;26858:370;26962:6;27015:2;27003:9;26994:7;26990:23;26986:32;26983:52;;;27031:1;27028;27021:12;26983:52;27064:9;27058:16;-1:-1:-1;;;;;27089:6:178;27086:30;27083:50;;;27129:1;27126;27119:12;27083:50;27152:70;27214:7;27205:6;27194:9;27190:22;27152:70;:::i;29232:225::-;29299:9;;;29320:11;;;29317:134;;;29373:10;29368:3;29364:20;29361:1;29354:31;29408:4;29405:1;29398:15;29436:4;29433:1;29426:15;30731:435;30784:3;30822:5;30816:12;30849:6;30844:3;30837:19;30875:4;30904:2;30899:3;30895:12;30888:19;;30941:2;30934:5;30930:14;30962:1;30972:169;30986:6;30983:1;30980:13;30972:169;;;31047:13;;31035:26;;31081:12;;;;31116:15;;;;31008:1;31001:9;30972:169;;;-1:-1:-1;31157:3:178;;30731:435;-1:-1:-1;;;;;30731:435:178:o;31171:1901::-;31651:4;31680:3;31719:1;31715;31710:3;31706:11;31702:19;31760:2;31752:6;31748:15;31737:9;31730:34;31783:2;31833;31825:6;31821:15;31816:2;31805:9;31801:18;31794:43;31885:6;31877;31873:19;31868:2;31857:9;31853:18;31846:47;31929:2;31924;31913:9;31909:18;31902:30;31968:1;31963:2;31952:9;31948:18;31941:29;31989:3;31979:13;;32029:2;32023:3;32012:9;32008:19;32001:31;32070:3;32059:9;32055:19;32109:6;32103:13;32152:2;32147;32136:9;32132:18;32125:30;32175:6;32164:17;;32210:12;32204:19;32247:6;32239;32232:22;32285:3;32274:9;32270:19;32263:26;;32330:2;32316:12;32312:21;32298:35;;32351:1;32342:10;;32361:178;32375:6;32372:1;32369:13;32361:178;;;32440:13;;32436:22;;32424:35;;32479:12;;;;32514:15;;;;32397:1;32390:9;;;;;32361:178;;;-1:-1:-1;;;32576:15:178;;32570:22;-1:-1:-1;;32660:19:178;;;32656:28;;32650:3;32635:19;;32628:57;32570:22;;-1:-1:-1;32708:49:178;32660:19;32570:22;32708:49;:::i;:::-;32694:63;;32806:2;32798:6;32794:15;32788:22;32766:44;;32875:2;32863:9;32855:6;32851:22;32847:31;32841:3;32830:9;32826:19;32819:60;;32896:52;32941:6;32925:14;32896:52;:::i;:::-;29537:12;;33008:3;32993:19;;29525:25;29599:4;29588:16;;29582:23;29566:14;;;29559:47;32888:60;-1:-1:-1;32957:56:178;;-1:-1:-1;;29462:150:178;32957:56;14405:13;;14398:21;33061:3;33046:19;;14386:34;31171:1901;;;;;;;;;:::o;33077:834::-;33265:4;33294:2;33334;33323:9;33319:18;33364:2;33353:9;33346:21;33387:6;33422;33416:13;33453:6;33445;33438:22;33491:2;33480:9;33476:18;33469:25;;33553:2;33543:6;33540:1;33536:14;33525:9;33521:30;33517:39;33503:53;;33591:2;33583:6;33579:15;33612:1;33622:260;33636:6;33633:1;33630:13;33622:260;;;33729:2;33725:7;33713:9;33705:6;33701:22;33697:36;33692:3;33685:49;33757:45;33795:6;33786;33780:13;33757:45;:::i;:::-;33747:55;-1:-1:-1;33860:12:178;;;;33825:15;;;;33658:1;33651:9;33622:260;;33916:431;34029:6;34037;34090:2;34078:9;34069:7;34065:23;34061:32;34058:52;;;34106:1;34103;34096:12;34058:52;34135:9;34129:16;34119:26;;34189:2;34178:9;34174:18;34168:25;-1:-1:-1;;;;;34208:6:178;34205:30;34202:50;;;34248:1;34245;34238:12;34202:50;34271:70;34333:7;34324:6;34313:9;34309:22;34271:70;:::i;:::-;34261:80;;;33916:431;;;;;:::o",
	linkReferences: {
	},
	immutableReferences: {
		"56665": [
			{
				start: 648,
				length: 32
			}
		],
		"56668": [
			{
				start: 596,
				length: 32
			},
			{
				start: 3836,
				length: 32
			},
			{
				start: 4201,
				length: 32
			}
		],
		"56671": [
			{
				start: 364,
				length: 32
			},
			{
				start: 4598,
				length: 32
			}
		]
	}
};
var methodIdentifiers$2 = {
	"bridgeAgentAddress()": "24e73159",
	"bridgeAgentExecutorAddress()": "546af931",
	"callOutAndBridge(address,address,address,uint256,uint256,uint16,(uint256,uint256))": "3779da4f",
	"callOutAndBridgeMultiple(address,address,address[],uint256[],uint256[],uint16,(uint256,uint256))": "4a6a99d9",
	"cancelOwnershipHandover()": "54d1f13d",
	"completeOwnershipHandover(address)": "f04e283e",
	"execute(bytes,uint16)": "8c252780",
	"executeDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),uint16)": "617ef5b7",
	"executeDepositSingle(bytes,(uint32,address,address,uint256,uint256),uint16)": "7d0cfac8",
	"executeRetrySettlement(address,uint32,address,bytes,(uint256,uint256),bool,uint16)": "e6901932",
	"executeSigned(bytes,address,uint16)": "a094139e",
	"executeSignedDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),address,uint16)": "01510d37",
	"executeSignedDepositSingle(bytes,(uint32,address,address,uint256,uint256),address,uint16)": "37dcb530",
	"initialize(address)": "c4d66de8",
	"localChainId()": "5b056da5",
	"localPortAddress()": "5abfaf6c",
	"multicallAddress()": "08178604",
	"owner()": "8da5cb5b",
	"ownershipHandoverExpiresAt(address)": "fee81cf4",
	"renounceOwnership()": "715018a6",
	"requestOwnershipHandover()": "25692962",
	"retrySettlement(uint32,address,bytes,(uint256,uint256),bool)": "1f74bed3",
	"transferOwnership(address)": "f2fde38b"
};
var rawMetadata$2 = "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localChainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_localPortAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_multicallAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnrecognizedBridgeAgent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnrecognizedBridgeAgentExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnrecognizedFunctionId\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeAgentAddress\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridgeAgentExecutorAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"settlementOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outputToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositOut\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"dstChainId\",\"type\":\"uint16\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"gasParams\",\"type\":\"tuple\"}],\"name\":\"callOutAndBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"settlementOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"outputTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"depositsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16\",\"name\":\"dstChainId\",\"type\":\"uint16\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"gasParams\",\"type\":\"tuple\"}],\"name\":\"callOutAndBridgeMultiple\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"numberOfAssets\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"depositNonce\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"hTokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"deposits\",\"type\":\"uint256[]\"}],\"internalType\":\"struct DepositMultipleParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"executeDepositMultiple\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"depositNonce\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"hToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"}],\"internalType\":\"struct DepositParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"executeDepositSingle\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_settlementNonce\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"_gParams\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_hasFallbackToggled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"executeRetrySettlement\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"userAccount\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"executeSigned\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"numberOfAssets\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"depositNonce\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"hTokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"deposits\",\"type\":\"uint256[]\"}],\"internalType\":\"struct DepositMultipleParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"userAccount\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"executeSignedDepositMultiple\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"depositNonce\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"hToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"}],\"internalType\":\"struct DepositParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"userAccount\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"executeSignedDepositSingle\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridgeAgentAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localPortAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multicallAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_settlementNonce\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remoteBranchExecutionGas\",\"type\":\"uint256\"}],\"internalType\":\"struct GasParams\",\"name\":\"_gParams\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_hasFallbackToggled\",\"type\":\"bool\"}],\"name\":\"retrySettlement\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"MaiaDAO\",\"details\":\"Func IDs for calling these  functions through the messaging layer:         CROSS-CHAIN MESSAGING FUNCIDs         -----------------------------         FUNC ID      | FUNC NAME         -------------+---------------         0x01         | multicallNoOutput         0x02         | multicallSingleOutput         0x03         | multicallMultipleOutput\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"Cannot double-initialize.\"}],\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"events\":{\"OwnershipHandoverCanceled(address)\":{\"details\":\"The ownership handover to `pendingOwner` has been canceled.\"},\"OwnershipHandoverRequested(address)\":{\"details\":\"An ownership handover to `pendingOwner` has been requested.\"},\"OwnershipTransferred(address,address)\":{\"details\":\"The ownership is transferred from `oldOwner` to `newOwner`. This event is intentionally kept the same as OpenZeppelin's Ownable to be compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), despite it not being as lightweight as a single argument event.\"}},\"kind\":\"dev\",\"methods\":{\"callOutAndBridge(address,address,address,uint256,uint256,uint16,(uint256,uint256))\":{\"params\":{\"amountOut\":\"Amount of output hTokens to send.\",\"depositOut\":\"Amount of output hTokens to deposit.\",\"dstChainId\":\"Chain Id of the destination chain.\",\"gasParams\":\"Amounts of tokens to withdraw from the destination port.\",\"outputToken\":\"Address of the output hToken.\",\"recipient\":\"Address to receive the output assets.\",\"settlementOwner\":\"settlement owner and excess gas receiver.\"}},\"callOutAndBridgeMultiple(address,address,address[],uint256[],uint256[],uint16,(uint256,uint256))\":{\"params\":{\"amountsOut\":\"Total amount of tokens to send.\",\"depositsOut\":\"Amounts of tokens to withdraw from the destination port.\",\"gasParams\":\"Amounts of tokens to withdraw from the destination port.\",\"outputTokens\":\"Addresses of the output hTokens.\",\"recipient\":\"Address to receive the output assets.\",\"settlementOwner\":\"settlement owner and excess gas receiver.\"}},\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"constructor\":{\"params\":{\"_localChainId\":\"local layer zero chain id.\",\"_localPortAddress\":\"address of the root Port.\",\"_multicallAddress\":\"address of the Multicall contract.\"}},\"execute(bytes,uint16)\":{\"details\":\"FuncIDs  FUNC ID      | FUNC NAME  0x01         |  multicallNoOutput  0x02         |  multicallSingleOutput  0x03         |  multicallMultipleOutput\",\"params\":{\"params\":\"data received from messaging layer.\",\"srcChainId\":\"chain where the request originated from.\"}},\"executeDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),uint16)\":{\"params\":{\"dParams\":\"cross-chain multiple deposit information.\",\"params\":\"execution data received from messaging layer.\",\"srcChainId\":\"chain where the request originated from.\"}},\"executeDepositSingle(bytes,(uint32,address,address,uint256,uint256),uint16)\":{\"params\":{\"dParams\":\"cross-chain deposit information.\",\"params\":\"execution data received from messaging layer.\",\"srcChainId\":\"chain where the request originated from.\"}},\"executeRetrySettlement(address,uint32,address,bytes,(uint256,uint256),bool,uint16)\":{\"params\":{\"_gParams\":\"gas parameters.\",\"_hasFallbackToggled\":\"flag to indicate if fallback has been toggled.\",\"_owner\":\"user account address.\",\"_params\":\"data received from messaging layer.\",\"_recipient\":\"recipient address.\",\"_settlementNonce\":\"settlement nonce.\",\"_srcChainId\":\"chain where the request originated from.\"}},\"executeSigned(bytes,address,uint16)\":{\"params\":{\"params\":\"execution data received from messaging layer.\",\"srcChainId\":\"chain where the request originated from.\",\"userAccount\":\"user account address.\"}},\"executeSignedDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),address,uint16)\":{\"params\":{\"dParams\":\"cross-chain multiple deposit information.\",\"params\":\"execution data received from messaging layer.\",\"srcChainId\":\"chain where the request originated from.\",\"userAccount\":\"user account address.\"}},\"executeSignedDepositSingle(bytes,(uint32,address,address,uint256,uint256),address,uint16)\":{\"params\":{\"dParams\":\"cross-chain deposit information.\",\"params\":\"execution data received from messaging layer.\",\"srcChainId\":\"chain where the request originated from.\",\"userAccount\":\"user account address.\"}},\"initialize(address)\":{\"params\":{\"_bridgeAgentAddress\":\"The address of the Bridge Agent.\"}},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default.\"},\"retrySettlement(uint32,address,bytes,(uint256,uint256),bool)\":{\"params\":{\"_gParams\":\"gas parameters.\",\"_hasFallbackToggled\":\"flag to indicate if fallback has been toggled.\",\"_params\":\"data received from messaging layer.\",\"_recipient\":\"recipient address.\",\"_settlementNonce\":\"settlement nonce.\"}},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"stateVariables\":{\"CONTRACT_BALANCE\":{\"details\":\"Used for identifying cases when this contract's balance of a token is to be used as an input This value is equivalent to 1<<255, i.e. a singular 1 in the most significant bit.\"}},\"title\":\"Multicall Root Router Contract\",\"version\":1},\"userdoc\":{\"errors\":{\"UnrecognizedBridgeAgent()\":[{\"notice\":\"Error emitted when the caller is not the connected Root Bridge Agent.\"}],\"UnrecognizedBridgeAgentExecutor()\":[{\"notice\":\"Error emitted when the caller is not the connected Root Bridge Agent Executor.\"}],\"UnrecognizedFunctionId()\":[{\"notice\":\"Error emitted when function ID is not recognized by the router.\"}]},\"kind\":\"user\",\"methods\":{\"bridgeAgentAddress()\":{\"notice\":\"Bridge Agent to manage communications and cross-chain assets.\"},\"bridgeAgentExecutorAddress()\":{\"notice\":\"Bridge Agent Executor Address.\"},\"callOutAndBridge(address,address,address,uint256,uint256,uint16,(uint256,uint256))\":{\"notice\":\"Function to call 'callOutAndBridge' on RootBridgeAgent.\"},\"callOutAndBridgeMultiple(address,address,address[],uint256[],uint256[],uint16,(uint256,uint256))\":{\"notice\":\"Function to call 'callOutAndBridgeMultiple' on RootBridgeAgent.\"},\"constructor\":{\"notice\":\"Constructor for Multicall Root Router.\"},\"execute(bytes,uint16)\":{\"notice\":\"Function responsible of executing a crosschain request without any deposit.\"},\"executeDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),uint16)\":{\"notice\":\"Function responsible of executing a crosschain request which contains cross-chain deposit information for multiple assets attached.\"},\"executeDepositSingle(bytes,(uint32,address,address,uint256,uint256),uint16)\":{\"notice\":\"Function responsible of executing a crosschain request which contains cross-chain deposit information attached.\"},\"executeRetrySettlement(address,uint32,address,bytes,(uint256,uint256),bool,uint16)\":{\"notice\":\"Function to execute Branch Bridge Agent initiated requests to retry a settlement.\"},\"executeSigned(bytes,address,uint16)\":{\"notice\":\"Function responsible of executing a crosschain request with msg.sender without any deposit.\"},\"executeSignedDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),address,uint16)\":{\"notice\":\"Function responsible of executing a crosschain request which contains cross-chain deposit information for multiple assets and msg.sender attached.\"},\"executeSignedDepositSingle(bytes,(uint32,address,address,uint256,uint256),address,uint16)\":{\"notice\":\"Function responsible of executing a crosschain request which contains cross-chain deposit information and msg.sender attached.\"},\"initialize(address)\":{\"notice\":\"Initializes the Multicall Root Router.\"},\"localChainId()\":{\"notice\":\"Root Chain Layer Zero Identifier.\"},\"localPortAddress()\":{\"notice\":\"Address for Local Port Address where assets are stored and managed.\"},\"multicallAddress()\":{\"notice\":\"Root Chain Multicall Address.\"},\"retrySettlement(uint32,address,bytes,(uint256,uint256),bool)\":{\"notice\":\"Function to execute Branch Bridge Agent initiated requests to retry a settlement.\"}},\"notice\":\"Root Router implementation for interfacing with third-party dApps present in the Root Omnichain Environment.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MulticallRootRouter.sol\":\"MulticallRootRouter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@lib/=lib/\",\":@omni/=src/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@test/=test/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"lib/solady/src/auth/Ownable.sol\":{\"keccak256\":\"0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3\",\"dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs\"]},\"lib/solady/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a\",\"dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg\"]},\"lib/solmate/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb282dd78aa7375d6b200b9a5d8dd214b2e5df1004f8217a4b4c2b07f0c5bfd01\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://5fca62eb8d3dbd2b3b7e4bb051f6da16f4d0ff9cee61c39cebb80f031f6a8800\",\"dweb:/ipfs/QmbrsXPK91iBFwHKwJs2HLRud2KzMoBDRiWYMUtyV5H57j\"]},\"src/MulticallRootRouter.sol\":{\"keccak256\":\"0x396be4f4ba71afa82cdf6ed4d7fbc574528e3dc71eacc478dd801edc85fd665e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6188df74c2c590aea486f7ed33a319ba4e1a66b1da8db4dc94c785f5ca6ed65\",\"dweb:/ipfs/Qmeyx4NCPjerTybfy2hpA3YTZsmw75tLXKKApsWfHFeJG8\"]},\"src/interfaces/BridgeAgentStructs.sol\":{\"keccak256\":\"0xb6a224b12e369966ac8de74487b71e38c6e06ac933b4e3a148547464bc511822\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa3bee57ab7c686d12cf82c08bbe11096145ba9630278f5ad63f9e425d06e684\",\"dweb:/ipfs/QmeZgdqzn9Qa7gtzaCqkcMioVhaYbdSNRfhYcSh7sJp9Yk\"]},\"src/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x50ab4088fc49832e1536f9b39c0cb6c1c51c0c9506830847c739cf37eaa68449\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://adc6524746e06e6b45f903934a4c1e5c4cd37b7cf983b02fcb4b73d40808bdf6\",\"dweb:/ipfs/QmcS5gDnwcnBWEr64jK4UbcTGbvTDPH1ChzV7t3gKyK8SW\"]},\"src/interfaces/IMulticall2.sol\":{\"keccak256\":\"0x71feb6ed372ef787317bc9a0cfca76b3dff01a2af1cc5aa5b26afe790c2ebfc4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24ab9b0e344e2b59c1e56fcac91e94f0287f7756073cc8a80120aa80fece2e22\",\"dweb:/ipfs/QmWYrFhtC9WJSwjamBNyfTVzWRRDX49F7soQYcjsM7Cs7s\"]},\"src/interfaces/IRootBridgeAgent.sol\":{\"keccak256\":\"0xa08cc549e7730f7493275a2e0f405a38b035d9959c46fe7cda1f099cce4d536a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96a275b108034c9da92d41962752bf974a2b917d24e8748c9a91bfc8971efbe3\",\"dweb:/ipfs/QmeDwxTakKPDE3Yrsx5aszRVRdufNQyMz8ES39RBpFUMpm\"]},\"src/interfaces/IRootRouter.sol\":{\"keccak256\":\"0x0ef0ff6de16496d64fda0ab45d4e738d24733e9745592ad867dbf38b218b2c7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd45bd8df3630d66eef6dc5461f685b837d06fb6c461e3c2473832581ad804c\",\"dweb:/ipfs/QmU9BVb5XnAGtQbYfXrYpYDt5c1itVWxtcsSSJUd3W6ZQ7\"]},\"src/interfaces/IVirtualAccount.sol\":{\"keccak256\":\"0xc3142f66d409497c8f23133deaaab9573cfc913b77605c0d3b70a8ca914d0364\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19edb9e607091e33f092fb2360130ec29cfbafafcf9a27baf51c3eb7cef3b9db\",\"dweb:/ipfs/QmShjpqUKAueruxFdszzsDZ943R1Km6kv1Fr422AMqyCoJ\"]}},\"version\":1}";
var metadata$2 = {
	compiler: {
		version: "0.8.19+commit.7dd6d404"
	},
	language: "Solidity",
	output: {
		abi: [
			{
				inputs: [
					{
						internalType: "uint256",
						name: "_localChainId",
						type: "uint256"
					},
					{
						internalType: "address",
						name: "_localPortAddress",
						type: "address"
					},
					{
						internalType: "address",
						name: "_multicallAddress",
						type: "address"
					}
				],
				stateMutability: "nonpayable",
				type: "constructor"
			},
			{
				inputs: [
				],
				type: "error",
				name: "AlreadyInitialized"
			},
			{
				inputs: [
				],
				type: "error",
				name: "NewOwnerIsZeroAddress"
			},
			{
				inputs: [
				],
				type: "error",
				name: "NoHandoverRequest"
			},
			{
				inputs: [
				],
				type: "error",
				name: "Unauthorized"
			},
			{
				inputs: [
				],
				type: "error",
				name: "UnrecognizedBridgeAgent"
			},
			{
				inputs: [
				],
				type: "error",
				name: "UnrecognizedBridgeAgentExecutor"
			},
			{
				inputs: [
				],
				type: "error",
				name: "UnrecognizedFunctionId"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address",
						indexed: true
					}
				],
				type: "event",
				name: "OwnershipHandoverCanceled",
				anonymous: false
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address",
						indexed: true
					}
				],
				type: "event",
				name: "OwnershipHandoverRequested",
				anonymous: false
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "oldOwner",
						type: "address",
						indexed: true
					},
					{
						internalType: "address",
						name: "newOwner",
						type: "address",
						indexed: true
					}
				],
				type: "event",
				name: "OwnershipTransferred",
				anonymous: false
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "bridgeAgentAddress",
				outputs: [
					{
						internalType: "address payable",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "bridgeAgentExecutorAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "settlementOwner",
						type: "address"
					},
					{
						internalType: "address",
						name: "recipient",
						type: "address"
					},
					{
						internalType: "address",
						name: "outputToken",
						type: "address"
					},
					{
						internalType: "uint256",
						name: "amountOut",
						type: "uint256"
					},
					{
						internalType: "uint256",
						name: "depositOut",
						type: "uint256"
					},
					{
						internalType: "uint16",
						name: "dstChainId",
						type: "uint16"
					},
					{
						internalType: "struct GasParams",
						name: "gasParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "callOutAndBridge"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "settlementOwner",
						type: "address"
					},
					{
						internalType: "address",
						name: "recipient",
						type: "address"
					},
					{
						internalType: "address[]",
						name: "outputTokens",
						type: "address[]"
					},
					{
						internalType: "uint256[]",
						name: "amountsOut",
						type: "uint256[]"
					},
					{
						internalType: "uint256[]",
						name: "depositsOut",
						type: "uint256[]"
					},
					{
						internalType: "uint16",
						name: "dstChainId",
						type: "uint16"
					},
					{
						internalType: "struct GasParams",
						name: "gasParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "callOutAndBridgeMultiple"
			},
			{
				inputs: [
				],
				stateMutability: "payable",
				type: "function",
				name: "cancelOwnershipHandover"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "completeOwnershipHandover"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "encodedData",
						type: "bytes"
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "execute"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					},
					{
						internalType: "struct DepositMultipleParams",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint8",
								name: "numberOfAssets",
								type: "uint8"
							},
							{
								internalType: "uint32",
								name: "depositNonce",
								type: "uint32"
							},
							{
								internalType: "address[]",
								name: "hTokens",
								type: "address[]"
							},
							{
								internalType: "address[]",
								name: "tokens",
								type: "address[]"
							},
							{
								internalType: "uint256[]",
								name: "amounts",
								type: "uint256[]"
							},
							{
								internalType: "uint256[]",
								name: "deposits",
								type: "uint256[]"
							}
						]
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeDepositMultiple"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					},
					{
						internalType: "struct DepositParams",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint32",
								name: "depositNonce",
								type: "uint32"
							},
							{
								internalType: "address",
								name: "hToken",
								type: "address"
							},
							{
								internalType: "address",
								name: "token",
								type: "address"
							},
							{
								internalType: "uint256",
								name: "amount",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "deposit",
								type: "uint256"
							}
						]
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeDepositSingle"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_owner",
						type: "address"
					},
					{
						internalType: "uint32",
						name: "_settlementNonce",
						type: "uint32"
					},
					{
						internalType: "address",
						name: "_recipient",
						type: "address"
					},
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					},
					{
						internalType: "struct GasParams",
						name: "_gParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					},
					{
						internalType: "bool",
						name: "_hasFallbackToggled",
						type: "bool"
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeRetrySettlement"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "encodedData",
						type: "bytes"
					},
					{
						internalType: "address",
						name: "userAccount",
						type: "address"
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeSigned"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "encodedData",
						type: "bytes"
					},
					{
						internalType: "struct DepositMultipleParams",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint8",
								name: "numberOfAssets",
								type: "uint8"
							},
							{
								internalType: "uint32",
								name: "depositNonce",
								type: "uint32"
							},
							{
								internalType: "address[]",
								name: "hTokens",
								type: "address[]"
							},
							{
								internalType: "address[]",
								name: "tokens",
								type: "address[]"
							},
							{
								internalType: "uint256[]",
								name: "amounts",
								type: "uint256[]"
							},
							{
								internalType: "uint256[]",
								name: "deposits",
								type: "uint256[]"
							}
						]
					},
					{
						internalType: "address",
						name: "userAccount",
						type: "address"
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeSignedDepositMultiple"
			},
			{
				inputs: [
					{
						internalType: "bytes",
						name: "encodedData",
						type: "bytes"
					},
					{
						internalType: "struct DepositParams",
						name: "",
						type: "tuple",
						components: [
							{
								internalType: "uint32",
								name: "depositNonce",
								type: "uint32"
							},
							{
								internalType: "address",
								name: "hToken",
								type: "address"
							},
							{
								internalType: "address",
								name: "token",
								type: "address"
							},
							{
								internalType: "uint256",
								name: "amount",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "deposit",
								type: "uint256"
							}
						]
					},
					{
						internalType: "address",
						name: "userAccount",
						type: "address"
					},
					{
						internalType: "uint16",
						name: "",
						type: "uint16"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "executeSignedDepositSingle"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "_bridgeAgentAddress",
						type: "address"
					}
				],
				stateMutability: "nonpayable",
				type: "function",
				name: "initialize"
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "localChainId",
				outputs: [
					{
						internalType: "uint256",
						name: "",
						type: "uint256"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "localPortAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "multicallAddress",
				outputs: [
					{
						internalType: "address",
						name: "",
						type: "address"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "view",
				type: "function",
				name: "owner",
				outputs: [
					{
						internalType: "address",
						name: "result",
						type: "address"
					}
				]
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "pendingOwner",
						type: "address"
					}
				],
				stateMutability: "view",
				type: "function",
				name: "ownershipHandoverExpiresAt",
				outputs: [
					{
						internalType: "uint256",
						name: "result",
						type: "uint256"
					}
				]
			},
			{
				inputs: [
				],
				stateMutability: "payable",
				type: "function",
				name: "renounceOwnership"
			},
			{
				inputs: [
				],
				stateMutability: "payable",
				type: "function",
				name: "requestOwnershipHandover"
			},
			{
				inputs: [
					{
						internalType: "uint32",
						name: "_settlementNonce",
						type: "uint32"
					},
					{
						internalType: "address",
						name: "_recipient",
						type: "address"
					},
					{
						internalType: "bytes",
						name: "",
						type: "bytes"
					},
					{
						internalType: "struct GasParams",
						name: "_gParams",
						type: "tuple",
						components: [
							{
								internalType: "uint256",
								name: "gasLimit",
								type: "uint256"
							},
							{
								internalType: "uint256",
								name: "remoteBranchExecutionGas",
								type: "uint256"
							}
						]
					},
					{
						internalType: "bool",
						name: "_hasFallbackToggled",
						type: "bool"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "retrySettlement"
			},
			{
				inputs: [
					{
						internalType: "address",
						name: "newOwner",
						type: "address"
					}
				],
				stateMutability: "payable",
				type: "function",
				name: "transferOwnership"
			}
		],
		devdoc: {
			kind: "dev",
			methods: {
				"callOutAndBridge(address,address,address,uint256,uint256,uint16,(uint256,uint256))": {
					params: {
						amountOut: "Amount of output hTokens to send.",
						depositOut: "Amount of output hTokens to deposit.",
						dstChainId: "Chain Id of the destination chain.",
						gasParams: "Amounts of tokens to withdraw from the destination port.",
						outputToken: "Address of the output hToken.",
						recipient: "Address to receive the output assets.",
						settlementOwner: "settlement owner and excess gas receiver."
					}
				},
				"callOutAndBridgeMultiple(address,address,address[],uint256[],uint256[],uint16,(uint256,uint256))": {
					params: {
						amountsOut: "Total amount of tokens to send.",
						depositsOut: "Amounts of tokens to withdraw from the destination port.",
						gasParams: "Amounts of tokens to withdraw from the destination port.",
						outputTokens: "Addresses of the output hTokens.",
						recipient: "Address to receive the output assets.",
						settlementOwner: "settlement owner and excess gas receiver."
					}
				},
				"cancelOwnershipHandover()": {
					details: "Cancels the two-step ownership handover to the caller, if any."
				},
				"completeOwnershipHandover(address)": {
					details: "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
				},
				constructor: {
					params: {
						_localChainId: "local layer zero chain id.",
						_localPortAddress: "address of the root Port.",
						_multicallAddress: "address of the Multicall contract."
					}
				},
				"execute(bytes,uint16)": {
					details: "FuncIDs  FUNC ID      | FUNC NAME  0x01         |  multicallNoOutput  0x02         |  multicallSingleOutput  0x03         |  multicallMultipleOutput",
					params: {
						params: "data received from messaging layer.",
						srcChainId: "chain where the request originated from."
					}
				},
				"executeDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),uint16)": {
					params: {
						dParams: "cross-chain multiple deposit information.",
						params: "execution data received from messaging layer.",
						srcChainId: "chain where the request originated from."
					}
				},
				"executeDepositSingle(bytes,(uint32,address,address,uint256,uint256),uint16)": {
					params: {
						dParams: "cross-chain deposit information.",
						params: "execution data received from messaging layer.",
						srcChainId: "chain where the request originated from."
					}
				},
				"executeRetrySettlement(address,uint32,address,bytes,(uint256,uint256),bool,uint16)": {
					params: {
						_gParams: "gas parameters.",
						_hasFallbackToggled: "flag to indicate if fallback has been toggled.",
						_owner: "user account address.",
						_params: "data received from messaging layer.",
						_recipient: "recipient address.",
						_settlementNonce: "settlement nonce.",
						_srcChainId: "chain where the request originated from."
					}
				},
				"executeSigned(bytes,address,uint16)": {
					params: {
						params: "execution data received from messaging layer.",
						srcChainId: "chain where the request originated from.",
						userAccount: "user account address."
					}
				},
				"executeSignedDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),address,uint16)": {
					params: {
						dParams: "cross-chain multiple deposit information.",
						params: "execution data received from messaging layer.",
						srcChainId: "chain where the request originated from.",
						userAccount: "user account address."
					}
				},
				"executeSignedDepositSingle(bytes,(uint32,address,address,uint256,uint256),address,uint16)": {
					params: {
						dParams: "cross-chain deposit information.",
						params: "execution data received from messaging layer.",
						srcChainId: "chain where the request originated from.",
						userAccount: "user account address."
					}
				},
				"initialize(address)": {
					params: {
						_bridgeAgentAddress: "The address of the Bridge Agent."
					}
				},
				"owner()": {
					details: "Returns the owner of the contract."
				},
				"ownershipHandoverExpiresAt(address)": {
					details: "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
				},
				"renounceOwnership()": {
					details: "Allows the owner to renounce their ownership."
				},
				"requestOwnershipHandover()": {
					details: "Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default."
				},
				"retrySettlement(uint32,address,bytes,(uint256,uint256),bool)": {
					params: {
						_gParams: "gas parameters.",
						_hasFallbackToggled: "flag to indicate if fallback has been toggled.",
						_params: "data received from messaging layer.",
						_recipient: "recipient address.",
						_settlementNonce: "settlement nonce."
					}
				},
				"transferOwnership(address)": {
					details: "Allows the owner to transfer the ownership to `newOwner`."
				}
			},
			version: 1
		},
		userdoc: {
			kind: "user",
			methods: {
				"bridgeAgentAddress()": {
					notice: "Bridge Agent to manage communications and cross-chain assets."
				},
				"bridgeAgentExecutorAddress()": {
					notice: "Bridge Agent Executor Address."
				},
				"callOutAndBridge(address,address,address,uint256,uint256,uint16,(uint256,uint256))": {
					notice: "Function to call 'callOutAndBridge' on RootBridgeAgent."
				},
				"callOutAndBridgeMultiple(address,address,address[],uint256[],uint256[],uint16,(uint256,uint256))": {
					notice: "Function to call 'callOutAndBridgeMultiple' on RootBridgeAgent."
				},
				constructor: {
					notice: "Constructor for Multicall Root Router."
				},
				"execute(bytes,uint16)": {
					notice: "Function responsible of executing a crosschain request without any deposit."
				},
				"executeDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),uint16)": {
					notice: "Function responsible of executing a crosschain request which contains cross-chain deposit information for multiple assets attached."
				},
				"executeDepositSingle(bytes,(uint32,address,address,uint256,uint256),uint16)": {
					notice: "Function responsible of executing a crosschain request which contains cross-chain deposit information attached."
				},
				"executeRetrySettlement(address,uint32,address,bytes,(uint256,uint256),bool,uint16)": {
					notice: "Function to execute Branch Bridge Agent initiated requests to retry a settlement."
				},
				"executeSigned(bytes,address,uint16)": {
					notice: "Function responsible of executing a crosschain request with msg.sender without any deposit."
				},
				"executeSignedDepositMultiple(bytes,(uint8,uint32,address[],address[],uint256[],uint256[]),address,uint16)": {
					notice: "Function responsible of executing a crosschain request which contains cross-chain deposit information for multiple assets and msg.sender attached."
				},
				"executeSignedDepositSingle(bytes,(uint32,address,address,uint256,uint256),address,uint16)": {
					notice: "Function responsible of executing a crosschain request which contains cross-chain deposit information and msg.sender attached."
				},
				"initialize(address)": {
					notice: "Initializes the Multicall Root Router."
				},
				"localChainId()": {
					notice: "Root Chain Layer Zero Identifier."
				},
				"localPortAddress()": {
					notice: "Address for Local Port Address where assets are stored and managed."
				},
				"multicallAddress()": {
					notice: "Root Chain Multicall Address."
				},
				"retrySettlement(uint32,address,bytes,(uint256,uint256),bool)": {
					notice: "Function to execute Branch Bridge Agent initiated requests to retry a settlement."
				}
			},
			version: 1
		}
	},
	settings: {
		remappings: [
			"@lib/=lib/",
			"@omni/=src/",
			"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
			"@test/=test/",
			"ds-test/=lib/forge-std/lib/ds-test/src/",
			"forge-std/=lib/forge-std/src/",
			"openzeppelin-contracts/=lib/openzeppelin-contracts/",
			"solady/=lib/solady/src/",
			"solmate/=lib/solmate/src/"
		],
		optimizer: {
			enabled: true,
			runs: 200
		},
		metadata: {
			bytecodeHash: "ipfs"
		},
		compilationTarget: {
			"src/MulticallRootRouter.sol": "MulticallRootRouter"
		},
		evmVersion: "paris",
		libraries: {
		}
	},
	sources: {
		"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol": {
			keccak256: "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da",
			urls: [
				"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708",
				"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV"
			],
			license: "MIT"
		},
		"lib/solady/src/auth/Ownable.sol": {
			keccak256: "0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3",
			urls: [
				"bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3",
				"dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs"
			],
			license: "MIT"
		},
		"lib/solady/src/utils/SafeTransferLib.sol": {
			keccak256: "0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c",
			urls: [
				"bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a",
				"dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg"
			],
			license: "MIT"
		},
		"lib/solmate/src/utils/ReentrancyGuard.sol": {
			keccak256: "0xb282dd78aa7375d6b200b9a5d8dd214b2e5df1004f8217a4b4c2b07f0c5bfd01",
			urls: [
				"bzz-raw://5fca62eb8d3dbd2b3b7e4bb051f6da16f4d0ff9cee61c39cebb80f031f6a8800",
				"dweb:/ipfs/QmbrsXPK91iBFwHKwJs2HLRud2KzMoBDRiWYMUtyV5H57j"
			],
			license: "AGPL-3.0-only"
		},
		"src/MulticallRootRouter.sol": {
			keccak256: "0x396be4f4ba71afa82cdf6ed4d7fbc574528e3dc71eacc478dd801edc85fd665e",
			urls: [
				"bzz-raw://a6188df74c2c590aea486f7ed33a319ba4e1a66b1da8db4dc94c785f5ca6ed65",
				"dweb:/ipfs/Qmeyx4NCPjerTybfy2hpA3YTZsmw75tLXKKApsWfHFeJG8"
			],
			license: "MIT"
		},
		"src/interfaces/BridgeAgentStructs.sol": {
			keccak256: "0xb6a224b12e369966ac8de74487b71e38c6e06ac933b4e3a148547464bc511822",
			urls: [
				"bzz-raw://aa3bee57ab7c686d12cf82c08bbe11096145ba9630278f5ad63f9e425d06e684",
				"dweb:/ipfs/QmeZgdqzn9Qa7gtzaCqkcMioVhaYbdSNRfhYcSh7sJp9Yk"
			],
			license: "MIT"
		},
		"src/interfaces/ILayerZeroReceiver.sol": {
			keccak256: "0x50ab4088fc49832e1536f9b39c0cb6c1c51c0c9506830847c739cf37eaa68449",
			urls: [
				"bzz-raw://adc6524746e06e6b45f903934a4c1e5c4cd37b7cf983b02fcb4b73d40808bdf6",
				"dweb:/ipfs/QmcS5gDnwcnBWEr64jK4UbcTGbvTDPH1ChzV7t3gKyK8SW"
			],
			license: "BUSL-1.1"
		},
		"src/interfaces/IMulticall2.sol": {
			keccak256: "0x71feb6ed372ef787317bc9a0cfca76b3dff01a2af1cc5aa5b26afe790c2ebfc4",
			urls: [
				"bzz-raw://24ab9b0e344e2b59c1e56fcac91e94f0287f7756073cc8a80120aa80fece2e22",
				"dweb:/ipfs/QmWYrFhtC9WJSwjamBNyfTVzWRRDX49F7soQYcjsM7Cs7s"
			],
			license: "MIT"
		},
		"src/interfaces/IRootBridgeAgent.sol": {
			keccak256: "0xa08cc549e7730f7493275a2e0f405a38b035d9959c46fe7cda1f099cce4d536a",
			urls: [
				"bzz-raw://96a275b108034c9da92d41962752bf974a2b917d24e8748c9a91bfc8971efbe3",
				"dweb:/ipfs/QmeDwxTakKPDE3Yrsx5aszRVRdufNQyMz8ES39RBpFUMpm"
			],
			license: "MIT"
		},
		"src/interfaces/IRootRouter.sol": {
			keccak256: "0x0ef0ff6de16496d64fda0ab45d4e738d24733e9745592ad867dbf38b218b2c7d",
			urls: [
				"bzz-raw://3dd45bd8df3630d66eef6dc5461f685b837d06fb6c461e3c2473832581ad804c",
				"dweb:/ipfs/QmU9BVb5XnAGtQbYfXrYpYDt5c1itVWxtcsSSJUd3W6ZQ7"
			],
			license: "MIT"
		},
		"src/interfaces/IVirtualAccount.sol": {
			keccak256: "0xc3142f66d409497c8f23133deaaab9573cfc913b77605c0d3b70a8ca914d0364",
			urls: [
				"bzz-raw://19edb9e607091e33f092fb2360130ec29cfbafafcf9a27baf51c3eb7cef3b9db",
				"dweb:/ipfs/QmShjpqUKAueruxFdszzsDZ943R1Km6kv1Fr422AMqyCoJ"
			],
			license: "MIT"
		}
	},
	version: 1
};
var ast$2 = {
	absolutePath: "src/MulticallRootRouter.sol",
	id: 57644,
	exportedSymbols: {
		Call: [
			66421
		],
		DepositMultipleParams: [
			64079
		],
		DepositParams: [
			64062
		],
		GasParams: [
			64010
		],
		IBridgeAgent: [
			65747
		],
		IMulticall: [
			65437
		],
		IRootRouter: [
			66412
		],
		IVirtualAccount: [
			66494
		],
		MulticallRootRouter: [
			57643
		],
		OutputMultipleParams: [
			56648
		],
		OutputParams: [
			56634
		],
		Ownable: [
			30399
		],
		ReentrancyGuard: [
			48956
		],
		SafeTransferLib: [
			46111
		],
		SettlementInput: [
			64107
		],
		SettlementMultipleInput: [
			64117
		]
	},
	nodeType: "SourceUnit",
	src: "32:20876:88",
	nodes: [
		{
			id: 56603,
			nodeType: "PragmaDirective",
			src: "32:23:88",
			nodes: [
			],
			literals: [
				"solidity",
				"^",
				"0.8",
				".0"
			]
		},
		{
			id: 56605,
			nodeType: "ImportDirective",
			src: "57:48:88",
			nodes: [
			],
			absolutePath: "lib/solady/src/auth/Ownable.sol",
			file: "solady/auth/Ownable.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 30400,
			symbolAliases: [
				{
					foreign: {
						id: 56604,
						name: "Ownable",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 30399,
						src: "65:7:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56607,
			nodeType: "ImportDirective",
			src: "106:65:88",
			nodes: [
			],
			absolutePath: "lib/solady/src/utils/SafeTransferLib.sol",
			file: "solady/utils/SafeTransferLib.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 46112,
			symbolAliases: [
				{
					foreign: {
						id: 56606,
						name: "SafeTransferLib",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 46111,
						src: "114:15:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56609,
			nodeType: "ImportDirective",
			src: "173:66:88",
			nodes: [
			],
			absolutePath: "lib/solmate/src/utils/ReentrancyGuard.sol",
			file: "solmate/utils/ReentrancyGuard.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 48957,
			symbolAliases: [
				{
					foreign: {
						id: 56608,
						name: "ReentrancyGuard",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 48956,
						src: "181:15:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56611,
			nodeType: "ImportDirective",
			src: "241:71:88",
			nodes: [
			],
			absolutePath: "src/interfaces/IMulticall2.sol",
			file: "./interfaces/IMulticall2.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 65438,
			symbolAliases: [
				{
					foreign: {
						id: 56610,
						name: "IMulticall2",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 65437,
						src: "249:11:88",
						typeDescriptions: {
						}
					},
					local: "IMulticall",
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56616,
			nodeType: "ImportDirective",
			src: "313:154:88",
			nodes: [
			],
			absolutePath: "src/interfaces/IRootBridgeAgent.sol",
			file: "./interfaces/IRootBridgeAgent.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 65748,
			symbolAliases: [
				{
					foreign: {
						id: 56612,
						name: "GasParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64010,
						src: "326:9:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 56613,
						name: "IRootBridgeAgent",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 65747,
						src: "341:16:88",
						typeDescriptions: {
						}
					},
					local: "IBridgeAgent",
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 56614,
						name: "SettlementInput",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64107,
						src: "379:15:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 56615,
						name: "SettlementMultipleInput",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64117,
						src: "400:23:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56620,
			nodeType: "ImportDirective",
			src: "468:95:88",
			nodes: [
			],
			absolutePath: "src/interfaces/IRootRouter.sol",
			file: "./interfaces/IRootRouter.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 66413,
			symbolAliases: [
				{
					foreign: {
						id: 56617,
						name: "IRootRouter",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 66412,
						src: "476:11:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 56618,
						name: "DepositParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64062,
						src: "489:13:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 56619,
						name: "DepositMultipleParams",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 64079,
						src: "504:21:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56623,
			nodeType: "ImportDirective",
			src: "564:71:88",
			nodes: [
			],
			absolutePath: "src/interfaces/IVirtualAccount.sol",
			file: "./interfaces/IVirtualAccount.sol",
			nameLocation: "-1:-1:-1",
			scope: 57644,
			sourceUnit: 66495,
			symbolAliases: [
				{
					foreign: {
						id: 56621,
						name: "IVirtualAccount",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 66494,
						src: "572:15:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				},
				{
					foreign: {
						id: 56622,
						name: "Call",
						nodeType: "Identifier",
						overloadedDeclarations: [
						],
						referencedDeclaration: 66421,
						src: "589:4:88",
						typeDescriptions: {
						}
					},
					nameLocation: "-1:-1:-1"
				}
			],
			unitAlias: ""
		},
		{
			id: 56634,
			nodeType: "StructDefinition",
			src: "1091:147:88",
			nodes: [
			],
			canonicalName: "OutputParams",
			members: [
				{
					constant: false,
					id: 56625,
					mutability: "mutable",
					name: "settlementOwner",
					nameLocation: "1125:15:88",
					nodeType: "VariableDeclaration",
					scope: 56634,
					src: "1117:23:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56624,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1117:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56627,
					mutability: "mutable",
					name: "recipient",
					nameLocation: "1154:9:88",
					nodeType: "VariableDeclaration",
					scope: 56634,
					src: "1146:17:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56626,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1146:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56629,
					mutability: "mutable",
					name: "outputToken",
					nameLocation: "1177:11:88",
					nodeType: "VariableDeclaration",
					scope: 56634,
					src: "1169:19:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56628,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1169:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56631,
					mutability: "mutable",
					name: "amountOut",
					nameLocation: "1202:9:88",
					nodeType: "VariableDeclaration",
					scope: 56634,
					src: "1194:17:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_uint256",
						typeString: "uint256"
					},
					typeName: {
						id: 56630,
						name: "uint256",
						nodeType: "ElementaryTypeName",
						src: "1194:7:88",
						typeDescriptions: {
							typeIdentifier: "t_uint256",
							typeString: "uint256"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56633,
					mutability: "mutable",
					name: "depositOut",
					nameLocation: "1225:10:88",
					nodeType: "VariableDeclaration",
					scope: 56634,
					src: "1217:18:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_uint256",
						typeString: "uint256"
					},
					typeName: {
						id: 56632,
						name: "uint256",
						nodeType: "ElementaryTypeName",
						src: "1217:7:88",
						typeDescriptions: {
							typeIdentifier: "t_uint256",
							typeString: "uint256"
						}
					},
					visibility: "internal"
				}
			],
			name: "OutputParams",
			nameLocation: "1098:12:88",
			scope: 57644,
			visibility: "public"
		},
		{
			id: 56648,
			nodeType: "StructDefinition",
			src: "1708:164:88",
			nodes: [
			],
			canonicalName: "OutputMultipleParams",
			members: [
				{
					constant: false,
					id: 56636,
					mutability: "mutable",
					name: "settlementOwner",
					nameLocation: "1750:15:88",
					nodeType: "VariableDeclaration",
					scope: 56648,
					src: "1742:23:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56635,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1742:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56638,
					mutability: "mutable",
					name: "recipient",
					nameLocation: "1779:9:88",
					nodeType: "VariableDeclaration",
					scope: 56648,
					src: "1771:17:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56637,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "1771:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56641,
					mutability: "mutable",
					name: "outputTokens",
					nameLocation: "1804:12:88",
					nodeType: "VariableDeclaration",
					scope: 56648,
					src: "1794:22:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_array$_t_address_$dyn_storage_ptr",
						typeString: "address[]"
					},
					typeName: {
						baseType: {
							id: 56639,
							name: "address",
							nodeType: "ElementaryTypeName",
							src: "1794:7:88",
							stateMutability: "nonpayable",
							typeDescriptions: {
								typeIdentifier: "t_address",
								typeString: "address"
							}
						},
						id: 56640,
						nodeType: "ArrayTypeName",
						src: "1794:9:88",
						typeDescriptions: {
							typeIdentifier: "t_array$_t_address_$dyn_storage_ptr",
							typeString: "address[]"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56644,
					mutability: "mutable",
					name: "amountsOut",
					nameLocation: "1832:10:88",
					nodeType: "VariableDeclaration",
					scope: 56648,
					src: "1822:20:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
						typeString: "uint256[]"
					},
					typeName: {
						baseType: {
							id: 56642,
							name: "uint256",
							nodeType: "ElementaryTypeName",
							src: "1822:7:88",
							typeDescriptions: {
								typeIdentifier: "t_uint256",
								typeString: "uint256"
							}
						},
						id: 56643,
						nodeType: "ArrayTypeName",
						src: "1822:9:88",
						typeDescriptions: {
							typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
							typeString: "uint256[]"
						}
					},
					visibility: "internal"
				},
				{
					constant: false,
					id: 56647,
					mutability: "mutable",
					name: "depositsOut",
					nameLocation: "1858:11:88",
					nodeType: "VariableDeclaration",
					scope: 56648,
					src: "1848:21:88",
					stateVariable: false,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
						typeString: "uint256[]"
					},
					typeName: {
						baseType: {
							id: 56645,
							name: "uint256",
							nodeType: "ElementaryTypeName",
							src: "1848:7:88",
							typeDescriptions: {
								typeIdentifier: "t_uint256",
								typeString: "uint256"
							}
						},
						id: 56646,
						nodeType: "ArrayTypeName",
						src: "1848:9:88",
						typeDescriptions: {
							typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
							typeString: "uint256[]"
						}
					},
					visibility: "internal"
				}
			],
			name: "OutputMultipleParams",
			nameLocation: "1715:20:88",
			scope: 57644,
			visibility: "public"
		},
		{
			id: 57643,
			nodeType: "ContractDefinition",
			src: "2445:18462:88",
			nodes: [
				{
					id: 56658,
					nodeType: "UsingForDirective",
					src: "2521:34:88",
					nodes: [
					],
					global: false,
					libraryName: {
						id: 56656,
						name: "SafeTransferLib",
						nameLocations: [
							"2527:15:88"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 46111,
						src: "2527:15:88"
					},
					typeName: {
						id: 56657,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "2547:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					}
				},
				{
					id: 56662,
					nodeType: "VariableDeclaration",
					src: "2937:111:88",
					nodes: [
					],
					constant: true,
					documentation: {
						id: 56659,
						nodeType: "StructuredDocumentation",
						src: "2740:192:88",
						text: "@dev Used for identifying cases when this contract's balance of a token is to be used as an input\n This value is equivalent to 1<<255, i.e. a singular 1 in the most significant bit."
					},
					mutability: "constant",
					name: "CONTRACT_BALANCE",
					nameLocation: "2963:16:88",
					scope: 57643,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_uint256",
						typeString: "uint256"
					},
					typeName: {
						id: 56660,
						name: "uint256",
						nodeType: "ElementaryTypeName",
						src: "2937:7:88",
						typeDescriptions: {
							typeIdentifier: "t_uint256",
							typeString: "uint256"
						}
					},
					value: {
						hexValue: "307838303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030",
						id: 56661,
						isConstant: false,
						isLValue: false,
						isPure: true,
						kind: "number",
						lValueRequested: false,
						nodeType: "Literal",
						src: "2982:66:88",
						typeDescriptions: {
							typeIdentifier: "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
							typeString: "int_const 5789...(69 digits omitted)...9968"
						},
						value: "0x8000000000000000000000000000000000000000000000000000000000000000"
					},
					visibility: "internal"
				},
				{
					id: 56665,
					nodeType: "VariableDeclaration",
					src: "3294:37:88",
					nodes: [
					],
					constant: false,
					documentation: {
						id: 56663,
						nodeType: "StructuredDocumentation",
						src: "3244:45:88",
						text: "@notice Root Chain Layer Zero Identifier."
					},
					functionSelector: "5b056da5",
					mutability: "immutable",
					name: "localChainId",
					nameLocation: "3319:12:88",
					scope: 57643,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_uint256",
						typeString: "uint256"
					},
					typeName: {
						id: 56664,
						name: "uint256",
						nodeType: "ElementaryTypeName",
						src: "3294:7:88",
						typeDescriptions: {
							typeIdentifier: "t_uint256",
							typeString: "uint256"
						}
					},
					visibility: "public"
				},
				{
					id: 56668,
					nodeType: "VariableDeclaration",
					src: "3422:41:88",
					nodes: [
					],
					constant: false,
					documentation: {
						id: 56666,
						nodeType: "StructuredDocumentation",
						src: "3338:79:88",
						text: "@notice Address for Local Port Address where assets are stored and managed."
					},
					functionSelector: "5abfaf6c",
					mutability: "immutable",
					name: "localPortAddress",
					nameLocation: "3447:16:88",
					scope: 57643,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56667,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "3422:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "public"
				},
				{
					id: 56671,
					nodeType: "VariableDeclaration",
					src: "3516:41:88",
					nodes: [
					],
					constant: false,
					documentation: {
						id: 56669,
						nodeType: "StructuredDocumentation",
						src: "3470:41:88",
						text: "@notice Root Chain Multicall Address."
					},
					functionSelector: "08178604",
					mutability: "immutable",
					name: "multicallAddress",
					nameLocation: "3541:16:88",
					scope: 57643,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56670,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "3516:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "public"
				},
				{
					id: 56674,
					nodeType: "VariableDeclaration",
					src: "3642:41:88",
					nodes: [
					],
					constant: false,
					documentation: {
						id: 56672,
						nodeType: "StructuredDocumentation",
						src: "3564:73:88",
						text: "@notice Bridge Agent to manage communications and cross-chain assets."
					},
					functionSelector: "24e73159",
					mutability: "mutable",
					name: "bridgeAgentAddress",
					nameLocation: "3665:18:88",
					scope: 57643,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address_payable",
						typeString: "address payable"
					},
					typeName: {
						id: 56673,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "3642:15:88",
						stateMutability: "payable",
						typeDescriptions: {
							typeIdentifier: "t_address_payable",
							typeString: "address payable"
						}
					},
					visibility: "public"
				},
				{
					id: 56677,
					nodeType: "VariableDeclaration",
					src: "3737:41:88",
					nodes: [
					],
					constant: false,
					documentation: {
						id: 56675,
						nodeType: "StructuredDocumentation",
						src: "3690:42:88",
						text: "@notice Bridge Agent Executor Address."
					},
					functionSelector: "546af931",
					mutability: "mutable",
					name: "bridgeAgentExecutorAddress",
					nameLocation: "3752:26:88",
					scope: 57643,
					stateVariable: true,
					storageLocation: "default",
					typeDescriptions: {
						typeIdentifier: "t_address",
						typeString: "address"
					},
					typeName: {
						id: 56676,
						name: "address",
						nodeType: "ElementaryTypeName",
						src: "3737:7:88",
						stateMutability: "nonpayable",
						typeDescriptions: {
							typeIdentifier: "t_address",
							typeString: "address"
						}
					},
					visibility: "public"
				},
				{
					id: 56725,
					nodeType: "FunctionDefinition",
					src: "4216:432:88",
					nodes: [
					],
					body: {
						id: 56724,
						nodeType: "Block",
						src: "4305:343:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											commonType: {
												typeIdentifier: "t_address",
												typeString: "address"
											},
											id: 56693,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											leftExpression: {
												id: 56688,
												name: "_localPortAddress",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 56682,
												src: "4323:17:88",
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											nodeType: "BinaryOperation",
											operator: "!=",
											rightExpression: {
												"arguments": [
													{
														hexValue: "30",
														id: 56691,
														isConstant: false,
														isLValue: false,
														isPure: true,
														kind: "number",
														lValueRequested: false,
														nodeType: "Literal",
														src: "4352:1:88",
														typeDescriptions: {
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														},
														value: "0"
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														}
													],
													id: 56690,
													isConstant: false,
													isLValue: false,
													isPure: true,
													lValueRequested: false,
													nodeType: "ElementaryTypeNameExpression",
													src: "4344:7:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_address_$",
														typeString: "type(address)"
													},
													typeName: {
														id: 56689,
														name: "address",
														nodeType: "ElementaryTypeName",
														src: "4344:7:88",
														typeDescriptions: {
														}
													}
												},
												id: 56692,
												isConstant: false,
												isLValue: false,
												isPure: true,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "4344:10:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											src: "4323:31:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										},
										{
											hexValue: "4c6f63616c20506f727420416464726573732063616e6e6f742062652030",
											id: 56694,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "4356:32:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_5cbf9fde650d3f11135af89a9dbdee230a4b9536f6f298077d98d5a8f77408c2",
												typeString: "literal_string \"Local Port Address cannot be 0\""
											},
											value: "Local Port Address cannot be 0"
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											},
											{
												typeIdentifier: "t_stringliteral_5cbf9fde650d3f11135af89a9dbdee230a4b9536f6f298077d98d5a8f77408c2",
												typeString: "literal_string \"Local Port Address cannot be 0\""
											}
										],
										id: 56687,
										name: "require",
										nodeType: "Identifier",
										overloadedDeclarations: [
											-18,
											-18
										],
										referencedDeclaration: -18,
										src: "4315:7:88",
										typeDescriptions: {
											typeIdentifier: "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
											typeString: "function (bool,string memory) pure"
										}
									},
									id: 56695,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "4315:74:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56696,
								nodeType: "ExpressionStatement",
								src: "4315:74:88"
							},
							{
								expression: {
									"arguments": [
										{
											commonType: {
												typeIdentifier: "t_address",
												typeString: "address"
											},
											id: 56703,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											leftExpression: {
												id: 56698,
												name: "_multicallAddress",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 56684,
												src: "4407:17:88",
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											nodeType: "BinaryOperation",
											operator: "!=",
											rightExpression: {
												"arguments": [
													{
														hexValue: "30",
														id: 56701,
														isConstant: false,
														isLValue: false,
														isPure: true,
														kind: "number",
														lValueRequested: false,
														nodeType: "Literal",
														src: "4436:1:88",
														typeDescriptions: {
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														},
														value: "0"
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														}
													],
													id: 56700,
													isConstant: false,
													isLValue: false,
													isPure: true,
													lValueRequested: false,
													nodeType: "ElementaryTypeNameExpression",
													src: "4428:7:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_address_$",
														typeString: "type(address)"
													},
													typeName: {
														id: 56699,
														name: "address",
														nodeType: "ElementaryTypeName",
														src: "4428:7:88",
														typeDescriptions: {
														}
													}
												},
												id: 56702,
												isConstant: false,
												isLValue: false,
												isPure: true,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "4428:10:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											src: "4407:31:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										},
										{
											hexValue: "4d756c746963616c6c20416464726573732063616e6e6f742062652030",
											id: 56704,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "4440:31:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_7feafc8f85e04f7ba9617b5641358ee11bb729c9b6c6b1fdc65419850e460ad9",
												typeString: "literal_string \"Multicall Address cannot be 0\""
											},
											value: "Multicall Address cannot be 0"
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											},
											{
												typeIdentifier: "t_stringliteral_7feafc8f85e04f7ba9617b5641358ee11bb729c9b6c6b1fdc65419850e460ad9",
												typeString: "literal_string \"Multicall Address cannot be 0\""
											}
										],
										id: 56697,
										name: "require",
										nodeType: "Identifier",
										overloadedDeclarations: [
											-18,
											-18
										],
										referencedDeclaration: -18,
										src: "4399:7:88",
										typeDescriptions: {
											typeIdentifier: "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
											typeString: "function (bool,string memory) pure"
										}
									},
									id: 56705,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "4399:73:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56706,
								nodeType: "ExpressionStatement",
								src: "4399:73:88"
							},
							{
								expression: {
									id: 56709,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 56707,
										name: "localChainId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56665,
										src: "4483:12:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										id: 56708,
										name: "_localChainId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56680,
										src: "4498:13:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									src: "4483:28:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								id: 56710,
								nodeType: "ExpressionStatement",
								src: "4483:28:88"
							},
							{
								expression: {
									id: 56713,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 56711,
										name: "localPortAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56668,
										src: "4521:16:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										id: 56712,
										name: "_localPortAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56682,
										src: "4540:17:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "4521:36:88",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								id: 56714,
								nodeType: "ExpressionStatement",
								src: "4521:36:88"
							},
							{
								expression: {
									id: 56717,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 56715,
										name: "multicallAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56671,
										src: "4567:16:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										id: 56716,
										name: "_multicallAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56684,
										src: "4586:17:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "4567:36:88",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								id: 56718,
								nodeType: "ExpressionStatement",
								src: "4567:36:88"
							},
							{
								expression: {
									"arguments": [
										{
											expression: {
												id: 56720,
												name: "msg",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: -15,
												src: "4630:3:88",
												typeDescriptions: {
													typeIdentifier: "t_magic_message",
													typeString: "msg"
												}
											},
											id: 56721,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "4634:6:88",
											memberName: "sender",
											nodeType: "MemberAccess",
											src: "4630:10:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											}
										],
										id: 56719,
										name: "_initializeOwner",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 30278,
										src: "4613:16:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_address_$returns$__$",
											typeString: "function (address)"
										}
									},
									id: 56722,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "4613:28:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56723,
								nodeType: "ExpressionStatement",
								src: "4613:28:88"
							}
						]
					},
					documentation: {
						id: 56678,
						nodeType: "StructuredDocumentation",
						src: "3966:245:88",
						text: " @notice Constructor for Multicall Root Router.\n @param _localChainId local layer zero chain id.\n @param _localPortAddress address of the root Port.\n @param _multicallAddress address of the Multicall contract."
					},
					implemented: true,
					kind: "constructor",
					modifiers: [
					],
					name: "",
					nameLocation: "-1:-1:-1",
					parameters: {
						id: 56685,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56680,
								mutability: "mutable",
								name: "_localChainId",
								nameLocation: "4236:13:88",
								nodeType: "VariableDeclaration",
								scope: 56725,
								src: "4228:21:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 56679,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "4228:7:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56682,
								mutability: "mutable",
								name: "_localPortAddress",
								nameLocation: "4259:17:88",
								nodeType: "VariableDeclaration",
								scope: 56725,
								src: "4251:25:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56681,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "4251:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56684,
								mutability: "mutable",
								name: "_multicallAddress",
								nameLocation: "4286:17:88",
								nodeType: "VariableDeclaration",
								scope: 56725,
								src: "4278:25:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56683,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "4278:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "4227:77:88"
					},
					returnParameters: {
						id: 56686,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "4305:0:88"
					},
					scope: 57643,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "public"
				},
				{
					id: 56762,
					nodeType: "FunctionDefinition",
					src: "4980:353:88",
					nodes: [
					],
					body: {
						id: 56761,
						nodeType: "Block",
						src: "5048:285:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											commonType: {
												typeIdentifier: "t_address",
												typeString: "address"
											},
											id: 56739,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											leftExpression: {
												id: 56734,
												name: "_bridgeAgentAddress",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 56728,
												src: "5066:19:88",
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											nodeType: "BinaryOperation",
											operator: "!=",
											rightExpression: {
												"arguments": [
													{
														hexValue: "30",
														id: 56737,
														isConstant: false,
														isLValue: false,
														isPure: true,
														kind: "number",
														lValueRequested: false,
														nodeType: "Literal",
														src: "5097:1:88",
														typeDescriptions: {
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														},
														value: "0"
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_rational_0_by_1",
															typeString: "int_const 0"
														}
													],
													id: 56736,
													isConstant: false,
													isLValue: false,
													isPure: true,
													lValueRequested: false,
													nodeType: "ElementaryTypeNameExpression",
													src: "5089:7:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_address_$",
														typeString: "type(address)"
													},
													typeName: {
														id: 56735,
														name: "address",
														nodeType: "ElementaryTypeName",
														src: "5089:7:88",
														typeDescriptions: {
														}
													}
												},
												id: 56738,
												isConstant: false,
												isLValue: false,
												isPure: true,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "5089:10:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											},
											src: "5066:33:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										},
										{
											hexValue: "427269646765204167656e7420416464726573732063616e6e6f742062652030",
											id: 56740,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "5101:34:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_a7c38071b7af3ccfbf78e642cf02f72164bbe4abdb0ce07c6dfbce580790650c",
												typeString: "literal_string \"Bridge Agent Address cannot be 0\""
											},
											value: "Bridge Agent Address cannot be 0"
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											},
											{
												typeIdentifier: "t_stringliteral_a7c38071b7af3ccfbf78e642cf02f72164bbe4abdb0ce07c6dfbce580790650c",
												typeString: "literal_string \"Bridge Agent Address cannot be 0\""
											}
										],
										id: 56733,
										name: "require",
										nodeType: "Identifier",
										overloadedDeclarations: [
											-18,
											-18
										],
										referencedDeclaration: -18,
										src: "5058:7:88",
										typeDescriptions: {
											typeIdentifier: "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
											typeString: "function (bool,string memory) pure"
										}
									},
									id: 56741,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "5058:78:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56742,
								nodeType: "ExpressionStatement",
								src: "5058:78:88"
							},
							{
								expression: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 56743,
										name: "renounceOwnership",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 30337,
										src: "5146:17:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$__$returns$__$",
											typeString: "function ()"
										}
									},
									id: 56744,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "5146:19:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56745,
								nodeType: "ExpressionStatement",
								src: "5146:19:88"
							},
							{
								expression: {
									id: 56751,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 56746,
										name: "bridgeAgentAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56674,
										src: "5176:18:88",
										typeDescriptions: {
											typeIdentifier: "t_address_payable",
											typeString: "address payable"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										"arguments": [
											{
												id: 56749,
												name: "_bridgeAgentAddress",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 56728,
												src: "5205:19:88",
												typeDescriptions: {
													typeIdentifier: "t_address",
													typeString: "address"
												}
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address",
													typeString: "address"
												}
											],
											id: 56748,
											isConstant: false,
											isLValue: false,
											isPure: true,
											lValueRequested: false,
											nodeType: "ElementaryTypeNameExpression",
											src: "5197:8:88",
											typeDescriptions: {
												typeIdentifier: "t_type$_t_address_payable_$",
												typeString: "type(address payable)"
											},
											typeName: {
												id: 56747,
												name: "address",
												nodeType: "ElementaryTypeName",
												src: "5197:8:88",
												stateMutability: "payable",
												typeDescriptions: {
												}
											}
										},
										id: 56750,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "typeConversion",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "5197:28:88",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_address_payable",
											typeString: "address payable"
										}
									},
									src: "5176:49:88",
									typeDescriptions: {
										typeIdentifier: "t_address_payable",
										typeString: "address payable"
									}
								},
								id: 56752,
								nodeType: "ExpressionStatement",
								src: "5176:49:88"
							},
							{
								expression: {
									id: 56759,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										id: 56753,
										name: "bridgeAgentExecutorAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56677,
										src: "5235:26:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										"arguments": [
										],
										expression: {
											argumentTypes: [
											],
											expression: {
												"arguments": [
													{
														id: 56755,
														name: "_bridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56728,
														src: "5277:19:88",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 56754,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 65747,
													src: "5264:12:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IRootBridgeAgent_$65747_$",
														typeString: "type(contract IRootBridgeAgent)"
													}
												},
												id: 56756,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "5264:33:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IRootBridgeAgent_$65747",
													typeString: "contract IRootBridgeAgent"
												}
											},
											id: 56757,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "5298:26:88",
											memberName: "bridgeAgentExecutorAddress",
											nodeType: "MemberAccess",
											referencedDeclaration: 65487,
											src: "5264:60:88",
											typeDescriptions: {
												typeIdentifier: "t_function_external_view$__$returns$_t_address_$",
												typeString: "function () view external returns (address)"
											}
										},
										id: 56758,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "5264:62:88",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "5235:91:88",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								id: 56760,
								nodeType: "ExpressionStatement",
								src: "5235:91:88"
							}
						]
					},
					documentation: {
						id: 56726,
						nodeType: "StructuredDocumentation",
						src: "4843:132:88",
						text: " @notice Initializes the Multicall Root Router.\n @param _bridgeAgentAddress The address of the Bridge Agent."
					},
					functionSelector: "c4d66de8",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 56731,
							kind: "modifierInvocation",
							modifierName: {
								id: 56730,
								name: "onlyOwner",
								nameLocations: [
									"5038:9:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 30398,
								src: "5038:9:88"
							},
							nodeType: "ModifierInvocation",
							src: "5038:9:88"
						}
					],
					name: "initialize",
					nameLocation: "4989:10:88",
					parameters: {
						id: 56729,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56728,
								mutability: "mutable",
								name: "_bridgeAgentAddress",
								nameLocation: "5008:19:88",
								nodeType: "VariableDeclaration",
								scope: 56762,
								src: "5000:27:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56727,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "5000:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "4999:29:88"
					},
					returnParameters: {
						id: 56732,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "5048:0:88"
					},
					scope: 57643,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 56804,
					nodeType: "FunctionDefinition",
					src: "6069:463:88",
					nodes: [
					],
					body: {
						id: 56803,
						nodeType: "Block",
						src: "6333:199:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											expression: {
												id: 56784,
												name: "msg",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: -15,
												src: "6372:3:88",
												typeDescriptions: {
													typeIdentifier: "t_magic_message",
													typeString: "msg"
												}
											},
											id: 56785,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "6376:6:88",
											memberName: "sender",
											nodeType: "MemberAccess",
											src: "6372:10:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											"arguments": [
												{
													id: 56788,
													name: "this",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -28,
													src: "6392:4:88",
													typeDescriptions: {
														typeIdentifier: "t_contract$_MulticallRootRouter_$57643",
														typeString: "contract MulticallRootRouter"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_contract$_MulticallRootRouter_$57643",
														typeString: "contract MulticallRootRouter"
													}
												],
												id: 56787,
												isConstant: false,
												isLValue: false,
												isPure: true,
												lValueRequested: false,
												nodeType: "ElementaryTypeNameExpression",
												src: "6384:7:88",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_address_$",
													typeString: "type(address)"
												},
												typeName: {
													id: 56786,
													name: "address",
													nodeType: "ElementaryTypeName",
													src: "6384:7:88",
													typeDescriptions: {
													}
												}
											},
											id: 56789,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "6384:13:88",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56790,
											name: "amountOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56771,
											src: "6399:9:88",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										],
										expression: {
											id: 56781,
											name: "outputToken",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56769,
											src: "6343:11:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										id: 56783,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "6355:16:88",
										memberName: "safeTransferFrom",
										nodeType: "MemberAccess",
										referencedDeclaration: 46036,
										src: "6343:28:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
											typeString: "function (address,address,address,uint256)"
										}
									},
									id: 56791,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "6343:66:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56792,
								nodeType: "ExpressionStatement",
								src: "6343:66:88"
							},
							{
								expression: {
									"arguments": [
										{
											id: 56794,
											name: "settlementOwner",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56765,
											src: "6439:15:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56795,
											name: "recipient",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56767,
											src: "6456:9:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56796,
											name: "outputToken",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56769,
											src: "6467:11:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56797,
											name: "amountOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56771,
											src: "6480:9:88",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										{
											id: 56798,
											name: "depositOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56773,
											src: "6491:10:88",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										{
											id: 56799,
											name: "dstChainId",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56775,
											src: "6503:10:88",
											typeDescriptions: {
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											}
										},
										{
											id: 56800,
											name: "gasParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56778,
											src: "6515:9:88",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											},
											{
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											},
											{
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											}
										],
										id: 56793,
										name: "_approveAndCallOut",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57520,
										src: "6420:18:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$returns$__$",
											typeString: "function (address,address,address,uint256,uint256,uint16,struct GasParams memory)"
										}
									},
									id: 56801,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "6420:105:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56802,
								nodeType: "ExpressionStatement",
								src: "6420:105:88"
							}
						]
					},
					documentation: {
						id: 56763,
						nodeType: "StructuredDocumentation",
						src: "5523:541:88",
						text: "  @notice Function to call 'callOutAndBridge' on RootBridgeAgent.\n  @param settlementOwner settlement owner and excess gas receiver.\n  @param recipient Address to receive the output assets.\n  @param outputToken Address of the output hToken.\n  @param amountOut Amount of output hTokens to send.\n  @param depositOut Amount of output hTokens to deposit.\n  @param dstChainId Chain Id of the destination chain.\n  @param gasParams Amounts of tokens to withdraw from the destination port."
					},
					functionSelector: "3779da4f",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "callOutAndBridge",
					nameLocation: "6078:16:88",
					parameters: {
						id: 56779,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56765,
								mutability: "mutable",
								name: "settlementOwner",
								nameLocation: "6112:15:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6104:23:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56764,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "6104:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56767,
								mutability: "mutable",
								name: "recipient",
								nameLocation: "6145:9:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6137:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56766,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "6137:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56769,
								mutability: "mutable",
								name: "outputToken",
								nameLocation: "6172:11:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6164:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56768,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "6164:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56771,
								mutability: "mutable",
								name: "amountOut",
								nameLocation: "6201:9:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6193:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 56770,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "6193:7:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56773,
								mutability: "mutable",
								name: "depositOut",
								nameLocation: "6228:10:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6220:18:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 56772,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "6220:7:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56775,
								mutability: "mutable",
								name: "dstChainId",
								nameLocation: "6255:10:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6248:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 56774,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "6248:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56778,
								mutability: "mutable",
								name: "gasParams",
								nameLocation: "6292:9:88",
								nodeType: "VariableDeclaration",
								scope: 56804,
								src: "6275:26:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 56777,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 56776,
										name: "GasParams",
										nameLocations: [
											"6275:9:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64010,
										src: "6275:9:88"
									},
									referencedDeclaration: 64010,
									src: "6275:9:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "6094:213:88"
					},
					returnParameters: {
						id: 56780,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "6333:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: true,
					visibility: "external"
				},
				{
					id: 56866,
					nodeType: "FunctionDefinition",
					src: "7055:672:88",
					nodes: [
					],
					body: {
						id: 56865,
						nodeType: "Block",
						src: "7357:370:88",
						nodes: [
						],
						statements: [
							{
								body: {
									id: 56853,
									nodeType: "Block",
									src: "7413:159:88",
									statements: [
										{
											expression: {
												"arguments": [
													{
														expression: {
															id: 56838,
															name: "msg",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: -15,
															src: "7460:3:88",
															typeDescriptions: {
																typeIdentifier: "t_magic_message",
																typeString: "msg"
															}
														},
														id: 56839,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														memberLocation: "7464:6:88",
														memberName: "sender",
														nodeType: "MemberAccess",
														src: "7460:10:88",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														"arguments": [
															{
																id: 56842,
																name: "this",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: -28,
																src: "7480:4:88",
																typeDescriptions: {
																	typeIdentifier: "t_contract$_MulticallRootRouter_$57643",
																	typeString: "contract MulticallRootRouter"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_contract$_MulticallRootRouter_$57643",
																	typeString: "contract MulticallRootRouter"
																}
															],
															id: 56841,
															isConstant: false,
															isLValue: false,
															isPure: true,
															lValueRequested: false,
															nodeType: "ElementaryTypeNameExpression",
															src: "7472:7:88",
															typeDescriptions: {
																typeIdentifier: "t_type$_t_address_$",
																typeString: "type(address)"
															},
															typeName: {
																id: 56840,
																name: "address",
																nodeType: "ElementaryTypeName",
																src: "7472:7:88",
																typeDescriptions: {
																}
															}
														},
														id: 56843,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "typeConversion",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "7472:13:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														baseExpression: {
															id: 56844,
															name: "amountsOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56815,
															src: "7487:10:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																typeString: "uint256[] memory"
															}
														},
														id: 56846,
														indexExpression: {
															id: 56845,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56827,
															src: "7498:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "7487:13:88",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													],
													expression: {
														baseExpression: {
															id: 56834,
															name: "outputTokens",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56812,
															src: "7427:12:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																typeString: "address[] memory"
															}
														},
														id: 56836,
														indexExpression: {
															id: 56835,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56827,
															src: "7440:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "7427:15:88",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													id: 56837,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "7443:16:88",
													memberName: "safeTransferFrom",
													nodeType: "MemberAccess",
													referencedDeclaration: 46036,
													src: "7427:32:88",
													typeDescriptions: {
														typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
														typeString: "function (address,address,address,uint256)"
													}
												},
												id: 56847,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "7427:74:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_tuple$__$",
													typeString: "tuple()"
												}
											},
											id: 56848,
											nodeType: "ExpressionStatement",
											src: "7427:74:88"
										},
										{
											id: 56852,
											nodeType: "UncheckedBlock",
											src: "7516:46:88",
											statements: [
												{
													expression: {
														id: 56850,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														nodeType: "UnaryOperation",
														operator: "++",
														prefix: true,
														src: "7544:3:88",
														subExpression: {
															id: 56849,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56827,
															src: "7546:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													id: 56851,
													nodeType: "ExpressionStatement",
													src: "7544:3:88"
												}
											]
										}
									]
								},
								condition: {
									commonType: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									},
									id: 56833,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										id: 56830,
										name: "i",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56827,
										src: "7387:1:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "BinaryOperation",
									operator: "<",
									rightExpression: {
										expression: {
											id: 56831,
											name: "outputTokens",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56812,
											src: "7391:12:88",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
												typeString: "address[] memory"
											}
										},
										id: 56832,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "7404:6:88",
										memberName: "length",
										nodeType: "MemberAccess",
										src: "7391:19:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									src: "7387:23:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 56854,
								initializationExpression: {
									assignments: [
										56827
									],
									declarations: [
										{
											constant: false,
											id: 56827,
											mutability: "mutable",
											name: "i",
											nameLocation: "7380:1:88",
											nodeType: "VariableDeclaration",
											scope: 56854,
											src: "7372:9:88",
											stateVariable: false,
											storageLocation: "default",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											},
											typeName: {
												id: 56826,
												name: "uint256",
												nodeType: "ElementaryTypeName",
												src: "7372:7:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											},
											visibility: "internal"
										}
									],
									id: 56829,
									initialValue: {
										hexValue: "30",
										id: 56828,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "7384:1:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									nodeType: "VariableDeclarationStatement",
									src: "7372:13:88"
								},
								nodeType: "ForStatement",
								src: "7367:205:88"
							},
							{
								expression: {
									"arguments": [
										{
											id: 56856,
											name: "settlementOwner",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56807,
											src: "7622:15:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56857,
											name: "recipient",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56809,
											src: "7639:9:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56858,
											name: "outputTokens",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56812,
											src: "7650:12:88",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
												typeString: "address[] memory"
											}
										},
										{
											id: 56859,
											name: "amountsOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56815,
											src: "7664:10:88",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
												typeString: "uint256[] memory"
											}
										},
										{
											id: 56860,
											name: "depositsOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56818,
											src: "7676:11:88",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
												typeString: "uint256[] memory"
											}
										},
										{
											id: 56861,
											name: "dstChainId",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56820,
											src: "7689:10:88",
											typeDescriptions: {
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											}
										},
										{
											id: 56862,
											name: "gasParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56823,
											src: "7701:9:88",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
												typeString: "address[] memory"
											},
											{
												typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
												typeString: "uint256[] memory"
											},
											{
												typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
												typeString: "uint256[] memory"
											},
											{
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											}
										],
										id: 56855,
										name: "_approveMultipleAndCallOut",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57605,
										src: "7582:26:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$returns$__$",
											typeString: "function (address,address,address[] memory,uint256[] memory,uint256[] memory,uint16,struct GasParams memory)"
										}
									},
									id: 56863,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "7582:138:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56864,
								nodeType: "ExpressionStatement",
								src: "7582:138:88"
							}
						]
					},
					documentation: {
						id: 56805,
						nodeType: "StructuredDocumentation",
						src: "6538:512:88",
						text: "  @notice Function to call 'callOutAndBridgeMultiple' on RootBridgeAgent.\n  @param settlementOwner settlement owner and excess gas receiver.\n  @param recipient Address to receive the output assets.\n  @param outputTokens Addresses of the output hTokens.\n  @param amountsOut Total amount of tokens to send.\n  @param depositsOut Amounts of tokens to withdraw from the destination port.\n  @param gasParams Amounts of tokens to withdraw from the destination port."
					},
					functionSelector: "4a6a99d9",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "callOutAndBridgeMultiple",
					nameLocation: "7064:24:88",
					parameters: {
						id: 56824,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56807,
								mutability: "mutable",
								name: "settlementOwner",
								nameLocation: "7106:15:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7098:23:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56806,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "7098:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56809,
								mutability: "mutable",
								name: "recipient",
								nameLocation: "7139:9:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7131:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56808,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "7131:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56812,
								mutability: "mutable",
								name: "outputTokens",
								nameLocation: "7175:12:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7158:29:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
									typeString: "address[]"
								},
								typeName: {
									baseType: {
										id: 56810,
										name: "address",
										nodeType: "ElementaryTypeName",
										src: "7158:7:88",
										stateMutability: "nonpayable",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									id: 56811,
									nodeType: "ArrayTypeName",
									src: "7158:9:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_address_$dyn_storage_ptr",
										typeString: "address[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56815,
								mutability: "mutable",
								name: "amountsOut",
								nameLocation: "7214:10:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7197:27:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
									typeString: "uint256[]"
								},
								typeName: {
									baseType: {
										id: 56813,
										name: "uint256",
										nodeType: "ElementaryTypeName",
										src: "7197:7:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									id: 56814,
									nodeType: "ArrayTypeName",
									src: "7197:9:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
										typeString: "uint256[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56818,
								mutability: "mutable",
								name: "depositsOut",
								nameLocation: "7251:11:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7234:28:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
									typeString: "uint256[]"
								},
								typeName: {
									baseType: {
										id: 56816,
										name: "uint256",
										nodeType: "ElementaryTypeName",
										src: "7234:7:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									id: 56817,
									nodeType: "ArrayTypeName",
									src: "7234:9:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
										typeString: "uint256[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56820,
								mutability: "mutable",
								name: "dstChainId",
								nameLocation: "7279:10:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7272:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 56819,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "7272:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56823,
								mutability: "mutable",
								name: "gasParams",
								nameLocation: "7316:9:88",
								nodeType: "VariableDeclaration",
								scope: 56866,
								src: "7299:26:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 56822,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 56821,
										name: "GasParams",
										nameLocations: [
											"7299:9:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64010,
										src: "7299:9:88"
									},
									referencedDeclaration: 64010,
									src: "7299:9:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "7088:243:88"
					},
					returnParameters: {
						id: 56825,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "7357:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: true,
					visibility: "external"
				},
				{
					id: 56899,
					nodeType: "FunctionDefinition",
					src: "7765:541:88",
					nodes: [
					],
					body: {
						id: 56898,
						nodeType: "Block",
						src: "7978:328:88",
						nodes: [
						],
						statements: [
							{
								documentation: "@dev Payload is empty because the current BranchRouter does not support receiving a payload.",
								expression: {
									"arguments": [
										{
											expression: {
												id: 56889,
												name: "msg",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: -15,
												src: "8214:3:88",
												typeDescriptions: {
													typeIdentifier: "t_magic_message",
													typeString: "msg"
												}
											},
											id: 56890,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "8218:6:88",
											memberName: "sender",
											nodeType: "MemberAccess",
											src: "8214:10:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56891,
											name: "_settlementNonce",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56869,
											src: "8226:16:88",
											typeDescriptions: {
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											}
										},
										{
											id: 56892,
											name: "_recipient",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56871,
											src: "8244:10:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											hexValue: "",
											id: 56893,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "8256:2:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											value: ""
										},
										{
											id: 56894,
											name: "_gParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56876,
											src: "8260:8:88",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										},
										{
											id: 56895,
											name: "_hasFallbackToggled",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56878,
											src: "8270:19:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											{
												typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
												typeString: "struct GasParams calldata"
											},
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_uint32",
													typeString: "uint32"
												},
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
													typeString: "literal_string \"\""
												},
												{
													typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
													typeString: "struct GasParams calldata"
												},
												{
													typeIdentifier: "t_bool",
													typeString: "bool"
												}
											],
											expression: {
												"arguments": [
													{
														id: 56883,
														name: "bridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56674,
														src: "8147:18:88",
														typeDescriptions: {
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													],
													id: 56882,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 65747,
													src: "8134:12:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IRootBridgeAgent_$65747_$",
														typeString: "type(contract IRootBridgeAgent)"
													}
												},
												id: 56884,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "8134:32:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IRootBridgeAgent_$65747",
													typeString: "contract IRootBridgeAgent"
												}
											},
											id: 56885,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "8167:15:88",
											memberName: "retrySettlement",
											nodeType: "MemberAccess",
											referencedDeclaration: 65581,
											src: "8134:48:88",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_$_t_uint32_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$",
												typeString: "function (address,uint32,address,bytes memory,struct GasParams memory,bool) payable external"
											}
										},
										id: 56888,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 56886,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "8190:3:88",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 56887,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "8194:5:88",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "8190:9:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "8134:66:88",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_$_t_uint32_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$value",
											typeString: "function (address,uint32,address,bytes memory,struct GasParams memory,bool) payable external"
										}
									},
									id: 56896,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "8134:165:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56897,
								nodeType: "ExpressionStatement",
								src: "8134:165:88"
							}
						]
					},
					baseFunctions: [
						66317
					],
					documentation: {
						id: 56867,
						nodeType: "StructuredDocumentation",
						src: "7733:27:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "1f74bed3",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "retrySettlement",
					nameLocation: "7774:15:88",
					overrides: {
						id: 56880,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "7969:8:88"
					},
					parameters: {
						id: 56879,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56869,
								mutability: "mutable",
								name: "_settlementNonce",
								nameLocation: "7806:16:88",
								nodeType: "VariableDeclaration",
								scope: 56899,
								src: "7799:23:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint32",
									typeString: "uint32"
								},
								typeName: {
									id: 56868,
									name: "uint32",
									nodeType: "ElementaryTypeName",
									src: "7799:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint32",
										typeString: "uint32"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56871,
								mutability: "mutable",
								name: "_recipient",
								nameLocation: "7840:10:88",
								nodeType: "VariableDeclaration",
								scope: 56899,
								src: "7832:18:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56870,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "7832:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56873,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 56899,
								src: "7860:14:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 56872,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "7860:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56876,
								mutability: "mutable",
								name: "_gParams",
								nameLocation: "7903:8:88",
								nodeType: "VariableDeclaration",
								scope: 56899,
								src: "7884:27:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 56875,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 56874,
										name: "GasParams",
										nameLocations: [
											"7884:9:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64010,
										src: "7884:9:88"
									},
									referencedDeclaration: 64010,
									src: "7884:9:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56878,
								mutability: "mutable",
								name: "_hasFallbackToggled",
								nameLocation: "7926:19:88",
								nodeType: "VariableDeclaration",
								scope: 56899,
								src: "7921:24:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_bool",
									typeString: "bool"
								},
								typeName: {
									id: 56877,
									name: "bool",
									nodeType: "ElementaryTypeName",
									src: "7921:4:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								visibility: "internal"
							}
						],
						src: "7789:162:88"
					},
					returnParameters: {
						id: 56881,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "7978:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 56937,
					nodeType: "FunctionDefinition",
					src: "8532:602:88",
					nodes: [
					],
					body: {
						id: 56936,
						nodeType: "Block",
						src: "8810:324:88",
						nodes: [
						],
						statements: [
							{
								documentation: "@dev Payload is empty because the current BranchRouter does not support receiving a payload.",
								expression: {
									"arguments": [
										{
											id: 56928,
											name: "_owner",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56902,
											src: "9046:6:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 56929,
											name: "_settlementNonce",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56904,
											src: "9054:16:88",
											typeDescriptions: {
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											}
										},
										{
											id: 56930,
											name: "_recipient",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56906,
											src: "9072:10:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											hexValue: "",
											id: 56931,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "9084:2:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											value: ""
										},
										{
											id: 56932,
											name: "_gParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56911,
											src: "9088:8:88",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
												typeString: "struct GasParams calldata"
											}
										},
										{
											id: 56933,
											name: "_hasFallbackToggled",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56913,
											src: "9098:19:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint32",
												typeString: "uint32"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											{
												typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
												typeString: "struct GasParams calldata"
											},
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_uint32",
													typeString: "uint32"
												},
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
													typeString: "literal_string \"\""
												},
												{
													typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
													typeString: "struct GasParams calldata"
												},
												{
													typeIdentifier: "t_bool",
													typeString: "bool"
												}
											],
											expression: {
												"arguments": [
													{
														id: 56922,
														name: "bridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56674,
														src: "8979:18:88",
														typeDescriptions: {
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													],
													id: 56921,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 65747,
													src: "8966:12:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IRootBridgeAgent_$65747_$",
														typeString: "type(contract IRootBridgeAgent)"
													}
												},
												id: 56923,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "8966:32:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IRootBridgeAgent_$65747",
													typeString: "contract IRootBridgeAgent"
												}
											},
											id: 56924,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "8999:15:88",
											memberName: "retrySettlement",
											nodeType: "MemberAccess",
											referencedDeclaration: 65581,
											src: "8966:48:88",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_$_t_uint32_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$",
												typeString: "function (address,uint32,address,bytes memory,struct GasParams memory,bool) payable external"
											}
										},
										id: 56927,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 56925,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "9022:3:88",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 56926,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "9026:5:88",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "9022:9:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "8966:66:88",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_$_t_uint32_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$value",
											typeString: "function (address,uint32,address,bytes memory,struct GasParams memory,bool) payable external"
										}
									},
									id: 56934,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "8966:161:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 56935,
								nodeType: "ExpressionStatement",
								src: "8966:161:88"
							}
						]
					},
					baseFunctions: [
						66336
					],
					documentation: {
						id: 56900,
						nodeType: "StructuredDocumentation",
						src: "8500:27:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "e6901932",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 56919,
							kind: "modifierInvocation",
							modifierName: {
								id: 56918,
								name: "requiresBridgeAgent",
								nameLocations: [
									"8790:19:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 57642,
								src: "8790:19:88"
							},
							nodeType: "ModifierInvocation",
							src: "8790:19:88"
						}
					],
					name: "executeRetrySettlement",
					nameLocation: "8541:22:88",
					overrides: {
						id: 56917,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "8781:8:88"
					},
					parameters: {
						id: 56916,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56902,
								mutability: "mutable",
								name: "_owner",
								nameLocation: "8581:6:88",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8573:14:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56901,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "8573:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56904,
								mutability: "mutable",
								name: "_settlementNonce",
								nameLocation: "8604:16:88",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8597:23:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint32",
									typeString: "uint32"
								},
								typeName: {
									id: 56903,
									name: "uint32",
									nodeType: "ElementaryTypeName",
									src: "8597:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint32",
										typeString: "uint32"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56906,
								mutability: "mutable",
								name: "_recipient",
								nameLocation: "8638:10:88",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8630:18:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 56905,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "8630:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56908,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8658:14:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 56907,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "8658:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56911,
								mutability: "mutable",
								name: "_gParams",
								nameLocation: "8701:8:88",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8682:27:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$64010_calldata_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 56910,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 56909,
										name: "GasParams",
										nameLocations: [
											"8682:9:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64010,
										src: "8682:9:88"
									},
									referencedDeclaration: 64010,
									src: "8682:9:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56913,
								mutability: "mutable",
								name: "_hasFallbackToggled",
								nameLocation: "8724:19:88",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8719:24:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_bool",
									typeString: "bool"
								},
								typeName: {
									id: 56912,
									name: "bool",
									nodeType: "ElementaryTypeName",
									src: "8719:4:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56915,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 56937,
								src: "8753:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 56914,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "8753:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "8563:202:88"
					},
					returnParameters: {
						id: 56920,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "8810:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "public"
				},
				{
					id: 57099,
					nodeType: "FunctionDefinition",
					src: "9392:2248:88",
					nodes: [
					],
					body: {
						id: 57098,
						nodeType: "Block",
						src: "9501:2139:88",
						nodes: [
						],
						statements: [
							{
								assignments: [
									56951
								],
								declarations: [
									{
										constant: false,
										id: 56951,
										mutability: "mutable",
										name: "funcId",
										nameLocation: "9542:6:88",
										nodeType: "VariableDeclaration",
										scope: 57098,
										src: "9535:13:88",
										stateVariable: false,
										storageLocation: "default",
										typeDescriptions: {
											typeIdentifier: "t_bytes1",
											typeString: "bytes1"
										},
										typeName: {
											id: 56950,
											name: "bytes1",
											nodeType: "ElementaryTypeName",
											src: "9535:6:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes1",
												typeString: "bytes1"
											}
										},
										visibility: "internal"
									}
								],
								id: 56955,
								initialValue: {
									baseExpression: {
										id: 56952,
										name: "encodedData",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56940,
										src: "9551:11:88",
										typeDescriptions: {
											typeIdentifier: "t_bytes_calldata_ptr",
											typeString: "bytes calldata"
										}
									},
									id: 56954,
									indexExpression: {
										hexValue: "30",
										id: 56953,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "9563:1:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									nodeType: "IndexAccess",
									src: "9551:14:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes1",
										typeString: "bytes1"
									}
								},
								nodeType: "VariableDeclarationStatement",
								src: "9535:30:88"
							},
							{
								condition: {
									commonType: {
										typeIdentifier: "t_bytes1",
										typeString: "bytes1"
									},
									id: 56958,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										id: 56956,
										name: "funcId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56951,
										src: "9623:6:88",
										typeDescriptions: {
											typeIdentifier: "t_bytes1",
											typeString: "bytes1"
										}
									},
									nodeType: "BinaryOperation",
									operator: "==",
									rightExpression: {
										hexValue: "30783031",
										id: 56957,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "9633:4:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_1_by_1",
											typeString: "int_const 1"
										},
										value: "0x01"
									},
									src: "9623:14:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								documentation: "FUNC ID: 1 (multicallNoOutput)",
								falseBody: {
									condition: {
										commonType: {
											typeIdentifier: "t_bytes1",
											typeString: "bytes1"
										},
										id: 56985,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										leftExpression: {
											id: 56983,
											name: "funcId",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 56951,
											src: "9914:6:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes1",
												typeString: "bytes1"
											}
										},
										nodeType: "BinaryOperation",
										operator: "==",
										rightExpression: {
											hexValue: "30783032",
											id: 56984,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "number",
											lValueRequested: false,
											nodeType: "Literal",
											src: "9924:4:88",
											typeDescriptions: {
												typeIdentifier: "t_rational_2_by_1",
												typeString: "int_const 2"
											},
											value: "0x02"
										},
										src: "9914:14:88",
										typeDescriptions: {
											typeIdentifier: "t_bool",
											typeString: "bool"
										}
									},
									falseBody: {
										condition: {
											commonType: {
												typeIdentifier: "t_bytes1",
												typeString: "bytes1"
											},
											id: 57039,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											leftExpression: {
												id: 57037,
												name: "funcId",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 56951,
												src: "10743:6:88",
												typeDescriptions: {
													typeIdentifier: "t_bytes1",
													typeString: "bytes1"
												}
											},
											nodeType: "BinaryOperation",
											operator: "==",
											rightExpression: {
												hexValue: "30783033",
												id: 57038,
												isConstant: false,
												isLValue: false,
												isPure: true,
												kind: "number",
												lValueRequested: false,
												nodeType: "Literal",
												src: "10753:4:88",
												typeDescriptions: {
													typeIdentifier: "t_rational_3_by_1",
													typeString: "int_const 3"
												},
												value: "0x03"
											},
											src: "10743:14:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										},
										falseBody: {
											id: 57094,
											nodeType: "Block",
											src: "11578:56:88",
											statements: [
												{
													errorCall: {
														"arguments": [
														],
														expression: {
															argumentTypes: [
															],
															id: 57091,
															name: "UnrecognizedFunctionId",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 66405,
															src: "11599:22:88",
															typeDescriptions: {
																typeIdentifier: "t_function_error_pure$__$returns$__$",
																typeString: "function () pure"
															}
														},
														id: 57092,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "11599:24:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$__$",
															typeString: "tuple()"
														}
													},
													id: 57093,
													nodeType: "RevertStatement",
													src: "11592:31:88"
												}
											]
										},
										id: 57095,
										nodeType: "IfStatement",
										src: "10739:895:88",
										trueBody: {
											id: 57090,
											nodeType: "Block",
											src: "10759:813:88",
											statements: [
												{
													assignments: [
														57045,
														57048,
														57050,
														57053
													],
													declarations: [
														{
															constant: false,
															id: 57045,
															mutability: "mutable",
															name: "callData",
															nameLocation: "10845:8:88",
															nodeType: "VariableDeclaration",
															scope: 57090,
															src: "10820:33:88",
															stateVariable: false,
															storageLocation: "memory",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
																typeString: "struct IMulticall2.Call[]"
															},
															typeName: {
																baseType: {
																	id: 57043,
																	nodeType: "UserDefinedTypeName",
																	pathNode: {
																		id: 57042,
																		name: "IMulticall.Call",
																		nameLocations: [
																			"10820:10:88",
																			"10831:4:88"
																		],
																		nodeType: "IdentifierPath",
																		referencedDeclaration: 65419,
																		src: "10820:15:88"
																	},
																	referencedDeclaration: 65419,
																	src: "10820:15:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_Call_$65419_storage_ptr",
																		typeString: "struct IMulticall2.Call"
																	}
																},
																id: 57044,
																nodeType: "ArrayTypeName",
																src: "10820:17:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_struct$_Call_$65419_storage_$dyn_storage_ptr",
																	typeString: "struct IMulticall2.Call[]"
																}
															},
															visibility: "internal"
														},
														{
															constant: false,
															id: 57048,
															mutability: "mutable",
															name: "outputParams",
															nameLocation: "10899:12:88",
															nodeType: "VariableDeclaration",
															scope: 57090,
															src: "10871:40:88",
															stateVariable: false,
															storageLocation: "memory",
															typeDescriptions: {
																typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																typeString: "struct OutputMultipleParams"
															},
															typeName: {
																id: 57047,
																nodeType: "UserDefinedTypeName",
																pathNode: {
																	id: 57046,
																	name: "OutputMultipleParams",
																	nameLocations: [
																		"10871:20:88"
																	],
																	nodeType: "IdentifierPath",
																	referencedDeclaration: 56648,
																	src: "10871:20:88"
																},
																referencedDeclaration: 56648,
																src: "10871:20:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputMultipleParams_$56648_storage_ptr",
																	typeString: "struct OutputMultipleParams"
																}
															},
															visibility: "internal"
														},
														{
															constant: false,
															id: 57050,
															mutability: "mutable",
															name: "dstChainId",
															nameLocation: "10936:10:88",
															nodeType: "VariableDeclaration",
															scope: 57090,
															src: "10929:17:88",
															stateVariable: false,
															storageLocation: "default",
															typeDescriptions: {
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															},
															typeName: {
																id: 57049,
																name: "uint16",
																nodeType: "ElementaryTypeName",
																src: "10929:6:88",
																typeDescriptions: {
																	typeIdentifier: "t_uint16",
																	typeString: "uint16"
																}
															},
															visibility: "internal"
														},
														{
															constant: false,
															id: 57053,
															mutability: "mutable",
															name: "gasParams",
															nameLocation: "10981:9:88",
															nodeType: "VariableDeclaration",
															scope: 57090,
															src: "10964:26:88",
															stateVariable: false,
															storageLocation: "memory",
															typeDescriptions: {
																typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																typeString: "struct GasParams"
															},
															typeName: {
																id: 57052,
																nodeType: "UserDefinedTypeName",
																pathNode: {
																	id: 57051,
																	name: "GasParams",
																	nameLocations: [
																		"10964:9:88"
																	],
																	nodeType: "IdentifierPath",
																	referencedDeclaration: 64010,
																	src: "10964:9:88"
																},
																referencedDeclaration: 64010,
																src: "10964:9:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
																	typeString: "struct GasParams"
																}
															},
															visibility: "internal"
														}
													],
													id: 57070,
													initialValue: {
														"arguments": [
															{
																"arguments": [
																	{
																		baseExpression: {
																			id: 57057,
																			name: "encodedData",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 56940,
																			src: "11026:11:88",
																			typeDescriptions: {
																				typeIdentifier: "t_bytes_calldata_ptr",
																				typeString: "bytes calldata"
																			}
																		},
																		id: 57059,
																		isConstant: false,
																		isLValue: false,
																		isPure: false,
																		lValueRequested: false,
																		nodeType: "IndexRangeAccess",
																		src: "11026:15:88",
																		startExpression: {
																			hexValue: "31",
																			id: 57058,
																			isConstant: false,
																			isLValue: false,
																			isPure: true,
																			kind: "number",
																			lValueRequested: false,
																			nodeType: "Literal",
																			src: "11038:1:88",
																			typeDescriptions: {
																				typeIdentifier: "t_rational_1_by_1",
																				typeString: "int_const 1"
																			},
																			value: "1"
																		},
																		typeDescriptions: {
																			typeIdentifier: "t_bytes_calldata_ptr_slice",
																			typeString: "bytes calldata slice"
																		}
																	}
																],
																expression: {
																	argumentTypes: [
																		{
																			typeIdentifier: "t_bytes_calldata_ptr_slice",
																			typeString: "bytes calldata slice"
																		}
																	],
																	id: 57056,
																	name: "_decode",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57616,
																	src: "11018:7:88",
																	typeDescriptions: {
																		typeIdentifier: "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
																		typeString: "function (bytes calldata) pure returns (bytes memory)"
																	}
																},
																id: 57060,
																isConstant: false,
																isLValue: false,
																isPure: false,
																kind: "functionCall",
																lValueRequested: false,
																nameLocations: [
																],
																names: [
																],
																nodeType: "FunctionCall",
																src: "11018:24:88",
																tryCall: false,
																typeDescriptions: {
																	typeIdentifier: "t_bytes_memory_ptr",
																	typeString: "bytes memory"
																}
															},
															{
																components: [
																	{
																		baseExpression: {
																			expression: {
																				id: 57061,
																				name: "IMulticall",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 65437,
																				src: "11045:10:88",
																				typeDescriptions: {
																					typeIdentifier: "t_type$_t_contract$_IMulticall2_$65437_$",
																					typeString: "type(contract IMulticall2)"
																				}
																			},
																			id: 57062,
																			isConstant: false,
																			isLValue: false,
																			isPure: false,
																			lValueRequested: false,
																			memberLocation: "11056:4:88",
																			memberName: "Call",
																			nodeType: "MemberAccess",
																			referencedDeclaration: 65419,
																			src: "11045:15:88",
																			typeDescriptions: {
																				typeIdentifier: "t_type$_t_struct$_Call_$65419_storage_ptr_$",
																				typeString: "type(struct IMulticall2.Call storage pointer)"
																			}
																		},
																		id: 57063,
																		isConstant: false,
																		isLValue: false,
																		isPure: false,
																		lValueRequested: false,
																		nodeType: "IndexAccess",
																		src: "11045:17:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$",
																			typeString: "type(struct IMulticall2.Call memory[] memory)"
																		}
																	},
																	{
																		id: 57064,
																		name: "OutputMultipleParams",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 56648,
																		src: "11064:20:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_struct$_OutputMultipleParams_$56648_storage_ptr_$",
																			typeString: "type(struct OutputMultipleParams storage pointer)"
																		}
																	},
																	{
																		id: 57066,
																		isConstant: false,
																		isLValue: false,
																		isPure: true,
																		lValueRequested: false,
																		nodeType: "ElementaryTypeNameExpression",
																		src: "11086:6:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_uint16_$",
																			typeString: "type(uint16)"
																		},
																		typeName: {
																			id: 57065,
																			name: "uint16",
																			nodeType: "ElementaryTypeName",
																			src: "11086:6:88",
																			typeDescriptions: {
																			}
																		}
																	},
																	{
																		id: 57067,
																		name: "GasParams",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 64010,
																		src: "11094:9:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_struct$_GasParams_$64010_storage_ptr_$",
																			typeString: "type(struct GasParams storage pointer)"
																		}
																	}
																],
																id: 57068,
																isConstant: false,
																isInlineArray: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																nodeType: "TupleExpression",
																src: "11044:60:88",
																typeDescriptions: {
																	typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputMultipleParams_$56648_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																	typeString: "tuple(type(struct IMulticall2.Call memory[] memory),type(struct OutputMultipleParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_bytes_memory_ptr",
																	typeString: "bytes memory"
																},
																{
																	typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputMultipleParams_$56648_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																	typeString: "tuple(type(struct IMulticall2.Call memory[] memory),type(struct OutputMultipleParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
																}
															],
															expression: {
																id: 57054,
																name: "abi",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: -1,
																src: "11007:3:88",
																typeDescriptions: {
																	typeIdentifier: "t_magic_abi",
																	typeString: "abi"
																}
															},
															id: 57055,
															isConstant: false,
															isLValue: false,
															isPure: true,
															lValueRequested: false,
															memberLocation: "11011:6:88",
															memberName: "decode",
															nodeType: "MemberAccess",
															src: "11007:10:88",
															typeDescriptions: {
																typeIdentifier: "t_function_abidecode_pure$__$returns$__$",
																typeString: "function () pure"
															}
														},
														id: 57069,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "11007:98:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$_t_struct$_OutputMultipleParams_$56648_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$",
															typeString: "tuple(struct IMulticall2.Call memory[] memory,struct OutputMultipleParams memory,uint16,struct GasParams memory)"
														}
													},
													nodeType: "VariableDeclarationStatement",
													src: "10802:303:88"
												},
												{
													expression: {
														"arguments": [
															{
																id: 57072,
																name: "callData",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57045,
																src: "11160:8:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
																	typeString: "struct IMulticall2.Call memory[] memory"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
																	typeString: "struct IMulticall2.Call memory[] memory"
																}
															],
															id: 57071,
															name: "_multicall",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57461,
															src: "11149:10:88",
															typeDescriptions: {
																typeIdentifier: "t_function_internal_nonpayable$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
																typeString: "function (struct IMulticall2.Call memory[] memory) returns (uint256,bytes memory[] memory)"
															}
														},
														id: 57073,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "11149:20:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
															typeString: "tuple(uint256,bytes memory[] memory)"
														}
													},
													id: 57074,
													nodeType: "ExpressionStatement",
													src: "11149:20:88"
												},
												{
													expression: {
														"arguments": [
															{
																expression: {
																	id: 57076,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57048,
																	src: "11261:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57077,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "11274:15:88",
																memberName: "settlementOwner",
																nodeType: "MemberAccess",
																referencedDeclaration: 56636,
																src: "11261:28:88",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															{
																expression: {
																	id: 57078,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57048,
																	src: "11307:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57079,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "11320:9:88",
																memberName: "recipient",
																nodeType: "MemberAccess",
																referencedDeclaration: 56638,
																src: "11307:22:88",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															{
																expression: {
																	id: 57080,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57048,
																	src: "11347:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57081,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "11360:12:88",
																memberName: "outputTokens",
																nodeType: "MemberAccess",
																referencedDeclaration: 56641,
																src: "11347:25:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																	typeString: "address[] memory"
																}
															},
															{
																expression: {
																	id: 57082,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57048,
																	src: "11390:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57083,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "11403:10:88",
																memberName: "amountsOut",
																nodeType: "MemberAccess",
																referencedDeclaration: 56644,
																src: "11390:23:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																}
															},
															{
																expression: {
																	id: 57084,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57048,
																	src: "11431:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57085,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "11444:11:88",
																memberName: "depositsOut",
																nodeType: "MemberAccess",
																referencedDeclaration: 56647,
																src: "11431:24:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																}
															},
															{
																id: 57086,
																name: "dstChainId",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57050,
																src: "11473:10:88",
																typeDescriptions: {
																	typeIdentifier: "t_uint16",
																	typeString: "uint16"
																}
															},
															{
																id: 57087,
																name: "gasParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57053,
																src: "11501:9:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																	typeString: "struct GasParams memory"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																},
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																},
																{
																	typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																	typeString: "address[] memory"
																},
																{
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																},
																{
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																},
																{
																	typeIdentifier: "t_uint16",
																	typeString: "uint16"
																},
																{
																	typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																	typeString: "struct GasParams memory"
																}
															],
															id: 57075,
															name: "_approveMultipleAndCallOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57605,
															src: "11217:26:88",
															typeDescriptions: {
																typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$returns$__$",
																typeString: "function (address,address,address[] memory,uint256[] memory,uint256[] memory,uint16,struct GasParams memory)"
															}
														},
														id: 57088,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "11217:307:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$__$",
															typeString: "tuple()"
														}
													},
													id: 57089,
													nodeType: "ExpressionStatement",
													src: "11217:307:88"
												}
											]
										}
									},
									id: 57096,
									nodeType: "IfStatement",
									src: "9910:1724:88",
									trueBody: {
										id: 57036,
										nodeType: "Block",
										src: "9930:803:88",
										statements: [
											{
												assignments: [
													56991,
													56994,
													56996,
													56999
												],
												declarations: [
													{
														constant: false,
														id: 56991,
														mutability: "mutable",
														name: "callData",
														nameLocation: "10016:8:88",
														nodeType: "VariableDeclaration",
														scope: 57036,
														src: "9991:33:88",
														stateVariable: false,
														storageLocation: "memory",
														typeDescriptions: {
															typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
															typeString: "struct IMulticall2.Call[]"
														},
														typeName: {
															baseType: {
																id: 56989,
																nodeType: "UserDefinedTypeName",
																pathNode: {
																	id: 56988,
																	name: "IMulticall.Call",
																	nameLocations: [
																		"9991:10:88",
																		"10002:4:88"
																	],
																	nodeType: "IdentifierPath",
																	referencedDeclaration: 65419,
																	src: "9991:15:88"
																},
																referencedDeclaration: 65419,
																src: "9991:15:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_Call_$65419_storage_ptr",
																	typeString: "struct IMulticall2.Call"
																}
															},
															id: 56990,
															nodeType: "ArrayTypeName",
															src: "9991:17:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_struct$_Call_$65419_storage_$dyn_storage_ptr",
																typeString: "struct IMulticall2.Call[]"
															}
														},
														visibility: "internal"
													},
													{
														constant: false,
														id: 56994,
														mutability: "mutable",
														name: "outputParams",
														nameLocation: "10062:12:88",
														nodeType: "VariableDeclaration",
														scope: 57036,
														src: "10042:32:88",
														stateVariable: false,
														storageLocation: "memory",
														typeDescriptions: {
															typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
															typeString: "struct OutputParams"
														},
														typeName: {
															id: 56993,
															nodeType: "UserDefinedTypeName",
															pathNode: {
																id: 56992,
																name: "OutputParams",
																nameLocations: [
																	"10042:12:88"
																],
																nodeType: "IdentifierPath",
																referencedDeclaration: 56634,
																src: "10042:12:88"
															},
															referencedDeclaration: 56634,
															src: "10042:12:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_OutputParams_$56634_storage_ptr",
																typeString: "struct OutputParams"
															}
														},
														visibility: "internal"
													},
													{
														constant: false,
														id: 56996,
														mutability: "mutable",
														name: "dstChainId",
														nameLocation: "10099:10:88",
														nodeType: "VariableDeclaration",
														scope: 57036,
														src: "10092:17:88",
														stateVariable: false,
														storageLocation: "default",
														typeDescriptions: {
															typeIdentifier: "t_uint16",
															typeString: "uint16"
														},
														typeName: {
															id: 56995,
															name: "uint16",
															nodeType: "ElementaryTypeName",
															src: "10092:6:88",
															typeDescriptions: {
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															}
														},
														visibility: "internal"
													},
													{
														constant: false,
														id: 56999,
														mutability: "mutable",
														name: "gasParams",
														nameLocation: "10144:9:88",
														nodeType: "VariableDeclaration",
														scope: 57036,
														src: "10127:26:88",
														stateVariable: false,
														storageLocation: "memory",
														typeDescriptions: {
															typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
															typeString: "struct GasParams"
														},
														typeName: {
															id: 56998,
															nodeType: "UserDefinedTypeName",
															pathNode: {
																id: 56997,
																name: "GasParams",
																nameLocations: [
																	"10127:9:88"
																],
																nodeType: "IdentifierPath",
																referencedDeclaration: 64010,
																src: "10127:9:88"
															},
															referencedDeclaration: 64010,
															src: "10127:9:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
																typeString: "struct GasParams"
															}
														},
														visibility: "internal"
													}
												],
												id: 57016,
												initialValue: {
													"arguments": [
														{
															"arguments": [
																{
																	baseExpression: {
																		id: 57003,
																		name: "encodedData",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 56940,
																		src: "10189:11:88",
																		typeDescriptions: {
																			typeIdentifier: "t_bytes_calldata_ptr",
																			typeString: "bytes calldata"
																		}
																	},
																	id: 57005,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	lValueRequested: false,
																	nodeType: "IndexRangeAccess",
																	src: "10189:15:88",
																	startExpression: {
																		hexValue: "31",
																		id: 57004,
																		isConstant: false,
																		isLValue: false,
																		isPure: true,
																		kind: "number",
																		lValueRequested: false,
																		nodeType: "Literal",
																		src: "10201:1:88",
																		typeDescriptions: {
																			typeIdentifier: "t_rational_1_by_1",
																			typeString: "int_const 1"
																		},
																		value: "1"
																	},
																	typeDescriptions: {
																		typeIdentifier: "t_bytes_calldata_ptr_slice",
																		typeString: "bytes calldata slice"
																	}
																}
															],
															expression: {
																argumentTypes: [
																	{
																		typeIdentifier: "t_bytes_calldata_ptr_slice",
																		typeString: "bytes calldata slice"
																	}
																],
																id: 57002,
																name: "_decode",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57616,
																src: "10181:7:88",
																typeDescriptions: {
																	typeIdentifier: "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
																	typeString: "function (bytes calldata) pure returns (bytes memory)"
																}
															},
															id: 57006,
															isConstant: false,
															isLValue: false,
															isPure: false,
															kind: "functionCall",
															lValueRequested: false,
															nameLocations: [
															],
															names: [
															],
															nodeType: "FunctionCall",
															src: "10181:24:88",
															tryCall: false,
															typeDescriptions: {
																typeIdentifier: "t_bytes_memory_ptr",
																typeString: "bytes memory"
															}
														},
														{
															components: [
																{
																	baseExpression: {
																		expression: {
																			id: 57007,
																			name: "IMulticall",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 65437,
																			src: "10208:10:88",
																			typeDescriptions: {
																				typeIdentifier: "t_type$_t_contract$_IMulticall2_$65437_$",
																				typeString: "type(contract IMulticall2)"
																			}
																		},
																		id: 57008,
																		isConstant: false,
																		isLValue: false,
																		isPure: false,
																		lValueRequested: false,
																		memberLocation: "10219:4:88",
																		memberName: "Call",
																		nodeType: "MemberAccess",
																		referencedDeclaration: 65419,
																		src: "10208:15:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_struct$_Call_$65419_storage_ptr_$",
																			typeString: "type(struct IMulticall2.Call storage pointer)"
																		}
																	},
																	id: 57009,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	lValueRequested: false,
																	nodeType: "IndexAccess",
																	src: "10208:17:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$",
																		typeString: "type(struct IMulticall2.Call memory[] memory)"
																	}
																},
																{
																	id: 57010,
																	name: "OutputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 56634,
																	src: "10227:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_struct$_OutputParams_$56634_storage_ptr_$",
																		typeString: "type(struct OutputParams storage pointer)"
																	}
																},
																{
																	id: 57012,
																	isConstant: false,
																	isLValue: false,
																	isPure: true,
																	lValueRequested: false,
																	nodeType: "ElementaryTypeNameExpression",
																	src: "10241:6:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_uint16_$",
																		typeString: "type(uint16)"
																	},
																	typeName: {
																		id: 57011,
																		name: "uint16",
																		nodeType: "ElementaryTypeName",
																		src: "10241:6:88",
																		typeDescriptions: {
																		}
																	}
																},
																{
																	id: 57013,
																	name: "GasParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 64010,
																	src: "10249:9:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_struct$_GasParams_$64010_storage_ptr_$",
																		typeString: "type(struct GasParams storage pointer)"
																	}
																}
															],
															id: 57014,
															isConstant: false,
															isInlineArray: false,
															isLValue: false,
															isPure: false,
															lValueRequested: false,
															nodeType: "TupleExpression",
															src: "10207:52:88",
															typeDescriptions: {
																typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputParams_$56634_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																typeString: "tuple(type(struct IMulticall2.Call memory[] memory),type(struct OutputParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_bytes_memory_ptr",
																typeString: "bytes memory"
															},
															{
																typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputParams_$56634_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																typeString: "tuple(type(struct IMulticall2.Call memory[] memory),type(struct OutputParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
															}
														],
														expression: {
															id: 57000,
															name: "abi",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: -1,
															src: "10170:3:88",
															typeDescriptions: {
																typeIdentifier: "t_magic_abi",
																typeString: "abi"
															}
														},
														id: 57001,
														isConstant: false,
														isLValue: false,
														isPure: true,
														lValueRequested: false,
														memberLocation: "10174:6:88",
														memberName: "decode",
														nodeType: "MemberAccess",
														src: "10170:10:88",
														typeDescriptions: {
															typeIdentifier: "t_function_abidecode_pure$__$returns$__$",
															typeString: "function () pure"
														}
													},
													id: 57015,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "10170:90:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_tuple$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$_t_struct$_OutputParams_$56634_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$",
														typeString: "tuple(struct IMulticall2.Call memory[] memory,struct OutputParams memory,uint16,struct GasParams memory)"
													}
												},
												nodeType: "VariableDeclarationStatement",
												src: "9973:287:88"
											},
											{
												expression: {
													"arguments": [
														{
															id: 57018,
															name: "callData",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56991,
															src: "10315:8:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
																typeString: "struct IMulticall2.Call memory[] memory"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
																typeString: "struct IMulticall2.Call memory[] memory"
															}
														],
														id: 57017,
														name: "_multicall",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 57461,
														src: "10304:10:88",
														typeDescriptions: {
															typeIdentifier: "t_function_internal_nonpayable$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
															typeString: "function (struct IMulticall2.Call memory[] memory) returns (uint256,bytes memory[] memory)"
														}
													},
													id: 57019,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "10304:20:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_tuple$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
														typeString: "tuple(uint256,bytes memory[] memory)"
													}
												},
												id: 57020,
												nodeType: "ExpressionStatement",
												src: "10304:20:88"
											},
											{
												expression: {
													"arguments": [
														{
															expression: {
																id: 57022,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 56994,
																src: "10408:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57023,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "10421:15:88",
															memberName: "settlementOwner",
															nodeType: "MemberAccess",
															referencedDeclaration: 56625,
															src: "10408:28:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57024,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 56994,
																src: "10454:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57025,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "10467:9:88",
															memberName: "recipient",
															nodeType: "MemberAccess",
															referencedDeclaration: 56627,
															src: "10454:22:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57026,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 56994,
																src: "10494:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57027,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "10507:11:88",
															memberName: "outputToken",
															nodeType: "MemberAccess",
															referencedDeclaration: 56629,
															src: "10494:24:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57028,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 56994,
																src: "10536:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57029,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "10549:9:88",
															memberName: "amountOut",
															nodeType: "MemberAccess",
															referencedDeclaration: 56631,
															src: "10536:22:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														{
															expression: {
																id: 57030,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 56994,
																src: "10576:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57031,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "10589:10:88",
															memberName: "depositOut",
															nodeType: "MemberAccess",
															referencedDeclaration: 56633,
															src: "10576:23:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														{
															id: 57032,
															name: "dstChainId",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56996,
															src: "10617:10:88",
															typeDescriptions: {
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															}
														},
														{
															id: 57033,
															name: "gasParams",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 56999,
															src: "10645:9:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																typeString: "struct GasParams memory"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															},
															{
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															},
															{
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															},
															{
																typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																typeString: "struct GasParams memory"
															}
														],
														id: 57021,
														name: "_approveAndCallOut",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 57520,
														src: "10372:18:88",
														typeDescriptions: {
															typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$returns$__$",
															typeString: "function (address,address,address,uint256,uint256,uint16,struct GasParams memory)"
														}
													},
													id: 57034,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "10372:296:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_tuple$__$",
														typeString: "tuple()"
													}
												},
												id: 57035,
												nodeType: "ExpressionStatement",
												src: "10372:296:88"
											}
										]
									}
								},
								id: 57097,
								nodeType: "IfStatement",
								src: "9619:2015:88",
								trueBody: {
									id: 56982,
									nodeType: "Block",
									src: "9639:265:88",
									statements: [
										{
											assignments: [
												56964
											],
											declarations: [
												{
													constant: false,
													id: 56964,
													mutability: "mutable",
													name: "callData",
													nameLocation: "9708:8:88",
													nodeType: "VariableDeclaration",
													scope: 56982,
													src: "9683:33:88",
													stateVariable: false,
													storageLocation: "memory",
													typeDescriptions: {
														typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
														typeString: "struct IMulticall2.Call[]"
													},
													typeName: {
														baseType: {
															id: 56962,
															nodeType: "UserDefinedTypeName",
															pathNode: {
																id: 56961,
																name: "IMulticall.Call",
																nameLocations: [
																	"9683:10:88",
																	"9694:4:88"
																],
																nodeType: "IdentifierPath",
																referencedDeclaration: 65419,
																src: "9683:15:88"
															},
															referencedDeclaration: 65419,
															src: "9683:15:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_Call_$65419_storage_ptr",
																typeString: "struct IMulticall2.Call"
															}
														},
														id: 56963,
														nodeType: "ArrayTypeName",
														src: "9683:17:88",
														typeDescriptions: {
															typeIdentifier: "t_array$_t_struct$_Call_$65419_storage_$dyn_storage_ptr",
															typeString: "struct IMulticall2.Call[]"
														}
													},
													visibility: "internal"
												}
											],
											id: 56977,
											initialValue: {
												"arguments": [
													{
														"arguments": [
															{
																baseExpression: {
																	id: 56968,
																	name: "encodedData",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 56940,
																	src: "9739:11:88",
																	typeDescriptions: {
																		typeIdentifier: "t_bytes_calldata_ptr",
																		typeString: "bytes calldata"
																	}
																},
																id: 56970,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																nodeType: "IndexRangeAccess",
																src: "9739:15:88",
																startExpression: {
																	hexValue: "31",
																	id: 56969,
																	isConstant: false,
																	isLValue: false,
																	isPure: true,
																	kind: "number",
																	lValueRequested: false,
																	nodeType: "Literal",
																	src: "9751:1:88",
																	typeDescriptions: {
																		typeIdentifier: "t_rational_1_by_1",
																		typeString: "int_const 1"
																	},
																	value: "1"
																},
																typeDescriptions: {
																	typeIdentifier: "t_bytes_calldata_ptr_slice",
																	typeString: "bytes calldata slice"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_bytes_calldata_ptr_slice",
																	typeString: "bytes calldata slice"
																}
															],
															id: 56967,
															name: "_decode",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57616,
															src: "9731:7:88",
															typeDescriptions: {
																typeIdentifier: "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
																typeString: "function (bytes calldata) pure returns (bytes memory)"
															}
														},
														id: 56971,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "9731:24:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_bytes_memory_ptr",
															typeString: "bytes memory"
														}
													},
													{
														components: [
															{
																baseExpression: {
																	expression: {
																		id: 56972,
																		name: "IMulticall",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 65437,
																		src: "9758:10:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_contract$_IMulticall2_$65437_$",
																			typeString: "type(contract IMulticall2)"
																		}
																	},
																	id: 56973,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	lValueRequested: false,
																	memberLocation: "9769:4:88",
																	memberName: "Call",
																	nodeType: "MemberAccess",
																	referencedDeclaration: 65419,
																	src: "9758:15:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_struct$_Call_$65419_storage_ptr_$",
																		typeString: "type(struct IMulticall2.Call storage pointer)"
																	}
																},
																id: 56974,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																nodeType: "IndexAccess",
																src: "9758:17:88",
																typeDescriptions: {
																	typeIdentifier: "t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$",
																	typeString: "type(struct IMulticall2.Call memory[] memory)"
																}
															}
														],
														id: 56975,
														isConstant: false,
														isInlineArray: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														nodeType: "TupleExpression",
														src: "9757:19:88",
														typeDescriptions: {
															typeIdentifier: "t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$",
															typeString: "type(struct IMulticall2.Call memory[] memory)"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_bytes_memory_ptr",
															typeString: "bytes memory"
														},
														{
															typeIdentifier: "t_type$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$",
															typeString: "type(struct IMulticall2.Call memory[] memory)"
														}
													],
													expression: {
														id: 56965,
														name: "abi",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: -1,
														src: "9720:3:88",
														typeDescriptions: {
															typeIdentifier: "t_magic_abi",
															typeString: "abi"
														}
													},
													id: 56966,
													isConstant: false,
													isLValue: false,
													isPure: true,
													lValueRequested: false,
													memberLocation: "9724:6:88",
													memberName: "decode",
													nodeType: "MemberAccess",
													src: "9720:10:88",
													typeDescriptions: {
														typeIdentifier: "t_function_abidecode_pure$__$returns$__$",
														typeString: "function () pure"
													}
												},
												id: 56976,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "9720:57:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
													typeString: "struct IMulticall2.Call memory[] memory"
												}
											},
											nodeType: "VariableDeclarationStatement",
											src: "9682:95:88"
										},
										{
											expression: {
												"arguments": [
													{
														id: 56979,
														name: "callData",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56964,
														src: "9832:8:88",
														typeDescriptions: {
															typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
															typeString: "struct IMulticall2.Call memory[] memory"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
															typeString: "struct IMulticall2.Call memory[] memory"
														}
													],
													id: 56978,
													name: "_multicall",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57461,
													src: "9821:10:88",
													typeDescriptions: {
														typeIdentifier: "t_function_internal_nonpayable$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
														typeString: "function (struct IMulticall2.Call memory[] memory) returns (uint256,bytes memory[] memory)"
													}
												},
												id: 56980,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "9821:20:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_tuple$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
													typeString: "tuple(uint256,bytes memory[] memory)"
												}
											},
											id: 56981,
											nodeType: "ExpressionStatement",
											src: "9821:20:88"
										}
									]
								}
							}
						]
					},
					baseFunctions: [
						66344
					],
					documentation: {
						id: 56938,
						nodeType: "StructuredDocumentation",
						src: "9140:247:88",
						text: "  @inheritdoc IRootRouter\n  @dev FuncIDs\n  FUNC ID      | FUNC NAME\n  0x01         |  multicallNoOutput\n  0x02         |  multicallSingleOutput\n  0x03         |  multicallMultipleOutput"
					},
					functionSelector: "8c252780",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 56946,
							kind: "modifierInvocation",
							modifierName: {
								id: 56945,
								name: "nonReentrant",
								nameLocations: [
									"9471:12:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "9471:12:88"
							},
							nodeType: "ModifierInvocation",
							src: "9471:12:88"
						},
						{
							id: 56948,
							kind: "modifierInvocation",
							modifierName: {
								id: 56947,
								name: "requiresExecutor",
								nameLocations: [
									"9484:16:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 57629,
								src: "9484:16:88"
							},
							nodeType: "ModifierInvocation",
							src: "9484:16:88"
						}
					],
					name: "execute",
					nameLocation: "9401:7:88",
					overrides: {
						id: 56944,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "9462:8:88"
					},
					parameters: {
						id: 56943,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 56940,
								mutability: "mutable",
								name: "encodedData",
								nameLocation: "9424:11:88",
								nodeType: "VariableDeclaration",
								scope: 57099,
								src: "9409:26:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 56939,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "9409:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 56942,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57099,
								src: "9437:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 56941,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "9437:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "9408:36:88"
					},
					returnParameters: {
						id: 56949,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "9501:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 57115,
					nodeType: "FunctionDefinition",
					src: "11677:129:88",
					nodes: [
					],
					body: {
						id: 57114,
						nodeType: "Block",
						src: "11781:25:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 57111,
										name: "revert",
										nodeType: "Identifier",
										overloadedDeclarations: [
											-19,
											-19
										],
										referencedDeclaration: -19,
										src: "11791:6:88",
										typeDescriptions: {
											typeIdentifier: "t_function_revert_pure$__$returns$__$",
											typeString: "function () pure"
										}
									},
									id: 57112,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "11791:8:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57113,
								nodeType: "ExpressionStatement",
								src: "11791:8:88"
							}
						]
					},
					baseFunctions: [
						66355
					],
					documentation: {
						id: 57100,
						nodeType: "StructuredDocumentation",
						src: "11646:26:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "7d0cfac8",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "executeDepositSingle",
					nameLocation: "11686:20:88",
					overrides: {
						id: 57109,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "11772:8:88"
					},
					parameters: {
						id: 57108,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57102,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57115,
								src: "11707:14:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57101,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "11707:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57105,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57115,
								src: "11723:22:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_DepositParams_$64062_calldata_ptr",
									typeString: "struct DepositParams"
								},
								typeName: {
									id: 57104,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 57103,
										name: "DepositParams",
										nameLocations: [
											"11723:13:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64062,
										src: "11723:13:88"
									},
									referencedDeclaration: 64062,
									src: "11723:13:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_DepositParams_$64062_storage_ptr",
										typeString: "struct DepositParams"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57107,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57115,
								src: "11747:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57106,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "11747:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "11706:48:88"
					},
					returnParameters: {
						id: 57110,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "11781:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 57130,
					nodeType: "FunctionDefinition",
					src: "11843:130:88",
					nodes: [
					],
					body: {
						id: 57129,
						nodeType: "Block",
						src: "11948:25:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
									],
									expression: {
										argumentTypes: [
										],
										id: 57126,
										name: "revert",
										nodeType: "Identifier",
										overloadedDeclarations: [
											-19,
											-19
										],
										referencedDeclaration: -19,
										src: "11958:6:88",
										typeDescriptions: {
											typeIdentifier: "t_function_revert_pure$__$returns$__$",
											typeString: "function () pure"
										}
									},
									id: 57127,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "11958:8:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57128,
								nodeType: "ExpressionStatement",
								src: "11958:8:88"
							}
						]
					},
					baseFunctions: [
						66366
					],
					documentation: {
						id: 57116,
						nodeType: "StructuredDocumentation",
						src: "11812:26:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "617ef5b7",
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "executeDepositMultiple",
					nameLocation: "11852:22:88",
					parameters: {
						id: 57124,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57118,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57130,
								src: "11875:14:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57117,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "11875:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57121,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57130,
								src: "11891:30:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_DepositMultipleParams_$64079_calldata_ptr",
									typeString: "struct DepositMultipleParams"
								},
								typeName: {
									id: 57120,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 57119,
										name: "DepositMultipleParams",
										nameLocations: [
											"11891:21:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64079,
										src: "11891:21:88"
									},
									referencedDeclaration: 64079,
									src: "11891:21:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_DepositMultipleParams_$64079_storage_ptr",
										typeString: "struct DepositMultipleParams"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57123,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57130,
								src: "11923:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57122,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "11923:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "11874:56:88"
					},
					returnParameters: {
						id: 57125,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "11948:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 57151,
					nodeType: "FunctionDefinition",
					src: "12012:237:88",
					nodes: [
					],
					body: {
						id: 57150,
						nodeType: "Block",
						src: "12192:57:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											id: 57146,
											name: "encodedData",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57133,
											src: "12217:11:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 57147,
											name: "userAccount",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57135,
											src: "12230:11:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											}
										],
										id: 57145,
										name: "_executeSigned",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57436,
										src: "12202:14:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_address_$returns$__$",
											typeString: "function (bytes calldata,address)"
										}
									},
									id: 57148,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "12202:40:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57149,
								nodeType: "ExpressionStatement",
								src: "12202:40:88"
							}
						]
					},
					baseFunctions: [
						66376
					],
					documentation: {
						id: 57131,
						nodeType: "StructuredDocumentation",
						src: "11979:28:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "a094139e",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 57141,
							kind: "modifierInvocation",
							modifierName: {
								id: 57140,
								name: "nonReentrant",
								nameLocations: [
									"12150:12:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "12150:12:88"
							},
							nodeType: "ModifierInvocation",
							src: "12150:12:88"
						},
						{
							id: 57143,
							kind: "modifierInvocation",
							modifierName: {
								id: 57142,
								name: "requiresExecutor",
								nameLocations: [
									"12171:16:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 57629,
								src: "12171:16:88"
							},
							nodeType: "ModifierInvocation",
							src: "12171:16:88"
						}
					],
					name: "executeSigned",
					nameLocation: "12021:13:88",
					overrides: {
						id: 57139,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "12133:8:88"
					},
					parameters: {
						id: 57138,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57133,
								mutability: "mutable",
								name: "encodedData",
								nameLocation: "12050:11:88",
								nodeType: "VariableDeclaration",
								scope: 57151,
								src: "12035:26:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57132,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "12035:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57135,
								mutability: "mutable",
								name: "userAccount",
								nameLocation: "12071:11:88",
								nodeType: "VariableDeclaration",
								scope: 57151,
								src: "12063:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57134,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "12063:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57137,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57151,
								src: "12084:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57136,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "12084:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "12034:57:88"
					},
					returnParameters: {
						id: 57144,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "12192:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 57175,
					nodeType: "FunctionDefinition",
					src: "12288:274:88",
					nodes: [
					],
					body: {
						id: 57174,
						nodeType: "Block",
						src: "12505:57:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											id: 57170,
											name: "encodedData",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57154,
											src: "12530:11:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 57171,
											name: "userAccount",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57159,
											src: "12543:11:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											}
										],
										id: 57169,
										name: "_executeSigned",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57436,
										src: "12515:14:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_address_$returns$__$",
											typeString: "function (bytes calldata,address)"
										}
									},
									id: 57172,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "12515:40:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57173,
								nodeType: "ExpressionStatement",
								src: "12515:40:88"
							}
						]
					},
					baseFunctions: [
						66389
					],
					documentation: {
						id: 57152,
						nodeType: "StructuredDocumentation",
						src: "12255:28:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "37dcb530",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 57165,
							kind: "modifierInvocation",
							modifierName: {
								id: 57164,
								name: "requiresExecutor",
								nameLocations: [
									"12463:16:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 57629,
								src: "12463:16:88"
							},
							nodeType: "ModifierInvocation",
							src: "12463:16:88"
						},
						{
							id: 57167,
							kind: "modifierInvocation",
							modifierName: {
								id: 57166,
								name: "nonReentrant",
								nameLocations: [
									"12488:12:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "12488:12:88"
							},
							nodeType: "ModifierInvocation",
							src: "12488:12:88"
						}
					],
					name: "executeSignedDepositSingle",
					nameLocation: "12297:26:88",
					overrides: {
						id: 57163,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "12446:8:88"
					},
					parameters: {
						id: 57162,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57154,
								mutability: "mutable",
								name: "encodedData",
								nameLocation: "12339:11:88",
								nodeType: "VariableDeclaration",
								scope: 57175,
								src: "12324:26:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57153,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "12324:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57157,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57175,
								src: "12352:22:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_DepositParams_$64062_calldata_ptr",
									typeString: "struct DepositParams"
								},
								typeName: {
									id: 57156,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 57155,
										name: "DepositParams",
										nameLocations: [
											"12352:13:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64062,
										src: "12352:13:88"
									},
									referencedDeclaration: 64062,
									src: "12352:13:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_DepositParams_$64062_storage_ptr",
										typeString: "struct DepositParams"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57159,
								mutability: "mutable",
								name: "userAccount",
								nameLocation: "12384:11:88",
								nodeType: "VariableDeclaration",
								scope: 57175,
								src: "12376:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57158,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "12376:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57161,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57175,
								src: "12397:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57160,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "12397:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "12323:81:88"
					},
					returnParameters: {
						id: 57168,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "12505:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 57199,
					nodeType: "FunctionDefinition",
					src: "12601:278:88",
					nodes: [
					],
					body: {
						id: 57198,
						nodeType: "Block",
						src: "12822:57:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									"arguments": [
										{
											id: 57194,
											name: "encodedData",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57178,
											src: "12847:11:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											}
										},
										{
											id: 57195,
											name: "userAccount",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57183,
											src: "12860:11:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_bytes_calldata_ptr",
												typeString: "bytes calldata"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											}
										],
										id: 57193,
										name: "_executeSigned",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57436,
										src: "12832:14:88",
										typeDescriptions: {
											typeIdentifier: "t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_address_$returns$__$",
											typeString: "function (bytes calldata,address)"
										}
									},
									id: 57196,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "12832:40:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57197,
								nodeType: "ExpressionStatement",
								src: "12832:40:88"
							}
						]
					},
					baseFunctions: [
						66402
					],
					documentation: {
						id: 57176,
						nodeType: "StructuredDocumentation",
						src: "12568:28:88",
						text: "@inheritdoc IRootRouter"
					},
					functionSelector: "01510d37",
					implemented: true,
					kind: "function",
					modifiers: [
						{
							id: 57189,
							kind: "modifierInvocation",
							modifierName: {
								id: 57188,
								name: "requiresExecutor",
								nameLocations: [
									"12792:16:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 57629,
								src: "12792:16:88"
							},
							nodeType: "ModifierInvocation",
							src: "12792:16:88"
						},
						{
							id: 57191,
							kind: "modifierInvocation",
							modifierName: {
								id: 57190,
								name: "nonReentrant",
								nameLocations: [
									"12809:12:88"
								],
								nodeType: "IdentifierPath",
								referencedDeclaration: 48955,
								src: "12809:12:88"
							},
							nodeType: "ModifierInvocation",
							src: "12809:12:88"
						}
					],
					name: "executeSignedDepositMultiple",
					nameLocation: "12610:28:88",
					overrides: {
						id: 57187,
						nodeType: "OverrideSpecifier",
						overrides: [
						],
						src: "12783:8:88"
					},
					parameters: {
						id: 57186,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57178,
								mutability: "mutable",
								name: "encodedData",
								nameLocation: "12663:11:88",
								nodeType: "VariableDeclaration",
								scope: 57199,
								src: "12648:26:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57177,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "12648:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57181,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57199,
								src: "12684:30:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_struct$_DepositMultipleParams_$64079_calldata_ptr",
									typeString: "struct DepositMultipleParams"
								},
								typeName: {
									id: 57180,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 57179,
										name: "DepositMultipleParams",
										nameLocations: [
											"12684:21:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64079,
										src: "12684:21:88"
									},
									referencedDeclaration: 64079,
									src: "12684:21:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_DepositMultipleParams_$64079_storage_ptr",
										typeString: "struct DepositMultipleParams"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57183,
								mutability: "mutable",
								name: "userAccount",
								nameLocation: "12732:11:88",
								nodeType: "VariableDeclaration",
								scope: 57199,
								src: "12724:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57182,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "12724:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57185,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57199,
								src: "12753:6:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57184,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "12753:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							}
						],
						src: "12638:127:88"
					},
					returnParameters: {
						id: 57192,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "12822:0:88"
					},
					scope: 57643,
					stateMutability: "payable",
					virtual: false,
					visibility: "external"
				},
				{
					id: 57436,
					nodeType: "FunctionDefinition",
					src: "13098:3218:88",
					nodes: [
					],
					body: {
						id: 57435,
						nodeType: "Block",
						src: "13180:3136:88",
						nodes: [
						],
						statements: [
							{
								assignments: [
									57208
								],
								declarations: [
									{
										constant: false,
										id: 57208,
										mutability: "mutable",
										name: "funcId",
										nameLocation: "13221:6:88",
										nodeType: "VariableDeclaration",
										scope: 57435,
										src: "13214:13:88",
										stateVariable: false,
										storageLocation: "default",
										typeDescriptions: {
											typeIdentifier: "t_bytes1",
											typeString: "bytes1"
										},
										typeName: {
											id: 57207,
											name: "bytes1",
											nodeType: "ElementaryTypeName",
											src: "13214:6:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes1",
												typeString: "bytes1"
											}
										},
										visibility: "internal"
									}
								],
								id: 57212,
								initialValue: {
									baseExpression: {
										id: 57209,
										name: "encodedData",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57202,
										src: "13230:11:88",
										typeDescriptions: {
											typeIdentifier: "t_bytes_calldata_ptr",
											typeString: "bytes calldata"
										}
									},
									id: 57211,
									indexExpression: {
										hexValue: "30",
										id: 57210,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "13242:1:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									nodeType: "IndexAccess",
									src: "13230:14:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes1",
										typeString: "bytes1"
									}
								},
								nodeType: "VariableDeclarationStatement",
								src: "13214:30:88"
							},
							{
								condition: {
									commonType: {
										typeIdentifier: "t_bytes1",
										typeString: "bytes1"
									},
									id: 57215,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										id: 57213,
										name: "funcId",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57208,
										src: "13302:6:88",
										typeDescriptions: {
											typeIdentifier: "t_bytes1",
											typeString: "bytes1"
										}
									},
									nodeType: "BinaryOperation",
									operator: "==",
									rightExpression: {
										hexValue: "30783031",
										id: 57214,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "13312:4:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_1_by_1",
											typeString: "int_const 1"
										},
										value: "0x01"
									},
									src: "13302:14:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								documentation: "FUNC ID: 1 (multicallNoOutput)",
								falseBody: {
									condition: {
										commonType: {
											typeIdentifier: "t_bytes1",
											typeString: "bytes1"
										},
										id: 57243,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										leftExpression: {
											id: 57241,
											name: "funcId",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57208,
											src: "13593:6:88",
											typeDescriptions: {
												typeIdentifier: "t_bytes1",
												typeString: "bytes1"
											}
										},
										nodeType: "BinaryOperation",
										operator: "==",
										rightExpression: {
											hexValue: "30783032",
											id: 57242,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "number",
											lValueRequested: false,
											nodeType: "Literal",
											src: "13603:4:88",
											typeDescriptions: {
												typeIdentifier: "t_rational_2_by_1",
												typeString: "int_const 2"
											},
											value: "0x02"
										},
										src: "13593:14:88",
										typeDescriptions: {
											typeIdentifier: "t_bool",
											typeString: "bool"
										}
									},
									falseBody: {
										condition: {
											commonType: {
												typeIdentifier: "t_bytes1",
												typeString: "bytes1"
											},
											id: 57324,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											leftExpression: {
												id: 57322,
												name: "funcId",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 57208,
												src: "14790:6:88",
												typeDescriptions: {
													typeIdentifier: "t_bytes1",
													typeString: "bytes1"
												}
											},
											nodeType: "BinaryOperation",
											operator: "==",
											rightExpression: {
												hexValue: "30783033",
												id: 57323,
												isConstant: false,
												isLValue: false,
												isPure: true,
												kind: "number",
												lValueRequested: false,
												nodeType: "Literal",
												src: "14800:4:88",
												typeDescriptions: {
													typeIdentifier: "t_rational_3_by_1",
													typeString: "int_const 3"
												},
												value: "0x03"
											},
											src: "14790:14:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										},
										falseBody: {
											id: 57431,
											nodeType: "Block",
											src: "16254:56:88",
											statements: [
												{
													errorCall: {
														"arguments": [
														],
														expression: {
															argumentTypes: [
															],
															id: 57428,
															name: "UnrecognizedFunctionId",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 66405,
															src: "16275:22:88",
															typeDescriptions: {
																typeIdentifier: "t_function_error_pure$__$returns$__$",
																typeString: "function () pure"
															}
														},
														id: 57429,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "16275:24:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$__$",
															typeString: "tuple()"
														}
													},
													id: 57430,
													nodeType: "RevertStatement",
													src: "16268:31:88"
												}
											]
										},
										id: 57432,
										nodeType: "IfStatement",
										src: "14786:1524:88",
										trueBody: {
											id: 57427,
											nodeType: "Block",
											src: "14806:1442:88",
											statements: [
												{
													assignments: [
														57329,
														57332,
														57334,
														57337
													],
													declarations: [
														{
															constant: false,
															id: 57329,
															mutability: "mutable",
															name: "calls",
															nameLocation: "14881:5:88",
															nodeType: "VariableDeclaration",
															scope: 57427,
															src: "14867:19:88",
															stateVariable: false,
															storageLocation: "memory",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
																typeString: "struct Call[]"
															},
															typeName: {
																baseType: {
																	id: 57327,
																	nodeType: "UserDefinedTypeName",
																	pathNode: {
																		id: 57326,
																		name: "Call",
																		nameLocations: [
																			"14867:4:88"
																		],
																		nodeType: "IdentifierPath",
																		referencedDeclaration: 66421,
																		src: "14867:4:88"
																	},
																	referencedDeclaration: 66421,
																	src: "14867:4:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_Call_$66421_storage_ptr",
																		typeString: "struct Call"
																	}
																},
																id: 57328,
																nodeType: "ArrayTypeName",
																src: "14867:6:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_struct$_Call_$66421_storage_$dyn_storage_ptr",
																	typeString: "struct Call[]"
																}
															},
															visibility: "internal"
														},
														{
															constant: false,
															id: 57332,
															mutability: "mutable",
															name: "outputParams",
															nameLocation: "14932:12:88",
															nodeType: "VariableDeclaration",
															scope: 57427,
															src: "14904:40:88",
															stateVariable: false,
															storageLocation: "memory",
															typeDescriptions: {
																typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																typeString: "struct OutputMultipleParams"
															},
															typeName: {
																id: 57331,
																nodeType: "UserDefinedTypeName",
																pathNode: {
																	id: 57330,
																	name: "OutputMultipleParams",
																	nameLocations: [
																		"14904:20:88"
																	],
																	nodeType: "IdentifierPath",
																	referencedDeclaration: 56648,
																	src: "14904:20:88"
																},
																referencedDeclaration: 56648,
																src: "14904:20:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputMultipleParams_$56648_storage_ptr",
																	typeString: "struct OutputMultipleParams"
																}
															},
															visibility: "internal"
														},
														{
															constant: false,
															id: 57334,
															mutability: "mutable",
															name: "dstChainId",
															nameLocation: "14969:10:88",
															nodeType: "VariableDeclaration",
															scope: 57427,
															src: "14962:17:88",
															stateVariable: false,
															storageLocation: "default",
															typeDescriptions: {
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															},
															typeName: {
																id: 57333,
																name: "uint16",
																nodeType: "ElementaryTypeName",
																src: "14962:6:88",
																typeDescriptions: {
																	typeIdentifier: "t_uint16",
																	typeString: "uint16"
																}
															},
															visibility: "internal"
														},
														{
															constant: false,
															id: 57337,
															mutability: "mutable",
															name: "gasParams",
															nameLocation: "15014:9:88",
															nodeType: "VariableDeclaration",
															scope: 57427,
															src: "14997:26:88",
															stateVariable: false,
															storageLocation: "memory",
															typeDescriptions: {
																typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																typeString: "struct GasParams"
															},
															typeName: {
																id: 57336,
																nodeType: "UserDefinedTypeName",
																pathNode: {
																	id: 57335,
																	name: "GasParams",
																	nameLocations: [
																		"14997:9:88"
																	],
																	nodeType: "IdentifierPath",
																	referencedDeclaration: 64010,
																	src: "14997:9:88"
																},
																referencedDeclaration: 64010,
																src: "14997:9:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
																	typeString: "struct GasParams"
																}
															},
															visibility: "internal"
														}
													],
													id: 57353,
													initialValue: {
														"arguments": [
															{
																"arguments": [
																	{
																		baseExpression: {
																			id: 57341,
																			name: "encodedData",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57202,
																			src: "15059:11:88",
																			typeDescriptions: {
																				typeIdentifier: "t_bytes_calldata_ptr",
																				typeString: "bytes calldata"
																			}
																		},
																		id: 57343,
																		isConstant: false,
																		isLValue: false,
																		isPure: false,
																		lValueRequested: false,
																		nodeType: "IndexRangeAccess",
																		src: "15059:15:88",
																		startExpression: {
																			hexValue: "31",
																			id: 57342,
																			isConstant: false,
																			isLValue: false,
																			isPure: true,
																			kind: "number",
																			lValueRequested: false,
																			nodeType: "Literal",
																			src: "15071:1:88",
																			typeDescriptions: {
																				typeIdentifier: "t_rational_1_by_1",
																				typeString: "int_const 1"
																			},
																			value: "1"
																		},
																		typeDescriptions: {
																			typeIdentifier: "t_bytes_calldata_ptr_slice",
																			typeString: "bytes calldata slice"
																		}
																	}
																],
																expression: {
																	argumentTypes: [
																		{
																			typeIdentifier: "t_bytes_calldata_ptr_slice",
																			typeString: "bytes calldata slice"
																		}
																	],
																	id: 57340,
																	name: "_decode",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57616,
																	src: "15051:7:88",
																	typeDescriptions: {
																		typeIdentifier: "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
																		typeString: "function (bytes calldata) pure returns (bytes memory)"
																	}
																},
																id: 57344,
																isConstant: false,
																isLValue: false,
																isPure: false,
																kind: "functionCall",
																lValueRequested: false,
																nameLocations: [
																],
																names: [
																],
																nodeType: "FunctionCall",
																src: "15051:24:88",
																tryCall: false,
																typeDescriptions: {
																	typeIdentifier: "t_bytes_memory_ptr",
																	typeString: "bytes memory"
																}
															},
															{
																components: [
																	{
																		baseExpression: {
																			id: 57345,
																			name: "Call",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 66421,
																			src: "15078:4:88",
																			typeDescriptions: {
																				typeIdentifier: "t_type$_t_struct$_Call_$66421_storage_ptr_$",
																				typeString: "type(struct Call storage pointer)"
																			}
																		},
																		id: 57346,
																		isConstant: false,
																		isLValue: false,
																		isPure: true,
																		lValueRequested: false,
																		nodeType: "IndexAccess",
																		src: "15078:6:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$",
																			typeString: "type(struct Call memory[] memory)"
																		}
																	},
																	{
																		id: 57347,
																		name: "OutputMultipleParams",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 56648,
																		src: "15086:20:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_struct$_OutputMultipleParams_$56648_storage_ptr_$",
																			typeString: "type(struct OutputMultipleParams storage pointer)"
																		}
																	},
																	{
																		id: 57349,
																		isConstant: false,
																		isLValue: false,
																		isPure: true,
																		lValueRequested: false,
																		nodeType: "ElementaryTypeNameExpression",
																		src: "15108:6:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_uint16_$",
																			typeString: "type(uint16)"
																		},
																		typeName: {
																			id: 57348,
																			name: "uint16",
																			nodeType: "ElementaryTypeName",
																			src: "15108:6:88",
																			typeDescriptions: {
																			}
																		}
																	},
																	{
																		id: 57350,
																		name: "GasParams",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 64010,
																		src: "15116:9:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_struct$_GasParams_$64010_storage_ptr_$",
																			typeString: "type(struct GasParams storage pointer)"
																		}
																	}
																],
																id: 57351,
																isConstant: false,
																isInlineArray: false,
																isLValue: false,
																isPure: true,
																lValueRequested: false,
																nodeType: "TupleExpression",
																src: "15077:49:88",
																typeDescriptions: {
																	typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputMultipleParams_$56648_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																	typeString: "tuple(type(struct Call memory[] memory),type(struct OutputMultipleParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_bytes_memory_ptr",
																	typeString: "bytes memory"
																},
																{
																	typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputMultipleParams_$56648_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																	typeString: "tuple(type(struct Call memory[] memory),type(struct OutputMultipleParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
																}
															],
															expression: {
																id: 57338,
																name: "abi",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: -1,
																src: "15040:3:88",
																typeDescriptions: {
																	typeIdentifier: "t_magic_abi",
																	typeString: "abi"
																}
															},
															id: 57339,
															isConstant: false,
															isLValue: false,
															isPure: true,
															lValueRequested: false,
															memberLocation: "15044:6:88",
															memberName: "decode",
															nodeType: "MemberAccess",
															src: "15040:10:88",
															typeDescriptions: {
																typeIdentifier: "t_function_abidecode_pure$__$returns$__$",
																typeString: "function () pure"
															}
														},
														id: 57352,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "15040:87:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$_t_struct$_OutputMultipleParams_$56648_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$",
															typeString: "tuple(struct Call memory[] memory,struct OutputMultipleParams memory,uint16,struct GasParams memory)"
														}
													},
													nodeType: "VariableDeclarationStatement",
													src: "14849:278:88"
												},
												{
													expression: {
														"arguments": [
															{
																id: 57358,
																name: "calls",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57329,
																src: "15212:5:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
																	typeString: "struct Call memory[] memory"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
																	typeString: "struct Call memory[] memory"
																}
															],
															expression: {
																"arguments": [
																	{
																		id: 57355,
																		name: "userAccount",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 57204,
																		src: "15194:11:88",
																		typeDescriptions: {
																			typeIdentifier: "t_address",
																			typeString: "address"
																		}
																	}
																],
																expression: {
																	argumentTypes: [
																		{
																			typeIdentifier: "t_address",
																			typeString: "address"
																		}
																	],
																	id: 57354,
																	name: "IVirtualAccount",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 66494,
																	src: "15178:15:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_contract$_IVirtualAccount_$66494_$",
																		typeString: "type(contract IVirtualAccount)"
																	}
																},
																id: 57356,
																isConstant: false,
																isLValue: false,
																isPure: false,
																kind: "typeConversion",
																lValueRequested: false,
																nameLocations: [
																],
																names: [
																],
																nodeType: "FunctionCall",
																src: "15178:28:88",
																tryCall: false,
																typeDescriptions: {
																	typeIdentifier: "t_contract$_IVirtualAccount_$66494",
																	typeString: "contract IVirtualAccount"
																}
															},
															id: 57357,
															isConstant: false,
															isLValue: false,
															isPure: false,
															lValueRequested: false,
															memberLocation: "15207:4:88",
															memberName: "call",
															nodeType: "MemberAccess",
															referencedDeclaration: 66476,
															src: "15178:33:88",
															typeDescriptions: {
																typeIdentifier: "t_function_external_nonpayable$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
																typeString: "function (struct Call memory[] memory) external returns (bytes memory[] memory)"
															}
														},
														id: 57359,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "15178:40:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
															typeString: "bytes memory[] memory"
														}
													},
													id: 57360,
													nodeType: "ExpressionStatement",
													src: "15178:40:88"
												},
												{
													body: {
														id: 57410,
														nodeType: "Block",
														src: "15344:502:88",
														statements: [
															{
																condition: {
																	commonType: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	},
																	id: 57375,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	lValueRequested: false,
																	leftExpression: {
																		baseExpression: {
																			expression: {
																				id: 57370,
																				name: "outputParams",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 57332,
																				src: "15472:12:88",
																				typeDescriptions: {
																					typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																					typeString: "struct OutputMultipleParams memory"
																				}
																			},
																			id: 57371,
																			isConstant: false,
																			isLValue: true,
																			isPure: false,
																			lValueRequested: false,
																			memberLocation: "15485:10:88",
																			memberName: "amountsOut",
																			nodeType: "MemberAccess",
																			referencedDeclaration: 56644,
																			src: "15472:23:88",
																			typeDescriptions: {
																				typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																				typeString: "uint256[] memory"
																			}
																		},
																		id: 57373,
																		indexExpression: {
																			id: 57372,
																			name: "i",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57362,
																			src: "15496:1:88",
																			typeDescriptions: {
																				typeIdentifier: "t_uint256",
																				typeString: "uint256"
																			}
																		},
																		isConstant: false,
																		isLValue: true,
																		isPure: false,
																		lValueRequested: false,
																		nodeType: "IndexAccess",
																		src: "15472:26:88",
																		typeDescriptions: {
																			typeIdentifier: "t_uint256",
																			typeString: "uint256"
																		}
																	},
																	nodeType: "BinaryOperation",
																	operator: "==",
																	rightExpression: {
																		id: 57374,
																		name: "CONTRACT_BALANCE",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 56662,
																		src: "15502:16:88",
																		typeDescriptions: {
																			typeIdentifier: "t_uint256",
																			typeString: "uint256"
																		}
																	},
																	src: "15472:46:88",
																	typeDescriptions: {
																		typeIdentifier: "t_bool",
																		typeString: "bool"
																	}
																},
																id: 57391,
																nodeType: "IfStatement",
																src: "15468:173:88",
																trueBody: {
																	id: 57390,
																	nodeType: "Block",
																	src: "15520:121:88",
																	statements: [
																		{
																			expression: {
																				id: 57388,
																				isConstant: false,
																				isLValue: false,
																				isPure: false,
																				lValueRequested: false,
																				leftHandSide: {
																					baseExpression: {
																						expression: {
																							id: 57376,
																							name: "outputParams",
																							nodeType: "Identifier",
																							overloadedDeclarations: [
																							],
																							referencedDeclaration: 57332,
																							src: "15542:12:88",
																							typeDescriptions: {
																								typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																								typeString: "struct OutputMultipleParams memory"
																							}
																						},
																						id: 57379,
																						isConstant: false,
																						isLValue: true,
																						isPure: false,
																						lValueRequested: false,
																						memberLocation: "15555:10:88",
																						memberName: "amountsOut",
																						nodeType: "MemberAccess",
																						referencedDeclaration: 56644,
																						src: "15542:23:88",
																						typeDescriptions: {
																							typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																							typeString: "uint256[] memory"
																						}
																					},
																					id: 57380,
																					indexExpression: {
																						id: 57378,
																						name: "i",
																						nodeType: "Identifier",
																						overloadedDeclarations: [
																						],
																						referencedDeclaration: 57362,
																						src: "15566:1:88",
																						typeDescriptions: {
																							typeIdentifier: "t_uint256",
																							typeString: "uint256"
																						}
																					},
																					isConstant: false,
																					isLValue: true,
																					isPure: false,
																					lValueRequested: true,
																					nodeType: "IndexAccess",
																					src: "15542:26:88",
																					typeDescriptions: {
																						typeIdentifier: "t_uint256",
																						typeString: "uint256"
																					}
																				},
																				nodeType: "Assignment",
																				operator: "=",
																				rightHandSide: {
																					"arguments": [
																						{
																							id: 57386,
																							name: "userAccount",
																							nodeType: "Identifier",
																							overloadedDeclarations: [
																							],
																							referencedDeclaration: 57204,
																							src: "15610:11:88",
																							typeDescriptions: {
																								typeIdentifier: "t_address",
																								typeString: "address"
																							}
																						}
																					],
																					expression: {
																						argumentTypes: [
																							{
																								typeIdentifier: "t_address",
																								typeString: "address"
																							}
																						],
																						expression: {
																							baseExpression: {
																								expression: {
																									id: 57381,
																									name: "outputParams",
																									nodeType: "Identifier",
																									overloadedDeclarations: [
																									],
																									referencedDeclaration: 57332,
																									src: "15571:12:88",
																									typeDescriptions: {
																										typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																										typeString: "struct OutputMultipleParams memory"
																									}
																								},
																								id: 57382,
																								isConstant: false,
																								isLValue: true,
																								isPure: false,
																								lValueRequested: false,
																								memberLocation: "15584:12:88",
																								memberName: "outputTokens",
																								nodeType: "MemberAccess",
																								referencedDeclaration: 56641,
																								src: "15571:25:88",
																								typeDescriptions: {
																									typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																									typeString: "address[] memory"
																								}
																							},
																							id: 57384,
																							indexExpression: {
																								id: 57383,
																								name: "i",
																								nodeType: "Identifier",
																								overloadedDeclarations: [
																								],
																								referencedDeclaration: 57362,
																								src: "15597:1:88",
																								typeDescriptions: {
																									typeIdentifier: "t_uint256",
																									typeString: "uint256"
																								}
																							},
																							isConstant: false,
																							isLValue: true,
																							isPure: false,
																							lValueRequested: false,
																							nodeType: "IndexAccess",
																							src: "15571:28:88",
																							typeDescriptions: {
																								typeIdentifier: "t_address",
																								typeString: "address"
																							}
																						},
																						id: 57385,
																						isConstant: false,
																						isLValue: false,
																						isPure: false,
																						lValueRequested: false,
																						memberLocation: "15600:9:88",
																						memberName: "balanceOf",
																						nodeType: "MemberAccess",
																						referencedDeclaration: 46110,
																						src: "15571:38:88",
																						typeDescriptions: {
																							typeIdentifier: "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$attached_to$_t_address_$",
																							typeString: "function (address,address) view returns (uint256)"
																						}
																					},
																					id: 57387,
																					isConstant: false,
																					isLValue: false,
																					isPure: false,
																					kind: "functionCall",
																					lValueRequested: false,
																					nameLocations: [
																					],
																					names: [
																					],
																					nodeType: "FunctionCall",
																					src: "15571:51:88",
																					tryCall: false,
																					typeDescriptions: {
																						typeIdentifier: "t_uint256",
																						typeString: "uint256"
																					}
																				},
																				src: "15542:80:88",
																				typeDescriptions: {
																					typeIdentifier: "t_uint256",
																					typeString: "uint256"
																				}
																			},
																			id: 57389,
																			nodeType: "ExpressionStatement",
																			src: "15542:80:88"
																		}
																	]
																}
															},
															{
																expression: {
																	"arguments": [
																		{
																			baseExpression: {
																				expression: {
																					id: 57396,
																					name: "outputParams",
																					nodeType: "Identifier",
																					overloadedDeclarations: [
																					],
																					referencedDeclaration: 57332,
																					src: "15702:12:88",
																					typeDescriptions: {
																						typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																						typeString: "struct OutputMultipleParams memory"
																					}
																				},
																				id: 57397,
																				isConstant: false,
																				isLValue: true,
																				isPure: false,
																				lValueRequested: false,
																				memberLocation: "15715:12:88",
																				memberName: "outputTokens",
																				nodeType: "MemberAccess",
																				referencedDeclaration: 56641,
																				src: "15702:25:88",
																				typeDescriptions: {
																					typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																					typeString: "address[] memory"
																				}
																			},
																			id: 57399,
																			indexExpression: {
																				id: 57398,
																				name: "i",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 57362,
																				src: "15728:1:88",
																				typeDescriptions: {
																					typeIdentifier: "t_uint256",
																					typeString: "uint256"
																				}
																			},
																			isConstant: false,
																			isLValue: true,
																			isPure: false,
																			lValueRequested: false,
																			nodeType: "IndexAccess",
																			src: "15702:28:88",
																			typeDescriptions: {
																				typeIdentifier: "t_address",
																				typeString: "address"
																			}
																		},
																		{
																			baseExpression: {
																				expression: {
																					id: 57400,
																					name: "outputParams",
																					nodeType: "Identifier",
																					overloadedDeclarations: [
																					],
																					referencedDeclaration: 57332,
																					src: "15732:12:88",
																					typeDescriptions: {
																						typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																						typeString: "struct OutputMultipleParams memory"
																					}
																				},
																				id: 57401,
																				isConstant: false,
																				isLValue: true,
																				isPure: false,
																				lValueRequested: false,
																				memberLocation: "15745:10:88",
																				memberName: "amountsOut",
																				nodeType: "MemberAccess",
																				referencedDeclaration: 56644,
																				src: "15732:23:88",
																				typeDescriptions: {
																					typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																					typeString: "uint256[] memory"
																				}
																			},
																			id: 57403,
																			indexExpression: {
																				id: 57402,
																				name: "i",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 57362,
																				src: "15756:1:88",
																				typeDescriptions: {
																					typeIdentifier: "t_uint256",
																					typeString: "uint256"
																				}
																			},
																			isConstant: false,
																			isLValue: true,
																			isPure: false,
																			lValueRequested: false,
																			nodeType: "IndexAccess",
																			src: "15732:26:88",
																			typeDescriptions: {
																				typeIdentifier: "t_uint256",
																				typeString: "uint256"
																			}
																		}
																	],
																	expression: {
																		argumentTypes: [
																			{
																				typeIdentifier: "t_address",
																				typeString: "address"
																			},
																			{
																				typeIdentifier: "t_uint256",
																				typeString: "uint256"
																			}
																		],
																		expression: {
																			"arguments": [
																				{
																					id: 57393,
																					name: "userAccount",
																					nodeType: "Identifier",
																					overloadedDeclarations: [
																					],
																					referencedDeclaration: 57204,
																					src: "15675:11:88",
																					typeDescriptions: {
																						typeIdentifier: "t_address",
																						typeString: "address"
																					}
																				}
																			],
																			expression: {
																				argumentTypes: [
																					{
																						typeIdentifier: "t_address",
																						typeString: "address"
																					}
																				],
																				id: 57392,
																				name: "IVirtualAccount",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 66494,
																				src: "15659:15:88",
																				typeDescriptions: {
																					typeIdentifier: "t_type$_t_contract$_IVirtualAccount_$66494_$",
																					typeString: "type(contract IVirtualAccount)"
																				}
																			},
																			id: 57394,
																			isConstant: false,
																			isLValue: false,
																			isPure: false,
																			kind: "typeConversion",
																			lValueRequested: false,
																			nameLocations: [
																			],
																			names: [
																			],
																			nodeType: "FunctionCall",
																			src: "15659:28:88",
																			tryCall: false,
																			typeDescriptions: {
																				typeIdentifier: "t_contract$_IVirtualAccount_$66494",
																				typeString: "contract IVirtualAccount"
																			}
																		},
																		id: 57395,
																		isConstant: false,
																		isLValue: false,
																		isPure: false,
																		lValueRequested: false,
																		memberLocation: "15688:13:88",
																		memberName: "withdrawERC20",
																		nodeType: "MemberAccess",
																		referencedDeclaration: 66457,
																		src: "15659:42:88",
																		typeDescriptions: {
																			typeIdentifier: "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
																			typeString: "function (address,uint256) external"
																		}
																	},
																	id: 57404,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	kind: "functionCall",
																	lValueRequested: false,
																	nameLocations: [
																	],
																	names: [
																	],
																	nodeType: "FunctionCall",
																	src: "15659:100:88",
																	tryCall: false,
																	typeDescriptions: {
																		typeIdentifier: "t_tuple$__$",
																		typeString: "tuple()"
																	}
																},
																id: 57405,
																nodeType: "ExpressionStatement",
																src: "15659:100:88"
															},
															{
																id: 57409,
																nodeType: "UncheckedBlock",
																src: "15778:54:88",
																statements: [
																	{
																		expression: {
																			id: 57407,
																			isConstant: false,
																			isLValue: false,
																			isPure: false,
																			lValueRequested: false,
																			nodeType: "UnaryOperation",
																			operator: "++",
																			prefix: true,
																			src: "15810:3:88",
																			subExpression: {
																				id: 57406,
																				name: "i",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 57362,
																				src: "15812:1:88",
																				typeDescriptions: {
																					typeIdentifier: "t_uint256",
																					typeString: "uint256"
																				}
																			},
																			typeDescriptions: {
																				typeIdentifier: "t_uint256",
																				typeString: "uint256"
																			}
																		},
																		id: 57408,
																		nodeType: "ExpressionStatement",
																		src: "15810:3:88"
																	}
																]
															}
														]
													},
													condition: {
														commonType: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														},
														id: 57369,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														leftExpression: {
															id: 57365,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57362,
															src: "15305:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														nodeType: "BinaryOperation",
														operator: "<",
														rightExpression: {
															expression: {
																expression: {
																	id: 57366,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57332,
																	src: "15309:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57367,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "15322:12:88",
																memberName: "outputTokens",
																nodeType: "MemberAccess",
																referencedDeclaration: 56641,
																src: "15309:25:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																	typeString: "address[] memory"
																}
															},
															id: 57368,
															isConstant: false,
															isLValue: false,
															isPure: false,
															lValueRequested: false,
															memberLocation: "15335:6:88",
															memberName: "length",
															nodeType: "MemberAccess",
															src: "15309:32:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														src: "15305:36:88",
														typeDescriptions: {
															typeIdentifier: "t_bool",
															typeString: "bool"
														}
													},
													id: 57411,
													initializationExpression: {
														assignments: [
															57362
														],
														declarations: [
															{
																constant: false,
																id: 57362,
																mutability: "mutable",
																name: "i",
																nameLocation: "15298:1:88",
																nodeType: "VariableDeclaration",
																scope: 57411,
																src: "15290:9:88",
																stateVariable: false,
																storageLocation: "default",
																typeDescriptions: {
																	typeIdentifier: "t_uint256",
																	typeString: "uint256"
																},
																typeName: {
																	id: 57361,
																	name: "uint256",
																	nodeType: "ElementaryTypeName",
																	src: "15290:7:88",
																	typeDescriptions: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																},
																visibility: "internal"
															}
														],
														id: 57364,
														initialValue: {
															hexValue: "30",
															id: 57363,
															isConstant: false,
															isLValue: false,
															isPure: true,
															kind: "number",
															lValueRequested: false,
															nodeType: "Literal",
															src: "15302:1:88",
															typeDescriptions: {
																typeIdentifier: "t_rational_0_by_1",
																typeString: "int_const 0"
															},
															value: "0"
														},
														nodeType: "VariableDeclarationStatement",
														src: "15290:13:88"
													},
													nodeType: "ForStatement",
													src: "15285:561:88"
												},
												{
													expression: {
														"arguments": [
															{
																expression: {
																	id: 57413,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57332,
																	src: "15937:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57414,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "15950:15:88",
																memberName: "settlementOwner",
																nodeType: "MemberAccess",
																referencedDeclaration: 56636,
																src: "15937:28:88",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															{
																expression: {
																	id: 57415,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57332,
																	src: "15983:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57416,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "15996:9:88",
																memberName: "recipient",
																nodeType: "MemberAccess",
																referencedDeclaration: 56638,
																src: "15983:22:88",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															},
															{
																expression: {
																	id: 57417,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57332,
																	src: "16023:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57418,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "16036:12:88",
																memberName: "outputTokens",
																nodeType: "MemberAccess",
																referencedDeclaration: 56641,
																src: "16023:25:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																	typeString: "address[] memory"
																}
															},
															{
																expression: {
																	id: 57419,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57332,
																	src: "16066:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57420,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "16079:10:88",
																memberName: "amountsOut",
																nodeType: "MemberAccess",
																referencedDeclaration: 56644,
																src: "16066:23:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																}
															},
															{
																expression: {
																	id: 57421,
																	name: "outputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57332,
																	src: "16107:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_struct$_OutputMultipleParams_$56648_memory_ptr",
																		typeString: "struct OutputMultipleParams memory"
																	}
																},
																id: 57422,
																isConstant: false,
																isLValue: true,
																isPure: false,
																lValueRequested: false,
																memberLocation: "16120:11:88",
																memberName: "depositsOut",
																nodeType: "MemberAccess",
																referencedDeclaration: 56647,
																src: "16107:24:88",
																typeDescriptions: {
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																}
															},
															{
																id: 57423,
																name: "dstChainId",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57334,
																src: "16149:10:88",
																typeDescriptions: {
																	typeIdentifier: "t_uint16",
																	typeString: "uint16"
																}
															},
															{
																id: 57424,
																name: "gasParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57337,
																src: "16177:9:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																	typeString: "struct GasParams memory"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																},
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																},
																{
																	typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																	typeString: "address[] memory"
																},
																{
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																},
																{
																	typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																	typeString: "uint256[] memory"
																},
																{
																	typeIdentifier: "t_uint16",
																	typeString: "uint16"
																},
																{
																	typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																	typeString: "struct GasParams memory"
																}
															],
															id: 57412,
															name: "_approveMultipleAndCallOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57605,
															src: "15893:26:88",
															typeDescriptions: {
																typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$returns$__$",
																typeString: "function (address,address,address[] memory,uint256[] memory,uint256[] memory,uint16,struct GasParams memory)"
															}
														},
														id: 57425,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "15893:307:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_tuple$__$",
															typeString: "tuple()"
														}
													},
													id: 57426,
													nodeType: "ExpressionStatement",
													src: "15893:307:88"
												}
											]
										}
									},
									id: 57433,
									nodeType: "IfStatement",
									src: "13589:2721:88",
									trueBody: {
										id: 57321,
										nodeType: "Block",
										src: "13609:1171:88",
										statements: [
											{
												assignments: [
													57248,
													57251,
													57253,
													57256
												],
												declarations: [
													{
														constant: false,
														id: 57248,
														mutability: "mutable",
														name: "calls",
														nameLocation: "13667:5:88",
														nodeType: "VariableDeclaration",
														scope: 57321,
														src: "13653:19:88",
														stateVariable: false,
														storageLocation: "memory",
														typeDescriptions: {
															typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
															typeString: "struct Call[]"
														},
														typeName: {
															baseType: {
																id: 57246,
																nodeType: "UserDefinedTypeName",
																pathNode: {
																	id: 57245,
																	name: "Call",
																	nameLocations: [
																		"13653:4:88"
																	],
																	nodeType: "IdentifierPath",
																	referencedDeclaration: 66421,
																	src: "13653:4:88"
																},
																referencedDeclaration: 66421,
																src: "13653:4:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_Call_$66421_storage_ptr",
																	typeString: "struct Call"
																}
															},
															id: 57247,
															nodeType: "ArrayTypeName",
															src: "13653:6:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_struct$_Call_$66421_storage_$dyn_storage_ptr",
																typeString: "struct Call[]"
															}
														},
														visibility: "internal"
													},
													{
														constant: false,
														id: 57251,
														mutability: "mutable",
														name: "outputParams",
														nameLocation: "13694:12:88",
														nodeType: "VariableDeclaration",
														scope: 57321,
														src: "13674:32:88",
														stateVariable: false,
														storageLocation: "memory",
														typeDescriptions: {
															typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
															typeString: "struct OutputParams"
														},
														typeName: {
															id: 57250,
															nodeType: "UserDefinedTypeName",
															pathNode: {
																id: 57249,
																name: "OutputParams",
																nameLocations: [
																	"13674:12:88"
																],
																nodeType: "IdentifierPath",
																referencedDeclaration: 56634,
																src: "13674:12:88"
															},
															referencedDeclaration: 56634,
															src: "13674:12:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_OutputParams_$56634_storage_ptr",
																typeString: "struct OutputParams"
															}
														},
														visibility: "internal"
													},
													{
														constant: false,
														id: 57253,
														mutability: "mutable",
														name: "dstChainId",
														nameLocation: "13715:10:88",
														nodeType: "VariableDeclaration",
														scope: 57321,
														src: "13708:17:88",
														stateVariable: false,
														storageLocation: "default",
														typeDescriptions: {
															typeIdentifier: "t_uint16",
															typeString: "uint16"
														},
														typeName: {
															id: 57252,
															name: "uint16",
															nodeType: "ElementaryTypeName",
															src: "13708:6:88",
															typeDescriptions: {
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															}
														},
														visibility: "internal"
													},
													{
														constant: false,
														id: 57256,
														mutability: "mutable",
														name: "gasParams",
														nameLocation: "13744:9:88",
														nodeType: "VariableDeclaration",
														scope: 57321,
														src: "13727:26:88",
														stateVariable: false,
														storageLocation: "memory",
														typeDescriptions: {
															typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
															typeString: "struct GasParams"
														},
														typeName: {
															id: 57255,
															nodeType: "UserDefinedTypeName",
															pathNode: {
																id: 57254,
																name: "GasParams",
																nameLocations: [
																	"13727:9:88"
																],
																nodeType: "IdentifierPath",
																referencedDeclaration: 64010,
																src: "13727:9:88"
															},
															referencedDeclaration: 64010,
															src: "13727:9:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
																typeString: "struct GasParams"
															}
														},
														visibility: "internal"
													}
												],
												id: 57272,
												initialValue: {
													"arguments": [
														{
															"arguments": [
																{
																	baseExpression: {
																		id: 57260,
																		name: "encodedData",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 57202,
																		src: "13792:11:88",
																		typeDescriptions: {
																			typeIdentifier: "t_bytes_calldata_ptr",
																			typeString: "bytes calldata"
																		}
																	},
																	id: 57262,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	lValueRequested: false,
																	nodeType: "IndexRangeAccess",
																	src: "13792:15:88",
																	startExpression: {
																		hexValue: "31",
																		id: 57261,
																		isConstant: false,
																		isLValue: false,
																		isPure: true,
																		kind: "number",
																		lValueRequested: false,
																		nodeType: "Literal",
																		src: "13804:1:88",
																		typeDescriptions: {
																			typeIdentifier: "t_rational_1_by_1",
																			typeString: "int_const 1"
																		},
																		value: "1"
																	},
																	typeDescriptions: {
																		typeIdentifier: "t_bytes_calldata_ptr_slice",
																		typeString: "bytes calldata slice"
																	}
																}
															],
															expression: {
																argumentTypes: [
																	{
																		typeIdentifier: "t_bytes_calldata_ptr_slice",
																		typeString: "bytes calldata slice"
																	}
																],
																id: 57259,
																name: "_decode",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57616,
																src: "13784:7:88",
																typeDescriptions: {
																	typeIdentifier: "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
																	typeString: "function (bytes calldata) pure returns (bytes memory)"
																}
															},
															id: 57263,
															isConstant: false,
															isLValue: false,
															isPure: false,
															kind: "functionCall",
															lValueRequested: false,
															nameLocations: [
															],
															names: [
															],
															nodeType: "FunctionCall",
															src: "13784:24:88",
															tryCall: false,
															typeDescriptions: {
																typeIdentifier: "t_bytes_memory_ptr",
																typeString: "bytes memory"
															}
														},
														{
															components: [
																{
																	baseExpression: {
																		id: 57264,
																		name: "Call",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 66421,
																		src: "13811:4:88",
																		typeDescriptions: {
																			typeIdentifier: "t_type$_t_struct$_Call_$66421_storage_ptr_$",
																			typeString: "type(struct Call storage pointer)"
																		}
																	},
																	id: 57265,
																	isConstant: false,
																	isLValue: false,
																	isPure: true,
																	lValueRequested: false,
																	nodeType: "IndexAccess",
																	src: "13811:6:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$",
																		typeString: "type(struct Call memory[] memory)"
																	}
																},
																{
																	id: 57266,
																	name: "OutputParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 56634,
																	src: "13819:12:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_struct$_OutputParams_$56634_storage_ptr_$",
																		typeString: "type(struct OutputParams storage pointer)"
																	}
																},
																{
																	id: 57268,
																	isConstant: false,
																	isLValue: false,
																	isPure: true,
																	lValueRequested: false,
																	nodeType: "ElementaryTypeNameExpression",
																	src: "13833:6:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_uint16_$",
																		typeString: "type(uint16)"
																	},
																	typeName: {
																		id: 57267,
																		name: "uint16",
																		nodeType: "ElementaryTypeName",
																		src: "13833:6:88",
																		typeDescriptions: {
																		}
																	}
																},
																{
																	id: 57269,
																	name: "GasParams",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 64010,
																	src: "13841:9:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_struct$_GasParams_$64010_storage_ptr_$",
																		typeString: "type(struct GasParams storage pointer)"
																	}
																}
															],
															id: 57270,
															isConstant: false,
															isInlineArray: false,
															isLValue: false,
															isPure: true,
															lValueRequested: false,
															nodeType: "TupleExpression",
															src: "13810:41:88",
															typeDescriptions: {
																typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputParams_$56634_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																typeString: "tuple(type(struct Call memory[] memory),type(struct OutputParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_bytes_memory_ptr",
																typeString: "bytes memory"
															},
															{
																typeIdentifier: "t_tuple$_t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_struct$_OutputParams_$56634_storage_ptr_$_$_t_type$_t_uint16_$_$_t_type$_t_struct$_GasParams_$64010_storage_ptr_$_$",
																typeString: "tuple(type(struct Call memory[] memory),type(struct OutputParams storage pointer),type(uint16),type(struct GasParams storage pointer))"
															}
														],
														expression: {
															id: 57257,
															name: "abi",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: -1,
															src: "13773:3:88",
															typeDescriptions: {
																typeIdentifier: "t_magic_abi",
																typeString: "abi"
															}
														},
														id: 57258,
														isConstant: false,
														isLValue: false,
														isPure: true,
														lValueRequested: false,
														memberLocation: "13777:6:88",
														memberName: "decode",
														nodeType: "MemberAccess",
														src: "13773:10:88",
														typeDescriptions: {
															typeIdentifier: "t_function_abidecode_pure$__$returns$__$",
															typeString: "function () pure"
														}
													},
													id: 57271,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "13773:79:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_tuple$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$_t_struct$_OutputParams_$56634_memory_ptr_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$",
														typeString: "tuple(struct Call memory[] memory,struct OutputParams memory,uint16,struct GasParams memory)"
													}
												},
												nodeType: "VariableDeclarationStatement",
												src: "13652:200:88"
											},
											{
												expression: {
													"arguments": [
														{
															id: 57277,
															name: "calls",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57248,
															src: "13937:5:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
																typeString: "struct Call memory[] memory"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
																typeString: "struct Call memory[] memory"
															}
														],
														expression: {
															"arguments": [
																{
																	id: 57274,
																	name: "userAccount",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57204,
																	src: "13919:11:88",
																	typeDescriptions: {
																		typeIdentifier: "t_address",
																		typeString: "address"
																	}
																}
															],
															expression: {
																argumentTypes: [
																	{
																		typeIdentifier: "t_address",
																		typeString: "address"
																	}
																],
																id: 57273,
																name: "IVirtualAccount",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 66494,
																src: "13903:15:88",
																typeDescriptions: {
																	typeIdentifier: "t_type$_t_contract$_IVirtualAccount_$66494_$",
																	typeString: "type(contract IVirtualAccount)"
																}
															},
															id: 57275,
															isConstant: false,
															isLValue: false,
															isPure: false,
															kind: "typeConversion",
															lValueRequested: false,
															nameLocations: [
															],
															names: [
															],
															nodeType: "FunctionCall",
															src: "13903:28:88",
															tryCall: false,
															typeDescriptions: {
																typeIdentifier: "t_contract$_IVirtualAccount_$66494",
																typeString: "contract IVirtualAccount"
															}
														},
														id: 57276,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														memberLocation: "13932:4:88",
														memberName: "call",
														nodeType: "MemberAccess",
														referencedDeclaration: 66476,
														src: "13903:33:88",
														typeDescriptions: {
															typeIdentifier: "t_function_external_nonpayable$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
															typeString: "function (struct Call memory[] memory) external returns (bytes memory[] memory)"
														}
													},
													id: 57278,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "13903:40:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
														typeString: "bytes memory[] memory"
													}
												},
												id: 57279,
												nodeType: "ExpressionStatement",
												src: "13903:40:88"
											},
											{
												condition: {
													commonType: {
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													},
													id: 57283,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													leftExpression: {
														expression: {
															id: 57280,
															name: "outputParams",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57251,
															src: "14064:12:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																typeString: "struct OutputParams memory"
															}
														},
														id: 57281,
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														memberLocation: "14077:9:88",
														memberName: "amountOut",
														nodeType: "MemberAccess",
														referencedDeclaration: 56631,
														src: "14064:22:88",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													nodeType: "BinaryOperation",
													operator: "==",
													rightExpression: {
														id: 57282,
														name: "CONTRACT_BALANCE",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56662,
														src: "14090:16:88",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													src: "14064:42:88",
													typeDescriptions: {
														typeIdentifier: "t_bool",
														typeString: "bool"
													}
												},
												id: 57295,
												nodeType: "IfStatement",
												src: "14060:153:88",
												trueBody: {
													id: 57294,
													nodeType: "Block",
													src: "14108:105:88",
													statements: [
														{
															expression: {
																id: 57292,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																leftHandSide: {
																	expression: {
																		id: 57284,
																		name: "outputParams",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 57251,
																		src: "14126:12:88",
																		typeDescriptions: {
																			typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																			typeString: "struct OutputParams memory"
																		}
																	},
																	id: 57286,
																	isConstant: false,
																	isLValue: true,
																	isPure: false,
																	lValueRequested: true,
																	memberLocation: "14139:9:88",
																	memberName: "amountOut",
																	nodeType: "MemberAccess",
																	referencedDeclaration: 56631,
																	src: "14126:22:88",
																	typeDescriptions: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																},
																nodeType: "Assignment",
																operator: "=",
																rightHandSide: {
																	"arguments": [
																		{
																			id: 57290,
																			name: "userAccount",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57204,
																			src: "14186:11:88",
																			typeDescriptions: {
																				typeIdentifier: "t_address",
																				typeString: "address"
																			}
																		}
																	],
																	expression: {
																		argumentTypes: [
																			{
																				typeIdentifier: "t_address",
																				typeString: "address"
																			}
																		],
																		expression: {
																			expression: {
																				id: 57287,
																				name: "outputParams",
																				nodeType: "Identifier",
																				overloadedDeclarations: [
																				],
																				referencedDeclaration: 57251,
																				src: "14151:12:88",
																				typeDescriptions: {
																					typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																					typeString: "struct OutputParams memory"
																				}
																			},
																			id: 57288,
																			isConstant: false,
																			isLValue: true,
																			isPure: false,
																			lValueRequested: false,
																			memberLocation: "14164:11:88",
																			memberName: "outputToken",
																			nodeType: "MemberAccess",
																			referencedDeclaration: 56629,
																			src: "14151:24:88",
																			typeDescriptions: {
																				typeIdentifier: "t_address",
																				typeString: "address"
																			}
																		},
																		id: 57289,
																		isConstant: false,
																		isLValue: false,
																		isPure: false,
																		lValueRequested: false,
																		memberLocation: "14176:9:88",
																		memberName: "balanceOf",
																		nodeType: "MemberAccess",
																		referencedDeclaration: 46110,
																		src: "14151:34:88",
																		typeDescriptions: {
																			typeIdentifier: "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$attached_to$_t_address_$",
																			typeString: "function (address,address) view returns (uint256)"
																		}
																	},
																	id: 57291,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	kind: "functionCall",
																	lValueRequested: false,
																	nameLocations: [
																	],
																	names: [
																	],
																	nodeType: "FunctionCall",
																	src: "14151:47:88",
																	tryCall: false,
																	typeDescriptions: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																},
																src: "14126:72:88",
																typeDescriptions: {
																	typeIdentifier: "t_uint256",
																	typeString: "uint256"
																}
															},
															id: 57293,
															nodeType: "ExpressionStatement",
															src: "14126:72:88"
														}
													]
												}
											},
											{
												expression: {
													"arguments": [
														{
															expression: {
																id: 57300,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14322:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57301,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14335:11:88",
															memberName: "outputToken",
															nodeType: "MemberAccess",
															referencedDeclaration: 56629,
															src: "14322:24:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57302,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14348:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57303,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14361:9:88",
															memberName: "amountOut",
															nodeType: "MemberAccess",
															referencedDeclaration: 56631,
															src: "14348:22:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														],
														expression: {
															"arguments": [
																{
																	id: 57297,
																	name: "userAccount",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57204,
																	src: "14295:11:88",
																	typeDescriptions: {
																		typeIdentifier: "t_address",
																		typeString: "address"
																	}
																}
															],
															expression: {
																argumentTypes: [
																	{
																		typeIdentifier: "t_address",
																		typeString: "address"
																	}
																],
																id: 57296,
																name: "IVirtualAccount",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 66494,
																src: "14279:15:88",
																typeDescriptions: {
																	typeIdentifier: "t_type$_t_contract$_IVirtualAccount_$66494_$",
																	typeString: "type(contract IVirtualAccount)"
																}
															},
															id: 57298,
															isConstant: false,
															isLValue: false,
															isPure: false,
															kind: "typeConversion",
															lValueRequested: false,
															nameLocations: [
															],
															names: [
															],
															nodeType: "FunctionCall",
															src: "14279:28:88",
															tryCall: false,
															typeDescriptions: {
																typeIdentifier: "t_contract$_IVirtualAccount_$66494",
																typeString: "contract IVirtualAccount"
															}
														},
														id: 57299,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														memberLocation: "14308:13:88",
														memberName: "withdrawERC20",
														nodeType: "MemberAccess",
														referencedDeclaration: 66457,
														src: "14279:42:88",
														typeDescriptions: {
															typeIdentifier: "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
															typeString: "function (address,uint256) external"
														}
													},
													id: 57304,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "14279:92:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_tuple$__$",
														typeString: "tuple()"
													}
												},
												id: 57305,
												nodeType: "ExpressionStatement",
												src: "14279:92:88"
											},
											{
												expression: {
													"arguments": [
														{
															expression: {
																id: 57307,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14455:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57308,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14468:15:88",
															memberName: "settlementOwner",
															nodeType: "MemberAccess",
															referencedDeclaration: 56625,
															src: "14455:28:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57309,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14501:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57310,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14514:9:88",
															memberName: "recipient",
															nodeType: "MemberAccess",
															referencedDeclaration: 56627,
															src: "14501:22:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57311,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14541:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57312,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14554:11:88",
															memberName: "outputToken",
															nodeType: "MemberAccess",
															referencedDeclaration: 56629,
															src: "14541:24:88",
															typeDescriptions: {
																typeIdentifier: "t_address",
																typeString: "address"
															}
														},
														{
															expression: {
																id: 57313,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14583:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57314,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14596:9:88",
															memberName: "amountOut",
															nodeType: "MemberAccess",
															referencedDeclaration: 56631,
															src: "14583:22:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														{
															expression: {
																id: 57315,
																name: "outputParams",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57251,
																src: "14623:12:88",
																typeDescriptions: {
																	typeIdentifier: "t_struct$_OutputParams_$56634_memory_ptr",
																	typeString: "struct OutputParams memory"
																}
															},
															id: 57316,
															isConstant: false,
															isLValue: true,
															isPure: false,
															lValueRequested: false,
															memberLocation: "14636:10:88",
															memberName: "depositOut",
															nodeType: "MemberAccess",
															referencedDeclaration: 56633,
															src: "14623:23:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														{
															id: 57317,
															name: "dstChainId",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57253,
															src: "14664:10:88",
															typeDescriptions: {
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															}
														},
														{
															id: 57318,
															name: "gasParams",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57256,
															src: "14692:9:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																typeString: "struct GasParams memory"
															}
														}
													],
													expression: {
														argumentTypes: [
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_address",
																typeString: "address"
															},
															{
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															},
															{
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															},
															{
																typeIdentifier: "t_uint16",
																typeString: "uint16"
															},
															{
																typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
																typeString: "struct GasParams memory"
															}
														],
														id: 57306,
														name: "_approveAndCallOut",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 57520,
														src: "14419:18:88",
														typeDescriptions: {
															typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_struct$_GasParams_$64010_memory_ptr_$returns$__$",
															typeString: "function (address,address,address,uint256,uint256,uint16,struct GasParams memory)"
														}
													},
													id: 57319,
													isConstant: false,
													isLValue: false,
													isPure: false,
													kind: "functionCall",
													lValueRequested: false,
													nameLocations: [
													],
													names: [
													],
													nodeType: "FunctionCall",
													src: "14419:296:88",
													tryCall: false,
													typeDescriptions: {
														typeIdentifier: "t_tuple$__$",
														typeString: "tuple()"
													}
												},
												id: 57320,
												nodeType: "ExpressionStatement",
												src: "14419:296:88"
											}
										]
									}
								},
								id: 57434,
								nodeType: "IfStatement",
								src: "13298:3012:88",
								trueBody: {
									id: 57240,
									nodeType: "Block",
									src: "13318:265:88",
									statements: [
										{
											assignments: [
												57220
											],
											declarations: [
												{
													constant: false,
													id: 57220,
													mutability: "mutable",
													name: "calls",
													nameLocation: "13375:5:88",
													nodeType: "VariableDeclaration",
													scope: 57240,
													src: "13361:19:88",
													stateVariable: false,
													storageLocation: "memory",
													typeDescriptions: {
														typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
														typeString: "struct Call[]"
													},
													typeName: {
														baseType: {
															id: 57218,
															nodeType: "UserDefinedTypeName",
															pathNode: {
																id: 57217,
																name: "Call",
																nameLocations: [
																	"13361:4:88"
																],
																nodeType: "IdentifierPath",
																referencedDeclaration: 66421,
																src: "13361:4:88"
															},
															referencedDeclaration: 66421,
															src: "13361:4:88",
															typeDescriptions: {
																typeIdentifier: "t_struct$_Call_$66421_storage_ptr",
																typeString: "struct Call"
															}
														},
														id: 57219,
														nodeType: "ArrayTypeName",
														src: "13361:6:88",
														typeDescriptions: {
															typeIdentifier: "t_array$_t_struct$_Call_$66421_storage_$dyn_storage_ptr",
															typeString: "struct Call[]"
														}
													},
													visibility: "internal"
												}
											],
											id: 57232,
											initialValue: {
												"arguments": [
													{
														"arguments": [
															{
																baseExpression: {
																	id: 57224,
																	name: "encodedData",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 57202,
																	src: "13402:11:88",
																	typeDescriptions: {
																		typeIdentifier: "t_bytes_calldata_ptr",
																		typeString: "bytes calldata"
																	}
																},
																id: 57226,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																nodeType: "IndexRangeAccess",
																src: "13402:15:88",
																startExpression: {
																	hexValue: "31",
																	id: 57225,
																	isConstant: false,
																	isLValue: false,
																	isPure: true,
																	kind: "number",
																	lValueRequested: false,
																	nodeType: "Literal",
																	src: "13414:1:88",
																	typeDescriptions: {
																		typeIdentifier: "t_rational_1_by_1",
																		typeString: "int_const 1"
																	},
																	value: "1"
																},
																typeDescriptions: {
																	typeIdentifier: "t_bytes_calldata_ptr_slice",
																	typeString: "bytes calldata slice"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_bytes_calldata_ptr_slice",
																	typeString: "bytes calldata slice"
																}
															],
															id: 57223,
															name: "_decode",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57616,
															src: "13394:7:88",
															typeDescriptions: {
																typeIdentifier: "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$",
																typeString: "function (bytes calldata) pure returns (bytes memory)"
															}
														},
														id: 57227,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "functionCall",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "13394:24:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_bytes_memory_ptr",
															typeString: "bytes memory"
														}
													},
													{
														components: [
															{
																baseExpression: {
																	id: 57228,
																	name: "Call",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 66421,
																	src: "13421:4:88",
																	typeDescriptions: {
																		typeIdentifier: "t_type$_t_struct$_Call_$66421_storage_ptr_$",
																		typeString: "type(struct Call storage pointer)"
																	}
																},
																id: 57229,
																isConstant: false,
																isLValue: false,
																isPure: true,
																lValueRequested: false,
																nodeType: "IndexAccess",
																src: "13421:6:88",
																typeDescriptions: {
																	typeIdentifier: "t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$",
																	typeString: "type(struct Call memory[] memory)"
																}
															}
														],
														id: 57230,
														isConstant: false,
														isInlineArray: false,
														isLValue: false,
														isPure: true,
														lValueRequested: false,
														nodeType: "TupleExpression",
														src: "13420:8:88",
														typeDescriptions: {
															typeIdentifier: "t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$",
															typeString: "type(struct Call memory[] memory)"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_bytes_memory_ptr",
															typeString: "bytes memory"
														},
														{
															typeIdentifier: "t_type$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$",
															typeString: "type(struct Call memory[] memory)"
														}
													],
													expression: {
														id: 57221,
														name: "abi",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: -1,
														src: "13383:3:88",
														typeDescriptions: {
															typeIdentifier: "t_magic_abi",
															typeString: "abi"
														}
													},
													id: 57222,
													isConstant: false,
													isLValue: false,
													isPure: true,
													lValueRequested: false,
													memberLocation: "13387:6:88",
													memberName: "decode",
													nodeType: "MemberAccess",
													src: "13383:10:88",
													typeDescriptions: {
														typeIdentifier: "t_function_abidecode_pure$__$returns$__$",
														typeString: "function () pure"
													}
												},
												id: 57231,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "13383:46:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
													typeString: "struct Call memory[] memory"
												}
											},
											nodeType: "VariableDeclarationStatement",
											src: "13361:68:88"
										},
										{
											expression: {
												"arguments": [
													{
														id: 57237,
														name: "calls",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 57220,
														src: "13514:5:88",
														typeDescriptions: {
															typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
															typeString: "struct Call memory[] memory"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr",
															typeString: "struct Call memory[] memory"
														}
													],
													expression: {
														"arguments": [
															{
																id: 57234,
																name: "userAccount",
																nodeType: "Identifier",
																overloadedDeclarations: [
																],
																referencedDeclaration: 57204,
																src: "13496:11:88",
																typeDescriptions: {
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															}
														],
														expression: {
															argumentTypes: [
																{
																	typeIdentifier: "t_address",
																	typeString: "address"
																}
															],
															id: 57233,
															name: "IVirtualAccount",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 66494,
															src: "13480:15:88",
															typeDescriptions: {
																typeIdentifier: "t_type$_t_contract$_IVirtualAccount_$66494_$",
																typeString: "type(contract IVirtualAccount)"
															}
														},
														id: 57235,
														isConstant: false,
														isLValue: false,
														isPure: false,
														kind: "typeConversion",
														lValueRequested: false,
														nameLocations: [
														],
														names: [
														],
														nodeType: "FunctionCall",
														src: "13480:28:88",
														tryCall: false,
														typeDescriptions: {
															typeIdentifier: "t_contract$_IVirtualAccount_$66494",
															typeString: "contract IVirtualAccount"
														}
													},
													id: 57236,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "13509:4:88",
													memberName: "call",
													nodeType: "MemberAccess",
													referencedDeclaration: 66476,
													src: "13480:33:88",
													typeDescriptions: {
														typeIdentifier: "t_function_external_nonpayable$_t_array$_t_struct$_Call_$66421_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
														typeString: "function (struct Call memory[] memory) external returns (bytes memory[] memory)"
													}
												},
												id: 57238,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "13480:40:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
													typeString: "bytes memory[] memory"
												}
											},
											id: 57239,
											nodeType: "ExpressionStatement",
											src: "13480:40:88"
										}
									]
								}
							}
						]
					},
					documentation: {
						id: 57200,
						nodeType: "StructuredDocumentation",
						src: "12885:208:88",
						text: "  @dev FuncIDs\n  FUNC ID      | FUNC NAME\n  0x01         |  multicallNoOutput\n  0x02         |  multicallSingleOutput\n  0x03         |  multicallMultipleOutput"
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_executeSigned",
					nameLocation: "13107:14:88",
					parameters: {
						id: 57205,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57202,
								mutability: "mutable",
								name: "encodedData",
								nameLocation: "13137:11:88",
								nodeType: "VariableDeclaration",
								scope: 57436,
								src: "13122:26:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57201,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "13122:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57204,
								mutability: "mutable",
								name: "userAccount",
								nameLocation: "13158:11:88",
								nodeType: "VariableDeclaration",
								scope: 57436,
								src: "13150:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57203,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "13150:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							}
						],
						src: "13121:49:88"
					},
					returnParameters: {
						id: 57206,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "13180:0:88"
					},
					scope: 57643,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "internal"
				},
				{
					id: 57461,
					nodeType: "FunctionDefinition",
					src: "16687:260:88",
					nodes: [
					],
					body: {
						id: 57460,
						nodeType: "Block",
						src: "16825:122:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									id: 57458,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftHandSide: {
										components: [
											{
												id: 57449,
												name: "blockNumber",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 57444,
												src: "16868:11:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											},
											{
												id: 57450,
												name: "returnData",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 57447,
												src: "16881:10:88",
												typeDescriptions: {
													typeIdentifier: "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
													typeString: "bytes memory[] memory"
												}
											}
										],
										id: 57451,
										isConstant: false,
										isInlineArray: false,
										isLValue: true,
										isPure: false,
										lValueRequested: true,
										nodeType: "TupleExpression",
										src: "16867:25:88",
										typeDescriptions: {
											typeIdentifier: "t_tuple$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
											typeString: "tuple(uint256,bytes memory[] memory)"
										}
									},
									nodeType: "Assignment",
									operator: "=",
									rightHandSide: {
										"arguments": [
											{
												id: 57456,
												name: "calls",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 57441,
												src: "16934:5:88",
												typeDescriptions: {
													typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
													typeString: "struct IMulticall2.Call memory[] memory"
												}
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
													typeString: "struct IMulticall2.Call memory[] memory"
												}
											],
											expression: {
												"arguments": [
													{
														id: 57453,
														name: "multicallAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56671,
														src: "16906:16:88",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														}
													],
													id: 57452,
													name: "IMulticall",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 65437,
													src: "16895:10:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IMulticall2_$65437_$",
														typeString: "type(contract IMulticall2)"
													}
												},
												id: 57454,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "16895:28:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IMulticall2_$65437",
													typeString: "contract IMulticall2"
												}
											},
											id: 57455,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "16924:9:88",
											memberName: "aggregate",
											nodeType: "MemberAccess",
											referencedDeclaration: 65436,
											src: "16895:38:88",
											typeDescriptions: {
												typeIdentifier: "t_function_external_nonpayable$_t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
												typeString: "function (struct IMulticall2.Call memory[] memory) external returns (uint256,bytes memory[] memory)"
											}
										},
										id: 57457,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "16895:45:88",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_tuple$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$",
											typeString: "tuple(uint256,bytes memory[] memory)"
										}
									},
									src: "16867:73:88",
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57459,
								nodeType: "ExpressionStatement",
								src: "16867:73:88"
							}
						]
					},
					documentation: {
						id: 57437,
						nodeType: "StructuredDocumentation",
						src: "16509:173:88",
						text: "  @notice Function to perform a set of actions on the omnichain environment without using the user's Virtual Acccount.\n  @param calls to be executed."
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_multicall",
					nameLocation: "16696:10:88",
					parameters: {
						id: 57442,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57441,
								mutability: "mutable",
								name: "calls",
								nameLocation: "16732:5:88",
								nodeType: "VariableDeclaration",
								scope: 57461,
								src: "16707:30:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_struct$_Call_$65419_memory_ptr_$dyn_memory_ptr",
									typeString: "struct IMulticall2.Call[]"
								},
								typeName: {
									baseType: {
										id: 57439,
										nodeType: "UserDefinedTypeName",
										pathNode: {
											id: 57438,
											name: "IMulticall.Call",
											nameLocations: [
												"16707:10:88",
												"16718:4:88"
											],
											nodeType: "IdentifierPath",
											referencedDeclaration: 65419,
											src: "16707:15:88"
										},
										referencedDeclaration: 65419,
										src: "16707:15:88",
										typeDescriptions: {
											typeIdentifier: "t_struct$_Call_$65419_storage_ptr",
											typeString: "struct IMulticall2.Call"
										}
									},
									id: 57440,
									nodeType: "ArrayTypeName",
									src: "16707:17:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_struct$_Call_$65419_storage_$dyn_storage_ptr",
										typeString: "struct IMulticall2.Call[]"
									}
								},
								visibility: "internal"
							}
						],
						src: "16706:32:88"
					},
					returnParameters: {
						id: 57448,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57444,
								mutability: "mutable",
								name: "blockNumber",
								nameLocation: "16781:11:88",
								nodeType: "VariableDeclaration",
								scope: 57461,
								src: "16773:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 57443,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "16773:7:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57447,
								mutability: "mutable",
								name: "returnData",
								nameLocation: "16809:10:88",
								nodeType: "VariableDeclaration",
								scope: 57461,
								src: "16794:25:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
									typeString: "bytes[]"
								},
								typeName: {
									baseType: {
										id: 57445,
										name: "bytes",
										nodeType: "ElementaryTypeName",
										src: "16794:5:88",
										typeDescriptions: {
											typeIdentifier: "t_bytes_storage_ptr",
											typeString: "bytes"
										}
									},
									id: 57446,
									nodeType: "ArrayTypeName",
									src: "16794:7:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_bytes_storage_$dyn_storage_ptr",
										typeString: "bytes[]"
									}
								},
								visibility: "internal"
							}
						],
						src: "16772:48:88"
					},
					scope: 57643,
					stateMutability: "nonpayable",
					virtual: false,
					visibility: "internal"
				},
				{
					id: 57520,
					nodeType: "FunctionDefinition",
					src: "17651:828:88",
					nodes: [
					],
					body: {
						id: 57519,
						nodeType: "Block",
						src: "17909:570:88",
						nodes: [
						],
						statements: [
							{
								condition: {
									commonType: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									},
									id: 57484,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										commonType: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										},
										id: 57482,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										leftExpression: {
											id: 57480,
											name: "amountOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57470,
											src: "17923:9:88",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										nodeType: "BinaryOperation",
										operator: "-",
										rightExpression: {
											id: 57481,
											name: "depositOut",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57472,
											src: "17935:10:88",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											}
										},
										src: "17923:22:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "BinaryOperation",
									operator: ">",
									rightExpression: {
										hexValue: "30",
										id: 57483,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "17948:1:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									src: "17923:26:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 57495,
								nodeType: "IfStatement",
								src: "17919:185:88",
								trueBody: {
									id: 57494,
									nodeType: "Block",
									src: "17951:153:88",
									statements: [
										{
											expression: {
												"arguments": [
													{
														id: 57488,
														name: "localPortAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56668,
														src: "18052:16:88",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													{
														commonType: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														},
														id: 57491,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														leftExpression: {
															id: 57489,
															name: "amountOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57470,
															src: "18070:9:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														nodeType: "BinaryOperation",
														operator: "-",
														rightExpression: {
															id: 57490,
															name: "depositOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57472,
															src: "18082:10:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														src: "18070:22:88",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address",
															typeString: "address"
														},
														{
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													],
													expression: {
														id: 57485,
														name: "outputToken",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 57468,
														src: "18028:11:88",
														typeDescriptions: {
															typeIdentifier: "t_address",
															typeString: "address"
														}
													},
													id: 57487,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													memberLocation: "18040:11:88",
													memberName: "safeApprove",
													nodeType: "MemberAccess",
													referencedDeclaration: 46086,
													src: "18028:23:88",
													typeDescriptions: {
														typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
														typeString: "function (address,address,uint256)"
													}
												},
												id: 57492,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "functionCall",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "18028:65:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_tuple$__$",
													typeString: "tuple()"
												}
											},
											id: 57493,
											nodeType: "ExpressionStatement",
											src: "18028:65:88"
										}
									]
								}
							},
							{
								expression: {
									"arguments": [
										{
											"arguments": [
												{
													id: 57505,
													name: "settlementOwner",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57464,
													src: "18276:15:88",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													}
												],
												id: 57504,
												isConstant: false,
												isLValue: false,
												isPure: true,
												lValueRequested: false,
												nodeType: "ElementaryTypeNameExpression",
												src: "18268:8:88",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_address_payable_$",
													typeString: "type(address payable)"
												},
												typeName: {
													id: 57503,
													name: "address",
													nodeType: "ElementaryTypeName",
													src: "18268:8:88",
													stateMutability: "payable",
													typeDescriptions: {
													}
												}
											},
											id: 57506,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "18268:24:88",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											}
										},
										{
											id: 57507,
											name: "recipient",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57466,
											src: "18306:9:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 57508,
											name: "dstChainId",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57474,
											src: "18329:10:88",
											typeDescriptions: {
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											}
										},
										{
											hexValue: "",
											id: 57509,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "18353:2:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											value: ""
										},
										{
											"arguments": [
												{
													id: 57511,
													name: "outputToken",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57468,
													src: "18385:11:88",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												},
												{
													id: 57512,
													name: "amountOut",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57470,
													src: "18398:9:88",
													typeDescriptions: {
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													}
												},
												{
													id: 57513,
													name: "depositOut",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57472,
													src: "18409:10:88",
													typeDescriptions: {
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													},
													{
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													},
													{
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													}
												],
												id: 57510,
												name: "SettlementInput",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 64107,
												src: "18369:15:88",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_struct$_SettlementInput_$64107_storage_ptr_$",
													typeString: "type(struct SettlementInput storage pointer)"
												}
											},
											id: 57514,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "structConstructorCall",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "18369:51:88",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_struct$_SettlementInput_$64107_memory_ptr",
												typeString: "struct SettlementInput memory"
											}
										},
										{
											id: 57515,
											name: "gasParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57477,
											src: "18434:9:88",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											}
										},
										{
											hexValue: "66616c7365",
											id: 57516,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "bool",
											lValueRequested: false,
											nodeType: "Literal",
											src: "18457:5:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											},
											value: "false"
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											},
											{
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											{
												typeIdentifier: "t_struct$_SettlementInput_$64107_memory_ptr",
												typeString: "struct SettlementInput memory"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											},
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address_payable",
													typeString: "address payable"
												},
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_uint16",
													typeString: "uint16"
												},
												{
													typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
													typeString: "literal_string \"\""
												},
												{
													typeIdentifier: "t_struct$_SettlementInput_$64107_memory_ptr",
													typeString: "struct SettlementInput memory"
												},
												{
													typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
													typeString: "struct GasParams memory"
												},
												{
													typeIdentifier: "t_bool",
													typeString: "bool"
												}
											],
											expression: {
												"arguments": [
													{
														id: 57497,
														name: "bridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56674,
														src: "18200:18:88",
														typeDescriptions: {
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													],
													id: 57496,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 65747,
													src: "18187:12:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IRootBridgeAgent_$65747_$",
														typeString: "type(contract IRootBridgeAgent)"
													}
												},
												id: 57498,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "18187:32:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IRootBridgeAgent_$65747",
													typeString: "contract IRootBridgeAgent"
												}
											},
											id: 57499,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "18220:16:88",
											memberName: "callOutAndBridge",
											nodeType: "MemberAccess",
											referencedDeclaration: 65544,
											src: "18187:49:88",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_address_$_t_uint16_$_t_bytes_memory_ptr_$_t_struct$_SettlementInput_$64107_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$",
												typeString: "function (address payable,address,uint16,bytes memory,struct SettlementInput memory,struct GasParams memory,bool) payable external"
											}
										},
										id: 57502,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 57500,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "18244:3:88",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 57501,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "18248:5:88",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "18244:9:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "18187:67:88",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_address_$_t_uint16_$_t_bytes_memory_ptr_$_t_struct$_SettlementInput_$64107_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$value",
											typeString: "function (address payable,address,uint16,bytes memory,struct SettlementInput memory,struct GasParams memory,bool) payable external"
										}
									},
									id: 57517,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "18187:285:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57518,
								nodeType: "ExpressionStatement",
								src: "18187:285:88"
							}
						]
					},
					documentation: {
						id: 57462,
						nodeType: "StructuredDocumentation",
						src: "17139:507:88",
						text: "  @notice Function to approve token spend before Bridge Agent interaction to Bridge Out of omnichain environment.\n  @param settlementOwner settlement owner and excess gas receiver.\n  @param recipient Address to receive the output assets.\n  @param outputToken Address of the output hToken.\n  @param amountOut Amount of output hTokens to send.\n  @param depositOut Amount of output hTokens to deposit.\n  @param dstChainId Chain Id of the destination chain."
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_approveAndCallOut",
					nameLocation: "17660:18:88",
					parameters: {
						id: 57478,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57464,
								mutability: "mutable",
								name: "settlementOwner",
								nameLocation: "17696:15:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17688:23:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57463,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "17688:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57466,
								mutability: "mutable",
								name: "recipient",
								nameLocation: "17729:9:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17721:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57465,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "17721:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57468,
								mutability: "mutable",
								name: "outputToken",
								nameLocation: "17756:11:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17748:19:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57467,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "17748:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57470,
								mutability: "mutable",
								name: "amountOut",
								nameLocation: "17785:9:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17777:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 57469,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "17777:7:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57472,
								mutability: "mutable",
								name: "depositOut",
								nameLocation: "17812:10:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17804:18:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint256",
									typeString: "uint256"
								},
								typeName: {
									id: 57471,
									name: "uint256",
									nodeType: "ElementaryTypeName",
									src: "17804:7:88",
									typeDescriptions: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57474,
								mutability: "mutable",
								name: "dstChainId",
								nameLocation: "17839:10:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17832:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57473,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "17832:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57477,
								mutability: "mutable",
								name: "gasParams",
								nameLocation: "17876:9:88",
								nodeType: "VariableDeclaration",
								scope: 57520,
								src: "17859:26:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 57476,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 57475,
										name: "GasParams",
										nameLocations: [
											"17859:9:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64010,
										src: "17859:9:88"
									},
									referencedDeclaration: 64010,
									src: "17859:9:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "17678:213:88"
					},
					returnParameters: {
						id: 57479,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "17909:0:88"
					},
					scope: 57643,
					stateMutability: "nonpayable",
					virtual: true,
					visibility: "internal"
				},
				{
					id: 57605,
					nodeType: "FunctionDefinition",
					src: "18976:1076:88",
					nodes: [
					],
					body: {
						id: 57604,
						nodeType: "Block",
						src: "19272:780:88",
						nodes: [
						],
						statements: [
							{
								body: {
									id: 57579,
									nodeType: "Block",
									src: "19361:296:88",
									statements: [
										{
											condition: {
												commonType: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												},
												id: 57558,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												leftExpression: {
													commonType: {
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													},
													id: 57556,
													isConstant: false,
													isLValue: false,
													isPure: false,
													lValueRequested: false,
													leftExpression: {
														baseExpression: {
															id: 57550,
															name: "amountsOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57531,
															src: "19379:10:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																typeString: "uint256[] memory"
															}
														},
														id: 57552,
														indexExpression: {
															id: 57551,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57543,
															src: "19390:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "19379:13:88",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													nodeType: "BinaryOperation",
													operator: "-",
													rightExpression: {
														baseExpression: {
															id: 57553,
															name: "depositsOut",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57534,
															src: "19395:11:88",
															typeDescriptions: {
																typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																typeString: "uint256[] memory"
															}
														},
														id: 57555,
														indexExpression: {
															id: 57554,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57543,
															src: "19407:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														isConstant: false,
														isLValue: true,
														isPure: false,
														lValueRequested: false,
														nodeType: "IndexAccess",
														src: "19395:14:88",
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													src: "19379:30:88",
													typeDescriptions: {
														typeIdentifier: "t_uint256",
														typeString: "uint256"
													}
												},
												nodeType: "BinaryOperation",
												operator: ">",
												rightExpression: {
													hexValue: "30",
													id: 57557,
													isConstant: false,
													isLValue: false,
													isPure: true,
													kind: "number",
													lValueRequested: false,
													nodeType: "Literal",
													src: "19412:1:88",
													typeDescriptions: {
														typeIdentifier: "t_rational_0_by_1",
														typeString: "int_const 0"
													},
													value: "0"
												},
												src: "19379:34:88",
												typeDescriptions: {
													typeIdentifier: "t_bool",
													typeString: "bool"
												}
											},
											id: 57574,
											nodeType: "IfStatement",
											src: "19375:212:88",
											trueBody: {
												id: 57573,
												nodeType: "Block",
												src: "19415:172:88",
												statements: [
													{
														expression: {
															"arguments": [
																{
																	id: 57563,
																	name: "localPortAddress",
																	nodeType: "Identifier",
																	overloadedDeclarations: [
																	],
																	referencedDeclaration: 56668,
																	src: "19523:16:88",
																	typeDescriptions: {
																		typeIdentifier: "t_address",
																		typeString: "address"
																	}
																},
																{
																	commonType: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	},
																	id: 57570,
																	isConstant: false,
																	isLValue: false,
																	isPure: false,
																	lValueRequested: false,
																	leftExpression: {
																		baseExpression: {
																			id: 57564,
																			name: "amountsOut",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57531,
																			src: "19541:10:88",
																			typeDescriptions: {
																				typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																				typeString: "uint256[] memory"
																			}
																		},
																		id: 57566,
																		indexExpression: {
																			id: 57565,
																			name: "i",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57543,
																			src: "19552:1:88",
																			typeDescriptions: {
																				typeIdentifier: "t_uint256",
																				typeString: "uint256"
																			}
																		},
																		isConstant: false,
																		isLValue: true,
																		isPure: false,
																		lValueRequested: false,
																		nodeType: "IndexAccess",
																		src: "19541:13:88",
																		typeDescriptions: {
																			typeIdentifier: "t_uint256",
																			typeString: "uint256"
																		}
																	},
																	nodeType: "BinaryOperation",
																	operator: "-",
																	rightExpression: {
																		baseExpression: {
																			id: 57567,
																			name: "depositsOut",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57534,
																			src: "19557:11:88",
																			typeDescriptions: {
																				typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
																				typeString: "uint256[] memory"
																			}
																		},
																		id: 57569,
																		indexExpression: {
																			id: 57568,
																			name: "i",
																			nodeType: "Identifier",
																			overloadedDeclarations: [
																			],
																			referencedDeclaration: 57543,
																			src: "19569:1:88",
																			typeDescriptions: {
																				typeIdentifier: "t_uint256",
																				typeString: "uint256"
																			}
																		},
																		isConstant: false,
																		isLValue: true,
																		isPure: false,
																		lValueRequested: false,
																		nodeType: "IndexAccess",
																		src: "19557:14:88",
																		typeDescriptions: {
																			typeIdentifier: "t_uint256",
																			typeString: "uint256"
																		}
																	},
																	src: "19541:30:88",
																	typeDescriptions: {
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																}
															],
															expression: {
																argumentTypes: [
																	{
																		typeIdentifier: "t_address",
																		typeString: "address"
																	},
																	{
																		typeIdentifier: "t_uint256",
																		typeString: "uint256"
																	}
																],
																expression: {
																	baseExpression: {
																		id: 57559,
																		name: "outputTokens",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 57528,
																		src: "19495:12:88",
																		typeDescriptions: {
																			typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
																			typeString: "address[] memory"
																		}
																	},
																	id: 57561,
																	indexExpression: {
																		id: 57560,
																		name: "i",
																		nodeType: "Identifier",
																		overloadedDeclarations: [
																		],
																		referencedDeclaration: 57543,
																		src: "19508:1:88",
																		typeDescriptions: {
																			typeIdentifier: "t_uint256",
																			typeString: "uint256"
																		}
																	},
																	isConstant: false,
																	isLValue: true,
																	isPure: false,
																	lValueRequested: false,
																	nodeType: "IndexAccess",
																	src: "19495:15:88",
																	typeDescriptions: {
																		typeIdentifier: "t_address",
																		typeString: "address"
																	}
																},
																id: 57562,
																isConstant: false,
																isLValue: false,
																isPure: false,
																lValueRequested: false,
																memberLocation: "19511:11:88",
																memberName: "safeApprove",
																nodeType: "MemberAccess",
																referencedDeclaration: 46086,
																src: "19495:27:88",
																typeDescriptions: {
																	typeIdentifier: "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
																	typeString: "function (address,address,uint256)"
																}
															},
															id: 57571,
															isConstant: false,
															isLValue: false,
															isPure: false,
															kind: "functionCall",
															lValueRequested: false,
															nameLocations: [
															],
															names: [
															],
															nodeType: "FunctionCall",
															src: "19495:77:88",
															tryCall: false,
															typeDescriptions: {
																typeIdentifier: "t_tuple$__$",
																typeString: "tuple()"
															}
														},
														id: 57572,
														nodeType: "ExpressionStatement",
														src: "19495:77:88"
													}
												]
											}
										},
										{
											id: 57578,
											nodeType: "UncheckedBlock",
											src: "19601:46:88",
											statements: [
												{
													expression: {
														id: 57576,
														isConstant: false,
														isLValue: false,
														isPure: false,
														lValueRequested: false,
														nodeType: "UnaryOperation",
														operator: "++",
														prefix: true,
														src: "19629:3:88",
														subExpression: {
															id: 57575,
															name: "i",
															nodeType: "Identifier",
															overloadedDeclarations: [
															],
															referencedDeclaration: 57543,
															src: "19631:1:88",
															typeDescriptions: {
																typeIdentifier: "t_uint256",
																typeString: "uint256"
															}
														},
														typeDescriptions: {
															typeIdentifier: "t_uint256",
															typeString: "uint256"
														}
													},
													id: 57577,
													nodeType: "ExpressionStatement",
													src: "19629:3:88"
												}
											]
										}
									]
								},
								condition: {
									commonType: {
										typeIdentifier: "t_uint256",
										typeString: "uint256"
									},
									id: 57549,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										id: 57546,
										name: "i",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 57543,
										src: "19335:1:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									nodeType: "BinaryOperation",
									operator: "<",
									rightExpression: {
										expression: {
											id: 57547,
											name: "outputTokens",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57528,
											src: "19339:12:88",
											typeDescriptions: {
												typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
												typeString: "address[] memory"
											}
										},
										id: 57548,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "19352:6:88",
										memberName: "length",
										nodeType: "MemberAccess",
										src: "19339:19:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									src: "19335:23:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 57580,
								initializationExpression: {
									assignments: [
										57543
									],
									declarations: [
										{
											constant: false,
											id: 57543,
											mutability: "mutable",
											name: "i",
											nameLocation: "19328:1:88",
											nodeType: "VariableDeclaration",
											scope: 57580,
											src: "19320:9:88",
											stateVariable: false,
											storageLocation: "default",
											typeDescriptions: {
												typeIdentifier: "t_uint256",
												typeString: "uint256"
											},
											typeName: {
												id: 57542,
												name: "uint256",
												nodeType: "ElementaryTypeName",
												src: "19320:7:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											},
											visibility: "internal"
										}
									],
									id: 57545,
									initialValue: {
										hexValue: "30",
										id: 57544,
										isConstant: false,
										isLValue: false,
										isPure: true,
										kind: "number",
										lValueRequested: false,
										nodeType: "Literal",
										src: "19332:1:88",
										typeDescriptions: {
											typeIdentifier: "t_rational_0_by_1",
											typeString: "int_const 0"
										},
										value: "0"
									},
									nodeType: "VariableDeclarationStatement",
									src: "19320:13:88"
								},
								nodeType: "ForStatement",
								src: "19315:342:88"
							},
							{
								expression: {
									"arguments": [
										{
											"arguments": [
												{
													id: 57590,
													name: "settlementOwner",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57523,
													src: "19838:15:88",
													typeDescriptions: {
														typeIdentifier: "t_address",
														typeString: "address"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_address",
														typeString: "address"
													}
												],
												id: 57589,
												isConstant: false,
												isLValue: false,
												isPure: true,
												lValueRequested: false,
												nodeType: "ElementaryTypeNameExpression",
												src: "19830:8:88",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_address_payable_$",
													typeString: "type(address payable)"
												},
												typeName: {
													id: 57588,
													name: "address",
													nodeType: "ElementaryTypeName",
													src: "19830:8:88",
													stateMutability: "payable",
													typeDescriptions: {
													}
												}
											},
											id: 57591,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "typeConversion",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "19830:24:88",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											}
										},
										{
											id: 57592,
											name: "recipient",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57525,
											src: "19868:9:88",
											typeDescriptions: {
												typeIdentifier: "t_address",
												typeString: "address"
											}
										},
										{
											id: 57593,
											name: "dstChainId",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57536,
											src: "19891:10:88",
											typeDescriptions: {
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											}
										},
										{
											hexValue: "",
											id: 57594,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "string",
											lValueRequested: false,
											nodeType: "Literal",
											src: "19915:2:88",
											typeDescriptions: {
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											value: ""
										},
										{
											"arguments": [
												{
													id: 57596,
													name: "outputTokens",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57528,
													src: "19955:12:88",
													typeDescriptions: {
														typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
														typeString: "address[] memory"
													}
												},
												{
													id: 57597,
													name: "amountsOut",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57531,
													src: "19969:10:88",
													typeDescriptions: {
														typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
														typeString: "uint256[] memory"
													}
												},
												{
													id: 57598,
													name: "depositsOut",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 57534,
													src: "19981:11:88",
													typeDescriptions: {
														typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
														typeString: "uint256[] memory"
													}
												}
											],
											expression: {
												argumentTypes: [
													{
														typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
														typeString: "address[] memory"
													},
													{
														typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
														typeString: "uint256[] memory"
													},
													{
														typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
														typeString: "uint256[] memory"
													}
												],
												id: 57595,
												name: "SettlementMultipleInput",
												nodeType: "Identifier",
												overloadedDeclarations: [
												],
												referencedDeclaration: 64117,
												src: "19931:23:88",
												typeDescriptions: {
													typeIdentifier: "t_type$_t_struct$_SettlementMultipleInput_$64117_storage_ptr_$",
													typeString: "type(struct SettlementMultipleInput storage pointer)"
												}
											},
											id: 57599,
											isConstant: false,
											isLValue: false,
											isPure: false,
											kind: "structConstructorCall",
											lValueRequested: false,
											nameLocations: [
											],
											names: [
											],
											nodeType: "FunctionCall",
											src: "19931:62:88",
											tryCall: false,
											typeDescriptions: {
												typeIdentifier: "t_struct$_SettlementMultipleInput_$64117_memory_ptr",
												typeString: "struct SettlementMultipleInput memory"
											}
										},
										{
											id: 57600,
											name: "gasParams",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 57539,
											src: "20007:9:88",
											typeDescriptions: {
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											}
										},
										{
											hexValue: "66616c7365",
											id: 57601,
											isConstant: false,
											isLValue: false,
											isPure: true,
											kind: "bool",
											lValueRequested: false,
											nodeType: "Literal",
											src: "20030:5:88",
											typeDescriptions: {
												typeIdentifier: "t_bool",
												typeString: "bool"
											},
											value: "false"
										}
									],
									expression: {
										argumentTypes: [
											{
												typeIdentifier: "t_address_payable",
												typeString: "address payable"
											},
											{
												typeIdentifier: "t_address",
												typeString: "address"
											},
											{
												typeIdentifier: "t_uint16",
												typeString: "uint16"
											},
											{
												typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
												typeString: "literal_string \"\""
											},
											{
												typeIdentifier: "t_struct$_SettlementMultipleInput_$64117_memory_ptr",
												typeString: "struct SettlementMultipleInput memory"
											},
											{
												typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
												typeString: "struct GasParams memory"
											},
											{
												typeIdentifier: "t_bool",
												typeString: "bool"
											}
										],
										expression: {
											argumentTypes: [
												{
													typeIdentifier: "t_address_payable",
													typeString: "address payable"
												},
												{
													typeIdentifier: "t_address",
													typeString: "address"
												},
												{
													typeIdentifier: "t_uint16",
													typeString: "uint16"
												},
												{
													typeIdentifier: "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
													typeString: "literal_string \"\""
												},
												{
													typeIdentifier: "t_struct$_SettlementMultipleInput_$64117_memory_ptr",
													typeString: "struct SettlementMultipleInput memory"
												},
												{
													typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
													typeString: "struct GasParams memory"
												},
												{
													typeIdentifier: "t_bool",
													typeString: "bool"
												}
											],
											expression: {
												"arguments": [
													{
														id: 57582,
														name: "bridgeAgentAddress",
														nodeType: "Identifier",
														overloadedDeclarations: [
														],
														referencedDeclaration: 56674,
														src: "19754:18:88",
														typeDescriptions: {
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													}
												],
												expression: {
													argumentTypes: [
														{
															typeIdentifier: "t_address_payable",
															typeString: "address payable"
														}
													],
													id: 57581,
													name: "IBridgeAgent",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: 65747,
													src: "19741:12:88",
													typeDescriptions: {
														typeIdentifier: "t_type$_t_contract$_IRootBridgeAgent_$65747_$",
														typeString: "type(contract IRootBridgeAgent)"
													}
												},
												id: 57583,
												isConstant: false,
												isLValue: false,
												isPure: false,
												kind: "typeConversion",
												lValueRequested: false,
												nameLocations: [
												],
												names: [
												],
												nodeType: "FunctionCall",
												src: "19741:32:88",
												tryCall: false,
												typeDescriptions: {
													typeIdentifier: "t_contract$_IRootBridgeAgent_$65747",
													typeString: "contract IRootBridgeAgent"
												}
											},
											id: 57584,
											isConstant: false,
											isLValue: false,
											isPure: false,
											lValueRequested: false,
											memberLocation: "19774:24:88",
											memberName: "callOutAndBridgeMultiple",
											nodeType: "MemberAccess",
											referencedDeclaration: 65564,
											src: "19741:57:88",
											typeDescriptions: {
												typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_address_$_t_uint16_$_t_bytes_memory_ptr_$_t_struct$_SettlementMultipleInput_$64117_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$",
												typeString: "function (address payable,address,uint16,bytes memory,struct SettlementMultipleInput memory,struct GasParams memory,bool) payable external"
											}
										},
										id: 57587,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										names: [
											"value"
										],
										nodeType: "FunctionCallOptions",
										options: [
											{
												expression: {
													id: 57585,
													name: "msg",
													nodeType: "Identifier",
													overloadedDeclarations: [
													],
													referencedDeclaration: -15,
													src: "19806:3:88",
													typeDescriptions: {
														typeIdentifier: "t_magic_message",
														typeString: "msg"
													}
												},
												id: 57586,
												isConstant: false,
												isLValue: false,
												isPure: false,
												lValueRequested: false,
												memberLocation: "19810:5:88",
												memberName: "value",
												nodeType: "MemberAccess",
												src: "19806:9:88",
												typeDescriptions: {
													typeIdentifier: "t_uint256",
													typeString: "uint256"
												}
											}
										],
										src: "19741:75:88",
										typeDescriptions: {
											typeIdentifier: "t_function_external_payable$_t_address_payable_$_t_address_$_t_uint16_$_t_bytes_memory_ptr_$_t_struct$_SettlementMultipleInput_$64117_memory_ptr_$_t_struct$_GasParams_$64010_memory_ptr_$_t_bool_$returns$__$value",
											typeString: "function (address payable,address,uint16,bytes memory,struct SettlementMultipleInput memory,struct GasParams memory,bool) payable external"
										}
									},
									id: 57602,
									isConstant: false,
									isLValue: false,
									isPure: false,
									kind: "functionCall",
									lValueRequested: false,
									nameLocations: [
									],
									names: [
									],
									nodeType: "FunctionCall",
									src: "19741:304:88",
									tryCall: false,
									typeDescriptions: {
										typeIdentifier: "t_tuple$__$",
										typeString: "tuple()"
									}
								},
								id: 57603,
								nodeType: "ExpressionStatement",
								src: "19741:304:88"
							}
						]
					},
					documentation: {
						id: 57521,
						nodeType: "StructuredDocumentation",
						src: "18485:486:88",
						text: "  @notice Function to approve multiple token spend before Bridge Agent interaction to Bridge Out of omnichain environment.\n  @param settlementOwner settlement owner and excess gas receiver.\n  @param recipient Address to receive the output assets.\n  @param outputTokens Addresses of the output hTokens.\n  @param amountsOut Total amount of tokens to send.\n  @param depositsOut Amounts of tokens to withdraw from the destination port."
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_approveMultipleAndCallOut",
					nameLocation: "18985:26:88",
					parameters: {
						id: 57540,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57523,
								mutability: "mutable",
								name: "settlementOwner",
								nameLocation: "19029:15:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19021:23:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57522,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "19021:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57525,
								mutability: "mutable",
								name: "recipient",
								nameLocation: "19062:9:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19054:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_address",
									typeString: "address"
								},
								typeName: {
									id: 57524,
									name: "address",
									nodeType: "ElementaryTypeName",
									src: "19054:7:88",
									stateMutability: "nonpayable",
									typeDescriptions: {
										typeIdentifier: "t_address",
										typeString: "address"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57528,
								mutability: "mutable",
								name: "outputTokens",
								nameLocation: "19098:12:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19081:29:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_address_$dyn_memory_ptr",
									typeString: "address[]"
								},
								typeName: {
									baseType: {
										id: 57526,
										name: "address",
										nodeType: "ElementaryTypeName",
										src: "19081:7:88",
										stateMutability: "nonpayable",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									id: 57527,
									nodeType: "ArrayTypeName",
									src: "19081:9:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_address_$dyn_storage_ptr",
										typeString: "address[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57531,
								mutability: "mutable",
								name: "amountsOut",
								nameLocation: "19137:10:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19120:27:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
									typeString: "uint256[]"
								},
								typeName: {
									baseType: {
										id: 57529,
										name: "uint256",
										nodeType: "ElementaryTypeName",
										src: "19120:7:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									id: 57530,
									nodeType: "ArrayTypeName",
									src: "19120:9:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
										typeString: "uint256[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57534,
								mutability: "mutable",
								name: "depositsOut",
								nameLocation: "19174:11:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19157:28:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_array$_t_uint256_$dyn_memory_ptr",
									typeString: "uint256[]"
								},
								typeName: {
									baseType: {
										id: 57532,
										name: "uint256",
										nodeType: "ElementaryTypeName",
										src: "19157:7:88",
										typeDescriptions: {
											typeIdentifier: "t_uint256",
											typeString: "uint256"
										}
									},
									id: 57533,
									nodeType: "ArrayTypeName",
									src: "19157:9:88",
									typeDescriptions: {
										typeIdentifier: "t_array$_t_uint256_$dyn_storage_ptr",
										typeString: "uint256[]"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57536,
								mutability: "mutable",
								name: "dstChainId",
								nameLocation: "19202:10:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19195:17:88",
								stateVariable: false,
								storageLocation: "default",
								typeDescriptions: {
									typeIdentifier: "t_uint16",
									typeString: "uint16"
								},
								typeName: {
									id: 57535,
									name: "uint16",
									nodeType: "ElementaryTypeName",
									src: "19195:6:88",
									typeDescriptions: {
										typeIdentifier: "t_uint16",
										typeString: "uint16"
									}
								},
								visibility: "internal"
							},
							{
								constant: false,
								id: 57539,
								mutability: "mutable",
								name: "gasParams",
								nameLocation: "19239:9:88",
								nodeType: "VariableDeclaration",
								scope: 57605,
								src: "19222:26:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_struct$_GasParams_$64010_memory_ptr",
									typeString: "struct GasParams"
								},
								typeName: {
									id: 57538,
									nodeType: "UserDefinedTypeName",
									pathNode: {
										id: 57537,
										name: "GasParams",
										nameLocations: [
											"19222:9:88"
										],
										nodeType: "IdentifierPath",
										referencedDeclaration: 64010,
										src: "19222:9:88"
									},
									referencedDeclaration: 64010,
									src: "19222:9:88",
									typeDescriptions: {
										typeIdentifier: "t_struct$_GasParams_$64010_storage_ptr",
										typeString: "struct GasParams"
									}
								},
								visibility: "internal"
							}
						],
						src: "19011:243:88"
					},
					returnParameters: {
						id: 57541,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "19272:0:88"
					},
					scope: 57643,
					stateMutability: "nonpayable",
					virtual: true,
					visibility: "internal"
				},
				{
					id: 57616,
					nodeType: "FunctionDefinition",
					src: "20379:111:88",
					nodes: [
					],
					body: {
						id: 57615,
						nodeType: "Block",
						src: "20462:28:88",
						nodes: [
						],
						statements: [
							{
								expression: {
									id: 57613,
									name: "data",
									nodeType: "Identifier",
									overloadedDeclarations: [
									],
									referencedDeclaration: 57608,
									src: "20479:4:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_calldata_ptr",
										typeString: "bytes calldata"
									}
								},
								functionReturnParameters: 57612,
								id: 57614,
								nodeType: "Return",
								src: "20472:11:88"
							}
						]
					},
					documentation: {
						id: 57606,
						nodeType: "StructuredDocumentation",
						src: "20246:128:88",
						text: "  @notice Function hook to decode bytes data.\n  @param data to be decoded.\n  @return decoded data."
					},
					implemented: true,
					kind: "function",
					modifiers: [
					],
					name: "_decode",
					nameLocation: "20388:7:88",
					parameters: {
						id: 57609,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57608,
								mutability: "mutable",
								name: "data",
								nameLocation: "20411:4:88",
								nodeType: "VariableDeclaration",
								scope: 57616,
								src: "20396:19:88",
								stateVariable: false,
								storageLocation: "calldata",
								typeDescriptions: {
									typeIdentifier: "t_bytes_calldata_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57607,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "20396:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "20395:21:88"
					},
					returnParameters: {
						id: 57612,
						nodeType: "ParameterList",
						parameters: [
							{
								constant: false,
								id: 57611,
								mutability: "mutable",
								name: "",
								nameLocation: "-1:-1:-1",
								nodeType: "VariableDeclaration",
								scope: 57616,
								src: "20448:12:88",
								stateVariable: false,
								storageLocation: "memory",
								typeDescriptions: {
									typeIdentifier: "t_bytes_memory_ptr",
									typeString: "bytes"
								},
								typeName: {
									id: 57610,
									name: "bytes",
									nodeType: "ElementaryTypeName",
									src: "20448:5:88",
									typeDescriptions: {
										typeIdentifier: "t_bytes_storage_ptr",
										typeString: "bytes"
									}
								},
								visibility: "internal"
							}
						],
						src: "20447:14:88"
					},
					scope: 57643,
					stateMutability: "pure",
					virtual: true,
					visibility: "internal"
				},
				{
					id: 57629,
					nodeType: "ModifierDefinition",
					src: "20562:142:88",
					nodes: [
					],
					body: {
						id: 57628,
						nodeType: "Block",
						src: "20590:114:88",
						nodes: [
						],
						statements: [
							{
								condition: {
									commonType: {
										typeIdentifier: "t_address",
										typeString: "address"
									},
									id: 57622,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										expression: {
											id: 57619,
											name: "msg",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: -15,
											src: "20604:3:88",
											typeDescriptions: {
												typeIdentifier: "t_magic_message",
												typeString: "msg"
											}
										},
										id: 57620,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "20608:6:88",
										memberName: "sender",
										nodeType: "MemberAccess",
										src: "20604:10:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "BinaryOperation",
									operator: "!=",
									rightExpression: {
										id: 57621,
										name: "bridgeAgentExecutorAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56677,
										src: "20618:26:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									src: "20604:40:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 57626,
								nodeType: "IfStatement",
								src: "20600:86:88",
								trueBody: {
									errorCall: {
										"arguments": [
										],
										expression: {
											argumentTypes: [
											],
											id: 57623,
											name: "UnrecognizedBridgeAgentExecutor",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 66411,
											src: "20653:31:88",
											typeDescriptions: {
												typeIdentifier: "t_function_error_pure$__$returns$__$",
												typeString: "function () pure"
											}
										},
										id: 57624,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "20653:33:88",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_tuple$__$",
											typeString: "tuple()"
										}
									},
									id: 57625,
									nodeType: "RevertStatement",
									src: "20646:40:88"
								}
							},
							{
								id: 57627,
								nodeType: "PlaceholderStatement",
								src: "20696:1:88"
							}
						]
					},
					documentation: {
						id: 57617,
						nodeType: "StructuredDocumentation",
						src: "20496:61:88",
						text: "@notice Verifies the caller is the Bridge Agent Executor."
					},
					name: "requiresExecutor",
					nameLocation: "20571:16:88",
					parameters: {
						id: 57618,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "20587:2:88"
					},
					virtual: false,
					visibility: "internal"
				},
				{
					id: 57642,
					nodeType: "ModifierDefinition",
					src: "20776:129:88",
					nodes: [
					],
					body: {
						id: 57641,
						nodeType: "Block",
						src: "20807:98:88",
						nodes: [
						],
						statements: [
							{
								condition: {
									commonType: {
										typeIdentifier: "t_address",
										typeString: "address"
									},
									id: 57635,
									isConstant: false,
									isLValue: false,
									isPure: false,
									lValueRequested: false,
									leftExpression: {
										expression: {
											id: 57632,
											name: "msg",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: -15,
											src: "20821:3:88",
											typeDescriptions: {
												typeIdentifier: "t_magic_message",
												typeString: "msg"
											}
										},
										id: 57633,
										isConstant: false,
										isLValue: false,
										isPure: false,
										lValueRequested: false,
										memberLocation: "20825:6:88",
										memberName: "sender",
										nodeType: "MemberAccess",
										src: "20821:10:88",
										typeDescriptions: {
											typeIdentifier: "t_address",
											typeString: "address"
										}
									},
									nodeType: "BinaryOperation",
									operator: "!=",
									rightExpression: {
										id: 57634,
										name: "bridgeAgentAddress",
										nodeType: "Identifier",
										overloadedDeclarations: [
										],
										referencedDeclaration: 56674,
										src: "20835:18:88",
										typeDescriptions: {
											typeIdentifier: "t_address_payable",
											typeString: "address payable"
										}
									},
									src: "20821:32:88",
									typeDescriptions: {
										typeIdentifier: "t_bool",
										typeString: "bool"
									}
								},
								id: 57639,
								nodeType: "IfStatement",
								src: "20817:70:88",
								trueBody: {
									errorCall: {
										"arguments": [
										],
										expression: {
											argumentTypes: [
											],
											id: 57636,
											name: "UnrecognizedBridgeAgent",
											nodeType: "Identifier",
											overloadedDeclarations: [
											],
											referencedDeclaration: 66408,
											src: "20862:23:88",
											typeDescriptions: {
												typeIdentifier: "t_function_error_pure$__$returns$__$",
												typeString: "function () pure"
											}
										},
										id: 57637,
										isConstant: false,
										isLValue: false,
										isPure: false,
										kind: "functionCall",
										lValueRequested: false,
										nameLocations: [
										],
										names: [
										],
										nodeType: "FunctionCall",
										src: "20862:25:88",
										tryCall: false,
										typeDescriptions: {
											typeIdentifier: "t_tuple$__$",
											typeString: "tuple()"
										}
									},
									id: 57638,
									nodeType: "RevertStatement",
									src: "20855:32:88"
								}
							},
							{
								id: 57640,
								nodeType: "PlaceholderStatement",
								src: "20897:1:88"
							}
						]
					},
					documentation: {
						id: 57630,
						nodeType: "StructuredDocumentation",
						src: "20710:61:88",
						text: "@notice Verifies the caller is the Bridge Agent Executor."
					},
					name: "requiresBridgeAgent",
					nameLocation: "20785:19:88",
					parameters: {
						id: 57631,
						nodeType: "ParameterList",
						parameters: [
						],
						src: "20804:2:88"
					},
					virtual: false,
					visibility: "internal"
				}
			],
			abstract: false,
			baseContracts: [
				{
					baseName: {
						id: 56650,
						name: "Ownable",
						nameLocations: [
							"2477:7:88"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 30399,
						src: "2477:7:88"
					},
					id: 56651,
					nodeType: "InheritanceSpecifier",
					src: "2477:7:88"
				},
				{
					baseName: {
						id: 56652,
						name: "ReentrancyGuard",
						nameLocations: [
							"2486:15:88"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 48956,
						src: "2486:15:88"
					},
					id: 56653,
					nodeType: "InheritanceSpecifier",
					src: "2486:15:88"
				},
				{
					baseName: {
						id: 56654,
						name: "IRootRouter",
						nameLocations: [
							"2503:11:88"
						],
						nodeType: "IdentifierPath",
						referencedDeclaration: 66412,
						src: "2503:11:88"
					},
					id: 56655,
					nodeType: "InheritanceSpecifier",
					src: "2503:11:88"
				}
			],
			canonicalName: "MulticallRootRouter",
			contractDependencies: [
			],
			contractKind: "contract",
			documentation: {
				id: 56649,
				nodeType: "StructuredDocumentation",
				src: "1874:570:88",
				text: " @title  Multicall Root Router Contract\n @author MaiaDAO\n @notice Root Router implementation for interfacing with third-party dApps present in the Root Omnichain Environment.\n @dev    Func IDs for calling these  functions through the messaging layer:\n         CROSS-CHAIN MESSAGING FUNCIDs\n         -----------------------------\n         FUNC ID      | FUNC NAME\n         -------------+---------------\n         0x01         | multicallNoOutput\n         0x02         | multicallSingleOutput\n         0x03         | multicallMultipleOutput"
			},
			fullyImplemented: true,
			linearizedBaseContracts: [
				57643,
				66412,
				48956,
				30399
			],
			name: "MulticallRootRouter",
			nameLocation: "2454:19:88",
			scope: 57644,
			usedErrors: [
				30211,
				30214,
				30217,
				30220,
				66405,
				66408,
				66411
			]
		}
	],
	license: "MIT"
};
var id$2 = 88;
var RootRouterAbi = {
	abi: abi$6,
	bytecode: bytecode$3,
	deployedBytecode: deployedBytecode$2,
	methodIdentifiers: methodIdentifiers$2,
	rawMetadata: rawMetadata$2,
	metadata: metadata$2,
	ast: ast$2,
	id: id$2
};

var RootRouter = /*#__PURE__*/function () {
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  function RootRouter() {}
  /**
   * Used to call out to a destination branch router and bridge a single token.
   * @param settlementOwnerAndGasRefundee The address that will receive the gas refund and the settlement owner.
   * @param recipient The address of the account that will receive the output tokens in destination branch chain.
   * @param outputToken The address of the output token.
   * @param amountOut The amount of output tokens to be received.
   * @param depositOut The amount of deposit tokens to be bridged.
   * @param dstChainId The id of the destination branch chain.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns encoded calldata for the callOutAndBridge function.
   */
  RootRouter.encodeCallOutAndBridgeCalldata = function encodeCallOutAndBridgeCalldata(_ref) {
    var settlementOwnerAndGasRefundee = _ref.settlementOwnerAndGasRefundee,
      recipient = _ref.recipient,
      outputToken = _ref.outputToken,
      amountOut = _ref.amountOut,
      depositOut = _ref.depositOut,
      dstChainId = _ref.dstChainId,
      gasParams = _ref.gasParams;
    return RootRouter.INTERFACE.encodeFunctionData('callOutAndBridge', [settlementOwnerAndGasRefundee, recipient, outputToken, amountOut, depositOut, dstChainId, formatGasParams(gasParams)]);
  }
  /**
   * Used to call out to a destination branch router and bridge multiple tokens.
   * @param settlementOwnerAndGasRefundee The address that will receive the gas refund and the settlement owner.
   * @param recipient The address of the account that will receive the output tokens in destination branch chain.
   * @param outputTokens The addresses of the output tokens.
   * @param amountsOut The amounts of output tokens to be received.
   * @param depositsOut The amounts of deposit tokens to be bridged.
   * @param dstChainId The id of the destination branch chain.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas.
   * @returns encoded calldata for the callOutAndBridgeMultiple function.
   */;
  RootRouter.encodeCallOutAndBridgeMultipleCalldata = function encodeCallOutAndBridgeMultipleCalldata(_ref2) {
    var settlementOwnerAndGasRefundee = _ref2.settlementOwnerAndGasRefundee,
      recipient = _ref2.recipient,
      outputTokens = _ref2.outputTokens,
      amountsOut = _ref2.amountsOut,
      depositsOut = _ref2.depositsOut,
      dstChainId = _ref2.dstChainId,
      gasParams = _ref2.gasParams;
    return RootRouter.INTERFACE.encodeFunctionData('callOutAndBridgeMultiple', [settlementOwnerAndGasRefundee, recipient, outputTokens, amountsOut, depositsOut, dstChainId, formatGasParams(gasParams)]);
  }
  /**
   * Used to retry a failed settlement.
   * @param settlementNonce The nonce of the settlement to retry.
   * @param recipient The address of the account that will receive the output tokens in destination branch chain.
   * @param gasParams params that hold information about the gasLimit and remoteBranchExecutionGas
   * @param hasFallbackToggled defaults to true
   * @returns encoded calldata for the retrySettlement function
   */;
  RootRouter.encodeRetrySettlementCalldata = function encodeRetrySettlementCalldata(_ref3) {
    var settlementNonce = _ref3.settlementNonce,
      recipient = _ref3.recipient,
      gasParams = _ref3.gasParams,
      _ref3$hasFallbackTogg = _ref3.hasFallbackToggled,
      hasFallbackToggled = _ref3$hasFallbackTogg === void 0 ? true : _ref3$hasFallbackTogg;
    return RootRouter.INTERFACE.encodeFunctionData('retrySettlement', [settlementNonce, recipient, '', formatGasParams(gasParams), hasFallbackToggled]);
  }
  /**
   * Append funcId to calls for remote execution in a MulticallRootRouter with no token output to another chain.
   * @param calls list of calls to aggregate.
   */;
  RootRouter.encodeRemoteMulticallNoOutput = function encodeRemoteMulticallNoOutput(calls) {
    var encodedCalls = RootRouter.encodeMulticallNoOutput(calls);
    return solidity.pack(['bytes1', 'bytes'], [MULTICALL_FUNCID.NO_OUTPUT, encodedCalls]);
  }
  /**
   * Append funcId to calls for remote execution in a MulticallRootRouter with no token output to another chain.
   * @param calls list of calls to aggregate.
   */;
  RootRouter.encodeRemoteMulticallNoOutputLibZip = function encodeRemoteMulticallNoOutputLibZip(calls) {
    var encodedCalls = solady.LibZip.cdCompress(RootRouter.encodeMulticallNoOutput(calls));
    return solidity.pack(['bytes1', 'bytes'], [MULTICALL_FUNCID.NO_OUTPUT, encodedCalls]);
  };
  RootRouter.encodeMulticallNoOutput = function encodeMulticallNoOutput(calls) {
    var formattedCalls = calls.map(function (call) {
      return [call.target, call.callData];
    });
    var encodedCalls = abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]'], [formattedCalls]);
    return encodedCalls;
  }
  /**
   * Append funcId to calls for remote execution in a MulticallRootRouter with token output to another chain.
   * @param calls list of calls to aggregate.
   * @param outputTokenParams output token params object.
   */;
  RootRouter.encodeRemoteMulticallWithOutput = function encodeRemoteMulticallWithOutput(calls, outputTokenParams) {
    var encodedCall = RootRouter.encodeMulticallWithOutput(calls, outputTokenParams);
    return solidity.pack(['bytes1', 'bytes'], [MULTICALL_FUNCID.SINGLE_OUTPUT, encodedCall]);
  };
  RootRouter.encodeRemoteMulticallWithOutputLibZip = function encodeRemoteMulticallWithOutputLibZip(calls, outputTokenParams) {
    var encodedCall = solady.LibZip.cdCompress(RootRouter.encodeMulticallWithOutput(calls, outputTokenParams));
    return solidity.pack(['bytes1', 'bytes'], [MULTICALL_FUNCID.SINGLE_OUTPUT, encodedCall]);
  };
  RootRouter.encodeMulticallWithOutput = function encodeMulticallWithOutput(calls, outputTokenParams) {
    var formattedCalls = calls.map(function (call) {
      return [call.target, call.callData];
    });
    var encodedCall = abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]', 'tuple(address, address, address, uint256, uint256)', 'uint16', 'tuple(uint256, uint256)'], [formattedCalls, [outputTokenParams.settlementOwner, outputTokenParams.recipient, outputTokenParams.outputToken, outputTokenParams.amountOut, outputTokenParams.depositOut], outputTokenParams.dstChainId, [outputTokenParams.gasParams.gasLimit, outputTokenParams.gasParams.remoteBranchExecutionGas]]);
    return encodedCall;
  }
  /**
   * Append funcId to calls for remote execution in a MulticallRootRouter with multiple token outputs to another chain.
   * @param calls list of calls to aggregate.
   * @param outputMultipleTokenParams output token params object.
   */;
  RootRouter.encodeRemoteMulticallWithMultipleOutput = function encodeRemoteMulticallWithMultipleOutput(calls, outputMultipleTokenParams) {
    var encodedCall = RootRouter.encodeMulticallWithMultipleOutput(calls, outputMultipleTokenParams);
    return solidity.pack(['bytes1', 'bytes'], [MULTICALL_FUNCID.MULTIPLE_OUTPUT, encodedCall]);
  };
  RootRouter.encodeRemoteMulticallWithMultipleOutputLibZip = function encodeRemoteMulticallWithMultipleOutputLibZip(calls, outputMultipleTokenParams) {
    var encodedCall = solady.LibZip.cdCompress(RootRouter.encodeMulticallWithMultipleOutput(calls, outputMultipleTokenParams));
    return solidity.pack(['bytes1', 'bytes'], [MULTICALL_FUNCID.MULTIPLE_OUTPUT, encodedCall]);
  };
  RootRouter.encodeMulticallWithMultipleOutput = function encodeMulticallWithMultipleOutput(calls, outputMultipleTokenParams) {
    var formattedCalls = calls.map(function (call) {
      return [call.target, call.callData];
    });
    var encodedCall = abi$7.defaultAbiCoder.encode(['tuple(address, bytes)[]', 'tuple(address, address, address[], uint256[], uint256[])', 'uint16', 'tuple(uint256, uint256)'], [formattedCalls, [outputMultipleTokenParams.settlementOwner, outputMultipleTokenParams.recipient, outputMultipleTokenParams.outputTokens, outputMultipleTokenParams.amountsOut, outputMultipleTokenParams.depositsOut], outputMultipleTokenParams.dstChainId, [outputMultipleTokenParams.gasParams.gasLimit, outputMultipleTokenParams.gasParams.remoteBranchExecutionGas]]);
    return encodedCall;
  };
  return RootRouter;
}();
RootRouter.INTERFACE = /*#__PURE__*/new abi$7.Interface(RootRouterAbi.abi);

function _inheritsLoose(t, o) {
  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
}
function _setPrototypeOf(t, e) {
  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
    return t.__proto__ = e, t;
  }, _setPrototypeOf(t, e);
}

/**
 *
 * A virtualized token is any token native to the chain or not, and is being used in the ulysses system.
 * This includes local and global tokens.
 * @export
 * @abstract
 * @class BaseVirtualizedToken
 * @extends {NativeToken} - This just means that the token is not a gas token.
 */
var BaseVirtualizedToken = /*#__PURE__*/function (_NativeToken) {
  _inheritsLoose(BaseVirtualizedToken, _NativeToken);
  /**
   * Contructor for VirtualizedToken
   * @param address address of the virtualized token
   * @param chainId chainId where the token resides
   * @param decimals decimals of the token
   * @param symbol symbol of the token
   * @param name name of the token
   */
  function BaseVirtualizedToken(address, chainId, decimals, underlyingCurrency, symbol, name, bypassChecksum) {
    var _this;
    _this = _NativeToken.call(this, chainId, address, decimals, symbol, name, bypassChecksum) || this;
    _this.underlyingCurrency = underlyingCurrency;
    return _this;
  }
  return BaseVirtualizedToken;
}(maiaCoreSdk.NativeToken);

/**
 * Represents the token that is virtualized in Arbitrum.
 * This is a representation of the Global Token of the Ulysses system that resides on Arbitrum and is virtualized in other chains via Local Tokens.
 * These tokens can be accessed through the user EOA if he's on Arbitrum, or indirectly through the Virtual Account belonging to the user.
 */
var GlobalToken = /*#__PURE__*/function (_BaseVirtualizedToken) {
  _inheritsLoose(GlobalToken, _BaseVirtualizedToken);
  function GlobalToken(chainId, address, decimals, underlyingCurrency, symbol, name, hTokensPerChain) {
    var _this;
    _this = _BaseVirtualizedToken.call(this, address, chainId, decimals, underlyingCurrency, symbol, name) || this;
    _this.isGlobal = true;
    _this.hTokensPerChain = hTokensPerChain != null ? hTokensPerChain : new Map();
    return _this;
  }
  /**
   * Gets the token address of the hToken for a given chain.
   * @param chainId chainId to get the hToken balance from
   * @returns
   */
  var _proto = GlobalToken.prototype;
  _proto.getChainTokenAddress = function getChainTokenAddress(chainId) {
    var _this$hTokensPerChain;
    return (_this$hTokensPerChain = this.hTokensPerChain) == null ? void 0 : _this$hTokensPerChain.get(chainId);
  }
  /**
   * Returns true if token is Ecosystem token(i.e. the wrapped token is the same as the underlying token)
   * @param currency token to check
   * @returns true if token is Ecosystem token
   *
   */;
  _proto.isEcosystemToken = function isEcosystemToken() {
    return this.wrapped.address === this.underlyingCurrency.wrapped.address && this.chainId === this.underlyingCurrency.chainId;
  };
  return GlobalToken;
}(BaseVirtualizedToken);

/**
 * These tokens reside on the branch chains of the ulysses system,
 * and represent a deposit of the global token on the branch chain.
 *
 * @export
 * @class LocalToken
 * @extends {BaseVirtualizedToken}
 */
var LocalToken = /*#__PURE__*/function (_BaseVirtualizedToken) {
  _inheritsLoose(LocalToken, _BaseVirtualizedToken);
  function LocalToken(chainId, address, decimals, underlyingCurrency, globalToken, symbol, name) {
    var _this;
    _this = _BaseVirtualizedToken.call(this, address, chainId, decimals, underlyingCurrency, symbol, name) || this;
    _this.isGlobal = false;
    _this.globalToken = globalToken;
    return _this;
  }
  /**
   * Gets the token address of the hToken for a given chain.
   * @param chainId chainId to get the hToken balance from
   * @returns
   */
  var _proto = LocalToken.prototype;
  _proto.getChainTokenAddress = function getChainTokenAddress(chainId) {
    var _this$globalToken$hTo;
    return (_this$globalToken$hTo = this.globalToken.hTokensPerChain) == null ? void 0 : _this$globalToken$hTo.get(chainId);
  };
  return LocalToken;
}(BaseVirtualizedToken);

/**
 * Represents a virtual account and helps to interact with it.
 */
var VirtualAccount = /*#__PURE__*/function () {
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  function VirtualAccount() {}
  /**
   * Aggregate calls ensuring each call is successful
   * @param calls list of calls to aggregate
   */
  VirtualAccount.encodeMulticall = function encodeMulticall(calls) {
    //performs safety check before encoding the data
    virtualAccountCallInvariantHelper(calls);
    return VirtualAccount.INTERFACE.encodeFunctionData('call', [formatCalls(calls)]);
  }
  /**
   * Aggregate calls with a msg value (gas value) ensuring each call is successful
   * @param calls list of payable calls to aggregate
   */;
  VirtualAccount.encodePayableCall = function encodePayableCall(calls) {
    virtualAccountCallInvariantHelper(calls);
    return VirtualAccount.INTERFACE.encodeFunctionData('payableCall', [formatPayableCalls(calls)]);
  }
  /**
   * Aggregate calls ensuring each call is successful
   * @param calls list of calls to aggregate
   */;
  VirtualAccount.encodeMulticallWithCompression = function encodeMulticallWithCompression(calls) {
    //performs safety check before encoding the data
    virtualAccountCallInvariantHelper(calls);
    var calldata = VirtualAccount.INTERFACE.encodeFunctionData('call', [formatCalls(calls)]);
    return solady.LibZip.cdCompress(calldata);
  }
  /**
   * Aggregate calls with a msg value (gas value) ensuring each call is successful
   * @param calls list of payable calls to aggregate
   */;
  VirtualAccount.encodePayableCallWithCompression = function encodePayableCallWithCompression(calls) {
    virtualAccountCallInvariantHelper(calls);
    var calldata = VirtualAccount.INTERFACE.encodeFunctionData('payableCall', [formatPayableCalls(calls)]);
    return solady.LibZip.cdCompress(calldata);
  }
  /**
   * Withdraws native tokens from the VirtualAccount
   * @param params number corresponding to amount of native tokens to withdraw
   */;
  VirtualAccount.encodeWithdrawNative = function encodeWithdrawNative(params) {
    !(JSBI.BigInt(params.amount) >= maiaCoreSdk.ZERO) ?  invariant(false, 'Amount must be greater than or equal to 0')  : void 0;
    return VirtualAccount.INTERFACE.encodeFunctionData('withdrawNative', [params.amount]);
  }
  /**
   * Withdraws ERC20 tokens from the VirtualAccount
   * @param params IWithdrawERC20Params{ token: string, amount: number } - token address and amonunt to withdraw.
   */;
  VirtualAccount.encodeWithdrawERC20 = function encodeWithdrawERC20(params) {
    virtualAccountWithdrawInvariantHelper(params.token, JSBI.BigInt(params.amount));
    return VirtualAccount.INTERFACE.encodeFunctionData('withdrawERC20', [params.token, params.amount]);
  }
  /**
   * Withdraws ERC721 tokens from the VirtualAccount
   * @param token token address to withdraw
   * @param tokenId tokenId to withdraw
   */;
  VirtualAccount.encodeWithdrawERC721 = function encodeWithdrawERC721(token, tokenId) {
    virtualAccountWithdrawInvariantHelper(token, undefined, JSBI.BigInt(tokenId));
    return VirtualAccount.INTERFACE.encodeFunctionData('withdrawERC721', [token, tokenId]);
  };
  return VirtualAccount;
}();
VirtualAccount.INTERFACE = /*#__PURE__*/new abi$7.Interface(VirtualAccountABI.abi);

var _WETH;
/**
 * Known WETH9 implementation addresses, used in our implementation of Ether#wrapped
 */
var WETH9 = (_WETH = {}, _WETH[1] = /*#__PURE__*/new maiaCoreSdk.NativeToken(1, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 18, 'WETH', 'Wrapped Ether'), _WETH[3] = /*#__PURE__*/new maiaCoreSdk.NativeToken(3, '0xc778417E063141139Fce010982780140Aa0cD5Ab', 18, 'WETH', 'Wrapped Ether'), _WETH[4] = /*#__PURE__*/new maiaCoreSdk.NativeToken(4, '0xc778417E063141139Fce010982780140Aa0cD5Ab', 18, 'WETH', 'Wrapped Ether'), _WETH[5] = /*#__PURE__*/new maiaCoreSdk.NativeToken(5, '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', 18, 'WETH', 'Wrapped Ether'), _WETH[42] = /*#__PURE__*/new maiaCoreSdk.NativeToken(42, '0xd0A1E359811322d97991E03f863a0C30C2cF029C', 18, 'WETH', 'Wrapped Ether'), _WETH[10] = /*#__PURE__*/new maiaCoreSdk.NativeToken(10, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _WETH[69] = /*#__PURE__*/new maiaCoreSdk.NativeToken(69, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'), _WETH[42161] = /*#__PURE__*/new maiaCoreSdk.NativeToken(42161, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'), _WETH[421611] = /*#__PURE__*/new maiaCoreSdk.NativeToken(421611, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'), _WETH);

exports.BRANCH_BRIDGE_AGENT_ACTION_BASE_GAS = BRANCH_BRIDGE_AGENT_ACTION_BASE_GAS;
exports.BRANCH_BRIDGE_AGENT_ACTION_ID = BRANCH_BRIDGE_AGENT_ACTION_ID;
exports.BaseBranchRouter = BaseBranchRouter;
exports.BaseVirtualizedToken = BaseVirtualizedToken;
exports.BranchBridgeAgent = BranchBridgeAgent;
exports.CORE_BRANCH_ROUTER_FUNC_ID = CORE_BRANCH_ROUTER_FUNC_ID;
exports.CORE_ROOT_ROUTER_FUNC_ID = CORE_ROOT_ROUTER_FUNC_ID;
exports.CurrencyBalances = CurrencyBalances;
exports.DEFAULT_GAS_PARAMS = DEFAULT_GAS_PARAMS;
exports.ERC20Token = ERC20Token;
exports.EVM_CHAIN_ID_TO_ROOT_CHAIN_ID = EVM_CHAIN_ID_TO_ROOT_CHAIN_ID;
exports.GlobalToken = GlobalToken;
exports.LocalToken = LocalToken;
exports.LzEndpoint = LzEndpoint;
exports.MULTICALL_FUNCID = MULTICALL_FUNCID;
exports.ROOT_BRIDGE_AGENT_ACTION_BASE_GAS = ROOT_BRIDGE_AGENT_ACTION_BASE_GAS;
exports.ROOT_BRIDGE_AGENT_ACTION_ID = ROOT_BRIDGE_AGENT_ACTION_ID;
exports.ROOT_CHAIN_IDS = ROOT_CHAIN_IDS;
exports.RootBridgeAgent = RootBridgeAgent;
exports.RootRouter = RootRouter;
exports.VirtualAccount = VirtualAccount;
exports.WETH9 = WETH9;
exports.computeVirtualAccount = computeVirtualAccount;
exports.formatCall = formatCall;
exports.formatCalls = formatCalls;
exports.formatDeposit = formatDeposit;
exports.formatGasParams = formatGasParams;
exports.formatGasParamsArray = formatGasParamsArray;
exports.formatMultipleDeposit = formatMultipleDeposit;
exports.formatPayableCall = formatPayableCall;
exports.formatPayableCalls = formatPayableCalls;
exports.multipleDepositInvariantHelper = multipleDepositInvariantHelper;
exports.singleDepositInvariantHelper = singleDepositInvariantHelper;
exports.virtualAccountCallInvariantHelper = virtualAccountCallInvariantHelper;
exports.virtualAccountWithdrawInvariantHelper = virtualAccountWithdrawInvariantHelper;
//# sourceMappingURL=ulysses-sdk.cjs.development.js.map