More Info
Private Name Tags
Latest 25 from a total of 443 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Rewards | 20033501 | 37 days ago | IN | 0 ETH | 0.00146101 | ||||
Claim Rewards | 20018420 | 39 days ago | IN | 0 ETH | 0.0007132 | ||||
Claim Rewards | 19833047 | 65 days ago | IN | 0 ETH | 0.00045453 | ||||
Claim Rewards | 19832308 | 65 days ago | IN | 0 ETH | 0.00041876 | ||||
Claim Rewards | 19825494 | 66 days ago | IN | 0 ETH | 0.00052559 | ||||
Claim Rewards | 19818726 | 67 days ago | IN | 0 ETH | 0.00162421 | ||||
Claim Rewards | 19816013 | 67 days ago | IN | 0 ETH | 0.00034089 | ||||
Claim Rewards | 19801651 | 69 days ago | IN | 0 ETH | 0.00042501 | ||||
Claim Rewards | 19797096 | 70 days ago | IN | 0 ETH | 0.00062091 | ||||
Claim Rewards | 19760752 | 75 days ago | IN | 0 ETH | 0.00083711 | ||||
Withdraw | 19736450 | 78 days ago | IN | 0 ETH | 0.00071948 | ||||
Claim Rewards | 19728969 | 79 days ago | IN | 0 ETH | 0.00062258 | ||||
Claim Rewards | 19728709 | 79 days ago | IN | 0 ETH | 0.00074357 | ||||
Claim Rewards | 19711900 | 82 days ago | IN | 0 ETH | 0.00240765 | ||||
Claim Rewards | 19700098 | 83 days ago | IN | 0 ETH | 0.00046931 | ||||
Claim Rewards | 19698703 | 84 days ago | IN | 0 ETH | 0.00057826 | ||||
Claim Rewards | 19698650 | 84 days ago | IN | 0 ETH | 0.00060122 | ||||
Claim Rewards | 19697397 | 84 days ago | IN | 0 ETH | 0.00170046 | ||||
Claim Rewards | 19693913 | 84 days ago | IN | 0 ETH | 0.00062681 | ||||
Claim Rewards | 19681418 | 86 days ago | IN | 0 ETH | 0.00062234 | ||||
Claim Rewards | 19656517 | 89 days ago | IN | 0 ETH | 0.00235761 | ||||
Claim Rewards | 19654658 | 90 days ago | IN | 0 ETH | 0.00100377 | ||||
Claim Rewards | 19653022 | 90 days ago | IN | 0 ETH | 0.00093049 | ||||
Claim Rewards | 19629539 | 93 days ago | IN | 0 ETH | 0.00137195 | ||||
Claim Rewards | 19614825 | 95 days ago | IN | 0 ETH | 0.00184693 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WizardStaking
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-10 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts v4.4.0 (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // 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; } } // File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol // OpenZeppelin Contracts v4.4.0 (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.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 IERC721Receiver { /** * @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: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.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 IERC165 { /** * @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: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: WizardStaking.sol pragma solidity ^0.8.0; contract WizardStaking is Ownable, IERC721Receiver, ReentrancyGuard, Pausable { using EnumerableSet for EnumerableSet.UintSet; //addresses address nullAddress = 0x0000000000000000000000000000000000000000; address public stakingToken; address public erc20Address; //uint256's uint256 public expiration; //rate governs how often you receive your token uint256 public rate; // mappings mapping(address => EnumerableSet.UintSet) private _deposits; mapping(address => mapping(uint256 => uint256)) public _depositBlocks; mapping(uint256 => address) private _tokenErc20; constructor( address _stakingToken, uint256 _rate, uint256 _expiration, address _erc20Address ) { stakingToken = _stakingToken; rate = _rate; expiration = block.number + _expiration; erc20Address = _erc20Address; _pause(); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } /* STAKING MECHANICS */ // Set a multiplier for how many tokens to earn each time a block passes. function setRate(uint256 _rate) public onlyOwner { rate = _rate; } // Set this to a block to disable the ability to continue accruing tokens past that block number. function setExpiration(uint256 _expiration) public onlyOwner { expiration = block.number + _expiration; } // Set this to update the ERC20 address to receive from staking function setERC20Address(address _erc20address) public onlyOwner { require( erc20Address == address(0), "Staking: ERC20 address already set" ); erc20Address = _erc20address; } //check deposit amount. function depositsOf(address account) external view returns (uint256[] memory) { EnumerableSet.UintSet storage depositSet = _deposits[account]; uint256[] memory tokenIds = new uint256[](depositSet.length()); for (uint256 i; i < depositSet.length(); i++) { tokenIds[i] = depositSet.at(i); } return tokenIds; } function balanceOf(address account) external view returns (uint256) { return _deposits[account].length(); } function calculateRewards(address account, uint256[] memory tokenIds) public view returns (uint256[] memory rewards) { rewards = new uint256[](tokenIds.length); for (uint256 i; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; rewards[i] = rate * (_deposits[account].contains(tokenId) ? 1 : 0) * (Math.min(block.number, expiration) - _depositBlocks[account][tokenId]); } return rewards; } //reward amount by address/tokenIds[] function calculateReward(address account, uint256 tokenId) public view returns (uint256) { require( Math.min(block.number, expiration) > _depositBlocks[account][tokenId], "Invalid blocks" ); return rate * (_deposits[account].contains(tokenId) ? 1 : 0) * (Math.min(block.number, expiration) - _depositBlocks[account][tokenId]); } //reward claim function function claimRewards(uint256[] calldata tokenIds) public whenNotPaused { uint256 reward; uint256 blockCur = Math.min(block.number, expiration); for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i]); _depositBlocks[msg.sender][tokenIds[i]] = blockCur; } if (reward > 0) { require( erc20Address != address(0), "Staking: ERC20 address not set" ); IERC20(erc20Address).transfer(msg.sender, reward); } } //deposit function. function deposit(uint256[] calldata tokenIds) external whenNotPaused { require(msg.sender != stakingToken, "Invalid address"); claimRewards(tokenIds); for (uint256 i; i < tokenIds.length; i++) { IERC721(stakingToken).safeTransferFrom( msg.sender, address(this), tokenIds[i], "" ); _deposits[msg.sender].add(tokenIds[i]); } } function autoStake(address from, uint256 tokenId) external { require(msg.sender == stakingToken, "Invalid address"); require( IERC721(stakingToken).ownerOf(tokenId) == address(this), "Invalid tokenId" ); _deposits[from].add(tokenId); _depositBlocks[from][tokenId] = Math.min(block.number, expiration); } //withdrawal function. function withdraw(uint256[] calldata tokenIds) external whenNotPaused nonReentrant { claimRewards(tokenIds); for (uint256 i; i < tokenIds.length; i++) { require( _deposits[msg.sender].contains(tokenIds[i]), "Staking: token not deposited" ); _deposits[msg.sender].remove(tokenIds[i]); IERC721(stakingToken).safeTransferFrom( address(this), msg.sender, tokenIds[i], "" ); } } //withdrawal function. function withdrawTokens() external onlyOwner { uint256 tokenSupply = IERC20(erc20Address).balanceOf(address(this)); IERC20(erc20Address).transfer(msg.sender, tokenSupply); } function onERC721Received( address, address, uint256, bytes calldata ) external pure override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_erc20Address","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_depositBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"autoStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"calculateRewards","outputs":[{"internalType":"uint256[]","name":"rewards","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"depositsOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20address","type":"address"}],"name":"setERC20Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"setExpiration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260028054610100600160a81b03191690553480156200002257600080fd5b5060405162001c2b38038062001c2b8339810160408190526200004591620001c3565b6200005962000053620000c5565b620000c9565b600180556002805460ff19169055600380546001600160a01b0319166001600160a01b03861617905560068390556200009382436200024b565b600555600480546001600160a01b0319166001600160a01b038316179055620000bb62000119565b5050505062000270565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001236200019d565b156200014c5760405162461bcd60e51b8152600401620001439062000221565b60405180910390fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862000184620000c5565b6040516200019391906200020d565b60405180910390a1565b60025460ff1690565b80516001600160a01b0381168114620001be57600080fd5b919050565b60008060008060808587031215620001d9578384fd5b620001e485620001a6565b935060208501519250604085015191506200020260608601620001a6565b905092959194509250565b6001600160a01b0391909116815260200190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600082198211156200026b57634e487b7160e01b81526011600452602481fd5b500190565b6119ab80620002806000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80635eac6239116100c35780638da5cb5b1161007c5780638da5cb5b1461029c578063983d95ce146102a4578063b343ae14146102b7578063baffb69f146102ca578063e3a9db1a146102dd578063f2fde38b146102f057610158565b80635eac62391461025657806370a0823114610269578063715018a61461027c57806372f702f3146102845780638456cb591461028c5780638d8f2adb1461029457610158565b80633f4ba83a116101155780633f4ba83a146101f857806341bec0d2146102005780634665096d14610213578063515a20ba1461021b578063598b8e711461022e5780635c975abb1461024157610158565b8063068c526f1461015d578063150b7a02146101865780631852e8d9146101a6578063276184ae146101c65780632c4e722e146101db57806334fcf437146101e3575b600080fd5b61017061016b366004611411565b610303565b60405161017d919061162a565b60405180910390f35b610199610194366004611377565b61046e565b60405161017d9190611679565b6101b96101b43660046114e0565b61047f565b60405161017d91906118c2565b6101ce610564565b60405161017d91906115ca565b6101b9610573565b6101f66101f136600461159a565b610579565b005b6101f66105bd565b6101f661020e36600461133f565b610606565b6101b9610690565b6101f661022936600461159a565b610696565b6101f661023c36600461150b565b6106e5565b61024961082d565b60405161017d919061166e565b6101f661026436600461150b565b610836565b6101b961027736600461133f565b6109cc565b6101f66109ed565b6101ce610a36565b6101f6610a45565b6101f6610a8c565b6101ce610bd5565b6101f66102b236600461150b565b610be4565b6101b96102c53660046114e0565b610d8b565b6101f66102d83660046114e0565b610da8565b6101706102eb36600461133f565b610ecd565b6101f66102fe36600461133f565b610fa5565b6060815167ffffffffffffffff81111561032d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610356578160200160208202803683370190505b50905060005b825181101561046657600083828151811061038757634e487b7160e01b600052603260045260246000fd5b6020026020010151905060086000866001600160a01b03166001600160a01b031681526020019081526020016000206000828152602001908152602001600020546103d443600554611016565b6103de9190611902565b6001600160a01b0386166000908152600760205260409020610400908361102c565b61040b57600061040e565b60015b60ff1660065461041e91906118e3565b61042891906118e3565b83838151811061044857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061045e81611919565b91505061035c565b505b92915050565b630a85bd0160e11b95945050505050565b6001600160a01b03821660009081526008602090815260408083208484529091528120546005546104b1904390611016565b116104d75760405162461bcd60e51b81526004016104ce9061189a565b60405180910390fd5b6001600160a01b0383166000908152600860209081526040808320858452909152902054600554610509904390611016565b6105139190611902565b6001600160a01b0384166000908152600760205260409020610535908461102c565b610540576000610543565b60015b60ff1660065461055391906118e3565b61055d91906118e3565b9392505050565b6004546001600160a01b031681565b60065481565b610581611038565b6001600160a01b0316610592610bd5565b6001600160a01b0316146105b85760405162461bcd60e51b81526004016104ce906117f7565b600655565b6105c5611038565b6001600160a01b03166105d6610bd5565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016104ce906117f7565b61060461103c565b565b61060e611038565b6001600160a01b031661061f610bd5565b6001600160a01b0316146106455760405162461bcd60e51b81526004016104ce906117f7565b6004546001600160a01b03161561066e5760405162461bcd60e51b81526004016104ce90611754565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60055481565b61069e611038565b6001600160a01b03166106af610bd5565b6001600160a01b0316146106d55760405162461bcd60e51b81526004016104ce906117f7565b6106df81436118cb565b60055550565b6106ed61082d565b1561070a5760405162461bcd60e51b81526004016104ce90611796565b6003546001600160a01b03163314156107355760405162461bcd60e51b81526004016104ce906116bc565b61073f8282610836565b60005b81811015610828576003546001600160a01b031663b88d4fde333086868681811061077d57634e487b7160e01b600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b81526004016107a2939291906115de565b600060405180830381600087803b1580156107bc57600080fd5b505af11580156107d0573d6000803e3d6000fd5b505050506108158383838181106107f757634e487b7160e01b600052603260045260246000fd5b336000908152600760209081526040909120939102013590506110aa565b508061082081611919565b915050610742565b505050565b60025460ff1690565b61083e61082d565b1561085b5760405162461bcd60e51b81526004016104ce90611796565b60008061086a43600554611016565b905060005b83811015610912576108a73386868481811061089b57634e487b7160e01b600052603260045260246000fd5b9050602002013561047f565b6108b190846118cb565b3360009081526008602052604081209194508391908787858181106108e657634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002081905550808061090a90611919565b91505061086f565b5081156109c6576004546001600160a01b03166109415760405162461bcd60e51b81526004016104ce906117c0565b6004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610972913391879101611611565b602060405180830381600087803b15801561098c57600080fd5b505af11580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c4919061157a565b505b50505050565b6001600160a01b0381166000908152600760205260408120610468906110b6565b6109f5611038565b6001600160a01b0316610a06610bd5565b6001600160a01b031614610a2c5760405162461bcd60e51b81526004016104ce906117f7565b61060460006110c1565b6003546001600160a01b031681565b610a4d611038565b6001600160a01b0316610a5e610bd5565b6001600160a01b031614610a845760405162461bcd60e51b81526004016104ce906117f7565b610604611111565b610a94611038565b6001600160a01b0316610aa5610bd5565b6001600160a01b031614610acb5760405162461bcd60e51b81526004016104ce906117f7565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a0823191610afd913091016115ca565b60206040518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d91906115b2565b6004805460405163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91610b7f913391869101611611565b602060405180830381600087803b158015610b9957600080fd5b505af1158015610bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd1919061157a565b5050565b6000546001600160a01b031690565b610bec61082d565b15610c095760405162461bcd60e51b81526004016104ce90611796565b60026001541415610c2c5760405162461bcd60e51b81526004016104ce90611863565b6002600155610c3b8282610836565b60005b81811015610d8257610c87838383818110610c6957634e487b7160e01b600052603260045260246000fd5b3360009081526007602090815260409091209391020135905061102c565b610ca35760405162461bcd60e51b81526004016104ce9061182c565b610ce4838383818110610cc657634e487b7160e01b600052603260045260246000fd5b3360009081526007602090815260409091209391020135905061116c565b506003546001600160a01b031663b88d4fde3033868686818110610d1857634e487b7160e01b600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401610d3d939291906115de565b600060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b505050508080610d7a90611919565b915050610c3e565b50506001805550565b600860209081526000928352604080842090915290825290205481565b6003546001600160a01b03163314610dd25760405162461bcd60e51b81526004016104ce906116bc565b6003546040516331a9108f60e11b815230916001600160a01b031690636352211e90610e029085906004016118c2565b60206040518083038186803b158015610e1a57600080fd5b505afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e52919061135b565b6001600160a01b031614610e785760405162461bcd60e51b81526004016104ce9061172b565b6001600160a01b0382166000908152600760205260409020610e9a90826110aa565b50610ea743600554611016565b6001600160a01b0390921660009081526008602090815260408083209383529290522055565b6001600160a01b0381166000908152600760205260408120606091610ef1826110b6565b67ffffffffffffffff811115610f1757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f40578160200160208202803683370190505b50905060005b610f4f836110b6565b811015610f9d57610f608382611178565b828281518110610f8057634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610f9581611919565b915050610f46565b509392505050565b610fad611038565b6001600160a01b0316610fbe610bd5565b6001600160a01b031614610fe45760405162461bcd60e51b81526004016104ce906117f7565b6001600160a01b03811661100a5760405162461bcd60e51b81526004016104ce906116e5565b611013816110c1565b50565b6000818310611025578161055d565b5090919050565b600061055d8383611184565b3390565b61104461082d565b6110605760405162461bcd60e51b81526004016104ce9061168e565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611093611038565b6040516110a091906115ca565b60405180910390a1565b600061055d838361119c565b6000610468826111e6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61111961082d565b156111365760405162461bcd60e51b81526004016104ce90611796565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611093611038565b600061055d83836111ea565b600061055d8383611307565b60009081526001919091016020526040902054151590565b60006111a88383611184565b6111de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610468565b506000610468565b5490565b600081815260018301602052604081205480156112fd57600061120e600183611902565b855490915060009061122290600190611902565b90508181146112a357600086600001828154811061125057634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061128157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806112c257634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610468565b6000915050610468565b600082600001828154811061132c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600060208284031215611350578081fd5b813561055d81611960565b60006020828403121561136c578081fd5b815161055d81611960565b60008060008060006080868803121561138e578081fd5b853561139981611960565b945060208601356113a981611960565b935060408601359250606086013567ffffffffffffffff808211156113cc578283fd5b818801915088601f8301126113df578283fd5b8135818111156113ed578384fd5b8960208285010111156113fe578384fd5b9699959850939650602001949392505050565b60008060408385031215611423578182fd5b823561142e81611960565b915060208381013567ffffffffffffffff8082111561144b578384fd5b818601915086601f83011261145e578384fd5b8135818111156114705761147061194a565b8381026040518582820101818110858211171561148f5761148f61194a565b604052828152858101935084860182860187018b10156114ad578788fd5b8795505b838610156114cf5780358552600195909501949386019386016114b1565b508096505050505050509250929050565b600080604083850312156114f2578182fd5b82356114fd81611960565b946020939093013593505050565b6000806020838503121561151d578182fd5b823567ffffffffffffffff80821115611534578384fd5b818501915085601f830112611547578384fd5b813581811115611555578485fd5b8660208083028501011115611568578485fd5b60209290920196919550909350505050565b60006020828403121561158b578081fd5b8151801515811461055d578182fd5b6000602082840312156115ab578081fd5b5035919050565b6000602082840312156115c3578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260806060820181905260009082015260a00190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561166257835183529284019291840191600101611646565b50909695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b60208082526022908201527f5374616b696e673a204552433230206164647265737320616c72656164792073604082015261195d60f21b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601e908201527f5374616b696e673a2045524332302061646472657373206e6f74207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5374616b696e673a20746f6b656e206e6f74206465706f736974656400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600e908201526d496e76616c696420626c6f636b7360901b604082015260600190565b90815260200190565b600082198211156118de576118de611934565b500190565b60008160001904831182151516156118fd576118fd611934565b500290565b60008282101561191457611914611934565b500390565b600060001982141561192d5761192d611934565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461101357600080fdfea264697066735822122002d513b1a12f7b268601b762a43ea2baf2fdd363e7db6ad9b00f2761ef10753064736f6c63430008000033000000000000000000000000a7d0043760b936c2416e07203ace2546f1dbc9c00000000000000000000000000000000000000000000000000005ebd312a02aaa0000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80635eac6239116100c35780638da5cb5b1161007c5780638da5cb5b1461029c578063983d95ce146102a4578063b343ae14146102b7578063baffb69f146102ca578063e3a9db1a146102dd578063f2fde38b146102f057610158565b80635eac62391461025657806370a0823114610269578063715018a61461027c57806372f702f3146102845780638456cb591461028c5780638d8f2adb1461029457610158565b80633f4ba83a116101155780633f4ba83a146101f857806341bec0d2146102005780634665096d14610213578063515a20ba1461021b578063598b8e711461022e5780635c975abb1461024157610158565b8063068c526f1461015d578063150b7a02146101865780631852e8d9146101a6578063276184ae146101c65780632c4e722e146101db57806334fcf437146101e3575b600080fd5b61017061016b366004611411565b610303565b60405161017d919061162a565b60405180910390f35b610199610194366004611377565b61046e565b60405161017d9190611679565b6101b96101b43660046114e0565b61047f565b60405161017d91906118c2565b6101ce610564565b60405161017d91906115ca565b6101b9610573565b6101f66101f136600461159a565b610579565b005b6101f66105bd565b6101f661020e36600461133f565b610606565b6101b9610690565b6101f661022936600461159a565b610696565b6101f661023c36600461150b565b6106e5565b61024961082d565b60405161017d919061166e565b6101f661026436600461150b565b610836565b6101b961027736600461133f565b6109cc565b6101f66109ed565b6101ce610a36565b6101f6610a45565b6101f6610a8c565b6101ce610bd5565b6101f66102b236600461150b565b610be4565b6101b96102c53660046114e0565b610d8b565b6101f66102d83660046114e0565b610da8565b6101706102eb36600461133f565b610ecd565b6101f66102fe36600461133f565b610fa5565b6060815167ffffffffffffffff81111561032d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610356578160200160208202803683370190505b50905060005b825181101561046657600083828151811061038757634e487b7160e01b600052603260045260246000fd5b6020026020010151905060086000866001600160a01b03166001600160a01b031681526020019081526020016000206000828152602001908152602001600020546103d443600554611016565b6103de9190611902565b6001600160a01b0386166000908152600760205260409020610400908361102c565b61040b57600061040e565b60015b60ff1660065461041e91906118e3565b61042891906118e3565b83838151811061044857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061045e81611919565b91505061035c565b505b92915050565b630a85bd0160e11b95945050505050565b6001600160a01b03821660009081526008602090815260408083208484529091528120546005546104b1904390611016565b116104d75760405162461bcd60e51b81526004016104ce9061189a565b60405180910390fd5b6001600160a01b0383166000908152600860209081526040808320858452909152902054600554610509904390611016565b6105139190611902565b6001600160a01b0384166000908152600760205260409020610535908461102c565b610540576000610543565b60015b60ff1660065461055391906118e3565b61055d91906118e3565b9392505050565b6004546001600160a01b031681565b60065481565b610581611038565b6001600160a01b0316610592610bd5565b6001600160a01b0316146105b85760405162461bcd60e51b81526004016104ce906117f7565b600655565b6105c5611038565b6001600160a01b03166105d6610bd5565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016104ce906117f7565b61060461103c565b565b61060e611038565b6001600160a01b031661061f610bd5565b6001600160a01b0316146106455760405162461bcd60e51b81526004016104ce906117f7565b6004546001600160a01b03161561066e5760405162461bcd60e51b81526004016104ce90611754565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60055481565b61069e611038565b6001600160a01b03166106af610bd5565b6001600160a01b0316146106d55760405162461bcd60e51b81526004016104ce906117f7565b6106df81436118cb565b60055550565b6106ed61082d565b1561070a5760405162461bcd60e51b81526004016104ce90611796565b6003546001600160a01b03163314156107355760405162461bcd60e51b81526004016104ce906116bc565b61073f8282610836565b60005b81811015610828576003546001600160a01b031663b88d4fde333086868681811061077d57634e487b7160e01b600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b81526004016107a2939291906115de565b600060405180830381600087803b1580156107bc57600080fd5b505af11580156107d0573d6000803e3d6000fd5b505050506108158383838181106107f757634e487b7160e01b600052603260045260246000fd5b336000908152600760209081526040909120939102013590506110aa565b508061082081611919565b915050610742565b505050565b60025460ff1690565b61083e61082d565b1561085b5760405162461bcd60e51b81526004016104ce90611796565b60008061086a43600554611016565b905060005b83811015610912576108a73386868481811061089b57634e487b7160e01b600052603260045260246000fd5b9050602002013561047f565b6108b190846118cb565b3360009081526008602052604081209194508391908787858181106108e657634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002081905550808061090a90611919565b91505061086f565b5081156109c6576004546001600160a01b03166109415760405162461bcd60e51b81526004016104ce906117c0565b6004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610972913391879101611611565b602060405180830381600087803b15801561098c57600080fd5b505af11580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c4919061157a565b505b50505050565b6001600160a01b0381166000908152600760205260408120610468906110b6565b6109f5611038565b6001600160a01b0316610a06610bd5565b6001600160a01b031614610a2c5760405162461bcd60e51b81526004016104ce906117f7565b61060460006110c1565b6003546001600160a01b031681565b610a4d611038565b6001600160a01b0316610a5e610bd5565b6001600160a01b031614610a845760405162461bcd60e51b81526004016104ce906117f7565b610604611111565b610a94611038565b6001600160a01b0316610aa5610bd5565b6001600160a01b031614610acb5760405162461bcd60e51b81526004016104ce906117f7565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a0823191610afd913091016115ca565b60206040518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d91906115b2565b6004805460405163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91610b7f913391869101611611565b602060405180830381600087803b158015610b9957600080fd5b505af1158015610bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd1919061157a565b5050565b6000546001600160a01b031690565b610bec61082d565b15610c095760405162461bcd60e51b81526004016104ce90611796565b60026001541415610c2c5760405162461bcd60e51b81526004016104ce90611863565b6002600155610c3b8282610836565b60005b81811015610d8257610c87838383818110610c6957634e487b7160e01b600052603260045260246000fd5b3360009081526007602090815260409091209391020135905061102c565b610ca35760405162461bcd60e51b81526004016104ce9061182c565b610ce4838383818110610cc657634e487b7160e01b600052603260045260246000fd5b3360009081526007602090815260409091209391020135905061116c565b506003546001600160a01b031663b88d4fde3033868686818110610d1857634e487b7160e01b600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401610d3d939291906115de565b600060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b505050508080610d7a90611919565b915050610c3e565b50506001805550565b600860209081526000928352604080842090915290825290205481565b6003546001600160a01b03163314610dd25760405162461bcd60e51b81526004016104ce906116bc565b6003546040516331a9108f60e11b815230916001600160a01b031690636352211e90610e029085906004016118c2565b60206040518083038186803b158015610e1a57600080fd5b505afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e52919061135b565b6001600160a01b031614610e785760405162461bcd60e51b81526004016104ce9061172b565b6001600160a01b0382166000908152600760205260409020610e9a90826110aa565b50610ea743600554611016565b6001600160a01b0390921660009081526008602090815260408083209383529290522055565b6001600160a01b0381166000908152600760205260408120606091610ef1826110b6565b67ffffffffffffffff811115610f1757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f40578160200160208202803683370190505b50905060005b610f4f836110b6565b811015610f9d57610f608382611178565b828281518110610f8057634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610f9581611919565b915050610f46565b509392505050565b610fad611038565b6001600160a01b0316610fbe610bd5565b6001600160a01b031614610fe45760405162461bcd60e51b81526004016104ce906117f7565b6001600160a01b03811661100a5760405162461bcd60e51b81526004016104ce906116e5565b611013816110c1565b50565b6000818310611025578161055d565b5090919050565b600061055d8383611184565b3390565b61104461082d565b6110605760405162461bcd60e51b81526004016104ce9061168e565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611093611038565b6040516110a091906115ca565b60405180910390a1565b600061055d838361119c565b6000610468826111e6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61111961082d565b156111365760405162461bcd60e51b81526004016104ce90611796565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611093611038565b600061055d83836111ea565b600061055d8383611307565b60009081526001919091016020526040902054151590565b60006111a88383611184565b6111de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610468565b506000610468565b5490565b600081815260018301602052604081205480156112fd57600061120e600183611902565b855490915060009061122290600190611902565b90508181146112a357600086600001828154811061125057634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061128157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806112c257634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610468565b6000915050610468565b600082600001828154811061132c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600060208284031215611350578081fd5b813561055d81611960565b60006020828403121561136c578081fd5b815161055d81611960565b60008060008060006080868803121561138e578081fd5b853561139981611960565b945060208601356113a981611960565b935060408601359250606086013567ffffffffffffffff808211156113cc578283fd5b818801915088601f8301126113df578283fd5b8135818111156113ed578384fd5b8960208285010111156113fe578384fd5b9699959850939650602001949392505050565b60008060408385031215611423578182fd5b823561142e81611960565b915060208381013567ffffffffffffffff8082111561144b578384fd5b818601915086601f83011261145e578384fd5b8135818111156114705761147061194a565b8381026040518582820101818110858211171561148f5761148f61194a565b604052828152858101935084860182860187018b10156114ad578788fd5b8795505b838610156114cf5780358552600195909501949386019386016114b1565b508096505050505050509250929050565b600080604083850312156114f2578182fd5b82356114fd81611960565b946020939093013593505050565b6000806020838503121561151d578182fd5b823567ffffffffffffffff80821115611534578384fd5b818501915085601f830112611547578384fd5b813581811115611555578485fd5b8660208083028501011115611568578485fd5b60209290920196919550909350505050565b60006020828403121561158b578081fd5b8151801515811461055d578182fd5b6000602082840312156115ab578081fd5b5035919050565b6000602082840312156115c3578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260806060820181905260009082015260a00190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561166257835183529284019291840191600101611646565b50909695505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b60208082526022908201527f5374616b696e673a204552433230206164647265737320616c72656164792073604082015261195d60f21b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601e908201527f5374616b696e673a2045524332302061646472657373206e6f74207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5374616b696e673a20746f6b656e206e6f74206465706f736974656400000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600e908201526d496e76616c696420626c6f636b7360901b604082015260600190565b90815260200190565b600082198211156118de576118de611934565b500190565b60008160001904831182151516156118fd576118fd611934565b500290565b60008282101561191457611914611934565b500390565b600060001982141561192d5761192d611934565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461101357600080fdfea264697066735822122002d513b1a12f7b268601b762a43ea2baf2fdd363e7db6ad9b00f2761ef10753064736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a7d0043760b936c2416e07203ace2546f1dbc9c00000000000000000000000000000000000000000000000000005ebd312a02aaa0000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0xa7d0043760B936C2416E07203Ace2546f1dbc9C0
Arg [1] : _rate (uint256): 1666666666666666
Arg [2] : _expiration (uint256): 15000000
Arg [3] : _erc20Address (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a7d0043760b936c2416e07203ace2546f1dbc9c0
Arg [1] : 0000000000000000000000000000000000000000000000000005ebd312a02aaa
Arg [2] : 0000000000000000000000000000000000000000000000000000000000e4e1c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40277:6176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42694:574;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46231:219;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43319:491::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40538:27::-;;;:::i;:::-;;;;;;;:::i;40676:19::-;;;:::i;41494:80::-;;;;;;:::i;:::-;;:::i;:::-;;41311:65;;;:::i;41881:233::-;;;;;;:::i;:::-;;:::i;40591:25::-;;;:::i;41685:119::-;;;;;;:::i;:::-;;:::i;44482:476::-;;;;;;:::i;:::-;;:::i;36484:86::-;;;:::i;:::-;;;;;;;:::i;43847:602::-;;;;;;:::i;:::-;;:::i;42565:121::-;;;;;;:::i;:::-;;:::i;39383:103::-;;;:::i;40504:27::-;;;:::i;41242:61::-;;;:::i;46027:196::-;;;:::i;38732:87::-;;;:::i;45381:610::-;;;;;;:::i;:::-;;:::i;40787:69::-;;;;;;:::i;:::-;;:::i;44966:379::-;;;;;;:::i;:::-;;:::i;42151:406::-;;;;;;:::i;:::-;;:::i;39641:201::-;;;;;;:::i;:::-;;:::i;42694:574::-;42812:24;42878:8;:15;42864:30;;;;;;-1:-1:-1;;;42864:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42864:30:0;;42854:40;;42912:9;42907:327;42927:8;:15;42923:1;:19;42907:327;;;42964:15;42982:8;42991:1;42982:11;;;;;;-1:-1:-1;;;42982:11:0;;;;;;;;;;;;;;;42964:29;;43189:14;:23;43204:7;-1:-1:-1;;;;;43189:23:0;-1:-1:-1;;;;;43189:23:0;;;;;;;;;;;;:32;43213:7;43189:32;;;;;;;;;;;;43131:34;43140:12;43154:10;;43131:8;:34::i;:::-;:90;;;;:::i;:::-;-1:-1:-1;;;;;43065:18:0;;;;;;:9;:18;;;;;:36;;43093:7;43065:27;:36::i;:::-;:44;;43108:1;43065:44;;;43104:1;43065:44;43040:70;;:4;;:70;;;;:::i;:::-;:182;;;;:::i;:::-;43010:7;43018:1;43010:10;;;;;;-1:-1:-1;;;43010:10:0;;;;;;;;;;;;;;;;;;:212;-1:-1:-1;42944:3:0;;;;:::i;:::-;;;;42907:327;;;;42694:574;;;;;:::o;46231:219::-;-1:-1:-1;;;46231:219:0;;;;;;;:::o;43319:491::-;-1:-1:-1;;;;;43527:23:0;;43426:7;43527:23;;;:14;:23;;;;;;;;:32;;;;;;;;;43496:10;;43473:34;;43482:12;;43473:8;:34::i;:::-;:86;43451:150;;;;-1:-1:-1;;;43451:150:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;43769:23:0;;;;;;:14;:23;;;;;;;;:32;;;;;;;;;43738:10;;43715:34;;43724:12;;43715:8;:34::i;:::-;:86;;;;:::i;:::-;-1:-1:-1;;;;;43653:18:0;;;;;;:9;:18;;;;;:36;;43681:7;43653:27;:36::i;:::-;:44;;43696:1;43653:44;;;43692:1;43653:44;43632:66;;:4;;:66;;;;:::i;:::-;:170;;;;:::i;:::-;43612:190;43319:491;-1:-1:-1;;;43319:491:0:o;40538:27::-;;;-1:-1:-1;;;;;40538:27:0;;:::o;40676:19::-;;;;:::o;41494:80::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;41554:4:::1;:12:::0;41494:80::o;41311:65::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;41358:10:::1;:8;:10::i;:::-;41311:65::o:0;41881:233::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;41979:12:::1;::::0;-1:-1:-1;;;;;41979:12:0::1;:26:::0;41957:110:::1;;;;-1:-1:-1::0;;;41957:110:0::1;;;;;;;:::i;:::-;42078:12;:28:::0;;-1:-1:-1;;;;;;42078:28:0::1;-1:-1:-1::0;;;;;42078:28:0;;;::::1;::::0;;;::::1;::::0;;41881:233::o;40591:25::-;;;;:::o;41685:119::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;41770:26:::1;41785:11:::0;41770:12:::1;:26;:::i;:::-;41757:10;:39:::0;-1:-1:-1;41685:119:0:o;44482:476::-;36810:8;:6;:8::i;:::-;36809:9;36801:38;;;;-1:-1:-1;;;36801:38:0;;;;;;;:::i;:::-;44584:12:::1;::::0;-1:-1:-1;;;;;44584:12:0::1;44570:10;:26;;44562:54;;;;-1:-1:-1::0;;;44562:54:0::1;;;;;;;:::i;:::-;44627:22;44640:8;;44627:12;:22::i;:::-;44667:9;44662:289;44678:19:::0;;::::1;44662:289;;;44727:12;::::0;-1:-1:-1;;;;;44727:12:0::1;44719:38;44776:10;44813:4;44837:8:::0;;44846:1;44837:11;;::::1;;;-1:-1:-1::0;;;44837:11:0::1;;;;;;;;;;;;;;;44719:165;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44901:38;44927:8;;44936:1;44927:11;;;;;-1:-1:-1::0;;;44927:11:0::1;;;;;;;;;44911:10;44901:21;::::0;;;:9:::1;44927:11;44901:21:::0;;;;;;;;44927:11;::::1;;;::::0;-1:-1:-1;44901:25:0::1;:38::i;:::-;-1:-1:-1::0;44699:3:0;::::1;::::0;::::1;:::i;:::-;;;;44662:289;;;;44482:476:::0;;:::o;36484:86::-;36555:7;;;;36484:86;:::o;43847:602::-;36810:8;:6;:8::i;:::-;36809:9;36801:38;;;;-1:-1:-1;;;36801:38:0;;;;;;;:::i;:::-;43930:14:::1;43955:16:::0;43974:34:::1;43983:12;43997:10;;43974:8;:34::i;:::-;43955:53;;44026:9;44021:184;44037:19:::0;;::::1;44021:184;;;44088:40;44104:10;44116:8;;44125:1;44116:11;;;;;-1:-1:-1::0;;;44116:11:0::1;;;;;;;;;;;;;;;44088:15;:40::i;:::-;44078:50;::::0;;::::1;:::i;:::-;44158:10;44143:26;::::0;;;:14:::1;:26;::::0;;;;44078:50;;-1:-1:-1;44185:8:0;;44143:26;44170:8;;44179:1;44170:11;;::::1;;;-1:-1:-1::0;;;44170:11:0::1;;;;;;;;;;;;;;;44143:39;;;;;;;;;;;:50;;;;44058:3;;;;;:::i;:::-;;;;44021:184;;;-1:-1:-1::0;44221:10:0;;44217:225:::1;;44274:12;::::0;-1:-1:-1;;;;;44274:12:0::1;44248:118;;;;-1:-1:-1::0;;;44248:118:0::1;;;;;;;:::i;:::-;44388:12;::::0;;44381:49:::1;::::0;-1:-1:-1;;;44381:49:0;;-1:-1:-1;;;;;44388:12:0;;::::1;::::0;44381:29:::1;::::0;:49:::1;::::0;44411:10:::1;::::0;44423:6;;44381:49:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44217:225;36850:1;;43847:602:::0;;:::o;42565:121::-;-1:-1:-1;;;;;42651:18:0;;42624:7;42651:18;;;:9;:18;;;;;:27;;:25;:27::i;39383:103::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;39448:30:::1;39475:1;39448:18;:30::i;40504:27::-:0;;;-1:-1:-1;;;;;40504:27:0;;:::o;41242:61::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;41287:8:::1;:6;:8::i;46027:196::-:0;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;46112:12:::1;::::0;;46105:45:::1;::::0;-1:-1:-1;;;46105:45:0;;46083:19:::1;::::0;-1:-1:-1;;;;;46112:12:0;;::::1;::::0;46105:30:::1;::::0;:45:::1;::::0;46144:4:::1;::::0;46105:45:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46168:12;::::0;;46161:54:::1;::::0;-1:-1:-1;;;46161:54:0;;46083:67;;-1:-1:-1;;;;;;46168:12:0::1;::::0;46161:29:::1;::::0;:54:::1;::::0;46191:10:::1;::::0;46083:67;;46161:54:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39023:1;46027:196::o:0;38732:87::-;38778:7;38805:6;-1:-1:-1;;;;;38805:6:0;38732:87;:::o;45381:610::-;36810:8;:6;:8::i;:::-;36809:9;36801:38;;;;-1:-1:-1;;;36801:38:0;;;;;;;:::i;:::-;6025:1:::1;6623:7;;:19;;6615:63;;;;-1:-1:-1::0;;;6615:63:0::1;;;;;;;:::i;:::-;6025:1;6756:7;:18:::0;45507:22:::2;45520:8:::0;;45507:12:::2;:22::i;:::-;45547:9;45542:442;45558:19:::0;;::::2;45542:442;;;45625:43;45656:8;;45665:1;45656:11;;;;;-1:-1:-1::0;;;45656:11:0::2;;;;;;;;;45635:10;45625:21;::::0;;;:9:::2;45656:11;45625:21:::0;;;;;;;;45656:11;::::2;;;::::0;-1:-1:-1;45625:30:0::2;:43::i;:::-;45599:133;;;;-1:-1:-1::0;;;45599:133:0::2;;;;;;;:::i;:::-;45749:41;45778:8;;45787:1;45778:11;;;;;-1:-1:-1::0;;;45778:11:0::2;;;;;;;;;45759:10;45749:21;::::0;;;:9:::2;45778:11;45749:21:::0;;;;;;;;45778:11;::::2;;;::::0;-1:-1:-1;45749:28:0::2;:41::i;:::-;-1:-1:-1::0;45815:12:0::2;::::0;-1:-1:-1;;;;;45815:12:0::2;45807:38;45872:4;45896:10;45925:8:::0;;45934:1;45925:11;;::::2;;;-1:-1:-1::0;;;45925:11:0::2;;;;;;;;;;;;;;;45807:165;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;45579:3;;;;;:::i;:::-;;;;45542:442;;;-1:-1:-1::0;;5981:1:0::1;6935:22:::0;;-1:-1:-1;45381:610:0:o;40787:69::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;44966:379::-;45058:12;;-1:-1:-1;;;;;45058:12:0;45044:10;:26;45036:54;;;;-1:-1:-1;;;45036:54:0;;;;;;;:::i;:::-;45131:12;;45123:38;;-1:-1:-1;;;45123:38:0;;45173:4;;-1:-1:-1;;;;;45131:12:0;;45123:29;;:38;;45153:7;;45123:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45123:55:0;;45101:120;;;;-1:-1:-1;;;45101:120:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45232:15:0;;;;;;:9;:15;;;;;:28;;45252:7;45232:19;:28::i;:::-;;45303:34;45312:12;45326:10;;45303:8;:34::i;:::-;-1:-1:-1;;;;;45271:20:0;;;;;;;:14;:20;;;;;;;;:29;;;;;;;:66;44966:379::o;42151:406::-;-1:-1:-1;;;;;42315:18:0;;42272:40;42315:18;;;:9;:18;;;;;42238:16;;42386:19;42315:18;42386:17;:19::i;:::-;42372:34;;;;;;-1:-1:-1;;;42372:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42372:34:0;;42344:62;;42424:9;42419:103;42439:19;:10;:17;:19::i;:::-;42435:1;:23;42419:103;;;42494:16;:10;42508:1;42494:13;:16::i;:::-;42480:8;42489:1;42480:11;;;;;;-1:-1:-1;;;42480:11:0;;;;;;;;;;;;;;;;;;:30;42460:3;;;;:::i;:::-;;;;42419:103;;;-1:-1:-1;42541:8:0;42151:406;-1:-1:-1;;;42151:406:0:o;39641:201::-;38963:12;:10;:12::i;:::-;-1:-1:-1;;;;;38952:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38952:23:0;;38944:68;;;;-1:-1:-1;;;38944:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39730:22:0;::::1;39722:73;;;;-1:-1:-1::0;;;39722:73:0::1;;;;;;;:::i;:::-;39806:28;39825:8;39806:18;:28::i;:::-;39641:201:::0;:::o;3421:106::-;3479:7;3510:1;3506;:5;:13;;3518:1;3506:13;;;-1:-1:-1;3514:1:0;;3421:106;-1:-1:-1;3421:106:0:o;17892:146::-;17969:4;17993:37;18003:3;18023:5;17993:9;:37::i;35138:98::-;35218:10;35138:98;:::o;37543:120::-;37087:8;:6;:8::i;:::-;37079:41;;;;-1:-1:-1;;;37079:41:0;;;;;;;:::i;:::-;37602:7:::1;:15:::0;;-1:-1:-1;;37602:15:0::1;::::0;;37633:22:::1;37642:12;:10;:12::i;:::-;37633:22;;;;;;:::i;:::-;;;;;;;;37543:120::o:0;17362:131::-;17429:4;17453:32;17458:3;17478:5;17453:4;:32::i;18124:114::-;18184:7;18211:19;18219:3;18211:7;:19::i;40002:191::-;40076:16;40095:6;;-1:-1:-1;;;;;40112:17:0;;;-1:-1:-1;;;;;;40112:17:0;;;;;;40145:40;;40095:6;;;;;;;40145:40;;40076:16;40145:40;40002:191;;:::o;37284:118::-;36810:8;:6;:8::i;:::-;36809:9;36801:38;;;;-1:-1:-1;;;36801:38:0;;;;;;;:::i;:::-;37344:7:::1;:14:::0;;-1:-1:-1;;37344:14:0::1;37354:4;37344:14;::::0;;37374:20:::1;37381:12;:10;:12::i;17669:137::-:0;17739:4;17763:35;17771:3;17791:5;17763:7;:35::i;18592:137::-;18663:7;18698:22;18702:3;18714:5;18698:3;:22::i;10855:129::-;10928:4;10952:19;;;:12;;;;;:19;;;;;;:24;;;10855:129::o;8759:414::-;8822:4;8844:21;8854:3;8859:5;8844:9;:21::i;:::-;8839:327;;-1:-1:-1;8882:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;9065:18;;9043:19;;;:12;;;:19;;;;;;:40;;;;9098:11;;8839:327;-1:-1:-1;9149:5:0;9142:12;;11070:109;11153:18;;11070:109::o;9349:1420::-;9415:4;9554:19;;;:12;;;:19;;;;;;9590:15;;9586:1176;;9965:21;9989:14;10002:1;9989:10;:14;:::i;:::-;10038:18;;9965:38;;-1:-1:-1;10018:17:0;;10038:22;;10059:1;;10038:22;:::i;:::-;10018:42;;10094:13;10081:9;:26;10077:405;;10128:17;10148:3;:11;;10160:9;10148:22;;;;;;-1:-1:-1;;;10148:22:0;;;;;;;;;;;;;;;;;10128:42;;10302:9;10273:3;:11;;10285:13;10273:26;;;;;;-1:-1:-1;;;10273:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;10387:23;;;:12;;;:23;;;;;:36;;;10077:405;10563:17;;:3;;:17;;;-1:-1:-1;;;10563:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;10658:3;:12;;:19;10671:5;10658:19;;;;;;;;;;;10651:26;;;10701:4;10694:11;;;;;;;9586:1176;10745:5;10738:12;;;;;11533:120;11600:7;11627:3;:11;;11639:5;11627:18;;;;;;-1:-1:-1;;;11627:18:0;;;;;;;;;;;;;;;;;11620:25;;11533:120;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:990::-;;;;;;728:3;716:9;707:7;703:23;699:33;696:2;;;750:6;742;735:22;696:2;794:9;781:23;813:33;840:5;813:33;:::i;:::-;865:5;-1:-1:-1;922:2:1;907:18;;894:32;935:35;894:32;935:35;:::i;:::-;989:7;-1:-1:-1;1043:2:1;1028:18;;1015:32;;-1:-1:-1;1098:2:1;1083:18;;1070:32;1121:18;1151:14;;;1148:2;;;1183:6;1175;1168:22;1148:2;1226:6;1215:9;1211:22;1201:32;;1271:7;1264:4;1260:2;1256:13;1252:27;1242:2;;1298:6;1290;1283:22;1242:2;1343;1330:16;1369:2;1361:6;1358:14;1355:2;;;1390:6;1382;1375:22;1355:2;1440:7;1435:2;1426:6;1422:2;1418:15;1414:24;1411:37;1408:2;;;1466:6;1458;1451:22;1408:2;686:850;;;;-1:-1:-1;686:850:1;;-1:-1:-1;1502:2:1;1494:11;;1524:6;686:850;-1:-1:-1;;;686:850:1:o;1541:1295::-;;;1695:2;1683:9;1674:7;1670:23;1666:32;1663:2;;;1716:6;1708;1701:22;1663:2;1760:9;1747:23;1779:33;1806:5;1779:33;:::i;:::-;1831:5;-1:-1:-1;1855:2:1;1893:18;;;1880:32;1931:18;1961:14;;;1958:2;;;1993:6;1985;1978:22;1958:2;2036:6;2025:9;2021:22;2011:32;;2081:7;2074:4;2070:2;2066:13;2062:27;2052:2;;2108:6;2100;2093:22;2052:2;2149;2136:16;2171:2;2167;2164:10;2161:2;;;2177:18;;:::i;:::-;2224:2;2220;2216:11;2256:2;2250:9;2307:2;2302;2294:6;2290:15;2286:24;2360:6;2348:10;2345:22;2340:2;2328:10;2325:18;2322:46;2319:2;;;2371:18;;:::i;:::-;2407:2;2400:22;2457:18;;;2491:15;;;;-1:-1:-1;2526:11:1;;;2556;;;2552:20;;2549:33;-1:-1:-1;2546:2:1;;;2600:6;2592;2585:22;2546:2;2627:6;2618:15;;2642:163;2656:2;2653:1;2650:9;2642:163;;;2713:17;;2701:30;;2674:1;2667:9;;;;;2751:12;;;;2783;;2642:163;;;2646:3;2824:6;2814:16;;;;;;;;1653:1183;;;;;:::o;2841:327::-;;;2970:2;2958:9;2949:7;2945:23;2941:32;2938:2;;;2991:6;2983;2976:22;2938:2;3035:9;3022:23;3054:33;3081:5;3054:33;:::i;:::-;3106:5;3158:2;3143:18;;;;3130:32;;-1:-1:-1;;;2928:240:1:o;3173:666::-;;;3320:2;3308:9;3299:7;3295:23;3291:32;3288:2;;;3341:6;3333;3326:22;3288:2;3386:9;3373:23;3415:18;3456:2;3448:6;3445:14;3442:2;;;3477:6;3469;3462:22;3442:2;3520:6;3509:9;3505:22;3495:32;;3565:7;3558:4;3554:2;3550:13;3546:27;3536:2;;3592:6;3584;3577:22;3536:2;3637;3624:16;3663:2;3655:6;3652:14;3649:2;;;3684:6;3676;3669:22;3649:2;3743:7;3738:2;3732;3724:6;3720:15;3716:2;3712:24;3708:33;3705:46;3702:2;;;3769:6;3761;3754:22;3702:2;3805;3797:11;;;;;3827:6;;-1:-1:-1;3278:561:1;;-1:-1:-1;;;;3278:561:1:o;3844:297::-;;3964:2;3952:9;3943:7;3939:23;3935:32;3932:2;;;3985:6;3977;3970:22;3932:2;4022:9;4016:16;4075:5;4068:13;4061:21;4054:5;4051:32;4041:2;;4102:6;4094;4087:22;4146:190;;4258:2;4246:9;4237:7;4233:23;4229:32;4226:2;;;4279:6;4271;4264:22;4226:2;-1:-1:-1;4307:23:1;;4216:120;-1:-1:-1;4216:120:1:o;4341:194::-;;4464:2;4452:9;4443:7;4439:23;4435:32;4432:2;;;4485:6;4477;4470:22;4432:2;-1:-1:-1;4513:16:1;;4422:113;-1:-1:-1;4422:113:1:o;4540:203::-;-1:-1:-1;;;;;4704:32:1;;;;4686:51;;4674:2;4659:18;;4641:102::o;4748:558::-;-1:-1:-1;;;;;5071:15:1;;;5053:34;;5123:15;;;;5118:2;5103:18;;5096:43;5170:2;5155:18;;5148:34;;;;5218:3;5213:2;5198:18;;5191:31;;;4748:558;5238:19;;;5231:33;5033:3;5281:19;;5005:301::o;5311:274::-;-1:-1:-1;;;;;5503:32:1;;;;5485:51;;5567:2;5552:18;;5545:34;5473:2;5458:18;;5440:145::o;5590:635::-;5761:2;5813:21;;;5883:13;;5786:18;;;5905:22;;;5590:635;;5761:2;5984:15;;;;5958:2;5943:18;;;5590:635;6030:169;6044:6;6041:1;6038:13;6030:169;;;6105:13;;6093:26;;6174:15;;;;6139:12;;;;6066:1;6059:9;6030:169;;;-1:-1:-1;6216:3:1;;5741:484;-1:-1:-1;;;;;;5741:484:1:o;6230:187::-;6395:14;;6388:22;6370:41;;6358:2;6343:18;;6325:92::o;6422:202::-;-1:-1:-1;;;;;;6584:33:1;;;;6566:52;;6554:2;6539:18;;6521:103::o;6629:344::-;6831:2;6813:21;;;6870:2;6850:18;;;6843:30;-1:-1:-1;;;6904:2:1;6889:18;;6882:50;6964:2;6949:18;;6803:170::o;6978:339::-;7180:2;7162:21;;;7219:2;7199:18;;;7192:30;-1:-1:-1;;;7253:2:1;7238:18;;7231:45;7308:2;7293:18;;7152:165::o;7322:402::-;7524:2;7506:21;;;7563:2;7543:18;;;7536:30;7602:34;7597:2;7582:18;;7575:62;-1:-1:-1;;;7668:2:1;7653:18;;7646:36;7714:3;7699:19;;7496:228::o;7729:339::-;7931:2;7913:21;;;7970:2;7950:18;;;7943:30;-1:-1:-1;;;8004:2:1;7989:18;;7982:45;8059:2;8044:18;;7903:165::o;8073:398::-;8275:2;8257:21;;;8314:2;8294:18;;;8287:30;8353:34;8348:2;8333:18;;8326:62;-1:-1:-1;;;8419:2:1;8404:18;;8397:32;8461:3;8446:19;;8247:224::o;8476:340::-;8678:2;8660:21;;;8717:2;8697:18;;;8690:30;-1:-1:-1;;;8751:2:1;8736:18;;8729:46;8807:2;8792:18;;8650:166::o;8821:354::-;9023:2;9005:21;;;9062:2;9042:18;;;9035:30;9101:32;9096:2;9081:18;;9074:60;9166:2;9151:18;;8995:180::o;9180:356::-;9382:2;9364:21;;;9401:18;;;9394:30;9460:34;9455:2;9440:18;;9433:62;9527:2;9512:18;;9354:182::o;9541:352::-;9743:2;9725:21;;;9782:2;9762:18;;;9755:30;9821;9816:2;9801:18;;9794:58;9884:2;9869:18;;9715:178::o;9898:355::-;10100:2;10082:21;;;10139:2;10119:18;;;10112:30;10178:33;10173:2;10158:18;;10151:61;10244:2;10229:18;;10072:181::o;10258:338::-;10460:2;10442:21;;;10499:2;10479:18;;;10472:30;-1:-1:-1;;;10533:2:1;10518:18;;10511:44;10587:2;10572:18;;10432:164::o;10601:177::-;10747:25;;;10735:2;10720:18;;10702:76::o;10783:128::-;;10854:1;10850:6;10847:1;10844:13;10841:2;;;10860:18;;:::i;:::-;-1:-1:-1;10896:9:1;;10831:80::o;10916:168::-;;11022:1;11018;11014:6;11010:14;11007:1;11004:21;10999:1;10992:9;10985:17;10981:45;10978:2;;;11029:18;;:::i;:::-;-1:-1:-1;11069:9:1;;10968:116::o;11089:125::-;;11157:1;11154;11151:8;11148:2;;;11162:18;;:::i;:::-;-1:-1:-1;11199:9:1;;11138:76::o;11219:135::-;;-1:-1:-1;;11279:17:1;;11276:2;;;11299:18;;:::i;:::-;-1:-1:-1;11346:1:1;11335:13;;11266:88::o;11359:127::-;11420:10;11415:3;11411:20;11408:1;11401:31;11451:4;11448:1;11441:15;11475:4;11472:1;11465:15;11491:127;11552:10;11547:3;11543:20;11540:1;11533:31;11583:4;11580:1;11573:15;11607:4;11604:1;11597:15;11623:133;-1:-1:-1;;;;;11700:31:1;;11690:42;;11680:2;;11746:1;11743;11736:12
Swarm Source
ipfs://02d513b1a12f7b268601b762a43ea2baf2fdd363e7db6ad9b00f2761ef107530
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.