More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 185 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 20421840 | 199 days ago | IN | 0 ETH | 0.00039142 | ||||
Withdraw XLP Tok... | 13630897 | 1185 days ago | IN | 0 ETH | 0.0128849 | ||||
Withdraw XLP Tok... | 13386073 | 1224 days ago | IN | 0 ETH | 0.00843317 | ||||
Withdraw XLP Tok... | 13359370 | 1228 days ago | IN | 0 ETH | 0.01075614 | ||||
Withdraw XLP Tok... | 13101869 | 1268 days ago | IN | 0 ETH | 0.01443144 | ||||
Withdraw XLP Tok... | 13081587 | 1271 days ago | IN | 0 ETH | 0.00260602 | ||||
Withdraw XLP Tok... | 13052050 | 1276 days ago | IN | 0 ETH | 0.00383035 | ||||
Withdraw XLP Tok... | 13045467 | 1277 days ago | IN | 0 ETH | 0.00550915 | ||||
Withdraw XLP Tok... | 13034031 | 1278 days ago | IN | 0 ETH | 0.00463642 | ||||
Withdraw XLP Tok... | 13031293 | 1279 days ago | IN | 0 ETH | 0.0038277 | ||||
Withdraw XLP Tok... | 13030900 | 1279 days ago | IN | 0 ETH | 0.00562736 | ||||
Withdraw XLP Tok... | 13030589 | 1279 days ago | IN | 0 ETH | 0.0032143 | ||||
Withdraw XLP Tok... | 13028339 | 1279 days ago | IN | 0 ETH | 0.0025132 | ||||
Withdraw XLP Tok... | 13024801 | 1280 days ago | IN | 0 ETH | 0.00447314 | ||||
Withdraw XLP Tok... | 13023566 | 1280 days ago | IN | 0 ETH | 0.00363023 | ||||
Withdraw XLP Tok... | 13023565 | 1280 days ago | IN | 0 ETH | 0.00496403 | ||||
Withdraw XLP Tok... | 13023050 | 1280 days ago | IN | 0 ETH | 0.00280109 | ||||
Withdraw XLP Tok... | 13019347 | 1281 days ago | IN | 0 ETH | 0.00842568 | ||||
Withdraw XLP Tok... | 13019240 | 1281 days ago | IN | 0 ETH | 0.00757348 | ||||
Withdraw XLP Tok... | 13018753 | 1281 days ago | IN | 0 ETH | 0.00348384 | ||||
Withdraw XLP Tok... | 13018455 | 1281 days ago | IN | 0 ETH | 0.00456106 | ||||
Withdraw XLP Tok... | 13018390 | 1281 days ago | IN | 0 ETH | 0.00526915 | ||||
Withdraw XLP Tok... | 13018380 | 1281 days ago | IN | 0 ETH | 0.00526915 | ||||
Withdraw XLP Tok... | 12946040 | 1292 days ago | IN | 0 ETH | 0.00225233 | ||||
Withdraw XLP Tok... | 12944363 | 1292 days ago | IN | 0 ETH | 0.00165437 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12914098 | 1297 days ago | 1.30084296 ETH | ||||
12913703 | 1297 days ago | 22.25251813 ETH | ||||
12913213 | 1297 days ago | 0.18 ETH | ||||
12912888 | 1297 days ago | 0.96948343 ETH | ||||
12912350 | 1297 days ago | 0.0155282 ETH | ||||
12910322 | 1298 days ago | 0.15 ETH | ||||
12909885 | 1298 days ago | 0.0155282 ETH | ||||
12909545 | 1298 days ago | 0.59698993 ETH | ||||
12909534 | 1298 days ago | 0.01522166 ETH | ||||
12908006 | 1298 days ago | 4.02538919 ETH | ||||
12907670 | 1298 days ago | 0.07153395 ETH | ||||
12907604 | 1298 days ago | 0.015 ETH | ||||
12907594 | 1298 days ago | 0.015 ETH | ||||
12906222 | 1298 days ago | 1.34179639 ETH | ||||
12906097 | 1298 days ago | 0.11 ETH | ||||
12906077 | 1298 days ago | 22.06438668 ETH | ||||
12905742 | 1298 days ago | 0.38576331 ETH | ||||
12904302 | 1299 days ago | 0.16478593 ETH | ||||
12904272 | 1299 days ago | 0.08729813 ETH | ||||
12903390 | 1299 days ago | 0.73133113 ETH | ||||
12903063 | 1299 days ago | 1.01491757 ETH | ||||
12901864 | 1299 days ago | 0.11613699 ETH | ||||
12901671 | 1299 days ago | 0.00308809 ETH | ||||
12901425 | 1299 days ago | 0.2019804 ETH | ||||
12900973 | 1299 days ago | 0.09290959 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NFTXStakingZap
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-18 */ // Sources flattened with hardhat v2.4.3 https://hardhat.org // File contracts/solidity/interface/INFTXEligibility.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface INFTXEligibility { // Read functions. function name() external pure returns (string memory); function finalized() external view returns (bool); function targetAsset() external pure returns (address); function checkAllEligible(uint256[] calldata tokenIds) external view returns (bool); function checkEligible(uint256[] calldata tokenIds) external view returns (bool[] memory); function checkAllIneligible(uint256[] calldata tokenIds) external view returns (bool); function checkIsEligible(uint256 tokenId) external view returns (bool); // Write functions. function __NFTXEligibility_init_bytes(bytes calldata configData) external; function beforeMintHook(uint256[] calldata tokenIds) external; function afterMintHook(uint256[] calldata tokenIds) external; function beforeRedeemHook(uint256[] calldata tokenIds) external; function afterRedeemHook(uint256[] calldata tokenIds) external; } // File contracts/solidity/proxy/IBeacon.sol pragma solidity ^0.8.0; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeacon { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function childImplementation() external view returns (address); function upgradeChildTo(address newImplementation) external; } // File contracts/solidity/interface/INFTXVaultFactory.sol pragma solidity ^0.8.0; interface INFTXVaultFactory is IBeacon { // Read functions. function numVaults() external view returns (uint256); function zapContract() external view returns (address); function feeDistributor() external view returns (address); function eligibilityManager() external view returns (address); function vault(uint256 vaultId) external view returns (address); function vaultsForAsset(address asset) external view returns (address[] memory); function isLocked(uint256 id) external view returns (bool); function excludedFromFees(address addr) external view returns (bool); event NewFeeDistributor(address oldDistributor, address newDistributor); event NewZapContract(address oldZap, address newZap); event FeeExclusion(address feeExcluded, bool excluded); event NewEligibilityManager(address oldEligManager, address newEligManager); event NewVault(uint256 indexed vaultId, address vaultAddress, address assetAddress); // Write functions. function __NFTXVaultFactory_init(address _vaultImpl, address _feeDistributor) external; function createVault( string calldata name, string calldata symbol, address _assetAddress, bool is1155, bool allowAllItems ) external returns (uint256); function setFeeDistributor(address _feeDistributor) external; function setEligibilityManager(address _eligibilityManager) external; function setZapContract(address _zapContract) external; function setFeeExclusion(address _excludedAddr, bool excluded) external; } // File contracts/solidity/interface/INFTXVault.sol pragma solidity ^0.8.0; interface INFTXVault { function manager() external returns (address); function assetAddress() external returns (address); function vaultFactory() external returns (INFTXVaultFactory); function eligibilityStorage() external returns (INFTXEligibility); function is1155() external returns (bool); function allowAllItems() external returns (bool); function enableMint() external returns (bool); function enableRandomRedeem() external returns (bool); function enableTargetRedeem() external returns (bool); function vaultId() external returns (uint256); function nftIdAt(uint256 holdingsIndex) external view returns (uint256); function allHoldings() external view returns (uint256[] memory); function totalHoldings() external view returns (uint256); function mintFee() external returns (uint256); function randomRedeemFee() external returns (uint256); function targetRedeemFee() external returns (uint256); event VaultInit( uint256 indexed vaultId, address assetAddress, bool is1155, bool allowAllItems ); event ManagerSet(address manager); event EligibilityDeployed(uint256 moduleIndex, address eligibilityAddr); // event CustomEligibilityDeployed(address eligibilityAddr); event EnableMintUpdated(bool enabled); event EnableRandomRedeemUpdated(bool enabled); event EnableTargetRedeemUpdated(bool enabled); event MintFeeUpdated(uint256 mintFee); event RandomRedeemFeeUpdated(uint256 randomRedeemFee); event TargetRedeemFeeUpdated(uint256 targetRedeemFee); event Minted(uint256[] nftIds, uint256[] amounts, address to); event Redeemed(uint256[] nftIds, uint256[] specificIds, address to); event Swapped( uint256[] nftIds, uint256[] amounts, uint256[] specificIds, uint256[] redeemedIds, address to ); function __NFTXVault_init( string calldata _name, string calldata _symbol, address _assetAddress, bool _is1155, bool _allowAllItems ) external; function finalizeVault() external; function setVaultMetadata( string memory name_, string memory symbol_ ) external; function setVaultFeatures( bool _enableMint, bool _enableRandomRedeem, bool _enableTargetRedeem ) external; function setFees( uint256 _mintFee, uint256 _randomRedeemFee, uint256 _targetRedeemFee ) external; // This function allows for an easy setup of any eligibility module contract from the EligibilityManager. // It takes in ABI encoded parameters for the desired module. This is to make sure they can all follow // a similar interface. function deployEligibilityStorage( uint256 moduleIndex, bytes calldata initData ) external returns (address); // The manager has control over options like fees and features function setManager(address _manager) external; function mint( uint256[] calldata tokenIds, uint256[] calldata amounts /* ignored for ERC721 vaults */ ) external returns (uint256); function mintTo( uint256[] calldata tokenIds, uint256[] calldata amounts, /* ignored for ERC721 vaults */ address to ) external returns (uint256); function redeem(uint256 amount, uint256[] calldata specificIds) external returns (uint256[] calldata); function redeemTo( uint256 amount, uint256[] calldata specificIds, address to ) external returns (uint256[] calldata); function swap( uint256[] calldata tokenIds, uint256[] calldata amounts, /* ignored for ERC721 vaults */ uint256[] calldata specificIds ) external returns (uint256[] calldata); function swapTo( uint256[] calldata tokenIds, uint256[] calldata amounts, /* ignored for ERC721 vaults */ uint256[] calldata specificIds, address to ) external returns (uint256[] calldata); function allValidNFTs(uint256[] calldata tokenIds) external view returns (bool); } // File contracts/solidity/interface/INFTXLPStaking.sol pragma solidity ^0.8.0; interface INFTXLPStaking { function nftxVaultFactory() external view returns (address); function rewardDistTokenImpl() external view returns (address); function stakingTokenProvider() external view returns (address); function vaultToken(address _stakingToken) external view returns (address); function stakingToken(address _vaultToken) external view returns (address); function rewardDistributionToken(uint256 vaultId) external view returns (address); function rewardDistributionTokenAddr(address stakingToken, address rewardToken) external view returns (address); // Write functions. function __NFTXLPStaking__init(address _stakingTokenProvider) external; function setNFTXVaultFactory(address newFactory) external; function setStakingTokenProvider(address newProvider) external; function addPoolForVault(uint256 vaultId) external; function updatePoolForVault(uint256 vaultId) external; function updatePoolForVaults(uint256[] calldata vaultId) external; function receiveRewards(uint256 vaultId, uint256 amount) external returns (bool); function deposit(uint256 vaultId, uint256 amount) external; function depositFor(uint256 vaultId, uint256 amount, address to) external; function exit(uint256 vaultId, uint256 amount) external; function rescue(uint256 vaultId) external; function withdraw(uint256 vaultId, uint256 amount) external; function claimRewards(uint256 vaultId) external; } // File contracts/solidity/interface/IUniswapV2Router01.sol pragma solidity ^0.8.0; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File contracts/solidity/interface/IERC165Upgradeable.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165Upgradeable { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File contracts/solidity/token/IERC721Upgradeable.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721Upgradeable is IERC165Upgradeable { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File contracts/solidity/token/IERC1155Upgradeable.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155Upgradeable is IERC165Upgradeable { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File contracts/solidity/token/IERC20Upgradeable.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/solidity/token/IERC721ReceiverUpgradeable.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721ReceiverUpgradeable { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File contracts/solidity/token/ERC721HolderUpgradeable.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721HolderUpgradeable is IERC721ReceiverUpgradeable { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File contracts/solidity/token/IERC1155ReceiverUpgradeable.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155ReceiverUpgradeable is IERC165Upgradeable { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File contracts/solidity/util/ERC165Upgradeable.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165Upgradeable is IERC165Upgradeable { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165Upgradeable).interfaceId; } } // File contracts/solidity/token/ERC1155ReceiverUpgradeable.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155ReceiverUpgradeable is ERC165Upgradeable, IERC1155ReceiverUpgradeable { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165Upgradeable) returns (bool) { return interfaceId == type(IERC1155ReceiverUpgradeable).interfaceId || super.supportsInterface(interfaceId); } } // File contracts/solidity/token/ERC1155HolderUpgradeable.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155HolderUpgradeable is ERC1155ReceiverUpgradeable { function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } // File contracts/solidity/proxy/Initializable.sol // solhint-disable-next-line compiler-version pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } // File contracts/solidity/util/ContextUpgradeable.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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File contracts/solidity/util/OwnableUpgradeable.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 OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File contracts/solidity/NFTXStakingZap.sol pragma solidity ^0.8.0; // Authors: @0xKiwi_. interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } /** * @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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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 { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(msg.sender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == msg.sender, "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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract NFTXStakingZap is Ownable, ReentrancyGuard, ERC721HolderUpgradeable, ERC1155HolderUpgradeable { IWETH public WETH; INFTXLPStaking public lpStaking; INFTXVaultFactory public immutable nftxFactory; IUniswapV2Router01 public sushiRouter; uint256 public lockTime = 48 hours; mapping(uint256 => mapping(address => uint256)) private zapLock; mapping(uint256 => mapping(address => uint256)) private lockedBalance; uint256 constant BASE = 10**18; event UserStaked(uint256 vaultId, uint256 count, uint256 lpBalance, uint256 timelockUntil, address sender); event Withdraw(uint256 vaultId, uint256 lpBalance, address sender); constructor(address _nftxFactory, address _sushiRouter) Ownable() ReentrancyGuard() { nftxFactory = INFTXVaultFactory(_nftxFactory); sushiRouter = IUniswapV2Router01(_sushiRouter); WETH = IWETH(sushiRouter.WETH()); IERC20Upgradeable(address(WETH)).approve(address(sushiRouter), type(uint256).max); } function setLpStakingAddress(address newLpStaking) external onlyOwner { lpStaking = INFTXLPStaking(newLpStaking); } function setLockTime(uint256 newLockTime) external onlyOwner { lockTime = newLockTime; } function addLiquidity721ETH( uint256 vaultId, uint256[] memory ids, uint256 minWethIn ) public payable nonReentrant returns (uint256) { WETH.deposit{value: msg.value}(); (, uint256 amountEth, uint256 liquidity) = _addLiquidity721WETH(vaultId, ids, minWethIn, msg.value); // Return extras. if (amountEth < msg.value) { WETH.withdraw(msg.value-amountEth); msg.sender.call{value: msg.value-amountEth}; } return liquidity; } function addLiquidity1155ETH( uint256 vaultId, uint256[] memory ids, uint256[] memory amounts, uint256 minEthIn ) public payable nonReentrant returns (uint256) { WETH.deposit{value: msg.value}(); // Finish this. (, uint256 amountEth, uint256 liquidity) = _addLiquidity1155WETH(vaultId, ids, amounts, minEthIn, msg.value); // Return extras. if (amountEth < msg.value) { WETH.withdraw(msg.value-amountEth); msg.sender.call{value: msg.value-amountEth}; } return liquidity; } function addLiquidity721( uint256 vaultId, uint256[] memory ids, uint256 minWethIn, uint256 wethIn ) public nonReentrant returns (uint256) { IERC20Upgradeable(address(WETH)).transferFrom(msg.sender, address(this), wethIn); (, uint256 amountEth, uint256 liquidity) = _addLiquidity721WETH(vaultId, ids, minWethIn, wethIn); // Return extras. if (amountEth < wethIn) { WETH.transfer(msg.sender, wethIn-amountEth); } return liquidity; } function addLiquidity1155( uint256 vaultId, uint256[] memory ids, uint256[] memory amounts, uint256 minWethIn, uint256 wethIn ) public nonReentrant returns (uint256) { IERC20Upgradeable(address(WETH)).transferFrom(msg.sender, address(this), wethIn); (, uint256 amountEth, uint256 liquidity) = _addLiquidity1155WETH(vaultId, ids, amounts, minWethIn, wethIn); // Return extras. if (amountEth < wethIn) { WETH.transfer(msg.sender, wethIn-amountEth); } return liquidity; } function withdrawXLPTokens(uint256 vaultId) public { uint256 lockedBal = lockedBalance[vaultId][msg.sender]; require(block.timestamp >= zapLock[vaultId][msg.sender], "NFTXZap: Locked"); require(lockedBal > 0, "NFTXZap: Nothing locked"); zapLock[vaultId][msg.sender] = 0; lockedBalance[vaultId][msg.sender] = 0; address xLPtoken = lpStaking.rewardDistributionToken(vaultId); IERC20Upgradeable(xLPtoken).transfer(msg.sender, lockedBal); emit Withdraw(vaultId, lockedBal, msg.sender); } function lockedUntil(uint256 vaultId, address who) external view returns (uint256) { return zapLock[vaultId][who]; } function lockedLPBalance(uint256 vaultId, address who) external view returns (uint256) { return lockedBalance[vaultId][who]; } function _addLiquidity721WETH( uint256 vaultId, uint256[] memory ids, uint256 minWethIn, uint256 wethIn ) internal returns (uint256, uint256, uint256) { address vault = nftxFactory.vault(vaultId); require(vault != address(0), "NFTXZap: Vault does not exist"); // Transfer tokens to zap and mint to NFTX. address assetAddress = INFTXVault(vault).assetAddress(); for (uint256 i = 0; i < ids.length; i++) { transferFromERC721(assetAddress, ids[i]); approveERC721(assetAddress, vault, ids[i]); } uint256[] memory emptyIds; uint256 count = INFTXVault(vault).mint(ids, emptyIds); uint256 balance = (count * BASE); // We should not be experiencing fees. require(balance == IERC20Upgradeable(vault).balanceOf(address(this)), "Did not receive expected balance"); return _addLiquidityAndLock(vaultId, vault, balance, minWethIn, wethIn); } function _addLiquidity1155WETH( uint256 vaultId, uint256[] memory ids, uint256[] memory amounts, uint256 minWethIn, uint256 wethIn ) internal returns (uint256, uint256, uint256) { address vault = nftxFactory.vault(vaultId); require(vault != address(0), "NFTXZap: Vault does not exist"); // Transfer tokens to zap and mint to NFTX. address assetAddress = INFTXVault(vault).assetAddress(); IERC1155Upgradeable(assetAddress).safeBatchTransferFrom(msg.sender, address(this), ids, amounts, ""); IERC1155Upgradeable(assetAddress).setApprovalForAll(vault, true); uint256 count = INFTXVault(vault).mint(ids, amounts); uint256 balance = (count * BASE); // We should not be experiencing fees. require(balance == IERC20Upgradeable(vault).balanceOf(address(this)), "Did not receive expected balance"); return _addLiquidityAndLock(vaultId, vault, balance, minWethIn, wethIn); } function _addLiquidityAndLock( uint256 vaultId, address vault, uint256 minTokenIn, uint256 minWethIn, uint256 wethIn ) internal returns (uint256, uint256, uint256) { // Provide liquidity. IERC20Upgradeable(vault).approve(address(sushiRouter), minTokenIn); (uint256 amountToken, uint256 amountEth, uint256 liquidity) = sushiRouter.addLiquidity( address(vault), sushiRouter.WETH(), minTokenIn, wethIn, minTokenIn, minWethIn, address(this), block.timestamp ); // Stake in LP rewards contract address lpToken = pairFor(vault, address(WETH)); IERC20Upgradeable(lpToken).approve(address(lpStaking), liquidity); lpStaking.depositFor(vaultId, liquidity, msg.sender); lockedBalance[vaultId][msg.sender] += liquidity; uint256 lockEndTime = block.timestamp + lockTime; zapLock[vaultId][msg.sender] = lockEndTime; if (amountToken < minTokenIn) { IERC20Upgradeable(vault).transfer(msg.sender, minTokenIn-amountToken); } emit UserStaked(vaultId, minTokenIn, liquidity, lockEndTime, msg.sender); return (amountToken, amountEth, liquidity); } function transferFromERC721(address assetAddr, uint256 tokenId) internal virtual { address kitties = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d; address punks = 0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB; bytes memory data; if (assetAddr == kitties) { // Cryptokitties. data = abi.encodeWithSignature("transferFrom(address,address,uint256)", msg.sender, address(this), tokenId); } else if (assetAddr == punks) { // CryptoPunks. // Fix here for frontrun attack. Added in v1.0.2. bytes memory punkIndexToAddress = abi.encodeWithSignature("punkIndexToAddress(uint256)", tokenId); (bool checkSuccess, bytes memory result) = address(assetAddr).staticcall(punkIndexToAddress); (address owner) = abi.decode(result, (address)); require(checkSuccess && owner == msg.sender, "Not the owner"); data = abi.encodeWithSignature("buyPunk(uint256)", tokenId); } else { // Default. data = abi.encodeWithSignature("safeTransferFrom(address,address,uint256)", msg.sender, address(this), tokenId); } (bool success, bytes memory resultData) = address(assetAddr).call(data); require(success, string(resultData)); } function approveERC721(address assetAddr, address to, uint256 tokenId) internal virtual { address kitties = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d; address punks = 0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB; bytes memory data; if (assetAddr == kitties) { // Cryptokitties. data = abi.encodeWithSignature("approve(address,uint256)", to, tokenId); } else if (assetAddr == punks) { // CryptoPunks. data = abi.encodeWithSignature("offerPunkForSaleToAddress(uint256,uint256,address)", tokenId, 0, to); } else { if (IERC721Upgradeable(assetAddr).isApprovedForAll(address(this), to)) { return; } // Default. data = abi.encodeWithSignature("setApprovalForAll(address,bool)", to, true); } (bool success, bytes memory resultData) = address(assetAddr).call(data); require(success, string(resultData)); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint160(uint256(keccak256(abi.encodePacked( hex'ff', 0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac, keccak256(abi.encodePacked(token0, token1)), hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash ))))); } // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS'); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_nftxFactory","type":"address"},{"internalType":"address","name":"_sushiRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint256","name":"vaultId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timelockUntil","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"UserStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpBalance","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"minWethIn","type":"uint256"},{"internalType":"uint256","name":"wethIn","type":"uint256"}],"name":"addLiquidity1155","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"minEthIn","type":"uint256"}],"name":"addLiquidity1155ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256","name":"minWethIn","type":"uint256"},{"internalType":"uint256","name":"wethIn","type":"uint256"}],"name":"addLiquidity721","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256","name":"minWethIn","type":"uint256"}],"name":"addLiquidity721ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"address","name":"who","type":"address"}],"name":"lockedLPBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"address","name":"who","type":"address"}],"name":"lockedUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpStaking","outputs":[{"internalType":"contract INFTXLPStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftxFactory","outputs":[{"internalType":"contract INFTXVaultFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLockTime","type":"uint256"}],"name":"setLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLpStaking","type":"address"}],"name":"setLpStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiRouter","outputs":[{"internalType":"contract IUniswapV2Router01","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"withdrawXLPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526202a3006005553480156200001857600080fd5b5060405162002e4138038062002e418339810160408190526200003b9162000221565b620000463362000190565b60018055606082901b6001600160601b031916608052600480546001600160a01b0319166001600160a01b0383169081178255604080516315ab88c960e31b81529051919263ad5c4648928282019260209290829003018186803b158015620000ae57600080fd5b505afa158015620000c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e99190620001fd565b600280546001600160a01b0319166001600160a01b039283169081179091556004805460405163095ea7b360e01b815293169083015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200014c57600080fd5b505af115801562000161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000187919062000258565b5050506200027a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001f857600080fd5b919050565b6000602082840312156200020f578081fd5b6200021a82620001e0565b9392505050565b6000806040838503121562000234578081fd5b6200023f83620001e0565b91506200024f60208401620001e0565b90509250929050565b6000602082840312156200026a578081fd5b815180151581146200021a578182fd5b60805160601c612b9a620002a76000396000818161029d0152818161106c015261145b0152612b9a6000f3fe60806040526004361061016a5760003560e01c80638da05f8f116100cb578063b57458651161007f578063f23a6e6111610059578063f23a6e6114610454578063f2fde38b14610499578063f99e7405146104b957600080fd5b8063b5745865146103ac578063bc197c81146103cc578063e0e9e64d1461041157600080fd5b80639bf1401c116100b05780639bf1401c1461034c578063ad5c46481461036c578063ae04d45d1461038c57600080fd5b80638da05f8f1461030e5780638da5cb5b1461032e57600080fd5b80631a6907cd116101225780635ee50f88116101075780635ee50f881461028b5780636d13582c146102d7578063715018a6146102f757600080fd5b80631a6907cd1461026557806353b573bf1461027857600080fd5b806310cde7861161015357806310cde786146101c8578063150b7a02146101e85780631809d2c21461024557600080fd5b806301ffc9a71461016f5780630d668087146101a4575b600080fd5b34801561017b57600080fd5b5061018f61018a366004612705565b6104fc565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506101ba60055481565b60405190815260200161019b565b3480156101d457600080fd5b506101ba6101e33660046127fe565b610565565b3480156101f457600080fd5b5061022c610203366004612614565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040516001600160e01b0319909116815260200161019b565b34801561025157600080fd5b506101ba6102603660046128c8565b610717565b6101ba61027336600461287a565b6108c2565b6101ba61028636600461278c565b610a21565b34801561029757600080fd5b506102bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019b565b3480156102e357600080fd5b506004546102bf906001600160a01b031681565b34801561030357600080fd5b5061030c610b81565b005b34801561031a57600080fd5b5061030c61032936600461252b565b610bf6565b34801561033a57600080fd5b506000546001600160a01b03166102bf565b34801561035857600080fd5b506003546102bf906001600160a01b031681565b34801561037857600080fd5b506002546102bf906001600160a01b031681565b34801561039857600080fd5b5061030c6103a736600461272d565b610c8e565b3480156103b857600080fd5b5061030c6103c736600461272d565b610cfc565b3480156103d857600080fd5b5061022c6103e736600461256a565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561041d57600080fd5b506101ba61042c36600461275d565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b34801561046057600080fd5b5061022c61046f36600461267e565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156104a557600080fd5b5061030c6104b436600461252b565b610f73565b3480156104c557600080fd5b506101ba6104d436600461275d565b60009182526006602090815260408084206001600160a01b0393909316845291905290205490565b60006001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061055f57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000600260015414156105bf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026001819055546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561061657600080fd5b505af115801561062a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064e91906126e5565b5060008061065f8888888888611064565b925092505083821015610708576002546001600160a01b031663a9059cbb336106888588612ac1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156106ce57600080fd5b505af11580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906126e5565b505b60018055979650505050505050565b60006002600154141561076c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105b6565b60026001819055546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb91906126e5565b5060008061080b87878787611453565b9250925050838210156108b4576002546001600160a01b031663a9059cbb336108348588612ac1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561087a57600080fd5b505af115801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906126e5565b505b600180559695505050505050565b6000600260015414156109175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105b6565b600260018190555460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0913491600480830192600092919082900301818588803b15801561096357600080fd5b505af1158015610977573d6000803e3d6000fd5b505050505060008061098b86868634611453565b925092505034821015610a14576002546001600160a01b0316632e1a7d4d6109b38434612ac1565b6040518263ffffffff1660e01b81526004016109d191815260200190565b600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b50339250610a11915084905034612ac1565b50505b6001805595945050505050565b600060026001541415610a765760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105b6565b600260018190555460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0913491600480830192600092919082900301818588803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b5050505050600080610aeb8787878734611064565b9250925050348210156108b4576002546001600160a01b0316632e1a7d4d610b138434612ac1565b6040518263ffffffff1660e01b8152600401610b3191815260200190565b600060405180830381600087803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b50339250610b71915084905034612ac1565b5050600180559695505050505050565b33610b946000546001600160a01b031690565b6001600160a01b031614610bea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b610bf460006117cc565b565b33610c096000546001600160a01b031690565b6001600160a01b031614610c5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b33610ca16000546001600160a01b031690565b6001600160a01b031614610cf75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b600555565b6000818152600760209081526040808320338085529083528184205485855260068452828520918552925290912054421015610d7a5760405162461bcd60e51b815260206004820152600f60248201527f4e4654585a61703a204c6f636b6564000000000000000000000000000000000060448201526064016105b6565b60008111610dca5760405162461bcd60e51b815260206004820152601760248201527f4e4654585a61703a204e6f7468696e67206c6f636b656400000000000000000060448201526064016105b6565b6000828152600660209081526040808320338085529083528184208490558584526007835281842090845290915280822082905560035490517fa8722fc6000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169063a8722fc69060240160206040518083038186803b158015610e5a57600080fd5b505afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061254e565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529091506001600160a01b0382169063a9059cbb90604401602060405180830381600087803b158015610ef657600080fd5b505af1158015610f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2e91906126e5565b506040805184815260208101849052338183015290517f71ef96c43343734b1d843bb85d52ef329f5e9143e4d35827771e3b0dd90c5f849181900360600190a1505050565b33610f866000546001600160a01b031690565b6001600160a01b031614610fdc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b6001600160a01b0381166110585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105b6565b611061816117cc565b50565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381a36fb68a6040518263ffffffff1660e01b81526004016110b891815260200190565b60206040518083038186803b1580156110d057600080fd5b505afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611108919061254e565b90506001600160a01b0381166111605760405162461bcd60e51b815260206004820152601d60248201527f4e4654585a61703a205661756c7420646f6573206e6f7420657869737400000060448201526064016105b6565b6000816001600160a01b0316631ba46cfd6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d5919061254e565b6040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690632eb2c2d69061122390339030908e908e906004016129a0565b600060405180830381600087803b15801561123d57600080fd5b505af1158015611251573d6000803e3d6000fd5b505060405163a22cb46560e01b81526001600160a01b038581166004830152600160248301528416925063a22cb4659150604401600060405180830381600087803b15801561129f57600080fd5b505af11580156112b3573d6000803e3d6000fd5b50506040517f3d5d190c000000000000000000000000000000000000000000000000000000008152600092506001600160a01b0385169150633d5d190c90611301908d908d906004016129f8565b602060405180830381600087803b15801561131b57600080fd5b505af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190612745565b90506000611369670de0b6b3a764000083612aa2565b6040516370a0823160e01b81523060048201529091506001600160a01b038516906370a082319060240160206040518083038186803b1580156113ab57600080fd5b505afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190612745565b81146114315760405162461bcd60e51b815260206004820181905260248201527f446964206e6f7420726563656976652065787065637465642062616c616e636560448201526064016105b6565b61143e8c85838c8c611829565b96509650965050505050955095509592505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381a36fb6896040518263ffffffff1660e01b81526004016114a791815260200190565b60206040518083038186803b1580156114bf57600080fd5b505afa1580156114d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f7919061254e565b90506001600160a01b03811661154f5760405162461bcd60e51b815260206004820152601d60248201527f4e4654585a61703a205661756c7420646f6573206e6f7420657869737400000060448201526064016105b6565b6000816001600160a01b0316631ba46cfd6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561158c57600080fd5b505af11580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c4919061254e565b905060005b885181101561164757611603828a83815181106115f657634e487b7160e01b600052603260045260246000fd5b6020026020010151611c97565b61163582848b848151811061162857634e487b7160e01b600052603260045260246000fd5b6020026020010151611fb4565b8061163f81612b08565b9150506115c9565b5060606000836001600160a01b0316633d5d190c8b846040518363ffffffff1660e01b815260040161167a9291906129f8565b602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190612745565b905060006116e2670de0b6b3a764000083612aa2565b6040516370a0823160e01b81523060048201529091506001600160a01b038616906370a082319060240160206040518083038186803b15801561172457600080fd5b505afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c9190612745565b81146117aa5760405162461bcd60e51b815260206004820181905260248201527f446964206e6f7420726563656976652065787065637465642062616c616e636560448201526064016105b6565b6117b78c86838d8d611829565b97509750975050505050509450945094915050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6004805460405163095ea7b360e01b81526001600160a01b039182169281019290925260248201859052600091829182919088169063095ea7b390604401602060405180830381600087803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b991906126e5565b5060048054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051600093849384936001600160a01b039091169263e8e33700928e92859263ad5c464892828101926020929190829003018186803b15801561192757600080fd5b505afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f919061254e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018c9052606481018a9052608481018c905260a481018b90523060c48201524260e482015261010401606060405180830381600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a08919061291d565b6002549295509093509150600090611a2a908c906001600160a01b0316612240565b60035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810185905291925082169063095ea7b390604401602060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab291906126e5565b506003546040517f90210d7e000000000000000000000000000000000000000000000000000000008152600481018e9052602481018490523360448201526001600160a01b03909116906390210d7e90606401600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b50505060008d815260076020908152604080832033845290915281208054859350909190611b62908490612a8a565b9091555050600554600090611b779042612a8a565b60008e8152600660209081526040808320338452909152902081905590508a851015611c37576001600160a01b038c1663a9059cbb33611bb7888f612ac1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611bfd57600080fd5b505af1158015611c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3591906126e5565b505b604080518e8152602081018d9052908101849052606081018290523360808201527f9f69538b20901013ea360bae2dce4079d45308fcfed02b3f0768c9f70f4ba9c09060a00160405180910390a150929b919a5098509650505050505050565b7306012c8cf97bead5deae237070f9587f8e7a266d73b47e3cd837ddf8e4c57f05d70ab865de6e193bbb60606001600160a01b038516831415611d1e576040513360248201523060448201526064810185905260840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790529050611f28565b816001600160a01b0316856001600160a01b03161415611ec957600084604051602401611d4d91815260200190565b60408051601f198184030181529181526020820180516001600160e01b03167f58178168000000000000000000000000000000000000000000000000000000001790525190915060009081906001600160a01b03891690611daf908590612984565b600060405180830381855afa9150503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b5091509150600081806020019051810190611e0a919061254e565b9050828015611e2157506001600160a01b03811633145b611e6d5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865206f776e65720000000000000000000000000000000000000060448201526064016105b6565b6040516024810189905260440160408051601f198184030181529190526020810180516001600160e01b03167f8264fe98000000000000000000000000000000000000000000000000000000001790529450611f289350505050565b6040513360248201523060448201526064810185905260840160408051601f198184030181529190526020810180516001600160e01b03167f42842e0e0000000000000000000000000000000000000000000000000000000017905290505b600080866001600160a01b031683604051611f439190612984565b6000604051808303816000865af19150503d8060008114611f80576040519150601f19603f3d011682016040523d82523d6000602084013e611f85565b606091505b5091509150818190611faa5760405162461bcd60e51b81526004016105b69190612a26565b5050505050505050565b7306012c8cf97bead5deae237070f9587f8e7a266d73b47e3cd837ddf8e4c57f05d70ab865de6e193bbb60606001600160a01b03861683141561203e576040516001600160a01b03861660248201526044810185905260640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b17905290506121b3565b816001600160a01b0316866001600160a01b031614156120c55760405160248101859052600060448201526001600160a01b038616606482015260840160408051601f198184030181529190526020810180516001600160e01b03167fbf31196f0000000000000000000000000000000000000000000000000000000017905290506121b3565b6040517fe985e9c50000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03868116602483015287169063e985e9c59060440160206040518083038186803b15801561212557600080fd5b505afa158015612139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215d91906126e5565b1561216a57505050505050565b6040516001600160a01b03861660248201526001604482015260640160408051601f198184030181529190526020810180516001600160e01b031663a22cb46560e01b17905290505b600080876001600160a01b0316836040516121ce9190612984565b6000604051808303816000865af19150503d806000811461220b576040519150601f19603f3d011682016040523d82523d6000602084013e612210565b606091505b50915091508181906122355760405162461bcd60e51b81526004016105b69190612a26565b505050505050505050565b600080600061224f858561232d565b604080516bffffffffffffffffffffffff19606094851b81166020808401919091529390941b9093166034840152805180840360280181526048840182528051908301207fff0000000000000000000000000000000000000000000000000000000000000060688501527fc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac0000000000000000000000006069850152607d8401527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b600080826001600160a01b0316846001600160a01b031614156123b85760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f4144445260448201527f455353455300000000000000000000000000000000000000000000000000000060648201526084016105b6565b826001600160a01b0316846001600160a01b0316106123d85782846123db565b83835b90925090506001600160a01b0382166124365760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f41444452455353000060448201526064016105b6565b9250929050565b600082601f83011261244d578081fd5b8135602067ffffffffffffffff82111561246957612469612b39565b8160051b612478828201612a59565b838152828101908684018388018501891015612492578687fd5b8693505b858410156124b4578035835260019390930192918401918401612496565b50979650505050505050565b600082601f8301126124d0578081fd5b813567ffffffffffffffff8111156124ea576124ea612b39565b6124fd601f8201601f1916602001612a59565b818152846020838601011115612511578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121561253c578081fd5b813561254781612b4f565b9392505050565b60006020828403121561255f578081fd5b815161254781612b4f565b600080600080600060a08688031215612581578081fd5b853561258c81612b4f565b9450602086013561259c81612b4f565b9350604086013567ffffffffffffffff808211156125b8578283fd5b6125c489838a0161243d565b945060608801359150808211156125d9578283fd5b6125e589838a0161243d565b935060808801359150808211156125fa578283fd5b50612607888289016124c0565b9150509295509295909350565b60008060008060808587031215612629578384fd5b843561263481612b4f565b9350602085013561264481612b4f565b925060408501359150606085013567ffffffffffffffff811115612666578182fd5b612672878288016124c0565b91505092959194509250565b600080600080600060a08688031215612695578081fd5b85356126a081612b4f565b945060208601356126b081612b4f565b93506040860135925060608601359150608086013567ffffffffffffffff8111156126d9578182fd5b612607888289016124c0565b6000602082840312156126f6578081fd5b81518015158114612547578182fd5b600060208284031215612716578081fd5b81356001600160e01b031981168114612547578182fd5b60006020828403121561273e578081fd5b5035919050565b600060208284031215612756578081fd5b5051919050565b6000806040838503121561276f578182fd5b82359150602083013561278181612b4f565b809150509250929050565b600080600080608085870312156127a1578081fd5b84359350602085013567ffffffffffffffff808211156127bf578283fd5b6127cb8883890161243d565b945060408701359150808211156127e0578283fd5b506127ed8782880161243d565b949793965093946060013593505050565b600080600080600060a08688031215612815578283fd5b85359450602086013567ffffffffffffffff80821115612833578485fd5b61283f89838a0161243d565b95506040880135915080821115612854578485fd5b506128618882890161243d565b9598949750949560608101359550608001359392505050565b60008060006060848603121561288e578081fd5b83359250602084013567ffffffffffffffff8111156128ab578182fd5b6128b78682870161243d565b925050604084013590509250925092565b600080600080608085870312156128dd578182fd5b84359350602085013567ffffffffffffffff8111156128fa578283fd5b6129068782880161243d565b949794965050505060408301359260600135919050565b600080600060608486031215612931578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156129795781518752958201959082019060010161295d565b509495945050505050565b60008251612996818460208701612ad8565b9190910192915050565b60006001600160a01b03808716835280861660208401525060a060408301526129cc60a083018561294a565b82810360608401526129de818561294a565b838103608090940193909352508152602001949350505050565b604081526000612a0b604083018561294a565b8281036020840152612a1d818561294a565b95945050505050565b6020815260008251806020840152612a45816040850160208701612ad8565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a8257612a82612b39565b604052919050565b60008219821115612a9d57612a9d612b23565b500190565b6000816000190483118215151615612abc57612abc612b23565b500290565b600082821015612ad357612ad3612b23565b500390565b60005b83811015612af3578181015183820152602001612adb565b83811115612b02576000848401525b50505050565b6000600019821415612b1c57612b1c612b23565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461106157600080fdfea2646970667358221220a2c32c019939952f913af6773d7ef04b77b5fe645c085e3ac091c8fd97784f3464736f6c63430008040033000000000000000000000000be86f647b167567525ccaafcd6f881f1ee558216000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f
Deployed Bytecode
0x60806040526004361061016a5760003560e01c80638da05f8f116100cb578063b57458651161007f578063f23a6e6111610059578063f23a6e6114610454578063f2fde38b14610499578063f99e7405146104b957600080fd5b8063b5745865146103ac578063bc197c81146103cc578063e0e9e64d1461041157600080fd5b80639bf1401c116100b05780639bf1401c1461034c578063ad5c46481461036c578063ae04d45d1461038c57600080fd5b80638da05f8f1461030e5780638da5cb5b1461032e57600080fd5b80631a6907cd116101225780635ee50f88116101075780635ee50f881461028b5780636d13582c146102d7578063715018a6146102f757600080fd5b80631a6907cd1461026557806353b573bf1461027857600080fd5b806310cde7861161015357806310cde786146101c8578063150b7a02146101e85780631809d2c21461024557600080fd5b806301ffc9a71461016f5780630d668087146101a4575b600080fd5b34801561017b57600080fd5b5061018f61018a366004612705565b6104fc565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506101ba60055481565b60405190815260200161019b565b3480156101d457600080fd5b506101ba6101e33660046127fe565b610565565b3480156101f457600080fd5b5061022c610203366004612614565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040516001600160e01b0319909116815260200161019b565b34801561025157600080fd5b506101ba6102603660046128c8565b610717565b6101ba61027336600461287a565b6108c2565b6101ba61028636600461278c565b610a21565b34801561029757600080fd5b506102bf7f000000000000000000000000be86f647b167567525ccaafcd6f881f1ee55821681565b6040516001600160a01b03909116815260200161019b565b3480156102e357600080fd5b506004546102bf906001600160a01b031681565b34801561030357600080fd5b5061030c610b81565b005b34801561031a57600080fd5b5061030c61032936600461252b565b610bf6565b34801561033a57600080fd5b506000546001600160a01b03166102bf565b34801561035857600080fd5b506003546102bf906001600160a01b031681565b34801561037857600080fd5b506002546102bf906001600160a01b031681565b34801561039857600080fd5b5061030c6103a736600461272d565b610c8e565b3480156103b857600080fd5b5061030c6103c736600461272d565b610cfc565b3480156103d857600080fd5b5061022c6103e736600461256a565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561041d57600080fd5b506101ba61042c36600461275d565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b34801561046057600080fd5b5061022c61046f36600461267e565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156104a557600080fd5b5061030c6104b436600461252b565b610f73565b3480156104c557600080fd5b506101ba6104d436600461275d565b60009182526006602090815260408084206001600160a01b0393909316845291905290205490565b60006001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061055f57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6000600260015414156105bf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026001819055546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561061657600080fd5b505af115801561062a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064e91906126e5565b5060008061065f8888888888611064565b925092505083821015610708576002546001600160a01b031663a9059cbb336106888588612ac1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156106ce57600080fd5b505af11580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906126e5565b505b60018055979650505050505050565b60006002600154141561076c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105b6565b60026001819055546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156107c357600080fd5b505af11580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb91906126e5565b5060008061080b87878787611453565b9250925050838210156108b4576002546001600160a01b031663a9059cbb336108348588612ac1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561087a57600080fd5b505af115801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906126e5565b505b600180559695505050505050565b6000600260015414156109175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105b6565b600260018190555460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0913491600480830192600092919082900301818588803b15801561096357600080fd5b505af1158015610977573d6000803e3d6000fd5b505050505060008061098b86868634611453565b925092505034821015610a14576002546001600160a01b0316632e1a7d4d6109b38434612ac1565b6040518263ffffffff1660e01b81526004016109d191815260200190565b600060405180830381600087803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b50339250610a11915084905034612ac1565b50505b6001805595945050505050565b600060026001541415610a765760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105b6565b600260018190555460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0913491600480830192600092919082900301818588803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b5050505050600080610aeb8787878734611064565b9250925050348210156108b4576002546001600160a01b0316632e1a7d4d610b138434612ac1565b6040518263ffffffff1660e01b8152600401610b3191815260200190565b600060405180830381600087803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b50339250610b71915084905034612ac1565b5050600180559695505050505050565b33610b946000546001600160a01b031690565b6001600160a01b031614610bea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b610bf460006117cc565b565b33610c096000546001600160a01b031690565b6001600160a01b031614610c5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b33610ca16000546001600160a01b031690565b6001600160a01b031614610cf75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b600555565b6000818152600760209081526040808320338085529083528184205485855260068452828520918552925290912054421015610d7a5760405162461bcd60e51b815260206004820152600f60248201527f4e4654585a61703a204c6f636b6564000000000000000000000000000000000060448201526064016105b6565b60008111610dca5760405162461bcd60e51b815260206004820152601760248201527f4e4654585a61703a204e6f7468696e67206c6f636b656400000000000000000060448201526064016105b6565b6000828152600660209081526040808320338085529083528184208490558584526007835281842090845290915280822082905560035490517fa8722fc6000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169063a8722fc69060240160206040518083038186803b158015610e5a57600080fd5b505afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061254e565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529091506001600160a01b0382169063a9059cbb90604401602060405180830381600087803b158015610ef657600080fd5b505af1158015610f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2e91906126e5565b506040805184815260208101849052338183015290517f71ef96c43343734b1d843bb85d52ef329f5e9143e4d35827771e3b0dd90c5f849181900360600190a1505050565b33610f866000546001600160a01b031690565b6001600160a01b031614610fdc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105b6565b6001600160a01b0381166110585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105b6565b611061816117cc565b50565b6000806000807f000000000000000000000000be86f647b167567525ccaafcd6f881f1ee5582166001600160a01b03166381a36fb68a6040518263ffffffff1660e01b81526004016110b891815260200190565b60206040518083038186803b1580156110d057600080fd5b505afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611108919061254e565b90506001600160a01b0381166111605760405162461bcd60e51b815260206004820152601d60248201527f4e4654585a61703a205661756c7420646f6573206e6f7420657869737400000060448201526064016105b6565b6000816001600160a01b0316631ba46cfd6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d5919061254e565b6040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690632eb2c2d69061122390339030908e908e906004016129a0565b600060405180830381600087803b15801561123d57600080fd5b505af1158015611251573d6000803e3d6000fd5b505060405163a22cb46560e01b81526001600160a01b038581166004830152600160248301528416925063a22cb4659150604401600060405180830381600087803b15801561129f57600080fd5b505af11580156112b3573d6000803e3d6000fd5b50506040517f3d5d190c000000000000000000000000000000000000000000000000000000008152600092506001600160a01b0385169150633d5d190c90611301908d908d906004016129f8565b602060405180830381600087803b15801561131b57600080fd5b505af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190612745565b90506000611369670de0b6b3a764000083612aa2565b6040516370a0823160e01b81523060048201529091506001600160a01b038516906370a082319060240160206040518083038186803b1580156113ab57600080fd5b505afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190612745565b81146114315760405162461bcd60e51b815260206004820181905260248201527f446964206e6f7420726563656976652065787065637465642062616c616e636560448201526064016105b6565b61143e8c85838c8c611829565b96509650965050505050955095509592505050565b6000806000807f000000000000000000000000be86f647b167567525ccaafcd6f881f1ee5582166001600160a01b03166381a36fb6896040518263ffffffff1660e01b81526004016114a791815260200190565b60206040518083038186803b1580156114bf57600080fd5b505afa1580156114d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f7919061254e565b90506001600160a01b03811661154f5760405162461bcd60e51b815260206004820152601d60248201527f4e4654585a61703a205661756c7420646f6573206e6f7420657869737400000060448201526064016105b6565b6000816001600160a01b0316631ba46cfd6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561158c57600080fd5b505af11580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c4919061254e565b905060005b885181101561164757611603828a83815181106115f657634e487b7160e01b600052603260045260246000fd5b6020026020010151611c97565b61163582848b848151811061162857634e487b7160e01b600052603260045260246000fd5b6020026020010151611fb4565b8061163f81612b08565b9150506115c9565b5060606000836001600160a01b0316633d5d190c8b846040518363ffffffff1660e01b815260040161167a9291906129f8565b602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190612745565b905060006116e2670de0b6b3a764000083612aa2565b6040516370a0823160e01b81523060048201529091506001600160a01b038616906370a082319060240160206040518083038186803b15801561172457600080fd5b505afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c9190612745565b81146117aa5760405162461bcd60e51b815260206004820181905260248201527f446964206e6f7420726563656976652065787065637465642062616c616e636560448201526064016105b6565b6117b78c86838d8d611829565b97509750975050505050509450945094915050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6004805460405163095ea7b360e01b81526001600160a01b039182169281019290925260248201859052600091829182919088169063095ea7b390604401602060405180830381600087803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b991906126e5565b5060048054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051600093849384936001600160a01b039091169263e8e33700928e92859263ad5c464892828101926020929190829003018186803b15801561192757600080fd5b505afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f919061254e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018c9052606481018a9052608481018c905260a481018b90523060c48201524260e482015261010401606060405180830381600087803b1580156119d057600080fd5b505af11580156119e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a08919061291d565b6002549295509093509150600090611a2a908c906001600160a01b0316612240565b60035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810185905291925082169063095ea7b390604401602060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab291906126e5565b506003546040517f90210d7e000000000000000000000000000000000000000000000000000000008152600481018e9052602481018490523360448201526001600160a01b03909116906390210d7e90606401600060405180830381600087803b158015611b1f57600080fd5b505af1158015611b33573d6000803e3d6000fd5b50505060008d815260076020908152604080832033845290915281208054859350909190611b62908490612a8a565b9091555050600554600090611b779042612a8a565b60008e8152600660209081526040808320338452909152902081905590508a851015611c37576001600160a01b038c1663a9059cbb33611bb7888f612ac1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611bfd57600080fd5b505af1158015611c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3591906126e5565b505b604080518e8152602081018d9052908101849052606081018290523360808201527f9f69538b20901013ea360bae2dce4079d45308fcfed02b3f0768c9f70f4ba9c09060a00160405180910390a150929b919a5098509650505050505050565b7306012c8cf97bead5deae237070f9587f8e7a266d73b47e3cd837ddf8e4c57f05d70ab865de6e193bbb60606001600160a01b038516831415611d1e576040513360248201523060448201526064810185905260840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790529050611f28565b816001600160a01b0316856001600160a01b03161415611ec957600084604051602401611d4d91815260200190565b60408051601f198184030181529181526020820180516001600160e01b03167f58178168000000000000000000000000000000000000000000000000000000001790525190915060009081906001600160a01b03891690611daf908590612984565b600060405180830381855afa9150503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b5091509150600081806020019051810190611e0a919061254e565b9050828015611e2157506001600160a01b03811633145b611e6d5760405162461bcd60e51b815260206004820152600d60248201527f4e6f7420746865206f776e65720000000000000000000000000000000000000060448201526064016105b6565b6040516024810189905260440160408051601f198184030181529190526020810180516001600160e01b03167f8264fe98000000000000000000000000000000000000000000000000000000001790529450611f289350505050565b6040513360248201523060448201526064810185905260840160408051601f198184030181529190526020810180516001600160e01b03167f42842e0e0000000000000000000000000000000000000000000000000000000017905290505b600080866001600160a01b031683604051611f439190612984565b6000604051808303816000865af19150503d8060008114611f80576040519150601f19603f3d011682016040523d82523d6000602084013e611f85565b606091505b5091509150818190611faa5760405162461bcd60e51b81526004016105b69190612a26565b5050505050505050565b7306012c8cf97bead5deae237070f9587f8e7a266d73b47e3cd837ddf8e4c57f05d70ab865de6e193bbb60606001600160a01b03861683141561203e576040516001600160a01b03861660248201526044810185905260640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b17905290506121b3565b816001600160a01b0316866001600160a01b031614156120c55760405160248101859052600060448201526001600160a01b038616606482015260840160408051601f198184030181529190526020810180516001600160e01b03167fbf31196f0000000000000000000000000000000000000000000000000000000017905290506121b3565b6040517fe985e9c50000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03868116602483015287169063e985e9c59060440160206040518083038186803b15801561212557600080fd5b505afa158015612139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215d91906126e5565b1561216a57505050505050565b6040516001600160a01b03861660248201526001604482015260640160408051601f198184030181529190526020810180516001600160e01b031663a22cb46560e01b17905290505b600080876001600160a01b0316836040516121ce9190612984565b6000604051808303816000865af19150503d806000811461220b576040519150601f19603f3d011682016040523d82523d6000602084013e612210565b606091505b50915091508181906122355760405162461bcd60e51b81526004016105b69190612a26565b505050505050505050565b600080600061224f858561232d565b604080516bffffffffffffffffffffffff19606094851b81166020808401919091529390941b9093166034840152805180840360280181526048840182528051908301207fff0000000000000000000000000000000000000000000000000000000000000060688501527fc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac0000000000000000000000006069850152607d8401527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b600080826001600160a01b0316846001600160a01b031614156123b85760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f4144445260448201527f455353455300000000000000000000000000000000000000000000000000000060648201526084016105b6565b826001600160a01b0316846001600160a01b0316106123d85782846123db565b83835b90925090506001600160a01b0382166124365760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f41444452455353000060448201526064016105b6565b9250929050565b600082601f83011261244d578081fd5b8135602067ffffffffffffffff82111561246957612469612b39565b8160051b612478828201612a59565b838152828101908684018388018501891015612492578687fd5b8693505b858410156124b4578035835260019390930192918401918401612496565b50979650505050505050565b600082601f8301126124d0578081fd5b813567ffffffffffffffff8111156124ea576124ea612b39565b6124fd601f8201601f1916602001612a59565b818152846020838601011115612511578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121561253c578081fd5b813561254781612b4f565b9392505050565b60006020828403121561255f578081fd5b815161254781612b4f565b600080600080600060a08688031215612581578081fd5b853561258c81612b4f565b9450602086013561259c81612b4f565b9350604086013567ffffffffffffffff808211156125b8578283fd5b6125c489838a0161243d565b945060608801359150808211156125d9578283fd5b6125e589838a0161243d565b935060808801359150808211156125fa578283fd5b50612607888289016124c0565b9150509295509295909350565b60008060008060808587031215612629578384fd5b843561263481612b4f565b9350602085013561264481612b4f565b925060408501359150606085013567ffffffffffffffff811115612666578182fd5b612672878288016124c0565b91505092959194509250565b600080600080600060a08688031215612695578081fd5b85356126a081612b4f565b945060208601356126b081612b4f565b93506040860135925060608601359150608086013567ffffffffffffffff8111156126d9578182fd5b612607888289016124c0565b6000602082840312156126f6578081fd5b81518015158114612547578182fd5b600060208284031215612716578081fd5b81356001600160e01b031981168114612547578182fd5b60006020828403121561273e578081fd5b5035919050565b600060208284031215612756578081fd5b5051919050565b6000806040838503121561276f578182fd5b82359150602083013561278181612b4f565b809150509250929050565b600080600080608085870312156127a1578081fd5b84359350602085013567ffffffffffffffff808211156127bf578283fd5b6127cb8883890161243d565b945060408701359150808211156127e0578283fd5b506127ed8782880161243d565b949793965093946060013593505050565b600080600080600060a08688031215612815578283fd5b85359450602086013567ffffffffffffffff80821115612833578485fd5b61283f89838a0161243d565b95506040880135915080821115612854578485fd5b506128618882890161243d565b9598949750949560608101359550608001359392505050565b60008060006060848603121561288e578081fd5b83359250602084013567ffffffffffffffff8111156128ab578182fd5b6128b78682870161243d565b925050604084013590509250925092565b600080600080608085870312156128dd578182fd5b84359350602085013567ffffffffffffffff8111156128fa578283fd5b6129068782880161243d565b949794965050505060408301359260600135919050565b600080600060608486031215612931578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156129795781518752958201959082019060010161295d565b509495945050505050565b60008251612996818460208701612ad8565b9190910192915050565b60006001600160a01b03808716835280861660208401525060a060408301526129cc60a083018561294a565b82810360608401526129de818561294a565b838103608090940193909352508152602001949350505050565b604081526000612a0b604083018561294a565b8281036020840152612a1d818561294a565b95945050505050565b6020815260008251806020840152612a45816040850160208701612ad8565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a8257612a82612b39565b604052919050565b60008219821115612a9d57612a9d612b23565b500190565b6000816000190483118215151615612abc57612abc612b23565b500290565b600082821015612ad357612ad3612b23565b500390565b60005b83811015612af3578181015183820152602001612adb565b83811115612b02576000848401525b50505050565b6000600019821415612b1c57612b1c612b23565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461106157600080fdfea2646970667358221220a2c32c019939952f913af6773d7ef04b77b5fe645c085e3ac091c8fd97784f3464736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000be86f647b167567525ccaafcd6f881f1ee558216000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f
-----Decoded View---------------
Arg [0] : _nftxFactory (address): 0xBE86f647b167567525cCAAfcd6f881F1Ee558216
Arg [1] : _sushiRouter (address): 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000be86f647b167567525ccaafcd6f881f1ee558216
Arg [1] : 000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f
Deployed Bytecode Sourcemap
43025:10430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31441:269;;;;;;;;;;-1:-1:-1;31441:269:0;;;;;:::i;:::-;;:::i;:::-;;;14738:14:1;;14731:22;14713:41;;14701:2;14686:18;31441:269:0;;;;;;;;43287:34;;;;;;;;;;;;;;;;;;;20213:25:1;;;20201:2;20186:18;43287:34:0;20168:76:1;45816:541:0;;;;;;;;;;-1:-1:-1;45816:541:0;;;;;:::i;:::-;;:::i;27441:207::-;;;;;;;;;;-1:-1:-1;27441:207:0;;;;;:::i;:::-;27610:30;27441:207;;;;;;;;;;-1:-1:-1;;;;;;14927:79:1;;;14909:98;;14897:2;14882:18;27441:207:0;14864:149:1;45310:500:0;;;;;;;;;;-1:-1:-1;45310:500:0;;;;;:::i;:::-;;:::i;44255:491::-;;;;;;:::i;:::-;;:::i;44752:552::-;;;;;;:::i;:::-;;:::i;43192:46::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10995:55:1;;;10977:74;;10965:2;10950:18;43192:46:0;10932:125:1;43243:37:0;;;;;;;;;;-1:-1:-1;43243:37:0;;;;-1:-1:-1;;;;;43243:37:0;;;42396:94;;;;;;;;;;;;;:::i;:::-;;44022:123;;;;;;;;;;-1:-1:-1;44022:123:0;;;;;:::i;:::-;;:::i;41747:87::-;;;;;;;;;;-1:-1:-1;41793:7:0;41820:6;-1:-1:-1;;;;;41820:6:0;41747:87;;43156:31;;;;;;;;;;-1:-1:-1;43156:31:0;;;;-1:-1:-1;;;;;43156:31:0;;;43133:17;;;;;;;;;;-1:-1:-1;43133:17:0;;;;-1:-1:-1;;;;;43133:17:0;;;44152:96;;;;;;;;;;-1:-1:-1;44152:96:0;;;;;:::i;:::-;;:::i;46363:536::-;;;;;;;;;;-1:-1:-1;46363:536:0;;;;;:::i;:::-;;:::i;32121:203::-;;;;;;;;;;-1:-1:-1;32121:203:0;;;;;:::i;:::-;32280:36;32121:203;;;;;;;;47035:134;;;;;;;;;;-1:-1:-1;47035:134:0;;;;;:::i;:::-;47113:7;47136:22;;;:13;:22;;;;;;;;-1:-1:-1;;;;;47136:27:0;;;;;;;;;;;;;47035:134;31938:175;;;;;;;;;;-1:-1:-1;31938:175:0;;;;;:::i;:::-;32074:31;31938:175;;;;;;;;42645:192;;;;;;;;;;-1:-1:-1;42645:192:0;;;;;:::i;:::-;;:::i;46905:124::-;;;;;;;;;;-1:-1:-1;46905:124:0;;;;;:::i;:::-;46979:7;47002:16;;;:7;:16;;;;;;;;-1:-1:-1;;;;;47002:21:0;;;;;;;;;;;;;46905:124;31441:269;31565:4;-1:-1:-1;;;;;;31589:60:0;;31604:45;31589:60;;:113;;-1:-1:-1;31079:36:0;-1:-1:-1;;;;;;31064:51:0;;;31666:36;31582:120;31441:269;-1:-1:-1;;31441:269:0:o;45816:541::-;46002:7;39905:1;40501:7;;:19;;40493:63;;;;-1:-1:-1;;;40493:63:0;;19909:2:1;40493:63:0;;;19891:21:1;19948:2;19928:18;;;19921:30;19987:33;19967:18;;;19960:61;20038:18;;40493:63:0;;;;;;;;;39905:1;40634:7;:18;;;46044:4;46018:80:::1;::::0;-1:-1:-1;;;46018:80:0;;46064:10:::1;46018:80;::::0;::::1;12577:34:1::0;46084:4:0::1;12627:18:1::0;;;12620:43;12679:18;;;12672:34;;;-1:-1:-1;;;;;46044:4:0;;::::1;::::0;46018:45:::1;::::0;12489:18:1;;46018:80:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46108:17;46127::::0;46148:63:::1;46170:7;46179:3;46184:7;46193:9;46204:6;46148:21;:63::i;:::-;46105:106;;;;;46259:6;46247:9;:18;46243:84;;;46276:4;::::0;-1:-1:-1;;;;;46276:4:0::1;:13;46290:10;46302:16;46309:9:::0;46302:6;:16:::1;:::i;:::-;46276:43;::::0;-1:-1:-1;;;;;;46276:43:0::1;::::0;;;;;;-1:-1:-1;;;;;13993:55:1;;;46276:43:0::1;::::0;::::1;13975:74:1::0;14065:18;;;14058:34;13948:18;;46276:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46243:84;39861:1:::0;40813:22;;46342:9;45816:541;-1:-1:-1;;;;;;;45816:541:0:o;45310:500::-;45465:7;39905:1;40501:7;;:19;;40493:63;;;;-1:-1:-1;;;40493:63:0;;19909:2:1;40493:63:0;;;19891:21:1;19948:2;19928:18;;;19921:30;19987:33;19967:18;;;19960:61;20038:18;;40493:63:0;19881:181:1;40493:63:0;39905:1;40634:7;:18;;;45507:4;45481:80:::1;::::0;-1:-1:-1;;;45481:80:0;;45527:10:::1;45481:80;::::0;::::1;12577:34:1::0;45547:4:0::1;12627:18:1::0;;;12620:43;12679:18;;;12672:34;;;-1:-1:-1;;;;;45507:4:0;;::::1;::::0;45481:45:::1;::::0;12489:18:1;;45481:80:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45571:17;45590::::0;45611:53:::1;45632:7;45641:3;45646:9;45657:6;45611:20;:53::i;:::-;45568:96;;;;;45712:6;45700:9;:18;45696:84;;;45729:4;::::0;-1:-1:-1;;;;;45729:4:0::1;:13;45743:10;45755:16;45762:9:::0;45755:6;:16:::1;:::i;:::-;45729:43;::::0;-1:-1:-1;;;;;;45729:43:0::1;::::0;;;;;;-1:-1:-1;;;;;13993:55:1;;;45729:43:0::1;::::0;::::1;13975:74:1::0;14065:18;;;14058:34;13948:18;;45729:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45696:84;39861:1:::0;40813:22;;45795:9;45310:500;-1:-1:-1;;;;;;45310:500:0:o;44255:491::-;44400:7;39905:1;40501:7;;:19;;40493:63;;;;-1:-1:-1;;;40493:63:0;;19909:2:1;40493:63:0;;;19891:21:1;19948:2;19928:18;;;19921:30;19987:33;19967:18;;;19960:61;20038:18;;40493:63:0;19881:181:1;40493:63:0;39905:1;40634:7;:18;;;44416:4;:32:::1;::::0;;-1:-1:-1;;;44416:32:0;;;;-1:-1:-1;;;;;44416:4:0;;::::1;::::0;:12:::1;::::0;44436:9:::1;::::0;44416:32:::1;::::0;;::::1;::::0;:4:::1;::::0;:32;;;;;;;44436:9;44416:4;:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;44458:17;44477::::0;44498:56:::1;44519:7;44528:3;44533:9;44544;44498:20;:56::i;:::-;44455:99;;;;;44602:9;44590;:21;44586:130;;;44622:4;::::0;-1:-1:-1;;;;;44622:4:0::1;:13;44636:19;44646:9:::0;44636::::1;:19;:::i;:::-;44622:34;;;;;;;;;;;;;20213:25:1::0;;20201:2;20186:18;;20168:76;44622:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44665:10:0::1;::::0;-1:-1:-1;44688:19:0::1;::::0;-1:-1:-1;44698:9:0;;-1:-1:-1;44688:9:0::1;:19;:::i;:::-;44665:43;;44586:130;39861:1:::0;40813:22;;44731:9;44255:491;-1:-1:-1;;;;;44255:491:0:o;44752:552::-;44928:7;39905:1;40501:7;;:19;;40493:63;;;;-1:-1:-1;;;40493:63:0;;19909:2:1;40493:63:0;;;19891:21:1;19948:2;19928:18;;;19921:30;19987:33;19967:18;;;19960:61;20038:18;;40493:63:0;19881:181:1;40493:63:0;39905:1;40634:7;:18;;;44944:4;:32:::1;::::0;;-1:-1:-1;;;44944:32:0;;;;-1:-1:-1;;;;;44944:4:0;;::::1;::::0;:12:::1;::::0;44964:9:::1;::::0;44944:32:::1;::::0;;::::1;::::0;:4:::1;::::0;:32;;;;;;;44964:9;44944:4;:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;45007:17;45026::::0;45047:65:::1;45069:7;45078:3;45083:7;45092:8;45102:9;45047:21;:65::i;:::-;45004:108;;;;;45160:9;45148;:21;45144:130;;;45180:4;::::0;-1:-1:-1;;;;;45180:4:0::1;:13;45194:19;45204:9:::0;45194::::1;:19;:::i;:::-;45180:34;;;;;;;;;;;;;20213:25:1::0;;20201:2;20186:18;;20168:76;45180:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;45223:10:0::1;::::0;-1:-1:-1;45246:19:0::1;::::0;-1:-1:-1;45256:9:0;;-1:-1:-1;45246:9:0::1;:19;:::i;:::-;-1:-1:-1::0;;39861:1:0;40813:22;;45289:9;44752:552;-1:-1:-1;;;;;;44752:552:0:o;42396:94::-;41978:10;41967:7;41793;41820:6;-1:-1:-1;;;;;41820:6:0;;41747:87;41967:7;-1:-1:-1;;;;;41967:21:0;;41959:66;;;;-1:-1:-1;;;41959:66:0;;18470:2:1;41959:66:0;;;18452:21:1;;;18489:18;;;18482:30;18548:34;18528:18;;;18521:62;18600:18;;41959:66:0;18442:182:1;41959:66:0;42461:21:::1;42479:1;42461:9;:21::i;:::-;42396:94::o:0;44022:123::-;41978:10;41967:7;41793;41820:6;-1:-1:-1;;;;;41820:6:0;;41747:87;41967:7;-1:-1:-1;;;;;41967:21:0;;41959:66;;;;-1:-1:-1;;;41959:66:0;;18470:2:1;41959:66:0;;;18452:21:1;;;18489:18;;;18482:30;18548:34;18528:18;;;18521:62;18600:18;;41959:66:0;18442:182:1;41959:66:0;44099:9:::1;:40:::0;;-1:-1:-1;;44099:40:0::1;-1:-1:-1::0;;;;;44099:40:0;;;::::1;::::0;;;::::1;::::0;;44022:123::o;44152:96::-;41978:10;41967:7;41793;41820:6;-1:-1:-1;;;;;41820:6:0;;41747:87;41967:7;-1:-1:-1;;;;;41967:21:0;;41959:66;;;;-1:-1:-1;;;41959:66:0;;18470:2:1;41959:66:0;;;18452:21:1;;;18489:18;;;18482:30;18548:34;18528:18;;;18521:62;18600:18;;41959:66:0;18442:182:1;41959:66:0;44220:8:::1;:22:::0;44152:96::o;46363:536::-;46421:17;46441:22;;;:13;:22;;;;;;;;46464:10;46441:34;;;;;;;;;;46509:16;;;:7;:16;;;;;:28;;;;;;;;;46490:15;:47;;46482:75;;;;-1:-1:-1;;;46482:75:0;;16619:2:1;46482:75:0;;;16601:21:1;16658:2;16638:18;;;16631:30;16697:17;16677:18;;;16670:45;16732:18;;46482:75:0;16591:165:1;46482:75:0;46584:1;46572:9;:13;46564:49;;;;-1:-1:-1;;;46564:49:0;;18118:2:1;46564:49:0;;;18100:21:1;18157:2;18137:18;;;18130:30;18196:25;18176:18;;;18169:53;18239:18;;46564:49:0;18090:173:1;46564:49:0;46657:1;46626:16;;;:7;:16;;;;;;;;46643:10;46626:28;;;;;;;;;:32;;;46665:22;;;:13;:22;;;;;:34;;;;;;;;;:38;;;46731:9;;:42;;;;;;;;20213:25:1;;;-1:-1:-1;;;;;46731:9:0;;;;:33;;20186:18:1;;46731:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46780:59;;;;;46817:10;46780:59;;;13975:74:1;14065:18;;;14058:34;;;46712:61:0;;-1:-1:-1;;;;;;46780:36:0;;;;;13948:18:1;;46780:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;46853:40:0;;;20841:25:1;;;20897:2;20882:18;;20875:34;;;46882:10:0;20925:18:1;;;20918:83;46853:40:0;;;;;;;20829:2:1;46853:40:0;;;46363:536;;;:::o;42645:192::-;41978:10;41967:7;41793;41820:6;-1:-1:-1;;;;;41820:6:0;;41747:87;41967:7;-1:-1:-1;;;;;41967:21:0;;41959:66;;;;-1:-1:-1;;;41959:66:0;;18470:2:1;41959:66:0;;;18452:21:1;;;18489:18;;;18482:30;18548:34;18528:18;;;18521:62;18600:18;;41959:66:0;18442:182:1;41959:66:0;-1:-1:-1;;;;;42734:22:0;::::1;42726:73;;;::::0;-1:-1:-1;;;42726:73:0;;16963:2:1;42726:73:0::1;::::0;::::1;16945:21:1::0;17002:2;16982:18;;;16975:30;17041:34;17021:18;;;17014:62;17112:8;17092:18;;;17085:36;17138:19;;42726:73:0::1;16935:228:1::0;42726:73:0::1;42810:19;42820:8;42810:9;:19::i;:::-;42645:192:::0;:::o;48114:954::-;48294:7;48303;48312;48328:13;48344:11;-1:-1:-1;;;;;48344:17:0;;48362:7;48344:26;;;;;;;;;;;;;20213:25:1;;20201:2;20186:18;;20168:76;48344:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48328:42;-1:-1:-1;;;;;;48385:19:0;;48377:61;;;;-1:-1:-1;;;48377:61:0;;19192:2:1;48377:61:0;;;19174:21:1;19231:2;19211:18;;;19204:30;19270:31;19250:18;;;19243:59;19319:18;;48377:61:0;19164:179:1;48377:61:0;48496:20;48530:5;-1:-1:-1;;;;;48519:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48558:100;;;;;48496:55;;-1:-1:-1;;;;;;48558:55:0;;;;;:100;;48614:10;;48634:4;;48641:3;;48646:7;;48558:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48665:64:0;;-1:-1:-1;;;48665:64:0;;-1:-1:-1;;;;;13675:55:1;;;48665:64:0;;;13657:74:1;48724:4:0;13747:18:1;;;13740:50;48665:51:0;;;-1:-1:-1;48665:51:0;;-1:-1:-1;13630:18:1;;48665:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48752:36:0;;;;;48736:13;;-1:-1:-1;;;;;;48752:22:0;;;-1:-1:-1;48752:22:0;;:36;;48775:3;;48780:7;;48752:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48736:52;-1:-1:-1;48795:15:0;48814:12;43497:6;48736:52;48814:12;:::i;:::-;48892:49;;-1:-1:-1;;;48892:49:0;;48935:4;48892:49;;;10977:74:1;48795:32:0;;-1:-1:-1;;;;;;48892:34:0;;;;;10950:18:1;;48892:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48881:7;:60;48873:105;;;;-1:-1:-1;;;48873:105:0;;18831:2:1;48873:105:0;;;18813:21:1;;;18850:18;;;18843:30;18909:34;18889:18;;;18882:62;18961:18;;48873:105:0;18803:182:1;48873:105:0;48998:64;49019:7;49028:5;49035:7;49044:9;49055:6;48998:20;:64::i;:::-;48991:71;;;;;;;;;;48114:954;;;;;;;;;:::o;47175:933::-;47324:7;47333;47342;47358:13;47374:11;-1:-1:-1;;;;;47374:17:0;;47392:7;47374:26;;;;;;;;;;;;;20213:25:1;;20201:2;20186:18;;20168:76;47374:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47358:42;-1:-1:-1;;;;;;47415:19:0;;47407:61;;;;-1:-1:-1;;;47407:61:0;;19192:2:1;47407:61:0;;;19174:21:1;19231:2;19211:18;;;19204:30;19270:31;19250:18;;;19243:59;19319:18;;47407:61:0;19164:179:1;47407:61:0;47526:20;47560:5;-1:-1:-1;;;;;47549:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47526:55;;47593:9;47588:149;47612:3;:10;47608:1;:14;47588:149;;;47638:40;47657:12;47671:3;47675:1;47671:6;;;;;;-1:-1:-1;;;47671:6:0;;;;;;;;;;;;;;;47638:18;:40::i;:::-;47687:42;47701:12;47715:5;47722:3;47726:1;47722:6;;;;;;-1:-1:-1;;;47722:6:0;;;;;;;;;;;;;;;47687:13;:42::i;:::-;47624:3;;;;:::i;:::-;;;;47588:149;;;;47743:25;47775:13;47802:5;-1:-1:-1;;;;;47791:22:0;;47814:3;47819:8;47791:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47775:53;-1:-1:-1;47835:15:0;47854:12;43497:6;47775:53;47854:12;:::i;:::-;47932:49;;-1:-1:-1;;;47932:49:0;;47975:4;47932:49;;;10977:74:1;47835:32:0;;-1:-1:-1;;;;;;47932:34:0;;;;;10950:18:1;;47932:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47921:7;:60;47913:105;;;;-1:-1:-1;;;47913:105:0;;18831:2:1;47913:105:0;;;18813:21:1;;;18850:18;;;18843:30;18909:34;18889:18;;;18882:62;18961:18;;47913:105:0;18803:182:1;47913:105:0;48038:64;48059:7;48068:5;48075:7;48084:9;48095:6;48038:20;:64::i;:::-;48031:71;;;;;;;;;;;47175:933;;;;;;;;:::o;42845:173::-;42901:16;42920:6;;-1:-1:-1;;;;;42937:17:0;;;-1:-1:-1;;42937:17:0;;;;;;42970:40;;42920:6;;;;;;;42970:40;;42901:16;42970:40;42845:173;;:::o;49074:1216::-;49345:11;;;49304:66;;-1:-1:-1;;;49304:66:0;;-1:-1:-1;;;;;49345:11:0;;;49304:66;;;13975:74:1;;;;14065:18;;;14058:34;;;49243:7:0;;;;;;49304:32;;;;;;13948:18:1;;49304:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;49439:11:0;;;49496:18;;;;;;;;49378:19;;;;;;-1:-1:-1;;;;;49439:11:0;;;;:24;;49480:5;;49439:11;;49496:16;;:18;;;;;;;;;;;;;49439:11;49496:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49439:202;;-1:-1:-1;;;;;;49439:202:0;;;;;;;-1:-1:-1;;;;;13139:15:1;;;49439:202:0;;;13121:34:1;13191:15;;13171:18;;;13164:43;13223:18;;;13216:34;;;13266:18;;;13259:34;;;13309:19;;;13302:35;;;13353:19;;;13346:35;;;49604:4:0;13397:19:1;;;13390:44;49619:15:0;13450:19:1;;;13443:35;13032:19;;49439:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49729:4;;49377:264;;-1:-1:-1;49377:264:0;;-1:-1:-1;49377:264:0;-1:-1:-1;49688:15:0;;49706:29;;49714:5;;-1:-1:-1;;;;;49729:4:0;49706:7;:29::i;:::-;49785:9;;49742:65;;-1:-1:-1;;;49742:65:0;;-1:-1:-1;;;;;49785:9:0;;;49742:65;;;13975:74:1;14065:18;;;14058:34;;;49688:47:0;;-1:-1:-1;49742:34:0;;;;;13948:18:1;;49742:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;49814:9:0;;:52;;;;;;;;20841:25:1;;;20882:18;;;20875:34;;;49855:10:0;20925:18:1;;;20918:83;-1:-1:-1;;;;;49814:9:0;;;;:20;;20814:18:1;;49814:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;49879:22:0;;;;:13;:22;;;;;;;;49902:10;49879:34;;;;;;;:47;;49917:9;;-1:-1:-1;49879:34:0;;:22;:47;;49917:9;;49879:47;:::i;:::-;;;;-1:-1:-1;;49973:8:0;;49933:19;;49955:26;;:15;:26;:::i;:::-;49988:16;;;;:7;:16;;;;;;;;50005:10;49988:28;;;;;;;:42;;;49933:48;-1:-1:-1;50043:24:0;;;50039:116;;;-1:-1:-1;;;;;50078:33:0;;;50112:10;50124:22;50135:11;50124:10;:22;:::i;:::-;50078:69;;-1:-1:-1;;;;;;50078:69:0;;;;;;;-1:-1:-1;;;;;13993:55:1;;;50078:69:0;;;13975:74:1;14065:18;;;14058:34;13948:18;;50078:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50039:116;50168:67;;;21271:25:1;;;21327:2;21312:18;;21305:34;;;21355:18;;;21348:34;;;21413:2;21398:18;;21391:34;;;50224:10:0;21456:3:1;21441:19;;21434:84;50168:67:0;;21258:3:1;21243:19;50168:67:0;;;;;;;-1:-1:-1;50250:11:0;;50263:9;;-1:-1:-1;50263:9:0;-1:-1:-1;49074:1216:0;-1:-1:-1;;;;;;;49074:1216:0:o;50296:1239::-;50402:42;50467;50516:17;-1:-1:-1;;;;;50544:20:0;;;;50540:869;;;50611:100;;50676:10;50611:100;;;12577:34:1;50696:4:0;12627:18:1;;;12620:43;12679:18;;;12672:34;;;12489:18;;50611:100:0;;;-1:-1:-1;;50611:100:0;;;;;;;;;;;;;;-1:-1:-1;;;;;50611:100:0;-1:-1:-1;;;50611:100:0;;;;-1:-1:-1;50540:869:0;;;50742:5;-1:-1:-1;;;;;50729:18:0;:9;-1:-1:-1;;;;;50729:18:0;;50725:684;;;50844:31;50933:7;50878:63;;;;;;20213:25:1;;20201:2;20186:18;;20168:76;50878:63:0;;;;-1:-1:-1;;50878:63:0;;;;;;;;;;;;;;-1:-1:-1;;;;;50878:63:0;;;;;50995:49;50878:63;;-1:-1:-1;;;;;;;;;;50995:29:0;;;:49;;50878:63;;50995:49;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50952:92;;;;51056:13;51084:6;51073:29;;;;;;;;;;;;:::i;:::-;51055:47;;51121:12;:35;;;;-1:-1:-1;;;;;;51137:19:0;;51146:10;51137:19;51121:35;51113:61;;;;-1:-1:-1;;;51113:61:0;;17776:2:1;51113:61:0;;;17758:21:1;17815:2;17795:18;;;17788:30;17854:15;17834:18;;;17827:43;17887:18;;51113:61:0;17748:163:1;51113:61:0;51192:52;;;;;20213:25:1;;;20186:18;;51192:52:0;;;-1:-1:-1;;51192:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;51192:52:0;;;;;;-1:-1:-1;50725:684:0;;-1:-1:-1;;;;50725:684:0;;51297:104;;51366:10;51297:104;;;12577:34:1;51386:4:0;12627:18:1;;;12620:43;12679:18;;;12672:34;;;12489:18;;51297:104:0;;;-1:-1:-1;;51297:104:0;;;;;;;;;;;;;;-1:-1:-1;;;;;51297:104:0;;;;;;-1:-1:-1;50725:684:0;51416:12;51430:23;51465:9;-1:-1:-1;;;;;51457:23:0;51481:4;51457:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51415:71;;;;51501:7;51517:10;51493:36;;;;;-1:-1:-1;;;51493:36:0;;;;;;;;:::i;:::-;;50296:1239;;;;;;;:::o;51541:927::-;51654:42;51719;51768:17;-1:-1:-1;;;;;51796:20:0;;;;51792:550;;;51863:64;;-1:-1:-1;;;;;13993:55:1;;51863:64:0;;;13975:74:1;14065:18;;;14058:34;;;13948:18;;51863:64:0;;;-1:-1:-1;;51863:64:0;;;;;;;;;;;;;;-1:-1:-1;;;;;51863:64:0;-1:-1:-1;;;51863:64:0;;;;-1:-1:-1;51792:550:0;;;51958:5;-1:-1:-1;;;;;51945:18:0;:9;-1:-1:-1;;;;;51945:18:0;;51941:401;;;52008:93;;;;;20457:25:1;;;52095:1:0;20498:18:1;;;20491:45;-1:-1:-1;;;;;20572:55:1;;20552:18;;;20545:83;20430:18;;52008:93:0;;;-1:-1:-1;;52008:93:0;;;;;;;;;;;;;;-1:-1:-1;;;;;52008:93:0;;;;;;-1:-1:-1;51941:401:0;;;52130:65;;;;;52185:4;52130:65;;;11297:34:1;-1:-1:-1;;;;;11367:15:1;;;11347:18;;;11340:43;52130:46:0;;;;;11209:18:1;;52130:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52126:102;;;52210:7;;;51541:927;;;:::o;52126:102::-;52266:68;;-1:-1:-1;;;;;13675:55:1;;52266:68:0;;;13657:74:1;52329:4:0;13747:18:1;;;13740:50;13630:18;;52266:68:0;;;-1:-1:-1;;52266:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;52266:68:0;-1:-1:-1;;;52266:68:0;;;;-1:-1:-1;51941:401:0;52349:12;52363:23;52398:9;-1:-1:-1;;;;;52390:23:0;52414:4;52390:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52348:71;;;;52434:7;52450:10;52426:36;;;;;-1:-1:-1;;;52426:36:0;;;;;;;;:::i;:::-;;51541:927;;;;;;;;:::o;52556:450::-;52628:12;52650:14;52666;52684:26;52695:6;52703;52684:10;:26::i;:::-;52860:32;;;-1:-1:-1;;9747:2:1;9743:15;;;9739:24;;52860:32:0;;;;9727:37:1;;;;9798:15;;;;9794:24;;;9780:12;;;9773:46;52860:32:0;;;;;;;;;9835:12:1;;;52860:32:0;;52850:43;;;;;;10508:66:1;52758:238:0;;;10496:79:1;10608:15;10591:11;;;10584:74;10674:12;;;10667:28;10725:66;10711:12;;;;10704:88;;;;52758:238:0;;;;;;;;;;10808:12:1;;;;52758:238:0;;52748:249;;;;;;;-1:-1:-1;;;;;52556:450:0:o;53111:341::-;53186:14;53202;53245:6;-1:-1:-1;;;;;53235:16:0;:6;-1:-1:-1;;;;;53235:16:0;;;53227:66;;;;-1:-1:-1;;;53227:66:0;;17370:2:1;53227:66:0;;;17352:21:1;17409:2;17389:18;;;17382:30;17448:34;17428:18;;;17421:62;17519:7;17499:18;;;17492:35;17544:19;;53227:66:0;17342:227:1;53227:66:0;53330:6;-1:-1:-1;;;;;53321:15:0;:6;-1:-1:-1;;;;;53321:15:0;;:53;;53359:6;53367;53321:53;;;53340:6;53348;53321:53;53302:72;;-1:-1:-1;53302:72:0;-1:-1:-1;;;;;;53391:20:0;;53383:63;;;;-1:-1:-1;;;53383:63:0;;19550:2:1;53383:63:0;;;19532:21:1;19589:2;19569:18;;;19562:30;19628:32;19608:18;;;19601:60;19678:18;;53383:63:0;19522:180:1;53383:63:0;53111:341;;;;;:::o;14:743:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;232:18;228:2;225:26;222:2;;;254:18;;:::i;:::-;300:2;297:1;293:10;323:28;347:2;343;339:11;323:28;:::i;:::-;385:15;;;416:12;;;;448:15;;;482;;;478:24;;475:33;-1:-1:-1;472:2:1;;;525:5;518;511:20;472:2;551:5;542:14;;565:163;579:2;576:1;573:9;565:163;;;636:17;;624:30;;597:1;590:9;;;;;674:12;;;;706;;565:163;;;-1:-1:-1;746:5:1;78:679;-1:-1:-1;;;;;;;78:679:1:o;762:550::-;804:5;857:3;850:4;842:6;838:17;834:27;824:2;;879:5;872;865:20;824:2;919:6;906:20;945:18;941:2;938:26;935:2;;;967:18;;:::i;:::-;1011:55;1054:2;1035:13;;-1:-1:-1;;1031:27:1;1060:4;1027:38;1011:55;:::i;:::-;1091:2;1082:7;1075:19;1137:3;1130:4;1125:2;1117:6;1113:15;1109:26;1106:35;1103:2;;;1158:5;1151;1144:20;1103:2;1227;1220:4;1212:6;1208:17;1201:4;1192:7;1188:18;1175:55;1250:16;;;1268:4;1246:27;1239:42;;;;1254:7;814:498;-1:-1:-1;;814:498:1:o;1317:257::-;1376:6;1429:2;1417:9;1408:7;1404:23;1400:32;1397:2;;;1450:6;1442;1435:22;1397:2;1494:9;1481:23;1513:31;1538:5;1513:31;:::i;:::-;1563:5;1387:187;-1:-1:-1;;;1387:187:1:o;1579:261::-;1649:6;1702:2;1690:9;1681:7;1677:23;1673:32;1670:2;;;1723:6;1715;1708:22;1670:2;1760:9;1754:16;1779:31;1804:5;1779:31;:::i;2119:1111::-;2273:6;2281;2289;2297;2305;2358:3;2346:9;2337:7;2333:23;2329:33;2326:2;;;2380:6;2372;2365:22;2326:2;2424:9;2411:23;2443:31;2468:5;2443:31;:::i;:::-;2493:5;-1:-1:-1;2550:2:1;2535:18;;2522:32;2563:33;2522:32;2563:33;:::i;:::-;2615:7;-1:-1:-1;2673:2:1;2658:18;;2645:32;2696:18;2726:14;;;2723:2;;;2758:6;2750;2743:22;2723:2;2786:61;2839:7;2830:6;2819:9;2815:22;2786:61;:::i;:::-;2776:71;;2900:2;2889:9;2885:18;2872:32;2856:48;;2929:2;2919:8;2916:16;2913:2;;;2950:6;2942;2935:22;2913:2;2978:63;3033:7;3022:8;3011:9;3007:24;2978:63;:::i;:::-;2968:73;;3094:3;3083:9;3079:19;3066:33;3050:49;;3124:2;3114:8;3111:16;3108:2;;;3145:6;3137;3130:22;3108:2;;3173:51;3216:7;3205:8;3194:9;3190:24;3173:51;:::i;:::-;3163:61;;;2316:914;;;;;;;;:::o;3235:685::-;3330:6;3338;3346;3354;3407:3;3395:9;3386:7;3382:23;3378:33;3375:2;;;3429:6;3421;3414:22;3375:2;3473:9;3460:23;3492:31;3517:5;3492:31;:::i;:::-;3542:5;-1:-1:-1;3599:2:1;3584:18;;3571:32;3612:33;3571:32;3612:33;:::i;:::-;3664:7;-1:-1:-1;3718:2:1;3703:18;;3690:32;;-1:-1:-1;3773:2:1;3758:18;;3745:32;3800:18;3789:30;;3786:2;;;3837:6;3829;3822:22;3786:2;3865:49;3906:7;3897:6;3886:9;3882:22;3865:49;:::i;:::-;3855:59;;;3365:555;;;;;;;:::o;3925:754::-;4029:6;4037;4045;4053;4061;4114:3;4102:9;4093:7;4089:23;4085:33;4082:2;;;4136:6;4128;4121:22;4082:2;4180:9;4167:23;4199:31;4224:5;4199:31;:::i;:::-;4249:5;-1:-1:-1;4306:2:1;4291:18;;4278:32;4319:33;4278:32;4319:33;:::i;:::-;4371:7;-1:-1:-1;4425:2:1;4410:18;;4397:32;;-1:-1:-1;4476:2:1;4461:18;;4448:32;;-1:-1:-1;4531:3:1;4516:19;;4503:33;4559:18;4548:30;;4545:2;;;4596:6;4588;4581:22;4545:2;4624:49;4665:7;4656:6;4645:9;4641:22;4624:49;:::i;4684:297::-;4751:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:2;;;4825:6;4817;4810:22;4772:2;4862:9;4856:16;4915:5;4908:13;4901:21;4894:5;4891:32;4881:2;;4942:6;4934;4927:22;4986:352;5044:6;5097:2;5085:9;5076:7;5072:23;5068:32;5065:2;;;5118:6;5110;5103:22;5065:2;5162:9;5149:23;-1:-1:-1;;;;;;5205:5:1;5201:78;5194:5;5191:89;5181:2;;5299:6;5291;5284:22;5343:190;5402:6;5455:2;5443:9;5434:7;5430:23;5426:32;5423:2;;;5476:6;5468;5461:22;5423:2;-1:-1:-1;5504:23:1;;5413:120;-1:-1:-1;5413:120:1:o;5538:194::-;5608:6;5661:2;5649:9;5640:7;5636:23;5632:32;5629:2;;;5682:6;5674;5667:22;5629:2;-1:-1:-1;5710:16:1;;5619:113;-1:-1:-1;5619:113:1:o;5737:325::-;5805:6;5813;5866:2;5854:9;5845:7;5841:23;5837:32;5834:2;;;5887:6;5879;5872:22;5834:2;5928:9;5915:23;5905:33;;5988:2;5977:9;5973:18;5960:32;6001:31;6026:5;6001:31;:::i;:::-;6051:5;6041:15;;;5824:238;;;;;:::o;6067:762::-;6203:6;6211;6219;6227;6280:3;6268:9;6259:7;6255:23;6251:33;6248:2;;;6302:6;6294;6287:22;6248:2;6343:9;6330:23;6320:33;;6404:2;6393:9;6389:18;6376:32;6427:18;6468:2;6460:6;6457:14;6454:2;;;6489:6;6481;6474:22;6454:2;6517:61;6570:7;6561:6;6550:9;6546:22;6517:61;:::i;:::-;6507:71;;6631:2;6620:9;6616:18;6603:32;6587:48;;6660:2;6650:8;6647:16;6644:2;;;6681:6;6673;6666:22;6644:2;;6709:63;6764:7;6753:8;6742:9;6738:24;6709:63;:::i;:::-;6238:591;;;;-1:-1:-1;6699:73:1;;6819:2;6804:18;6791:32;;-1:-1:-1;;;6238:591:1:o;6834:831::-;6979:6;6987;6995;7003;7011;7064:3;7052:9;7043:7;7039:23;7035:33;7032:2;;;7086:6;7078;7071:22;7032:2;7127:9;7114:23;7104:33;;7188:2;7177:9;7173:18;7160:32;7211:18;7252:2;7244:6;7241:14;7238:2;;;7273:6;7265;7258:22;7238:2;7301:61;7354:7;7345:6;7334:9;7330:22;7301:61;:::i;:::-;7291:71;;7415:2;7404:9;7400:18;7387:32;7371:48;;7444:2;7434:8;7431:16;7428:2;;;7465:6;7457;7450:22;7428:2;;7493:63;7548:7;7537:8;7526:9;7522:24;7493:63;:::i;:::-;7022:643;;;;-1:-1:-1;7483:73:1;;7603:2;7588:18;;7575:32;;-1:-1:-1;7654:3:1;7639:19;7626:33;;7022:643;-1:-1:-1;;;7022:643:1:o;7670:504::-;7772:6;7780;7788;7841:2;7829:9;7820:7;7816:23;7812:32;7809:2;;;7862:6;7854;7847:22;7809:2;7903:9;7890:23;7880:33;;7964:2;7953:9;7949:18;7936:32;7991:18;7983:6;7980:30;7977:2;;;8028:6;8020;8013:22;7977:2;8056:61;8109:7;8100:6;8089:9;8085:22;8056:61;:::i;:::-;8046:71;;;8164:2;8153:9;8149:18;8136:32;8126:42;;7799:375;;;;;:::o;8179:573::-;8290:6;8298;8306;8314;8367:3;8355:9;8346:7;8342:23;8338:33;8335:2;;;8389:6;8381;8374:22;8335:2;8430:9;8417:23;8407:33;;8491:2;8480:9;8476:18;8463:32;8518:18;8510:6;8507:30;8504:2;;;8555:6;8547;8540:22;8504:2;8583:61;8636:7;8627:6;8616:9;8612:22;8583:61;:::i;:::-;8325:427;;8573:71;;-1:-1:-1;;;;8691:2:1;8676:18;;8663:32;;8742:2;8727:18;8714:32;;8325:427;-1:-1:-1;8325:427:1:o;8757:316::-;8845:6;8853;8861;8914:2;8902:9;8893:7;8889:23;8885:32;8882:2;;;8935:6;8927;8920:22;8882:2;8969:9;8963:16;8953:26;;9019:2;9008:9;9004:18;8998:25;8988:35;;9063:2;9052:9;9048:18;9042:25;9032:35;;8872:201;;;;;:::o;9078:437::-;9131:3;9169:5;9163:12;9196:6;9191:3;9184:19;9222:4;9251:2;9246:3;9242:12;9235:19;;9288:2;9281:5;9277:14;9309:3;9321:169;9335:6;9332:1;9329:13;9321:169;;;9396:13;;9384:26;;9430:12;;;;9465:15;;;;9357:1;9350:9;9321:169;;;-1:-1:-1;9506:3:1;;9139:376;-1:-1:-1;;;;;9139:376:1:o;9858:274::-;9987:3;10025:6;10019:13;10041:53;10087:6;10082:3;10075:4;10067:6;10063:17;10041:53;:::i;:::-;10110:16;;;;;9995:137;-1:-1:-1;;9995:137:1:o;11394:915::-;11770:4;-1:-1:-1;;;;;11880:2:1;11872:6;11868:15;11857:9;11850:34;11932:2;11924:6;11920:15;11915:2;11904:9;11900:18;11893:43;;11972:3;11967:2;11956:9;11952:18;11945:31;11999:57;12051:3;12040:9;12036:19;12028:6;11999:57;:::i;:::-;12104:9;12096:6;12092:22;12087:2;12076:9;12072:18;12065:50;12138:44;12175:6;12167;12138:44;:::i;:::-;12219:22;;;12213:3;12198:19;;;12191:51;;;;-1:-1:-1;12251:20:1;;12300:2;12288:15;;11779:530;-1:-1:-1;;;;11779:530:1:o;14103:465::-;14360:2;14349:9;14342:21;14323:4;14386:56;14438:2;14427:9;14423:18;14415:6;14386:56;:::i;:::-;14490:9;14482:6;14478:22;14473:2;14462:9;14458:18;14451:50;14518:44;14555:6;14547;14518:44;:::i;:::-;14510:52;14332:236;-1:-1:-1;;;;;14332:236:1:o;16029:383::-;16178:2;16167:9;16160:21;16141:4;16210:6;16204:13;16253:6;16248:2;16237:9;16233:18;16226:34;16269:66;16328:6;16323:2;16312:9;16308:18;16303:2;16295:6;16291:15;16269:66;:::i;:::-;16396:2;16375:15;-1:-1:-1;;16371:29:1;16356:45;;;;16403:2;16352:54;;16150:262;-1:-1:-1;;16150:262:1:o;21529:275::-;21600:2;21594:9;21665:2;21646:13;;-1:-1:-1;;21642:27:1;21630:40;;21700:18;21685:34;;21721:22;;;21682:62;21679:2;;;21747:18;;:::i;:::-;21783:2;21776:22;21574:230;;-1:-1:-1;21574:230:1:o;21809:128::-;21849:3;21880:1;21876:6;21873:1;21870:13;21867:2;;;21886:18;;:::i;:::-;-1:-1:-1;21922:9:1;;21857:80::o;21942:168::-;21982:7;22048:1;22044;22040:6;22036:14;22033:1;22030:21;22025:1;22018:9;22011:17;22007:45;22004:2;;;22055:18;;:::i;:::-;-1:-1:-1;22095:9:1;;21994:116::o;22115:125::-;22155:4;22183:1;22180;22177:8;22174:2;;;22188:18;;:::i;:::-;-1:-1:-1;22225:9:1;;22164:76::o;22245:258::-;22317:1;22327:113;22341:6;22338:1;22335:13;22327:113;;;22417:11;;;22411:18;22398:11;;;22391:39;22363:2;22356:10;22327:113;;;22458:6;22455:1;22452:13;22449:2;;;22493:1;22484:6;22479:3;22475:16;22468:27;22449:2;;22298:205;;;:::o;22508:135::-;22547:3;-1:-1:-1;;22568:17:1;;22565:2;;;22588:18;;:::i;:::-;-1:-1:-1;22635:1:1;22624:13;;22555:88::o;22648:184::-;-1:-1:-1;;;22697:1:1;22690:88;22797:4;22794:1;22787:15;22821:4;22818:1;22811:15;22837:184;-1:-1:-1;;;22886:1:1;22879:88;22986:4;22983:1;22976:15;23010:4;23007:1;23000:15;23026:154;-1:-1:-1;;;;;23105:5:1;23101:54;23094:5;23091:65;23081:2;;23170:1;23167;23160:12
Swarm Source
ipfs://a2c32c019939952f913af6773d7ef04b77b5fe645c085e3ac091c8fd97784f34
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $79.92 | 2 | $159.84 |
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.