Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.030483592152758074 ETH
Eth Value
$94.58 (@ $3,102.51/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 172 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Bridge Tokens | 21219343 | 5 hrs ago | IN | 0.00084133 ETH | 0.00370093 | ||||
Bridge Tokens | 21218995 | 6 hrs ago | IN | 0.00095334 ETH | 0.00281611 | ||||
Bridge Tokens | 21215370 | 18 hrs ago | IN | 0.00096744 ETH | 0.00493411 | ||||
Bridge Tokens | 21213209 | 25 hrs ago | IN | 0.00091697 ETH | 0.00294876 | ||||
Bridge Tokens | 21213122 | 25 hrs ago | IN | 0.00097766 ETH | 0.0035283 | ||||
Bridge Tokens | 21210638 | 34 hrs ago | IN | 0.00097662 ETH | 0.00310842 | ||||
Bridge Tokens | 21210619 | 34 hrs ago | IN | 0.00097662 ETH | 0.00294205 | ||||
Bridge Tokens | 21208702 | 40 hrs ago | IN | 0.0009607 ETH | 0.00468307 | ||||
Bridge Tokens | 21208611 | 41 hrs ago | IN | 0.0009607 ETH | 0.0035567 | ||||
Bridge Tokens | 21208553 | 41 hrs ago | IN | 0.00096152 ETH | 0.00427206 | ||||
Bridge Tokens | 21207906 | 43 hrs ago | IN | 0.00090262 ETH | 0.00273765 | ||||
Bridge Tokens | 21207691 | 44 hrs ago | IN | 0.00096082 ETH | 0.0025789 | ||||
Bridge Tokens | 21207077 | 46 hrs ago | IN | 0.00090168 ETH | 0.00343565 | ||||
Bridge Tokens | 21205899 | 2 days ago | IN | 0.0008993 ETH | 0.00277683 | ||||
Bridge Tokens | 21205333 | 2 days ago | IN | 0.00081797 ETH | 0.00272465 | ||||
Bridge Tokens | 21205301 | 2 days ago | IN | 0.0009628 ETH | 0.00256617 | ||||
Bridge Tokens | 21205178 | 2 days ago | IN | 0.00096268 ETH | 0.00278511 | ||||
Bridge Tokens | 21205067 | 2 days ago | IN | 0.00089809 ETH | 0.00261657 | ||||
Bridge Tokens | 21200398 | 2 days ago | IN | 0.00090351 ETH | 0.00359865 | ||||
Bridge Tokens | 21199785 | 2 days ago | IN | 0.00081259 ETH | 0.00381955 | ||||
Bridge Tokens | 21193178 | 3 days ago | IN | 0.0009713 ETH | 0.00474788 | ||||
Bridge Tokens | 21192995 | 3 days ago | IN | 0.0009227 ETH | 0.00618368 | ||||
Bridge Tokens | 21192989 | 3 days ago | IN | 0.00097136 ETH | 0.00548498 | ||||
Bridge Tokens | 21192821 | 3 days ago | IN | 0.00097149 ETH | 0.00459583 | ||||
Bridge Tokens | 21192693 | 3 days ago | IN | 0.00097149 ETH | 0.00459552 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
21219343 | 5 hrs ago | 0.00068307 ETH | ||||
21218995 | 6 hrs ago | 0.00079518 ETH | ||||
21215370 | 18 hrs ago | 0.00080575 ETH | ||||
21213209 | 25 hrs ago | 0.00075717 ETH | ||||
21213122 | 25 hrs ago | 0.00081786 ETH | ||||
21210638 | 34 hrs ago | 0.00081356 ETH | ||||
21210619 | 34 hrs ago | 0.00081356 ETH | ||||
21208702 | 40 hrs ago | 0.0007989 ETH | ||||
21208611 | 41 hrs ago | 0.0007989 ETH | ||||
21208553 | 41 hrs ago | 0.0007989 ETH | ||||
21207906 | 43 hrs ago | 0.00074156 ETH | ||||
21207691 | 44 hrs ago | 0.00080041 ETH | ||||
21207077 | 46 hrs ago | 0.00074101 ETH | ||||
21205899 | 2 days ago | 0.00073959 ETH | ||||
21205333 | 2 days ago | 0.00065746 ETH | ||||
21205301 | 2 days ago | 0.00080229 ETH | ||||
21205178 | 2 days ago | 0.00080229 ETH | ||||
21205067 | 2 days ago | 0.0007365 ETH | ||||
21200398 | 2 days ago | 0.00074656 ETH | ||||
21199785 | 2 days ago | 0.00065287 ETH | ||||
21193178 | 3 days ago | 0.00080988 ETH | ||||
21192995 | 3 days ago | 0.00076136 ETH | ||||
21192989 | 3 days ago | 0.00081002 ETH | ||||
21192821 | 3 days ago | 0.00081002 ETH | ||||
21192693 | 3 days ago | 0.00081002 ETH |
Loading...
Loading
Contract Name:
InterportCCIPTokenBridge
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-09 */ // Sources flattened with hardhat v2.22.2 https://hardhat.org // SPDX-License-Identifier: AGPL-3.0-only AND MIT // File @chainlink/contracts-ccip/src/v0.8/ccip/libraries/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity ^0.8.0; // End consumer library. library Client { /// @dev RMN depends on this struct, if changing, please notify the RMN maintainers. struct EVMTokenAmount { address token; // token address on the local chain. uint256 amount; // Amount of tokens. } struct Any2EVMMessage { bytes32 messageId; // MessageId corresponding to ccipSend on source. uint64 sourceChainSelector; // Source chain selector. bytes sender; // abi.decode(sender) if coming from an EVM chain. bytes data; // payload sent in original message. EVMTokenAmount[] destTokenAmounts; // Tokens and their amounts in their destination chain representation. } // If extraArgs is empty bytes, the default is 200k gas limit. struct EVM2AnyMessage { bytes receiver; // abi.encode(receiver address) for dest EVM chains bytes data; // Data payload EVMTokenAmount[] tokenAmounts; // Token transfers address feeToken; // Address of feeToken. address(0) means you will send msg.value. bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV1) } // bytes4(keccak256("CCIP EVMExtraArgsV1")); bytes4 public constant EVM_EXTRA_ARGS_V1_TAG = 0x97a657c9; struct EVMExtraArgsV1 { uint256 gasLimit; } function _argsToBytes(EVMExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) { return abi.encodeWithSelector(EVM_EXTRA_ARGS_V1_TAG, extraArgs); } } // File @chainlink/contracts-ccip/src/v0.8/ccip/interfaces/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity ^0.8.0; interface IRouterClient { error UnsupportedDestinationChain(uint64 destChainSelector); error InsufficientFeeTokenAmount(); error InvalidMsgValue(); /// @notice Checks if the given chain ID is supported for sending/receiving. /// @param chainSelector The chain to check. /// @return supported is true if it is supported, false if not. function isChainSupported(uint64 chainSelector) external view returns (bool supported); /// @notice Gets a list of all supported tokens which can be sent or received /// to/from a given chain id. /// @param chainSelector The chainSelector. /// @return tokens The addresses of all tokens that are supported. function getSupportedTokens(uint64 chainSelector) external view returns (address[] memory tokens); /// @param destinationChainSelector The destination chainSelector /// @param message The cross-chain CCIP message including data and/or tokens /// @return fee returns execution fee for the message /// delivery to destination chain, denominated in the feeToken specified in the message. /// @dev Reverts with appropriate reason upon invalid message. function getFee( uint64 destinationChainSelector, Client.EVM2AnyMessage memory message ) external view returns (uint256 fee); /// @notice Request a message to be sent to the destination chain /// @param destinationChainSelector The destination chain ID /// @param message The cross-chain CCIP message including data and/or tokens /// @return messageId The message ID /// @dev Note if msg.value is larger than the required fee (from getFee) we accept /// the overpayment with no refund. /// @dev Reverts with appropriate reason upon invalid message. function ccipSend( uint64 destinationChainSelector, Client.EVM2AnyMessage calldata message ) external payable returns (bytes32); } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/helpers/AddressHelper.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @notice Emitted when the account is not a contract * @param account The account address */ error NonContractAddressError(address account); /** * @notice Function to check if the account is a contract * @return The account contract status flag */ function isContract(address _account) view returns (bool) { return _account.code.length > 0; } /** * @notice Function to require an account to be a contract */ function requireContract(address _account) view { if (!isContract(_account)) { revert NonContractAddressError(_account); } } /** * @notice Function to require an account to be a contract or a zero address */ function requireContractOrZeroAddress(address _account) view { if (_account != address(0)) { requireContract(_account); } } // File contracts/Constants.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @dev The default token decimals value */ uint256 constant DECIMALS_DEFAULT = 18; /** * @dev The maximum uint256 value for swap amount limit settings */ uint256 constant INFINITY = type(uint256).max; /** * @dev The default limit of account list size */ uint256 constant LIST_SIZE_LIMIT_DEFAULT = 100; /** * @dev The limit of swap router list size */ uint256 constant LIST_SIZE_LIMIT_ROUTERS = 200; /** * @dev The factor for percentage settings. Example: 100 is 0.1% */ uint256 constant MILLIPERCENT_FACTOR = 100_000; /** * @dev The de facto standard address to denote the native token */ address constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // File contracts/helpers/TransferHelper.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @notice Emitted when an approval action fails */ error SafeApproveError(); /** * @notice Emitted when a transfer action fails */ error SafeTransferError(); /** * @notice Emitted when a transferFrom action fails */ error SafeTransferFromError(); /** * @notice Emitted when a transfer of the native token fails */ error SafeTransferNativeError(); /** * @notice Safely approve the token to the account * @param _token The token address * @param _to The token approval recipient address * @param _value The token approval amount */ function safeApprove(address _token, address _to, uint256 _value) { // 0x095ea7b3 is the selector for "approve(address,uint256)" (bool success, bytes memory data) = _token.call( abi.encodeWithSelector(0x095ea7b3, _to, _value) ); bool condition = success && (data.length == 0 || abi.decode(data, (bool))); if (!condition) { revert SafeApproveError(); } } /** * @notice Safely transfer the token to the account * @param _token The token address * @param _to The token transfer recipient address * @param _value The token transfer amount */ function safeTransfer(address _token, address _to, uint256 _value) { // 0xa9059cbb is the selector for "transfer(address,uint256)" (bool success, bytes memory data) = _token.call( abi.encodeWithSelector(0xa9059cbb, _to, _value) ); bool condition = success && (data.length == 0 || abi.decode(data, (bool))); if (!condition) { revert SafeTransferError(); } } /** * @notice Safely transfer the token between the accounts * @param _token The token address * @param _from The token transfer source address * @param _to The token transfer recipient address * @param _value The token transfer amount */ function safeTransferFrom(address _token, address _from, address _to, uint256 _value) { // 0x23b872dd is the selector for "transferFrom(address,address,uint256)" (bool success, bytes memory data) = _token.call( abi.encodeWithSelector(0x23b872dd, _from, _to, _value) ); bool condition = success && (data.length == 0 || abi.decode(data, (bool))); if (!condition) { revert SafeTransferFromError(); } } /** * @notice Safely transfer the native token to the account * @param _to The native token transfer recipient address * @param _value The native token transfer amount */ function safeTransferNative(address _to, uint256 _value) { (bool success, ) = _to.call{ value: _value }(new bytes(0)); if (!success) { revert SafeTransferNativeError(); } } // File contracts/interfaces/ITokenBalance.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title ITokenBalance * @notice Token balance interface */ interface ITokenBalance { /** * @notice Getter of the token balance by the account * @param _account The account address * @return Token balance */ function balanceOf(address _account) external view returns (uint256); } // File contracts/DataStructures.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @notice Optional value structure * @dev Is used in mappings to allow zero values * @param isSet Value presence flag * @param value Numeric value */ struct OptionalValue { bool isSet; uint256 value; } /** * @notice Key-to-value structure * @dev Is used as an array parameter item to perform multiple key-value settings * @param key Numeric key * @param value Numeric value */ struct KeyToValue { uint256 key; uint256 value; } /** * @notice Key-to-value structure for address values * @dev Is used as an array parameter item to perform multiple key-value settings with address values * @param key Numeric key * @param value Address value */ struct KeyToAddressValue { uint256 key; address value; } /** * @notice Address-to-flag structure * @dev Is used as an array parameter item to perform multiple settings * @param account Account address * @param flag Flag value */ struct AccountToFlag { address account; bool flag; } /** * @notice Emitted when a list exceeds the size limit */ error ListSizeLimitError(); /** * @notice Sets or updates a value in a combined map (a mapping with a key list and key index mapping) * @param _map The mapping reference * @param _keyList The key list reference * @param _keyIndexMap The key list index mapping reference * @param _key The numeric key * @param _value The address value * @param _sizeLimit The map and list size limit * @return isNewKey True if the key was just added, otherwise false */ function combinedMapSet( mapping(uint256 => address) storage _map, uint256[] storage _keyList, mapping(uint256 => OptionalValue) storage _keyIndexMap, uint256 _key, address _value, uint256 _sizeLimit ) returns (bool isNewKey) { isNewKey = !_keyIndexMap[_key].isSet; if (isNewKey) { uniqueListAdd(_keyList, _keyIndexMap, _key, _sizeLimit); } _map[_key] = _value; } /** * @notice Removes a value from a combined map (a mapping with a key list and key index mapping) * @param _map The mapping reference * @param _keyList The key list reference * @param _keyIndexMap The key list index mapping reference * @param _key The numeric key * @return isChanged True if the combined map was changed, otherwise false */ function combinedMapRemove( mapping(uint256 => address) storage _map, uint256[] storage _keyList, mapping(uint256 => OptionalValue) storage _keyIndexMap, uint256 _key ) returns (bool isChanged) { isChanged = _keyIndexMap[_key].isSet; if (isChanged) { delete _map[_key]; uniqueListRemove(_keyList, _keyIndexMap, _key); } } /** * @notice Adds a value to a unique value list (a list with value index mapping) * @param _list The list reference * @param _indexMap The value index mapping reference * @param _value The numeric value * @param _sizeLimit The list size limit * @return isChanged True if the list was changed, otherwise false */ function uniqueListAdd( uint256[] storage _list, mapping(uint256 => OptionalValue) storage _indexMap, uint256 _value, uint256 _sizeLimit ) returns (bool isChanged) { isChanged = !_indexMap[_value].isSet; if (isChanged) { if (_list.length >= _sizeLimit) { revert ListSizeLimitError(); } _indexMap[_value] = OptionalValue(true, _list.length); _list.push(_value); } } /** * @notice Removes a value from a unique value list (a list with value index mapping) * @param _list The list reference * @param _indexMap The value index mapping reference * @param _value The numeric value * @return isChanged True if the list was changed, otherwise false */ function uniqueListRemove( uint256[] storage _list, mapping(uint256 => OptionalValue) storage _indexMap, uint256 _value ) returns (bool isChanged) { OptionalValue storage indexItem = _indexMap[_value]; isChanged = indexItem.isSet; if (isChanged) { uint256 itemIndex = indexItem.value; uint256 lastIndex = _list.length - 1; if (itemIndex != lastIndex) { uint256 lastValue = _list[lastIndex]; _list[itemIndex] = lastValue; _indexMap[lastValue].value = itemIndex; } _list.pop(); delete _indexMap[_value]; } } /** * @notice Adds a value to a unique address value list (a list with value index mapping) * @param _list The list reference * @param _indexMap The value index mapping reference * @param _value The address value * @param _sizeLimit The list size limit * @return isChanged True if the list was changed, otherwise false */ function uniqueAddressListAdd( address[] storage _list, mapping(address => OptionalValue) storage _indexMap, address _value, uint256 _sizeLimit ) returns (bool isChanged) { isChanged = !_indexMap[_value].isSet; if (isChanged) { if (_list.length >= _sizeLimit) { revert ListSizeLimitError(); } _indexMap[_value] = OptionalValue(true, _list.length); _list.push(_value); } } /** * @notice Removes a value from a unique address value list (a list with value index mapping) * @param _list The list reference * @param _indexMap The value index mapping reference * @param _value The address value * @return isChanged True if the list was changed, otherwise false */ function uniqueAddressListRemove( address[] storage _list, mapping(address => OptionalValue) storage _indexMap, address _value ) returns (bool isChanged) { OptionalValue storage indexItem = _indexMap[_value]; isChanged = indexItem.isSet; if (isChanged) { uint256 itemIndex = indexItem.value; uint256 lastIndex = _list.length - 1; if (itemIndex != lastIndex) { address lastValue = _list[lastIndex]; _list[itemIndex] = lastValue; _indexMap[lastValue].value = itemIndex; } _list.pop(); delete _indexMap[_value]; } } /** * @notice Adds or removes a value to/from a unique address value list (a list with value index mapping) * @dev The list size limit is checked on items adding only * @param _list The list reference * @param _indexMap The value index mapping reference * @param _value The address value * @param _flag The value inclusion flag * @param _sizeLimit The list size limit * @return isChanged True if the list was changed, otherwise false */ function uniqueAddressListUpdate( address[] storage _list, mapping(address => OptionalValue) storage _indexMap, address _value, bool _flag, uint256 _sizeLimit ) returns (bool isChanged) { return _flag ? uniqueAddressListAdd(_list, _indexMap, _value, _sizeLimit) : uniqueAddressListRemove(_list, _indexMap, _value); } // File contracts/roles/RoleBearers.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title RoleBearers * @notice Base contract that implements role-based access control * @dev A custom implementation providing full role bearer lists */ abstract contract RoleBearers { mapping(bytes32 /*roleKey*/ => address[] /*roleBearers*/) private roleBearerTable; mapping(bytes32 /*roleKey*/ => mapping(address /*account*/ => /*DataStructures.*/OptionalValue /*status*/)) private roleBearerIndexTable; function _setRoleBearer(bytes32 _roleKey, address _account, bool _value) internal { /*DataStructures.*/uniqueAddressListUpdate( roleBearerTable[_roleKey], roleBearerIndexTable[_roleKey], _account, _value, /*Constants.*/LIST_SIZE_LIMIT_DEFAULT ); } function _isRoleBearer(bytes32 _roleKey, address _account) internal view returns (bool) { return roleBearerIndexTable[_roleKey][_account].isSet; } function _roleBearerCount(bytes32 _roleKey) internal view returns (uint256) { return roleBearerTable[_roleKey].length; } function _fullRoleBearerList(bytes32 _roleKey) internal view returns (address[] memory) { return roleBearerTable[_roleKey]; } } // File contracts/roles/ManagerRole.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title ManagerRole * @notice Base contract that implements the Manager role. * The manager role is a high-permission role for core team members only. * Managers can set vaults and routers addresses, fees, cross-chain protocols, * and other parameters for Interchain (cross-chain) swaps and single-network swaps. * Please note, the manager role is unique for every contract, * hence different addresses may be assigned as managers for different contracts. */ abstract contract ManagerRole is Ownable, RoleBearers { bytes32 private constant ROLE_KEY = keccak256('Manager'); /** * @notice Emitted when the Manager role status for the account is updated * @param account The account address * @param value The Manager role status flag */ event SetManager(address indexed account, bool indexed value); /** * @notice Emitted when the Manager role status for the account is renounced * @param account The account address */ event RenounceManagerRole(address indexed account); /** * @notice Emitted when the caller is not a Manager role bearer */ error OnlyManagerError(); /** * @dev Modifier to check if the caller is a Manager role bearer */ modifier onlyManager() { if (!isManager(msg.sender)) { revert OnlyManagerError(); } _; } /** * @notice Updates the Manager role status for the account * @param _account The account address * @param _value The Manager role status flag */ function setManager(address _account, bool _value) public onlyOwner { _setRoleBearer(ROLE_KEY, _account, _value); emit SetManager(_account, _value); } /** * @notice Renounces the Manager role */ function renounceManagerRole() external onlyManager { _setRoleBearer(ROLE_KEY, msg.sender, false); emit RenounceManagerRole(msg.sender); } /** * @notice Getter of the Manager role bearer count * @return The Manager role bearer count */ function managerCount() external view returns (uint256) { return _roleBearerCount(ROLE_KEY); } /** * @notice Getter of the complete list of the Manager role bearers * @return The complete list of the Manager role bearers */ function fullManagerList() external view returns (address[] memory) { return _fullRoleBearerList(ROLE_KEY); } /** * @notice Getter of the Manager role bearer status * @param _account The account address */ function isManager(address _account) public view returns (bool) { return _isRoleBearer(ROLE_KEY, _account); } function _initRoles( address _owner, address[] memory _managers, bool _addOwnerToManagers ) internal { address ownerAddress = _owner == address(0) ? msg.sender : _owner; for (uint256 index; index < _managers.length; index++) { setManager(_managers[index], true); } if (_addOwnerToManagers && !isManager(ownerAddress)) { setManager(ownerAddress, true); } if (ownerAddress != msg.sender) { transferOwnership(ownerAddress); } } } // File contracts/mixins/BalanceManagementMixin.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title BalanceManagementMixin * @notice The balance management mix-in logic */ abstract contract BalanceManagementMixin is ManagerRole { /** * @notice Emitted when the specified token is reserved */ error ReservedTokenError(); /** * @notice Performs the token cleanup * @dev Use the "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" address for the native token * @param _tokenAddress The address of the token * @param _to The token transfer recipient address */ function cleanup(address _tokenAddress, address _to) external virtual onlyManager { _cleanupWithAmount(_tokenAddress, _to, tokenBalance(_tokenAddress)); } /** * @notice Performs the token cleanup using the provided amount * @dev Use the "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" address for the native token * @param _tokenAddress The address of the token * @param _to The token transfer recipient address * @param _tokenAmount The amount of the token */ function cleanupWithAmount( address _tokenAddress, address _to, uint256 _tokenAmount ) external virtual onlyManager { _cleanupWithAmount(_tokenAddress, _to, _tokenAmount); } /** * @notice Getter of the token balance of the current contract * @dev Use the "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" address for the native token * @param _tokenAddress The address of the token * @return The token balance of the current contract */ function tokenBalance(address _tokenAddress) public view virtual returns (uint256) { if (_tokenAddress == /*Constants.*/NATIVE_TOKEN_ADDRESS) { return address(this).balance; } else { return ITokenBalance(_tokenAddress).balanceOf(address(this)); } } /** * @notice Getter of the reserved token flag * @dev Override to add reserved token addresses * @param _tokenAddress The address of the token * @return The reserved token flag */ function isReservedToken(address _tokenAddress) public view virtual returns (bool) { // The function returns false by default. // The explicit return statement is omitted to avoid the unused parameter warning. // See https://github.com/ethereum/solidity/issues/5295 } function _cleanupWithAmount( address _tokenAddress, address _to, uint256 _tokenAmount ) internal virtual { if (isReservedToken(_tokenAddress)) { revert ReservedTokenError(); } if (_tokenAddress == /*Constants.*/NATIVE_TOKEN_ADDRESS) { /*TransferHelper.*/safeTransferNative(_to, _tokenAmount); } else { /*TransferHelper.*/safeTransfer(_tokenAddress, _to, _tokenAmount); } } } // File contracts/Pausable.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title Pausable * @notice Base contract that implements the emergency pause mechanism */ abstract contract PausableContract is Pausable, ManagerRole { /** * @notice Enter pause state */ function pause() external onlyManager whenNotPaused { _pause(); } /** * @notice Exit pause state */ function unpause() external onlyManager whenPaused { _unpause(); } } // File contracts/SystemVersionId.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title SystemVersionId * @notice Base contract providing the system version identifier */ abstract contract SystemVersionId { /** * @dev The system version identifier */ uint256 public constant SYSTEM_VERSION_ID = uint256(keccak256('Initial')); } // File contracts/bridge/chainlink-ccip/core/InterportCCIPBridgeCore.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title InterportCCIPBridgeCore * @notice The core logic of the cross-chain bridging with Chainlink CCIP */ abstract contract InterportCCIPBridgeCore is SystemVersionId, PausableContract, BalanceManagementMixin { /** * @notice Chain ID pair structure * @param standardId The standard EVM chain ID * @param ccipId The CCIP chain selector */ struct ChainIdPair { uint256 standardId; uint64 ccipId; } /** * @dev CCIP endpoint address */ address public endpoint; /** * @dev The correspondence between standard EVM chain IDs and CCIP chain selectors */ mapping(uint256 /*standardId*/ => uint64 /*ccipId*/) public standardToCcipChainId; /** * @dev The correspondence between CCIP chain selectors and standard EVM chain IDs */ mapping(uint64 /*ccipId*/ => uint256 /*standardId*/) public ccipToStandardChainId; /** * @notice Emitted when the cross-chain endpoint contract reference is set * @param endpointAddress The address of the cross-chain endpoint contract */ event SetEndpoint(address indexed endpointAddress); /** * @notice Emitted when a chain ID pair is added or updated * @param standardId The standard EVM chain ID * @param ccipId The CCIP chain selector */ event SetChainIdPair(uint256 indexed standardId, uint64 indexed ccipId); /** * @notice Emitted when a chain ID pair is removed * @param standardId The standard EVM chain ID * @param ccipId The CCIP chain selector */ event RemoveChainIdPair(uint256 indexed standardId, uint64 indexed ccipId); /** * @notice Emitted when there is no registered CCIP chain selector matching the standard EVM chain ID */ error CcipChainIdNotSetError(); /** * @notice Emitted when the provided call value is not sufficient for the message processing */ error SendValueError(); /** * @notice Emitted when the caller is not the CCIP endpoint */ error OnlyEndpointError(); /** * @dev Modifier to check if the caller is the CCIP endpoint */ modifier onlyEndpoint() { if (msg.sender != endpoint) { revert OnlyEndpointError(); } _; } /** * @notice Initializes the contract * @param _endpointAddress The cross-chain endpoint address * @param _chainIdPairs The correspondence between standard EVM chain IDs and CCIP chain selectors * @param _owner The address of the initial owner of the contract * @param _managers The addresses of initial managers of the contract * @param _addOwnerToManagers The flag to optionally add the owner to the list of managers */ constructor( address _endpointAddress, ChainIdPair[] memory _chainIdPairs, address _owner, address[] memory _managers, bool _addOwnerToManagers ) { _setEndpoint(_endpointAddress); for (uint256 index; index < _chainIdPairs.length; index++) { ChainIdPair memory chainIdPair = _chainIdPairs[index]; _setChainIdPair(chainIdPair.standardId, chainIdPair.ccipId); } _initRoles(_owner, _managers, _addOwnerToManagers); } /** * @notice The standard "receive" function * @dev Is payable to allow receiving native token funds */ receive() external payable {} /** * @notice Sets the cross-chain endpoint contract reference * @param _endpointAddress The address of the cross-chain endpoint contract */ function setEndpoint(address _endpointAddress) external onlyManager { _setEndpoint(_endpointAddress); } /** * @notice Adds or updates registered chain ID pairs * @param _chainIdPairs The list of chain ID pairs */ function setChainIdPairs(ChainIdPair[] calldata _chainIdPairs) external onlyManager { for (uint256 index; index < _chainIdPairs.length; index++) { ChainIdPair calldata chainIdPair = _chainIdPairs[index]; _setChainIdPair(chainIdPair.standardId, chainIdPair.ccipId); } } /** * @notice Removes registered chain ID pairs * @param _standardChainIds The list of standard EVM chain IDs */ function removeChainIdPairs(uint256[] calldata _standardChainIds) external onlyManager { for (uint256 index; index < _standardChainIds.length; index++) { uint256 standardId = _standardChainIds[index]; _removeChainIdPair(standardId); } } function _ccipSend( uint64 _targetCcipChainId, Client.EVM2AnyMessage memory _ccipMessage, uint256 _ccipSendValue ) internal virtual returns (bytes32 ccipMessageId) { if (msg.value < _ccipSendValue) { revert SendValueError(); } return IRouterClient(endpoint).ccipSend{ value: _ccipSendValue }( _targetCcipChainId, _ccipMessage ); } function _setEndpoint(address _endpoint) internal virtual { /*AddressHelper.*/requireContract(_endpoint); endpoint = _endpoint; emit SetEndpoint(_endpoint); } function _setChainIdPair(uint256 _standardId, uint64 _ccipId) internal virtual { standardToCcipChainId[_standardId] = _ccipId; ccipToStandardChainId[_ccipId] = _standardId; emit SetChainIdPair(_standardId, _ccipId); } function _removeChainIdPair(uint256 _standardId) internal virtual { uint64 ccipId = standardToCcipChainId[_standardId]; delete standardToCcipChainId[_standardId]; delete ccipToStandardChainId[ccipId]; emit RemoveChainIdPair(_standardId, ccipId); } function _checkChainId(uint256 _chainId) internal view virtual returns (uint64 ccipChainId) { ccipChainId = standardToCcipChainId[_chainId]; if (ccipChainId == 0) { revert CcipChainIdNotSetError(); } } function _ccipGetFee( uint64 _targetCcipChainId, Client.EVM2AnyMessage memory _ccipMessage ) internal view virtual returns (uint256 fee) { return IRouterClient(endpoint).getFee(_targetCcipChainId, _ccipMessage); } function _createCcipMessage( address _receiverAddress, // The receiver may be an EOA or a contract bytes memory _data, Client.EVMTokenAmount[] memory _tokenAmounts, uint256 _targetGasLimit ) internal pure virtual returns (Client.EVM2AnyMessage memory) { return Client.EVM2AnyMessage({ receiver: abi.encode(_receiverAddress), // ABI-encoded receiver address data: _data, tokenAmounts: _tokenAmounts, extraArgs: Client._argsToBytes( Client.EVMExtraArgsV1({ gasLimit: _targetGasLimit }) ), feeToken: address(0) // Native token }); } } // File @openzeppelin/contracts/security/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/bridge/chainlink-ccip/InterportCCIPTokenBridge.sol // Original license: SPDX_License_Identifier: AGPL-3.0-only pragma solidity 0.8.19; /** * @title InterportCCIPTokenBridge * @notice The contract bridges ERC-20 tokens with Chainlink CCIP */ contract InterportCCIPTokenBridge is InterportCCIPBridgeCore, ReentrancyGuard { /** * @notice The "bridgeTokens" action parameters * @param targetChainId The message target chain ID (EVM) * @param targetRecipient The address of the recipient on the target chain * @param tokenAmounts Token amount data */ struct TokenBridgeAction { uint256 targetChainId; address targetRecipient; Client.EVMTokenAmount[] tokenAmounts; } /** * @notice Token bridge action source event * @param targetChainId The ID of the target chain * @param sourceSender The address of the user on the source chain * @param targetRecipient The address of the recipient on the target chain * @param tokenAmounts Token amount data * @param reserve The reserve amount * @param ccipMessageId The CCIP message ID * @param timestamp The timestamp of the action (in seconds) */ event TokenBridgeActionSource( uint256 targetChainId, address indexed sourceSender, address targetRecipient, Client.EVMTokenAmount[] tokenAmounts, uint256 reserve, bytes32 indexed ccipMessageId, uint256 timestamp ); /** * @notice Initializes the contract * @param _endpointAddress The cross-chain endpoint address * @param _chainIdPairs The correspondence between standard EVM chain IDs and CCIP chain selectors * @param _owner The address of the initial owner of the contract * @param _managers The addresses of initial managers of the contract * @param _addOwnerToManagers The flag to optionally add the owner to the list of managers */ constructor( address _endpointAddress, ChainIdPair[] memory _chainIdPairs, address _owner, address[] memory _managers, bool _addOwnerToManagers ) InterportCCIPBridgeCore( _endpointAddress, _chainIdPairs, _owner, _managers, _addOwnerToManagers ) {} /** * @notice Cross-chain bridging of ERC-20 tokens * @param _action The action parameters * @param _ccipSendValue The CCIP processing value */ function bridgeTokens( TokenBridgeAction calldata _action, uint256 _ccipSendValue ) external payable whenNotPaused nonReentrant returns (bytes32 ccipMessageId) { uint64 targetCcipChainId = _checkChainId(_action.targetChainId); for (uint256 index; index < _action.tokenAmounts.length; index++) { Client.EVMTokenAmount calldata tokenAmountData = _action.tokenAmounts[index]; /*TransferHelper.*/safeTransferFrom( tokenAmountData.token, msg.sender, address(this), tokenAmountData.amount ); /*TransferHelper.*/safeApprove(tokenAmountData.token, endpoint, tokenAmountData.amount); } // Create an EVM2AnyMessage struct in memory with necessary information for sending a cross-chain message Client.EVM2AnyMessage memory ccipMessage = _createCcipMessage( _action.targetRecipient, new bytes(0), _action.tokenAmounts, 0 ); // Send the message ccipMessageId = _ccipSend(targetCcipChainId, ccipMessage, _ccipSendValue); for (uint256 index; index < _action.tokenAmounts.length; index++) { /*TransferHelper.*/safeApprove(_action.tokenAmounts[index].token, endpoint, 0); } emit TokenBridgeActionSource( _action.targetChainId, msg.sender, _action.targetRecipient, _action.tokenAmounts, msg.value - _ccipSendValue, ccipMessageId, block.timestamp ); } /** * @notice Cross-chain message fee estimation * @param _action The action parameters * @return Message fee */ function messageFee(TokenBridgeAction calldata _action) external view returns (uint256) { uint64 targetCcipChainId = _checkChainId(_action.targetChainId); Client.EVM2AnyMessage memory ccipMessage = _createCcipMessage( _action.targetRecipient, new bytes(0), _action.tokenAmounts, 0 ); return _ccipGetFee(targetCcipChainId, ccipMessage); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_endpointAddress","type":"address"},{"components":[{"internalType":"uint256","name":"standardId","type":"uint256"},{"internalType":"uint64","name":"ccipId","type":"uint64"}],"internalType":"struct InterportCCIPBridgeCore.ChainIdPair[]","name":"_chainIdPairs","type":"tuple[]"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address[]","name":"_managers","type":"address[]"},{"internalType":"bool","name":"_addOwnerToManagers","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CcipChainIdNotSetError","type":"error"},{"inputs":[],"name":"ListSizeLimitError","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NonContractAddressError","type":"error"},{"inputs":[],"name":"OnlyEndpointError","type":"error"},{"inputs":[],"name":"OnlyManagerError","type":"error"},{"inputs":[],"name":"ReservedTokenError","type":"error"},{"inputs":[],"name":"SafeApproveError","type":"error"},{"inputs":[],"name":"SafeTransferError","type":"error"},{"inputs":[],"name":"SafeTransferFromError","type":"error"},{"inputs":[],"name":"SafeTransferNativeError","type":"error"},{"inputs":[],"name":"SendValueError","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"standardId","type":"uint256"},{"indexed":true,"internalType":"uint64","name":"ccipId","type":"uint64"}],"name":"RemoveChainIdPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RenounceManagerRole","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"standardId","type":"uint256"},{"indexed":true,"internalType":"uint64","name":"ccipId","type":"uint64"}],"name":"SetChainIdPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"endpointAddress","type":"address"}],"name":"SetEndpoint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"targetChainId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sourceSender","type":"address"},{"indexed":false,"internalType":"address","name":"targetRecipient","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct Client.EVMTokenAmount[]","name":"tokenAmounts","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"reserve","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"ccipMessageId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenBridgeActionSource","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SYSTEM_VERSION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"targetChainId","type":"uint256"},{"internalType":"address","name":"targetRecipient","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Client.EVMTokenAmount[]","name":"tokenAmounts","type":"tuple[]"}],"internalType":"struct InterportCCIPTokenBridge.TokenBridgeAction","name":"_action","type":"tuple"},{"internalType":"uint256","name":"_ccipSendValue","type":"uint256"}],"name":"bridgeTokens","outputs":[{"internalType":"bytes32","name":"ccipMessageId","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"ccipToStandardChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"cleanup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"cleanupWithAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fullManagerList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"isReservedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"targetChainId","type":"uint256"},{"internalType":"address","name":"targetRecipient","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Client.EVMTokenAmount[]","name":"tokenAmounts","type":"tuple[]"}],"internalType":"struct InterportCCIPTokenBridge.TokenBridgeAction","name":"_action","type":"tuple"}],"name":"messageFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_standardChainIds","type":"uint256[]"}],"name":"removeChainIdPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagerRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"standardId","type":"uint256"},{"internalType":"uint64","name":"ccipId","type":"uint64"}],"internalType":"struct InterportCCIPBridgeCore.ChainIdPair[]","name":"_chainIdPairs","type":"tuple[]"}],"name":"setChainIdPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_endpointAddress","type":"address"}],"name":"setEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"standardToCcipChainId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620027ff380380620027ff833981016040819052620000349162000800565b6000805460ff1916905584848484846200004e33620000db565b620000598562000134565b60005b8451811015620000b75760008582815181106200007d576200007d6200093a565b60200260200101519050620000a1816000015182602001516200018960201b60201c565b5080620000ae8162000966565b9150506200005c565b50620000c5838383620001f1565b5050600160065550620009ae9650505050505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6200013f81620002ab565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b600082815260046020908152604080832080546001600160401b0319166001600160401b038616908117909155808452600590925280832085905551909184917ff8ee8bf96f2e1a5ac4438005dc0c9020d64a0b189f2629046a44cbbe2f5a42eb9190a35050565b60006001600160a01b038416156200020a57836200020c565b335b905060005b83518110156200025f576200024a8482815181106200023457620002346200093a565b60200260200101516001620002e760201b60201c565b80620002568162000966565b91505062000211565b5081801562000276575062000274816200035a565b155b15620002895762000289816001620002e7565b6001600160a01b0381163314620002a557620002a5816200039c565b50505050565b6001600160a01b0381163b620002e457604051638c50d7cd60e01b81526001600160a01b03821660048201526024015b60405180910390fd5b50565b620002f162000418565b6200031e7f6d439300980e333f0256d64be2c9f67e86f4493ce25f82498d6db7f4be3d9e6f83836200047c565b604051811515906001600160a01b038416907fbe9474bb3e78da7e315cdffa5cfa30b767fcc95bbf44a6197da60228eea1028690600090a35050565b6001600160a01b03811660009081527f260b29b219d450563ddb0e5ca806bdadb1e125f7e8c506de0443797dd7122728602052604081205460ff165b92915050565b620003a662000418565b6001600160a01b0381166200040d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620002db565b620002e481620000db565b6000546001600160a01b036101009091041633146200047a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002db565b565b60008381526001602090815260408083206002909252909120620002a5919084846064600082620004ba57620004b4868686620004d2565b620004c8565b620004c88686868562000607565b9695505050505050565b6001600160a01b0381166000908152602083905260409020805460ff16908115620005ff576001808201548654909160009162000510919062000982565b9050808214620005a45760008782815481106200053157620005316200093a565b9060005260206000200160009054906101000a90046001600160a01b03169050808884815481106200056757620005676200093a565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815290879052604090206001018290555b86805480620005b757620005b762000998565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038716825287905260408120805460ff191681556001015550505b509392505050565b6001600160a01b03821660009081526020849052604090205460ff16158015620006b457845482116200064d5760405163b1655e3360e01b815260040160405180910390fd5b6040805180820182526001808252875460208084019182526001600160a01b03881660008181528a83529586209451855460ff1916901515178555915193830193909355885491820189558884529190922090910180546001600160a01b03191690911790555b949350505050565b80516001600160a01b0381168114620006d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620007145762000714620006d9565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620007455762000745620006d9565b604052919050565b60006001600160401b03821115620007695762000769620006d9565b5060051b60200190565b600082601f8301126200078557600080fd5b815160206200079e62000798836200074d565b6200071a565b82815260059290921b84018101918181019086841115620007be57600080fd5b8286015b84811015620007e457620007d681620006bc565b8352918301918301620007c2565b509695505050505050565b80518015158114620006d457600080fd5b600080600080600060a086880312156200081957600080fd5b6200082486620006bc565b602087810151919650906001600160401b03808211156200084457600080fd5b818901915089601f8301126200085957600080fd5b81516200086a62000798826200074d565b81815260069190911b8301840190848101908c8311156200088a57600080fd5b938501935b82851015620008e3576040858e031215620008aa5760008081fd5b620008b4620006ef565b85518152868601518581168114620008cc5760008081fd5b81880152825260409490940193908501906200088f565b9850620008f691505060408a01620006bc565b955060608901519250808311156200090d57600080fd5b50506200091d8882890162000773565b9250506200092e60808701620007ef565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200097b576200097b62000950565b5060010190565b8181038181111562000396576200039662000950565b634e487b7160e01b600052603160045260246000fd5b611e4180620009be6000396000f3fe60806040526004361061014f5760003560e01c80638456cb59116100b6578063e4d3914a1161006f578063e4d3914a146103dc578063eedc966a146103fc578063f2407be21461041c578063f2f6bf2a14610449578063f2fde38b14610497578063f3ae2415146104b757600080fd5b80638456cb591461032d5780638da5cb5b14610342578063a5e90eee14610365578063c2c518e114610385578063dbbb41551461039a578063e3725b15146103ba57600080fd5b80634ea88660116101085780634ea88660146102685780635c975abb146102885780635d2251d5146102a05780635e280f11146102c0578063715018a6146102f857806383d853461461030d57600080fd5b8063093f0e271461015b578063103b7397146101a25780631de0eb02146101ed5780632f204e81146102005780633f4ba83a14610222578063440d72481461023757600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061018f7f22ad9585a395edc8067b50da4778cafbb7fa2c4bbd7619fad6aeba403857fd7481565b6040519081526020015b60405180910390f35b3480156101ae57600080fd5b50600080516020611dec83398151915260005260016020527f3c2285c553468ca8f30447b24bb463c127f1b840e23a0cafa23caa79d906669a5461018f565b61018f6101fb36600461180c565b6104dc565b34801561020c57600080fd5b5061022061021b366004611850565b610719565b005b34801561022e57600080fd5b50610220610788565b34801561024357600080fd5b506102586102523660046118db565b50600090565b6040519015158152602001610199565b34801561027457600080fd5b5061018f6102833660046118f6565b6107c0565b34801561029457600080fd5b5060005460ff16610258565b3480156102ac57600080fd5b506102206102bb36600461192a565b61085f565b3480156102cc57600080fd5b506003546102e0906001600160a01b031681565b6040516001600160a01b039091168152602001610199565b34801561030457600080fd5b50610220610890565b34801561031957600080fd5b50610220610328366004611966565b6108a2565b34801561033957600080fd5b506102206108df565b34801561034e57600080fd5b5060005461010090046001600160a01b03166102e0565b34801561037157600080fd5b506102206103803660046119a7565b610915565b34801561039157600080fd5b50610220610972565b3480156103a657600080fd5b506102206103b53660046118db565b6109df565b3480156103c657600080fd5b506103cf610a11565b60405161019991906119de565b3480156103e857600080fd5b506102206103f7366004611a2b565b610a2a565b34801561040857600080fd5b5061018f6104173660046118db565b610aa9565b34801561042857600080fd5b5061018f610437366004611a8d565b60056020526000908152604090205481565b34801561045557600080fd5b5061047f610464366004611ab6565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610199565b3480156104a357600080fd5b506102206104b23660046118db565b610b44565b3480156104c357600080fd5b506102586104d23660046118db565b610bbf565b905090565b60006104e6610bff565b6104ee610c45565b60006104fa8435610c9e565b905060005b61050c6040860186611acf565b905081101561059357366105236040870187611acf565b8381811061053357610533611b1f565b60400291909101915061055a905061054e60208301836118db565b33308460200135610cd7565b61058061056a60208301836118db565b6003546001600160a01b03166020840135610dd2565b508061058b81611b4b565b9150506104ff565b50600061061c6105a960408701602088016118db565b6040805160008152602081018252906105c490890189611acf565b808060200260200160405190810160405280939291908181526020016000905b828210156106105761060160408302860136819003810190611b64565b815260200190600101906105e4565b50505050506000610ec4565b9050610629828286610fa8565b925060005b61063b6040870187611acf565b905081101561069f5761068d6106546040880188611acf565b8381811061066457610664611b1f565b61067a92602060409092020190810191506118db565b6003546001600160a01b03166000610dd2565b8061069781611b4b565b91505061062e565b5082337febd078709d937f1a74ef88e1cca1a6b5cac55923f0b636133bbafa997c85142a87356106d560408a0160208b016118db565b6106e260408b018b611acf565b6106ec8b34611bc8565b426040516106ff96959493929190611bdb565b60405180910390a350506107136001600655565b92915050565b61072233610bbf565b61073f57604051637c3ea23f60e01b815260040160405180910390fd5b60005b8181101561078357600083838381811061075e5761075e611b1f565b90506020020135905061077081611042565b508061077b81611b4b565b915050610742565b505050565b61079133610bbf565b6107ae57604051637c3ea23f60e01b815260040160405180910390fd5b6107b66110a9565b6107be6110f2565b565b6000806107cd8335610c9e565b9050600061084b6107e460408601602087016118db565b6040805160008152602081018252906107ff90880188611acf565b808060200260200160405190810160405280939291908181526020016000905b828210156106105761083c60408302860136819003810190611b64565b8152602001906001019061081f565b90506108578282611144565b949350505050565b61086833610bbf565b61088557604051637c3ea23f60e01b815260040160405180910390fd5b6107838383836111bf565b6108986111f9565b6107be6000611259565b6108ab33610bbf565b6108c857604051637c3ea23f60e01b815260040160405180910390fd5b6108db82826108d685610aa9565b6111bf565b5050565b6108e833610bbf565b61090557604051637c3ea23f60e01b815260040160405180910390fd5b61090d610bff565b6107be6112b2565b61091d6111f9565b610936600080516020611dec83398151915283836112ef565b604051811515906001600160a01b038416907fbe9474bb3e78da7e315cdffa5cfa30b767fcc95bbf44a6197da60228eea1028690600090a35050565b61097b33610bbf565b61099857604051637c3ea23f60e01b815260040160405180910390fd5b6109b2600080516020611dec8339815191523360006112ef565b60405133907f6cc2c67081f55c2fffb7c008fa995fbbf890f48c7c16fba93d8220f00dc84cc590600090a2565b6109e833610bbf565b610a0557604051637c3ea23f60e01b815260040160405180910390fd5b610a0e8161131c565b50565b60606104d7600080516020611dec83398151915261136f565b610a3333610bbf565b610a5057604051637c3ea23f60e01b815260040160405180910390fd5b60005b818110156107835736838383818110610a6e57610a6e611b1f565b9050604002019050610a968160000135826020016020810190610a919190611a8d565b6113db565b5080610aa181611b4b565b915050610a53565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03831601610ad7575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107139190611c5a565b919050565b610b4c6111f9565b6001600160a01b038116610bb65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610a0e81611259565b6001600160a01b03811660009081527f260b29b219d450563ddb0e5ca806bdadb1e125f7e8c506de0443797dd7122728602052604081205460ff16610713565b60005460ff16156107be5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610bad565b600260065403610c975760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bad565b6002600655565b6000818152600460205260408120546001600160401b031690819003610b3f576040516324efd8bd60e01b815260040160405180910390fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691610d3b9190611c97565b6000604051808303816000865af19150503d8060008114610d78576040519150601f19603f3d011682016040523d82523d6000602084013e610d7d565b606091505b50915091506000828015610da9575081511580610da9575081806020019051810190610da99190611cb3565b905080610dc957604051632d9d5b4160e01b815260040160405180910390fd5b50505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691610e2e9190611c97565b6000604051808303816000865af19150503d8060008114610e6b576040519150601f19603f3d011682016040523d82523d6000602084013e610e70565b606091505b50915091506000828015610e9c575081511580610e9c575081806020019051810190610e9c9190611cb3565b905080610ebc5760405163b45d44e760e01b815260040160405180910390fd5b505050505050565b610eff6040518060a0016040528060608152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b6040805160a081019091526001600160a01b03861660c08201528060e08101604051602081830303815290604052815260200185815260200184815260200160006001600160a01b03168152602001610f9d60405180602001604052808681525060408051915160248084019190915281518084039091018152604490920190526020810180516001600160e01b03166397a657c960e01b17905290565b905295945050505050565b600081341015610fcb5760405163015523f960e71b815260040160405180910390fd5b6003546040516396f4e9f960e01b81526001600160a01b03909116906396f4e9f9908490610fff9088908890600401611cfc565b60206040518083038185885af115801561101d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108579190611c5a565b6000818152600460209081526040808320805467ffffffffffffffff1981169091556001600160401b03168084526005909252808320839055519091829184917ff3f561aeedc0eb6a38a4fcd9b5b5e3ad2a52f68ccfb161f3ce56a6df1aeb4a6d91a35050565b60005460ff166107be5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610bad565b6110fa6110a9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546040516320487ded60e01b81526000916001600160a01b0316906320487ded906111779086908690600401611cfc565b602060405180830381865afa158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190611c5a565b9392505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038416016111ee576107838282611444565b6107838383836114d2565b6000546001600160a01b036101009091041633146107be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bad565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6112ba610bff565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111273390565b600083815260016020908152604080832060029092529091206113169190848460646115bc565b50505050565b611325816115e9565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b6000818152600160209081526040918290208054835181840281018401909452808452606093928301828280156113cf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113b1575b50505050509050919050565b6000828152600460209081526040808320805467ffffffffffffffff19166001600160401b038616908117909155808452600590925280832085905551909184917ff8ee8bf96f2e1a5ac4438005dc0c9020d64a0b189f2629046a44cbbe2f5a42eb9190a35050565b604080516000808252602082019092526001600160a01b03841690839060405161146e9190611c97565b60006040518083038185875af1925050503d80600081146114ab576040519150601f19603f3d011682016040523d82523d6000602084013e6114b0565b606091505b505090508061078357604051632e05b05360e21b815260040160405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161152e9190611c97565b6000604051808303816000865af19150503d806000811461156b576040519150601f19603f3d011682016040523d82523d6000602084013e611570565b606091505b5091509150600082801561159c57508151158061159c57508180602001905181019061159c9190611cb3565b905080610ebc57604051632fdb1b7f60e11b815260040160405180910390fd5b6000826115d3576115ce86868661161c565b6115df565b6115df86868685611744565b9695505050505050565b6001600160a01b0381163b610a0e57604051638c50d7cd60e01b81526001600160a01b0382166004820152602401610bad565b6001600160a01b0381166000908152602083905260409020805460ff1690811561173c57600180820154865490916000916116579190611bc8565b90508082146116e457600087828154811061167457611674611b1f565b9060005260206000200160009054906101000a90046001600160a01b03169050808884815481106116a7576116a7611b1f565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815290879052604090206001018290555b868054806116f4576116f4611dd5565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038716825287905260408120805460ff191681556001015550505b509392505050565b6001600160a01b03821660009081526020849052604090205460ff1615801561085757845482116117885760405163b1655e3360e01b815260040160405180910390fd5b6040805180820182526001808252875460208084019182526001600160a01b039790971660008181529888529388209251835460ff19169015151783555191810191909155865490810187559585529290932090930180546001600160a01b0319169091179055919050565b60006060828403121561180657600080fd5b50919050565b6000806040838503121561181f57600080fd5b82356001600160401b0381111561183557600080fd5b611841858286016117f4565b95602094909401359450505050565b6000806020838503121561186357600080fd5b82356001600160401b038082111561187a57600080fd5b818501915085601f83011261188e57600080fd5b81358181111561189d57600080fd5b8660208260051b85010111156118b257600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114610b3f57600080fd5b6000602082840312156118ed57600080fd5b6111b8826118c4565b60006020828403121561190857600080fd5b81356001600160401b0381111561191e57600080fd5b610857848285016117f4565b60008060006060848603121561193f57600080fd5b611948846118c4565b9250611956602085016118c4565b9150604084013590509250925092565b6000806040838503121561197957600080fd5b611982836118c4565b9150611990602084016118c4565b90509250929050565b8015158114610a0e57600080fd5b600080604083850312156119ba57600080fd5b6119c3836118c4565b915060208301356119d381611999565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611a1f5783516001600160a01b0316835292840192918401916001016119fa565b50909695505050505050565b60008060208385031215611a3e57600080fd5b82356001600160401b0380821115611a5557600080fd5b818501915085601f830112611a6957600080fd5b813581811115611a7857600080fd5b8660208260061b85010111156118b257600080fd5b600060208284031215611a9f57600080fd5b81356001600160401b03811681146111b857600080fd5b600060208284031215611ac857600080fd5b5035919050565b6000808335601e19843603018112611ae657600080fd5b8301803591506001600160401b03821115611b0057600080fd5b6020019150600681901b3603821315611b1857600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611b5d57611b5d611b35565b5060010190565b600060408284031215611b7657600080fd5b604051604081018181106001600160401b0382111715611ba657634e487b7160e01b600052604160045260246000fd5b604052611bb2836118c4565b8152602083013560208201528091505092915050565b8181038181111561071357610713611b35565b8681526001600160a01b0386811660208084019190915260a0604080850182905290840187905260009288929160c08601855b8a811015611c3b5783611c20876118c4565b16825285850135858301529482019490820190600101611c0e565b5060608701989098525050505060809091019190915250949350505050565b600060208284031215611c6c57600080fd5b5051919050565b60005b83811015611c8e578181015183820152602001611c76565b50506000910152565b60008251611ca9818460208701611c73565b9190910192915050565b600060208284031215611cc557600080fd5b81516111b881611999565b60008151808452611ce8816020860160208601611c73565b601f01601f19169290920160200192915050565b600060406001600160401b038516835260208181850152845160a083860152611d2860e0860182611cd0565b905081860151603f1980878403016060880152611d458383611cd0565b88860151888203830160808a01528051808352908601945060009350908501905b80841015611d9857845180516001600160a01b0316835286015186830152938501936001939093019290860190611d66565b5060608901516001600160a01b031660a08901526080890151888203830160c08a01529550611dc78187611cd0565b9a9950505050505050505050565b634e487b7160e01b600052603160045260246000fdfe6d439300980e333f0256d64be2c9f67e86f4493ce25f82498d6db7f4be3d9e6fa26469706673582212208b9addf1ae51c37ec2d5cfe70f70e6259c7a77c47915b29a9b300d6540a9076564736f6c6343000813003300000000000000000000000080226fc0ee2b096224eeac085bb9a8cba1146f7d00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000072e28c7f34100afefc399fcc0ae041b8fe5841ae000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000045849994fc9c7b1500000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000009d70576d8e253bcf000000000000000000000000000000000000000000000000000000000000a86a000000000000000000000000000000000000000000000000594862ae1802b3d50000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000383a1891ae1915b1000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000044ae84d8e9a374440000000000000000000000000000000000000000000000000000000000002105000000000000000000000000000000000000000000000000dda641cfe44aff82000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000033d343f77863cab80000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638456cb59116100b6578063e4d3914a1161006f578063e4d3914a146103dc578063eedc966a146103fc578063f2407be21461041c578063f2f6bf2a14610449578063f2fde38b14610497578063f3ae2415146104b757600080fd5b80638456cb591461032d5780638da5cb5b14610342578063a5e90eee14610365578063c2c518e114610385578063dbbb41551461039a578063e3725b15146103ba57600080fd5b80634ea88660116101085780634ea88660146102685780635c975abb146102885780635d2251d5146102a05780635e280f11146102c0578063715018a6146102f857806383d853461461030d57600080fd5b8063093f0e271461015b578063103b7397146101a25780631de0eb02146101ed5780632f204e81146102005780633f4ba83a14610222578063440d72481461023757600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061018f7f22ad9585a395edc8067b50da4778cafbb7fa2c4bbd7619fad6aeba403857fd7481565b6040519081526020015b60405180910390f35b3480156101ae57600080fd5b50600080516020611dec83398151915260005260016020527f3c2285c553468ca8f30447b24bb463c127f1b840e23a0cafa23caa79d906669a5461018f565b61018f6101fb36600461180c565b6104dc565b34801561020c57600080fd5b5061022061021b366004611850565b610719565b005b34801561022e57600080fd5b50610220610788565b34801561024357600080fd5b506102586102523660046118db565b50600090565b6040519015158152602001610199565b34801561027457600080fd5b5061018f6102833660046118f6565b6107c0565b34801561029457600080fd5b5060005460ff16610258565b3480156102ac57600080fd5b506102206102bb36600461192a565b61085f565b3480156102cc57600080fd5b506003546102e0906001600160a01b031681565b6040516001600160a01b039091168152602001610199565b34801561030457600080fd5b50610220610890565b34801561031957600080fd5b50610220610328366004611966565b6108a2565b34801561033957600080fd5b506102206108df565b34801561034e57600080fd5b5060005461010090046001600160a01b03166102e0565b34801561037157600080fd5b506102206103803660046119a7565b610915565b34801561039157600080fd5b50610220610972565b3480156103a657600080fd5b506102206103b53660046118db565b6109df565b3480156103c657600080fd5b506103cf610a11565b60405161019991906119de565b3480156103e857600080fd5b506102206103f7366004611a2b565b610a2a565b34801561040857600080fd5b5061018f6104173660046118db565b610aa9565b34801561042857600080fd5b5061018f610437366004611a8d565b60056020526000908152604090205481565b34801561045557600080fd5b5061047f610464366004611ab6565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610199565b3480156104a357600080fd5b506102206104b23660046118db565b610b44565b3480156104c357600080fd5b506102586104d23660046118db565b610bbf565b905090565b60006104e6610bff565b6104ee610c45565b60006104fa8435610c9e565b905060005b61050c6040860186611acf565b905081101561059357366105236040870187611acf565b8381811061053357610533611b1f565b60400291909101915061055a905061054e60208301836118db565b33308460200135610cd7565b61058061056a60208301836118db565b6003546001600160a01b03166020840135610dd2565b508061058b81611b4b565b9150506104ff565b50600061061c6105a960408701602088016118db565b6040805160008152602081018252906105c490890189611acf565b808060200260200160405190810160405280939291908181526020016000905b828210156106105761060160408302860136819003810190611b64565b815260200190600101906105e4565b50505050506000610ec4565b9050610629828286610fa8565b925060005b61063b6040870187611acf565b905081101561069f5761068d6106546040880188611acf565b8381811061066457610664611b1f565b61067a92602060409092020190810191506118db565b6003546001600160a01b03166000610dd2565b8061069781611b4b565b91505061062e565b5082337febd078709d937f1a74ef88e1cca1a6b5cac55923f0b636133bbafa997c85142a87356106d560408a0160208b016118db565b6106e260408b018b611acf565b6106ec8b34611bc8565b426040516106ff96959493929190611bdb565b60405180910390a350506107136001600655565b92915050565b61072233610bbf565b61073f57604051637c3ea23f60e01b815260040160405180910390fd5b60005b8181101561078357600083838381811061075e5761075e611b1f565b90506020020135905061077081611042565b508061077b81611b4b565b915050610742565b505050565b61079133610bbf565b6107ae57604051637c3ea23f60e01b815260040160405180910390fd5b6107b66110a9565b6107be6110f2565b565b6000806107cd8335610c9e565b9050600061084b6107e460408601602087016118db565b6040805160008152602081018252906107ff90880188611acf565b808060200260200160405190810160405280939291908181526020016000905b828210156106105761083c60408302860136819003810190611b64565b8152602001906001019061081f565b90506108578282611144565b949350505050565b61086833610bbf565b61088557604051637c3ea23f60e01b815260040160405180910390fd5b6107838383836111bf565b6108986111f9565b6107be6000611259565b6108ab33610bbf565b6108c857604051637c3ea23f60e01b815260040160405180910390fd5b6108db82826108d685610aa9565b6111bf565b5050565b6108e833610bbf565b61090557604051637c3ea23f60e01b815260040160405180910390fd5b61090d610bff565b6107be6112b2565b61091d6111f9565b610936600080516020611dec83398151915283836112ef565b604051811515906001600160a01b038416907fbe9474bb3e78da7e315cdffa5cfa30b767fcc95bbf44a6197da60228eea1028690600090a35050565b61097b33610bbf565b61099857604051637c3ea23f60e01b815260040160405180910390fd5b6109b2600080516020611dec8339815191523360006112ef565b60405133907f6cc2c67081f55c2fffb7c008fa995fbbf890f48c7c16fba93d8220f00dc84cc590600090a2565b6109e833610bbf565b610a0557604051637c3ea23f60e01b815260040160405180910390fd5b610a0e8161131c565b50565b60606104d7600080516020611dec83398151915261136f565b610a3333610bbf565b610a5057604051637c3ea23f60e01b815260040160405180910390fd5b60005b818110156107835736838383818110610a6e57610a6e611b1f565b9050604002019050610a968160000135826020016020810190610a919190611a8d565b6113db565b5080610aa181611b4b565b915050610a53565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03831601610ad7575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107139190611c5a565b919050565b610b4c6111f9565b6001600160a01b038116610bb65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610a0e81611259565b6001600160a01b03811660009081527f260b29b219d450563ddb0e5ca806bdadb1e125f7e8c506de0443797dd7122728602052604081205460ff16610713565b60005460ff16156107be5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610bad565b600260065403610c975760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bad565b6002600655565b6000818152600460205260408120546001600160401b031690819003610b3f576040516324efd8bd60e01b815260040160405180910390fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691610d3b9190611c97565b6000604051808303816000865af19150503d8060008114610d78576040519150601f19603f3d011682016040523d82523d6000602084013e610d7d565b606091505b50915091506000828015610da9575081511580610da9575081806020019051810190610da99190611cb3565b905080610dc957604051632d9d5b4160e01b815260040160405180910390fd5b50505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691610e2e9190611c97565b6000604051808303816000865af19150503d8060008114610e6b576040519150601f19603f3d011682016040523d82523d6000602084013e610e70565b606091505b50915091506000828015610e9c575081511580610e9c575081806020019051810190610e9c9190611cb3565b905080610ebc5760405163b45d44e760e01b815260040160405180910390fd5b505050505050565b610eff6040518060a0016040528060608152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b6040805160a081019091526001600160a01b03861660c08201528060e08101604051602081830303815290604052815260200185815260200184815260200160006001600160a01b03168152602001610f9d60405180602001604052808681525060408051915160248084019190915281518084039091018152604490920190526020810180516001600160e01b03166397a657c960e01b17905290565b905295945050505050565b600081341015610fcb5760405163015523f960e71b815260040160405180910390fd5b6003546040516396f4e9f960e01b81526001600160a01b03909116906396f4e9f9908490610fff9088908890600401611cfc565b60206040518083038185885af115801561101d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108579190611c5a565b6000818152600460209081526040808320805467ffffffffffffffff1981169091556001600160401b03168084526005909252808320839055519091829184917ff3f561aeedc0eb6a38a4fcd9b5b5e3ad2a52f68ccfb161f3ce56a6df1aeb4a6d91a35050565b60005460ff166107be5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610bad565b6110fa6110a9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546040516320487ded60e01b81526000916001600160a01b0316906320487ded906111779086908690600401611cfc565b602060405180830381865afa158015611194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b89190611c5a565b9392505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038416016111ee576107838282611444565b6107838383836114d2565b6000546001600160a01b036101009091041633146107be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bad565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6112ba610bff565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111273390565b600083815260016020908152604080832060029092529091206113169190848460646115bc565b50505050565b611325816115e9565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b6000818152600160209081526040918290208054835181840281018401909452808452606093928301828280156113cf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113b1575b50505050509050919050565b6000828152600460209081526040808320805467ffffffffffffffff19166001600160401b038616908117909155808452600590925280832085905551909184917ff8ee8bf96f2e1a5ac4438005dc0c9020d64a0b189f2629046a44cbbe2f5a42eb9190a35050565b604080516000808252602082019092526001600160a01b03841690839060405161146e9190611c97565b60006040518083038185875af1925050503d80600081146114ab576040519150601f19603f3d011682016040523d82523d6000602084013e6114b0565b606091505b505090508061078357604051632e05b05360e21b815260040160405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161152e9190611c97565b6000604051808303816000865af19150503d806000811461156b576040519150601f19603f3d011682016040523d82523d6000602084013e611570565b606091505b5091509150600082801561159c57508151158061159c57508180602001905181019061159c9190611cb3565b905080610ebc57604051632fdb1b7f60e11b815260040160405180910390fd5b6000826115d3576115ce86868661161c565b6115df565b6115df86868685611744565b9695505050505050565b6001600160a01b0381163b610a0e57604051638c50d7cd60e01b81526001600160a01b0382166004820152602401610bad565b6001600160a01b0381166000908152602083905260409020805460ff1690811561173c57600180820154865490916000916116579190611bc8565b90508082146116e457600087828154811061167457611674611b1f565b9060005260206000200160009054906101000a90046001600160a01b03169050808884815481106116a7576116a7611b1f565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815290879052604090206001018290555b868054806116f4576116f4611dd5565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038716825287905260408120805460ff191681556001015550505b509392505050565b6001600160a01b03821660009081526020849052604090205460ff1615801561085757845482116117885760405163b1655e3360e01b815260040160405180910390fd5b6040805180820182526001808252875460208084019182526001600160a01b039790971660008181529888529388209251835460ff19169015151783555191810191909155865490810187559585529290932090930180546001600160a01b0319169091179055919050565b60006060828403121561180657600080fd5b50919050565b6000806040838503121561181f57600080fd5b82356001600160401b0381111561183557600080fd5b611841858286016117f4565b95602094909401359450505050565b6000806020838503121561186357600080fd5b82356001600160401b038082111561187a57600080fd5b818501915085601f83011261188e57600080fd5b81358181111561189d57600080fd5b8660208260051b85010111156118b257600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114610b3f57600080fd5b6000602082840312156118ed57600080fd5b6111b8826118c4565b60006020828403121561190857600080fd5b81356001600160401b0381111561191e57600080fd5b610857848285016117f4565b60008060006060848603121561193f57600080fd5b611948846118c4565b9250611956602085016118c4565b9150604084013590509250925092565b6000806040838503121561197957600080fd5b611982836118c4565b9150611990602084016118c4565b90509250929050565b8015158114610a0e57600080fd5b600080604083850312156119ba57600080fd5b6119c3836118c4565b915060208301356119d381611999565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611a1f5783516001600160a01b0316835292840192918401916001016119fa565b50909695505050505050565b60008060208385031215611a3e57600080fd5b82356001600160401b0380821115611a5557600080fd5b818501915085601f830112611a6957600080fd5b813581811115611a7857600080fd5b8660208260061b85010111156118b257600080fd5b600060208284031215611a9f57600080fd5b81356001600160401b03811681146111b857600080fd5b600060208284031215611ac857600080fd5b5035919050565b6000808335601e19843603018112611ae657600080fd5b8301803591506001600160401b03821115611b0057600080fd5b6020019150600681901b3603821315611b1857600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611b5d57611b5d611b35565b5060010190565b600060408284031215611b7657600080fd5b604051604081018181106001600160401b0382111715611ba657634e487b7160e01b600052604160045260246000fd5b604052611bb2836118c4565b8152602083013560208201528091505092915050565b8181038181111561071357610713611b35565b8681526001600160a01b0386811660208084019190915260a0604080850182905290840187905260009288929160c08601855b8a811015611c3b5783611c20876118c4565b16825285850135858301529482019490820190600101611c0e565b5060608701989098525050505060809091019190915250949350505050565b600060208284031215611c6c57600080fd5b5051919050565b60005b83811015611c8e578181015183820152602001611c76565b50506000910152565b60008251611ca9818460208701611c73565b9190910192915050565b600060208284031215611cc557600080fd5b81516111b881611999565b60008151808452611ce8816020860160208601611c73565b601f01601f19169290920160200192915050565b600060406001600160401b038516835260208181850152845160a083860152611d2860e0860182611cd0565b905081860151603f1980878403016060880152611d458383611cd0565b88860151888203830160808a01528051808352908601945060009350908501905b80841015611d9857845180516001600160a01b0316835286015186830152938501936001939093019290860190611d66565b5060608901516001600160a01b031660a08901526080890151888203830160c08a01529550611dc78187611cd0565b9a9950505050505050505050565b634e487b7160e01b600052603160045260246000fdfe6d439300980e333f0256d64be2c9f67e86f4493ce25f82498d6db7f4be3d9e6fa26469706673582212208b9addf1ae51c37ec2d5cfe70f70e6259c7a77c47915b29a9b300d6540a9076564736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000080226fc0ee2b096224eeac085bb9a8cba1146f7d00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000072e28c7f34100afefc399fcc0ae041b8fe5841ae000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000045849994fc9c7b1500000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000009d70576d8e253bcf000000000000000000000000000000000000000000000000000000000000a86a000000000000000000000000000000000000000000000000594862ae1802b3d50000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000383a1891ae1915b1000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000044ae84d8e9a374440000000000000000000000000000000000000000000000000000000000002105000000000000000000000000000000000000000000000000dda641cfe44aff82000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000033d343f77863cab80000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _endpointAddress (address): 0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D
Arg [1] : _chainIdPairs (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [2] : _owner (address): 0x72E28c7F34100AfefC399fcc0AE041B8fe5841AE
-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 00000000000000000000000080226fc0ee2b096224eeac085bb9a8cba1146f7d
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000072e28c7f34100afefc399fcc0ae041b8fe5841ae
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 00000000000000000000000000000000000000000000000045849994fc9c7b15
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000038
Arg [9] : 0000000000000000000000000000000000000000000000009d70576d8e253bcf
Arg [10] : 000000000000000000000000000000000000000000000000000000000000a86a
Arg [11] : 000000000000000000000000000000000000000000000000594862ae1802b3d5
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000089
Arg [13] : 000000000000000000000000000000000000000000000000383a1891ae1915b1
Arg [14] : 000000000000000000000000000000000000000000000000000000000000a4b1
Arg [15] : 00000000000000000000000000000000000000000000000044ae84d8e9a37444
Arg [16] : 0000000000000000000000000000000000000000000000000000000000002105
Arg [17] : 000000000000000000000000000000000000000000000000dda641cfe44aff82
Arg [18] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [19] : 00000000000000000000000000000000000000000000000033d343f77863cab8
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42099:4549:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31344:73;;;;;;;;;;-1:-1:-1;31344:73:0;31396:20;31344:73;;;;;160:25:1;;;148:2;133:18;31344:73:0;;;;;;;;26140:108;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;26187:7:0;23676:25;:15;:25;;;:32;26140:108;;44403:1658;;;;;;:::i;:::-;;:::i;36026:287::-;;;;;;;;;;-1:-1:-1;36026:287:0;;;;;:::i;:::-;;:::i;:::-;;30919:80;;;;;;;;;;;;;:::i;29623:299::-;;;;;;;;;;-1:-1:-1;29623:299:0;;;;;:::i;:::-;-1:-1:-1;29700:4:0;;29623:299;;;;2151:14:1;;2144:22;2126:41;;2114:2;2099:18;29623:299:0;1986:187:1;46211:434:0;;;;;;;;;;-1:-1:-1;46211:434:0;;;;;:::i;:::-;;:::i;9198:86::-;;;;;;;;;;-1:-1:-1;9245:4:0;9269:7;;;9198:86;;28573:219;;;;;;;;;;-1:-1:-1;28573:219:0;;;;;:::i;:::-;;:::i;32130:23::-;;;;;;;;;;-1:-1:-1;32130:23:0;;;;-1:-1:-1;;;;;32130:23:0;;;;;;-1:-1:-1;;;;;3165:32:1;;;3147:51;;3135:2;3120:18;32130:23:0;3001:203:1;6653:103:0;;;;;;;;;;;;;:::i;28053:168::-;;;;;;;;;;-1:-1:-1;28053:168:0;;;;;:::i;:::-;;:::i;30781:79::-;;;;;;;;;;;;;:::i;6005:87::-;;;;;;;;;;-1:-1:-1;6051:7:0;6078:6;;;;-1:-1:-1;;;;;6078:6:0;6005:87;;25605:175;;;;;;;;;;-1:-1:-1;25605:175:0;;;;;:::i;:::-;;:::i;25849:163::-;;;;;;;;;;;;;:::i;35306:117::-;;;;;;;;;;-1:-1:-1;35306:117:0;;;;;:::i;:::-;;:::i;26408:123::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35563:319::-;;;;;;;;;;-1:-1:-1;35563:319:0;;;;;:::i;:::-;;:::i;29093:306::-;;;;;;;;;;-1:-1:-1;29093:306:0;;;;;:::i;:::-;;:::i;32464:81::-;;;;;;;;;;-1:-1:-1;32464:81:0;;;;;:::i;:::-;;;;;;;;;;;;;;32268;;;;;;;;;;-1:-1:-1;32268:81:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;32268:81:0;;;;;;-1:-1:-1;;;;;5867:31:1;;;5849:50;;5837:2;5822:18;32268:81:0;5705:200:1;6911:201:0;;;;;;;;;;-1:-1:-1;6911:201:0;;;;;:::i;:::-;;:::i;26658:123::-;;;;;;;;;;-1:-1:-1;26658:123:0;;;;;:::i;:::-;;:::i;26214:26::-;26207:33;;26140:108;:::o;44403:1658::-;44563:21;8803:19;:17;:19::i;:::-;41215:21:::1;:19;:21::i;:::-;44597:24:::2;44624:36;44638:21:::0;::::2;44624:13;:36::i;:::-;44597:63;;44678:13;44673:482;44701:20;;::::0;::::2;:7:::0;:20:::2;:::i;:::-;:27;;44693:5;:35;44673:482;;;44754:46;44803:20;;::::0;::::2;:7:::0;:20:::2;:::i;:::-;44824:5;44803:27;;;;;;;:::i;:::-;;;::::0;;;::::2;::::0;-1:-1:-1;44866:173:0::2;::::0;-1:-1:-1;44901:21:0::2;;::::0;::::2;44803:27:::0;44901:21:::2;:::i;:::-;44941:10;44978:4;45002:15;:22;;;44866:16;:173::i;:::-;45075:68;45087:21;;::::0;::::2;:15:::0;:21:::2;:::i;:::-;45110:8;::::0;-1:-1:-1;;;;;45110:8:0::2;45120:22;::::0;::::2;;45075:11;:68::i;:::-;-1:-1:-1::0;44730:7:0;::::2;::::0;::::2;:::i;:::-;;;;44673:482;;;-1:-1:-1::0;45282:40:0::2;45325:145;45358:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;45396:12;::::0;;45406:1:::2;45396:12:::0;;::::2;::::0;::::2;::::0;;;45423:20:::2;::::0;;::::2;::::0;::::2;:::i;:::-;45325:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;45458:1;45325:18;:145::i;:::-;45282:188;;45528:57;45538:17;45557:11;45570:14;45528:9;:57::i;:::-;45512:73;;45603:13;45598:171;45626:20;;::::0;::::2;:7:::0;:20:::2;:::i;:::-;:27;;45618:5;:35;45598:171;;;45698:59;45710:20;;::::0;::::2;:7:::0;:20:::2;:::i;:::-;45731:5;45710:27;;;;;;;:::i;:::-;:33;::::0;::::2;:27;::::0;;::::2;;:33:::0;;::::2;::::0;-1:-1:-1;45710:33:0::2;:::i;:::-;45745:8;::::0;-1:-1:-1;;;;;45745:8:0::2;;45698:11;:59::i;:::-;45655:7:::0;::::2;::::0;::::2;:::i;:::-;;;;45598:171;;;-1:-1:-1::0;45999:13:0;45860:10:::2;45786:267;45824:21:::0;::::2;45885:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;45923:20;;::::0;::::2;:7:::0;:20:::2;:::i;:::-;45958:26;45970:14:::0;45958:9:::2;:26;:::i;:::-;46027:15;45786:267;;;;;;;;;;;:::i;:::-;;;;;;;;44586:1475;;41259:20:::1;40653:1:::0;41779:7;:22;41596:213;41259:20:::1;44403:1658:::0;;;;:::o;36026:287::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;36129:13:::1;36124:182;36144:32:::0;;::::1;36124:182;;;36202:18;36223:17;;36241:5;36223:24;;;;;;;:::i;:::-;;;;;;;36202:45;;36264:30;36283:10;36264:18;:30::i;:::-;-1:-1:-1::0;36178:7:0;::::1;::::0;::::1;:::i;:::-;;;;36124:182;;;;36026:287:::0;;:::o;30919:80::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;9062:16:::1;:14;:16::i;:::-;30981:10:::2;:8;:10::i;:::-;30919:80::o:0;46211:434::-;46290:7;;46337:36;46351:21;;46337:13;:36::i;:::-;46310:63;-1:-1:-1;46386:40:0;46429:145;46462:23;;;;;;;;:::i;:::-;46500:12;;;46510:1;46500:12;;;;;;;;46527:20;;;;;;:::i;:::-;46429:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;46386:188;;46594:43;46606:17;46625:11;46594;:43::i;:::-;46587:50;46211:434;-1:-1:-1;;;;46211:434:0:o;28573:219::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;28732:52:::1;28751:13;28766:3;28771:12;28732:18;:52::i;6653:103::-:0;5891:13;:11;:13::i;:::-;6718:30:::1;6745:1;6718:18;:30::i;28053:168::-:0;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;28146:67:::1;28165:13;28180:3;28185:27;28198:13;28185:12;:27::i;:::-;28146:18;:67::i;:::-;28053:168:::0;;:::o;30781:79::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;8803:19:::1;:17;:19::i;:::-;30844:8:::2;:6;:8::i;25605:175::-:0;5891:13;:11;:13::i;:::-;25684:42:::1;-1:-1:-1::0;;;;;;;;;;;25709:8:0::1;25719:6;25684:14;:42::i;:::-;25744:28;::::0;;::::1;;::::0;-1:-1:-1;;;;;25744:28:0;::::1;::::0;::::1;::::0;;;::::1;25605:175:::0;;:::o;25849:163::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;25912:43:::1;-1:-1:-1::0;;;;;;;;;;;25937:10:0::1;25949:5;25912:14;:43::i;:::-;25973:31;::::0;25993:10:::1;::::0;25973:31:::1;::::0;;;::::1;25849:163::o:0;35306:117::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;35385:30:::1;35398:16;35385:12;:30::i;:::-;35306:117:::0;:::o;26408:123::-;26458:16;26494:29;-1:-1:-1;;;;;;;;;;;26494:19:0;:29::i;35563:319::-;25324:21;25334:10;25324:9;:21::i;:::-;25319:80;;25369:18;;-1:-1:-1;;;25369:18:0;;;;;;;;;;;25319:80;35663:13:::1;35658:217;35678:28:::0;;::::1;35658:217;;;35732:32;35767:13;;35781:5;35767:20;;;;;;;:::i;:::-;;;;;;35732:55;;35804:59;35820:11;:22;;;35844:11;:18;;;;;;;;;;:::i;:::-;35804:15;:59::i;:::-;-1:-1:-1::0;35708:7:0;::::1;::::0;::::1;:::i;:::-;;;;35658:217;;29093:306:::0;29167:7;-1:-1:-1;;;;;;;29191:51:0;;;29187:205;;-1:-1:-1;29266:21:0;;29093:306;-1:-1:-1;29093:306:0:o;29187:205::-;29327:53;;-1:-1:-1;;;29327:53:0;;29374:4;29327:53;;;3147:51:1;-1:-1:-1;;;;;29327:38:0;;;;;3120:18:1;;29327:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29187:205::-;29093:306;;;:::o;6911:201::-;5891:13;:11;:13::i;:::-;-1:-1:-1;;;;;7000:22:0;::::1;6992:73;;;::::0;-1:-1:-1;;;6992:73:0;;9271:2:1;6992:73:0::1;::::0;::::1;9253:21:1::0;9310:2;9290:18;;;9283:30;9349:34;9329:18;;;9322:62;-1:-1:-1;;;9400:18:1;;;9393:36;9446:19;;6992:73:0::1;;;;;;;;;7076:28;7095:8;7076:18;:28::i;26658:123::-:0;-1:-1:-1;;;;;23520:40:0;;26716:4;23520:40;;;:30;;:40;:30;:40;;:46;;;26740:33;23414:160;9357:108;9245:4;9269:7;;;9427:9;9419:38;;;;-1:-1:-1;;;9419:38:0;;9678:2:1;9419:38:0;;;9660:21:1;9717:2;9697:18;;;9690:30;-1:-1:-1;;;9736:18:1;;;9729:46;9792:18;;9419:38:0;9476:340:1;41295:293:0;40697:1;41429:7;;:19;41421:63;;;;-1:-1:-1;;;41421:63:0;;10023:2:1;41421:63:0;;;10005:21:1;10062:2;10042:18;;;10035:30;10101:33;10081:18;;;10074:61;10152:18;;41421:63:0;9821:355:1;41421:63:0;40697:1;41562:7;:18;41295:293::o;37559:248::-;37631:18;37676:31;;;:21;:31;;;;;;-1:-1:-1;;;;;37676:31:0;;37724:16;;;37720:80;;37764:24;;-1:-1:-1;;;37764:24:0;;;;;;;;;;;13984:451;14214:54;;;-1:-1:-1;;;;;10439:15:1;;;14214:54:0;;;10421:34:1;10491:15;;;10471:18;;;10464:43;10523:18;;;;10516:34;;;14214:54:0;;;;;;;;;;10356:18:1;;;;14214:54:0;;;;;;;-1:-1:-1;;;;;14214:54:0;-1:-1:-1;;;14214:54:0;;;14192:83;;-1:-1:-1;;;;14192:11:0;;;;:83;;14214:54;14192:83;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14156:119;;;;14284:14;14301:7;:57;;;;-1:-1:-1;14313:11:0;;:16;;:44;;;14344:4;14333:24;;;;;;;;;;;;:::i;:::-;14284:74;;14372:9;14367:65;;14401:23;;-1:-1:-1;;;14401:23:0;;;;;;;;;;;14367:65;14070:365;;;13984:451;;;;:::o;12714:406::-;12911:47;;;-1:-1:-1;;;;;11550:32:1;;;12911:47:0;;;11532:51:1;11599:18;;;;11592:34;;;12911:47:0;;;;;;;;;;11505:18:1;;;;12911:47:0;;;;;;;-1:-1:-1;;;;;12911:47:0;-1:-1:-1;;;12911:47:0;;;12889:76;;-1:-1:-1;;;;12889:11:0;;;;:76;;12911:47;12889:76;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12853:112;;;;12974:14;12991:7;:57;;;;-1:-1:-1;13003:11:0;;:16;;:44;;;13034:4;13023:24;;;;;;;;;;;;:::i;:::-;12974:74;;13062:9;13057:60;;13091:18;;-1:-1:-1;;;13091:18:0;;;;;;;;;;;13057:60;12780:340;;;12714:406;;;:::o;38073:733::-;38336:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38336:28:0;38397:401;;;;;;;;;-1:-1:-1;;;;;3165:32:1;;38448:28:0;;;3147:51:1;38397:401:0;3120:18:1;;;38448:28:0;;;;;;;;;;;;38397:401;;;;38533:5;38397:401;;;;38571:13;38397:401;;;;38764:1;-1:-1:-1;;;;;38397:401:0;;;;;38614:113;38656:52;;;;;;;;38690:15;38656:52;;;1644:56;;;14641:13:1;;1644:56:0;;;;14623:32:1;;;;1644:56:0;;;;;;;;;;14596:18:1;;;;1644:56:0;;;;;;;-1:-1:-1;;;;;1644:56:0;-1:-1:-1;;;1644:56:0;;;;1534:172;38614:113;38397:401;;38377:421;38073:733;-1:-1:-1;;;;;38073:733:0:o;36321:469::-;36494:21;36544:14;36532:9;:26;36528:82;;;36582:16;;-1:-1:-1;;;36582:16:0;;;;;;;;;;;36528:82;36656:8;;36642:140;;-1:-1:-1;;;36642:140:0;;-1:-1:-1;;;;;36656:8:0;;;;36642:32;;36683:14;;36642:140;;36718:18;;36755:12;;36642:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37259:292::-;37336:13;37352:34;;;:21;:34;;;;;;;;;;-1:-1:-1;;37399:41:0;;;;;-1:-1:-1;;;;;37352:34:0;37458:29;;;:21;:29;;;;;;37451:36;;;37505:38;37352:34;;;;37374:11;;37505:38;;;37325:226;37259:292;:::o;9542:108::-;9245:4;9269:7;;;9601:41;;;;-1:-1:-1;;;9601:41:0;;13909:2:1;9601:41:0;;;13891:21:1;13948:2;13928:18;;;13921:30;-1:-1:-1;;;13967:18:1;;;13960:50;14027:18;;9601:41:0;13707:344:1;10053:120:0;9062:16;:14;:16::i;:::-;10122:5:::1;10112:15:::0;;-1:-1:-1;;10112:15:0::1;::::0;;10143:22:::1;4581:10:::0;10152:12:::1;10143:22;::::0;-1:-1:-1;;;;;3165:32:1;;;3147:51;;3135:2;3120:18;10143:22:0::1;;;;;;;10053:120::o:0;37815:250::-;38007:8;;37993:64;;-1:-1:-1;;;37993:64:0;;37962:11;;-1:-1:-1;;;;;38007:8:0;;37993:30;;:64;;38024:18;;38044:12;;37993:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37986:71;37815:250;-1:-1:-1;;;37815:250:0:o;29930:495::-;-1:-1:-1;;;;;;;30184:51:0;;;30180:238;;30271:37;30290:3;30295:12;30271:18;:37::i;30180:238::-;30360:46;30373:13;30388:3;30393:12;30360;:46::i;6170:132::-;6051:7;6078:6;-1:-1:-1;;;;;6078:6:0;;;;;4581:10;6234:23;6226:68;;;;-1:-1:-1;;;6226:68:0;;14258:2:1;6226:68:0;;;14240:21:1;;;14277:18;;;14270:30;14336:34;14316:18;;;14309:62;14388:18;;6226:68:0;14056:356:1;7272:191:0;7346:16;7365:6;;-1:-1:-1;;;;;7382:17:0;;;7365:6;7382:17;;;-1:-1:-1;;;;;;7382:17:0;;;;;7415:40;;7365:6;;;;;;;7382:17;;7365:6;;7415:40;;;7335:128;7272:191;:::o;9794:118::-;8803:19;:17;:19::i;:::-;9854:7:::1;:14:::0;;-1:-1:-1;;9854:14:0::1;9864:4;9854:14;::::0;;9884:20:::1;9891:12;4581:10:::0;;4501:98;23071:335;23221:25;;;;:15;:25;;;;;;;;23261:20;:30;;;;;;23183:215;;23221:25;23306:8;23329:6;11594:3;23183:23;:215::i;:::-;;23071:335;;;:::o;36798:194::-;36885:26;36901:9;36885:15;:26::i;:::-;36924:8;:20;;-1:-1:-1;;;;;;36924:20:0;-1:-1:-1;;;;;36924:20:0;;;;;;;;36962:22;;;;-1:-1:-1;;36962:22:0;36798:194;:::o;23724:139::-;23830:25;;;;:15;:25;;;;;;;;;23823:32;;;;;;;;;;;;;;;;;23794:16;;23823:32;;;23830:25;23823:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23823:32:0;;;;;;;;;;;;;;;;;;;;;;;23724:139;;;:::o;37000:251::-;37090:34;;;;:21;:34;;;;;;;;:44;;-1:-1:-1;;37090:44:0;-1:-1:-1;;;;;37090:44:0;;;;;;;;37145:30;;;:21;:30;;;;;;:44;;;37207:36;37090:44;;:34;;37207:36;;37090:34;37207:36;37000:251;;:::o;14619:199::-;14728:12;;;14684;14728;;;;;;;;;-1:-1:-1;;;;;14702:8:0;;;14719:6;;14702:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14683:58;;;14755:7;14750:65;;14782:25;;-1:-1:-1;;;14782:25:0;;;;;;;;;;;13319:409;13518:47;;;-1:-1:-1;;;;;11550:32:1;;;13518:47:0;;;11532:51:1;11599:18;;;;11592:34;;;13518:47:0;;;;;;;;;;11505:18:1;;;;13518:47:0;;;;;;;-1:-1:-1;;;;;13518:47:0;-1:-1:-1;;;13518:47:0;;;13496:76;;-1:-1:-1;;;;13496:11:0;;;;:76;;13518:47;13496:76;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13460:112;;;;13581:14;13598:7;:57;;;;-1:-1:-1;13610:11:0;;:16;;:44;;;13641:4;13630:24;;;;;;;;;;;;:::i;:::-;13581:74;;13669:9;13664:61;;13698:19;;-1:-1:-1;;;13698:19:0;;;;;;;;;;;22101:383;22297:14;22336:5;:144;;22431:49;22455:5;22462:9;22473:6;22431:23;:49::i;:::-;22336:144;;;22357:58;22378:5;22385:9;22396:6;22404:10;22357:20;:58::i;:::-;22320:160;22101:383;-1:-1:-1;;;;;;22101:383:0:o;10762:144::-;-1:-1:-1;;;;;10660:20:0;;;10817:86;;10862:33;;-1:-1:-1;;;10862:33:0;;-1:-1:-1;;;;;3165:32:1;;10862:33:0;;;3147:51:1;3120:18;;10862:33:0;3001:203:1;20991:650:0;-1:-1:-1;;;;;21202:17:0;;21145:14;21202:17;;;;;;;;;;21240:15;;;;;21264:374;;;;21310:15;;;;;21356:12;;21310:15;;21290:17;;21356:16;;21310:15;21356:16;:::i;:::-;21336:36;;21402:9;21389;:22;21385:187;;21428:17;21448:5;21454:9;21448:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21448:16:0;21428:36;;21498:9;21479:5;21485:9;21479:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;-1:-1:-1;;;;;;21479:28:0;-1:-1:-1;;;;;21479:28:0;;;;;;21522:20;;;;;;;;;;;;;-1:-1:-1;21522:26:0;:38;;;21385:187;21584:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;21584:11:0;;;;;-1:-1:-1;;;;;;21584:11:0;;;;;;;;;-1:-1:-1;;;;;21613:17:0;;;;;;;;;;21606:24;;-1:-1:-1;;21606:24:0;;;21584:11;21606:24;;-1:-1:-1;;21264:374:0;21161:480;20991:650;;;;;:::o;20226:461::-;-1:-1:-1;;;;;20438:17:0;;20402:14;20438:17;;;;;;;;;;:23;;;20437:24;20470:214;;;;20500:12;;:26;-1:-1:-1;20496:86:0;;20550:20;;-1:-1:-1;;;20550:20:0;;;;;;;;;;;20496:86;20614:33;;;;;;;;20628:4;20614:33;;;20634:12;;20614:33;;;;;;;-1:-1:-1;;;;;20594:17:0;;;;-1:-1:-1;20594:17:0;;;;;;;;;:53;;;;-1:-1:-1;;20594:53:0;;;;;;;;;;;;;;;20658:18;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20658:18:0;;;;;;20226:461;;-1:-1:-1;20226:461:0:o;196:165:1:-;266:5;311:2;302:6;297:3;293:16;289:25;286:45;;;327:1;324;317:12;286:45;-1:-1:-1;349:6:1;196:165;-1:-1:-1;196:165:1:o;366:444::-;471:6;479;532:2;520:9;511:7;507:23;503:32;500:52;;;548:1;545;538:12;500:52;588:9;575:23;-1:-1:-1;;;;;613:6:1;610:30;607:50;;;653:1;650;643:12;607:50;676:77;745:7;736:6;725:9;721:22;676:77;:::i;:::-;666:87;800:2;785:18;;;;772:32;;-1:-1:-1;;;;366:444:1:o;997:615::-;1083:6;1091;1144:2;1132:9;1123:7;1119:23;1115:32;1112:52;;;1160:1;1157;1150:12;1112:52;1200:9;1187:23;-1:-1:-1;;;;;1270:2:1;1262:6;1259:14;1256:34;;;1286:1;1283;1276:12;1256:34;1324:6;1313:9;1309:22;1299:32;;1369:7;1362:4;1358:2;1354:13;1350:27;1340:55;;1391:1;1388;1381:12;1340:55;1431:2;1418:16;1457:2;1449:6;1446:14;1443:34;;;1473:1;1470;1463:12;1443:34;1526:7;1521:2;1511:6;1508:1;1504:14;1500:2;1496:23;1492:32;1489:45;1486:65;;;1547:1;1544;1537:12;1486:65;1578:2;1570:11;;;;;1600:6;;-1:-1:-1;997:615:1;;-1:-1:-1;;;;997:615:1:o;1617:173::-;1685:20;;-1:-1:-1;;;;;1734:31:1;;1724:42;;1714:70;;1780:1;1777;1770:12;1795:186;1854:6;1907:2;1895:9;1886:7;1882:23;1878:32;1875:52;;;1923:1;1920;1913:12;1875:52;1946:29;1965:9;1946:29;:::i;2178:376::-;2274:6;2327:2;2315:9;2306:7;2302:23;2298:32;2295:52;;;2343:1;2340;2333:12;2295:52;2383:9;2370:23;-1:-1:-1;;;;;2408:6:1;2405:30;2402:50;;;2448:1;2445;2438:12;2402:50;2471:77;2540:7;2531:6;2520:9;2516:22;2471:77;:::i;2559:328::-;2636:6;2644;2652;2705:2;2693:9;2684:7;2680:23;2676:32;2673:52;;;2721:1;2718;2711:12;2673:52;2744:29;2763:9;2744:29;:::i;:::-;2734:39;;2792:38;2826:2;2815:9;2811:18;2792:38;:::i;:::-;2782:48;;2877:2;2866:9;2862:18;2849:32;2839:42;;2559:328;;;;;:::o;3209:260::-;3277:6;3285;3338:2;3326:9;3317:7;3313:23;3309:32;3306:52;;;3354:1;3351;3344:12;3306:52;3377:29;3396:9;3377:29;:::i;:::-;3367:39;;3425:38;3459:2;3448:9;3444:18;3425:38;:::i;:::-;3415:48;;3209:260;;;;;:::o;3474:118::-;3560:5;3553:13;3546:21;3539:5;3536:32;3526:60;;3582:1;3579;3572:12;3597:315;3662:6;3670;3723:2;3711:9;3702:7;3698:23;3694:32;3691:52;;;3739:1;3736;3729:12;3691:52;3762:29;3781:9;3762:29;:::i;:::-;3752:39;;3841:2;3830:9;3826:18;3813:32;3854:28;3876:5;3854:28;:::i;:::-;3901:5;3891:15;;;3597:315;;;;;:::o;3917:658::-;4088:2;4140:21;;;4210:13;;4113:18;;;4232:22;;;4059:4;;4088:2;4311:15;;;;4285:2;4270:18;;;4059:4;4354:195;4368:6;4365:1;4362:13;4354:195;;;4433:13;;-1:-1:-1;;;;;4429:39:1;4417:52;;4524:15;;;;4489:12;;;;4465:1;4383:9;4354:195;;;-1:-1:-1;4566:3:1;;3917:658;-1:-1:-1;;;;;;3917:658:1:o;4580:646::-;4697:6;4705;4758:2;4746:9;4737:7;4733:23;4729:32;4726:52;;;4774:1;4771;4764:12;4726:52;4814:9;4801:23;-1:-1:-1;;;;;4884:2:1;4876:6;4873:14;4870:34;;;4900:1;4897;4890:12;4870:34;4938:6;4927:9;4923:22;4913:32;;4983:7;4976:4;4972:2;4968:13;4964:27;4954:55;;5005:1;5002;4995:12;4954:55;5045:2;5032:16;5071:2;5063:6;5060:14;5057:34;;;5087:1;5084;5077:12;5057:34;5140:7;5135:2;5125:6;5122:1;5118:14;5114:2;5110:23;5106:32;5103:45;5100:65;;;5161:1;5158;5151:12;5231:284;5289:6;5342:2;5330:9;5321:7;5317:23;5313:32;5310:52;;;5358:1;5355;5348:12;5310:52;5397:9;5384:23;-1:-1:-1;;;;;5440:5:1;5436:30;5429:5;5426:41;5416:69;;5481:1;5478;5471:12;5520:180;5579:6;5632:2;5620:9;5611:7;5607:23;5603:32;5600:52;;;5648:1;5645;5638:12;5600:52;-1:-1:-1;5671:23:1;;5520:180;-1:-1:-1;5520:180:1:o;5910:576::-;6034:4;6040:6;6100:11;6087:25;6194:2;6190:7;6179:8;6163:14;6159:29;6155:43;6135:18;6131:68;6121:96;;6213:1;6210;6203:12;6121:96;6240:33;;6292:20;;;-1:-1:-1;;;;;;6324:30:1;;6321:50;;;6367:1;6364;6357:12;6321:50;6400:4;6388:17;;-1:-1:-1;6451:1:1;6447:14;;;6431;6427:35;6417:46;;6414:66;;;6476:1;6473;6466:12;6414:66;5910:576;;;;;:::o;6491:127::-;6552:10;6547:3;6543:20;6540:1;6533:31;6583:4;6580:1;6573:15;6607:4;6604:1;6597:15;6623:127;6684:10;6679:3;6675:20;6672:1;6665:31;6715:4;6712:1;6705:15;6739:4;6736:1;6729:15;6755:135;6794:3;6815:17;;;6812:43;;6835:18;;:::i;:::-;-1:-1:-1;6882:1:1;6871:13;;6755:135::o;7027:611::-;7115:6;7168:2;7156:9;7147:7;7143:23;7139:32;7136:52;;;7184:1;7181;7174:12;7136:52;7217:2;7211:9;7259:2;7251:6;7247:15;7328:6;7316:10;7313:22;-1:-1:-1;;;;;7280:10:1;7277:34;7274:62;7271:185;;;7378:10;7373:3;7369:20;7366:1;7359:31;7413:4;7410:1;7403:15;7441:4;7438:1;7431:15;7271:185;7472:2;7465:22;7511:29;7530:9;7511:29;:::i;:::-;7503:6;7496:45;7602:2;7591:9;7587:18;7574:32;7569:2;7561:6;7557:15;7550:57;7626:6;7616:16;;;7027:611;;;;:::o;7643:128::-;7710:9;;;7731:11;;;7728:37;;;7745:18;;:::i;7776:1099::-;8161:25;;;-1:-1:-1;;;;;8281:15:1;;;8205:2;8261:18;;;8254:43;;;;8148:3;8316:2;8334:18;;;8327:31;;;8133:19;;;8393:22;;;8100:4;;8473:6;;8205:2;8446:3;8431:19;;8100:4;8507:255;8521:6;8518:1;8515:13;8507:255;;;8614:2;8586:26;8605:6;8586:26;:::i;:::-;8582:35;8570:48;;8665:15;;;8652:29;8638:12;;;8631:51;8737:15;;;;8702:12;;;;8543:1;8536:9;8507:255;;;-1:-1:-1;8813:2:1;8798:18;;8791:34;;;;-1:-1:-1;;;;8856:3:1;8841:19;;;8834:35;;;;-1:-1:-1;8779:3:1;7776:1099;-1:-1:-1;;;;7776:1099:1:o;8880:184::-;8950:6;9003:2;8991:9;8982:7;8978:23;8974:32;8971:52;;;9019:1;9016;9009:12;8971:52;-1:-1:-1;9042:16:1;;8880:184;-1:-1:-1;8880:184:1:o;10561:250::-;10646:1;10656:113;10670:6;10667:1;10664:13;10656:113;;;10746:11;;;10740:18;10727:11;;;10720:39;10692:2;10685:10;10656:113;;;-1:-1:-1;;10803:1:1;10785:16;;10778:27;10561:250::o;10816:287::-;10945:3;10983:6;10977:13;10999:66;11058:6;11053:3;11046:4;11038:6;11034:17;10999:66;:::i;:::-;11081:16;;;;;10816:287;-1:-1:-1;;10816:287:1:o;11108:245::-;11175:6;11228:2;11216:9;11207:7;11203:23;11199:32;11196:52;;;11244:1;11241;11234:12;11196:52;11276:9;11270:16;11295:28;11317:5;11295:28;:::i;11637:270::-;11678:3;11716:5;11710:12;11743:6;11738:3;11731:19;11759:76;11828:6;11821:4;11816:3;11812:14;11805:4;11798:5;11794:16;11759:76;:::i;:::-;11889:2;11868:15;-1:-1:-1;;11864:29:1;11855:39;;;;11896:4;11851:50;;11637:270;-1:-1:-1;;11637:270:1:o;11912:1601::-;12090:4;12119:2;-1:-1:-1;;;;;12152:6:1;12148:31;12137:9;12130:50;12199:2;12237;12232;12221:9;12217:18;12210:30;12275:6;12269:13;12318:4;12313:2;12302:9;12298:18;12291:32;12346:51;12392:3;12381:9;12377:19;12363:12;12346:51;:::i;:::-;12332:65;;12446:2;12438:6;12434:15;12428:22;12473:2;12469:7;12540:2;12528:9;12520:6;12516:22;12512:31;12507:2;12496:9;12492:18;12485:59;12567:40;12600:6;12584:14;12567:40;:::i;:::-;12644:15;;;12638:22;12701;;;12697:31;;12691:3;12676:19;;12669:60;12778:21;;12808:22;;;12884:23;;;;-1:-1:-1;12925:1:1;;-1:-1:-1;12846:15:1;;;;12935:280;12949:6;12946:1;12943:13;12935:280;;;13008:13;;13050:9;;-1:-1:-1;;;;;13046:35:1;13034:48;;13122:11;;13116:18;13102:12;;;13095:40;13190:15;;;;13078:1;12964:9;;;;;13155:12;;;;12935:280;;;-1:-1:-1;13264:2:1;13252:15;;13246:22;-1:-1:-1;;;;;2958:31:1;13327:4;13312:20;;2946:44;13382:3;13370:16;;13364:23;13428:19;;;13424:28;;13418:3;13403:19;;13396:57;13364:23;-1:-1:-1;13470:37:1;13432:3;13364:23;13470:37;:::i;:::-;13462:45;11912:1601;-1:-1:-1;;;;;;;;;;11912:1601:1:o;14666:127::-;14727:10;14722:3;14718:20;14715:1;14708:31;14758:4;14755:1;14748:15;14782:4;14779:1;14772:15
Swarm Source
ipfs://8b9addf1ae51c37ec2d5cfe70f70e6259c7a77c47915b29a9b300d6540a90765
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.