Token
Overview
Total Supply:
0 N/A
Holders:
0 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
miniStaking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-23 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; //Imports /** * @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; } } /** * @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); } } // 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; } } } /** * @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); } /** * @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; } /** * @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); /** * @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); } /** * @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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @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; } } /** * @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; } } /** * @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); } } /** * @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()); } } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // End of Imports // token burn interface IBurn { function burn(uint256 _amount) external; } contract miniStaking is Ownable, IERC721Receiver, ReentrancyGuard, Pausable { using SafeERC20 for IERC20; using EnumerableSet for EnumerableSet.UintSet; //addresses address nullAddress = 0x0000000000000000000000000000000000000000; address public stakingDestinationAddress; address public erc20Address; address public landContract; uint256 public expiration; //rate governs how often you receive your token uint256 public rate; // deposit/withdraw tax uint256 public taxDeposit = 1 ether; // tax rate amounts uint256 public taxRate1 = 50; uint256 public taxRate2 = 40; uint256 public taxRate3 = 30; uint256 public taxRate4 = 20; uint256 public taxRate5 = 10; // tax rate levels uint256 public taxAmt1 = 1 ether; uint256 public taxAmt2 = 2 ether; uint256 public taxAmt3 = 3 ether; uint256 public taxAmt4 = 4 ether; uint256 public depositIndex; bool emissions = true; // mappings mapping(address => EnumerableSet.UintSet) private _deposits; mapping(address => mapping(uint256 => uint256)) public _depositBlocks; mapping(uint256 => bool) private uber; mapping(address => bool) private exploiter; constructor(address _stakingDestinationAddress, uint256 _rate, uint256 _expiration, address _erc20Address) { stakingDestinationAddress = _stakingDestinationAddress; rate = _rate; expiration = block.number + _expiration; erc20Address = _erc20Address; _pause(); } function calcTaxRate(uint256 reward) private view returns (uint256 tax){ // 50% tax if(reward <= (taxAmt1)){ return taxRate1; // 40% tax }else if(reward <= (taxAmt2)){ return taxRate2; // 30% tax }else if(reward <= (taxAmt3)){ return taxRate3; // 20% tax }else if(reward <= (taxAmt4)){ return taxRate4; // 10% }else { return taxRate5; } } function burn(uint256 _amount) private { IBurn(erc20Address).burn(_amount); } // gets x % function calcTax(uint256 _amount, uint256 taxRate) private pure returns (uint256){ uint256 taxedAmount; taxedAmount = taxRate * _amount / 100; return taxedAmount; } 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. // 277777777777777.66666666666666667 for aprox 25 a day at 100,000 blocks per day 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; } function setUber(uint256[] calldata _users) public onlyOwner() { for (uint256 i = 0; i < _users.length; i++){ uber[_users[i]] = true; } } function clearUber(uint256[] calldata _users) public onlyOwner() { for (uint256 i = 0; i < _users.length; i++){ uber[_users[i]] = false; } } function setLand(address _landContract) public onlyOwner() { landContract = _landContract; } function setTaxDeposit(uint256 _newTax) public onlyOwner() { taxDeposit = _newTax; } function setTaxRate1(uint256 _newTax) public onlyOwner() { taxRate1 = _newTax; } function setTaxRate2(uint256 _newTax) public onlyOwner() { taxRate2 = _newTax; } function setTaxRate3(uint256 _newTax) public onlyOwner() { taxRate3 = _newTax; } function setTaxRate4(uint256 _newTax) public onlyOwner() { taxRate4 = _newTax; } function setTaxRate5(uint256 _newTax) public onlyOwner() { taxRate5 = _newTax; } function setTaxAmt1(uint256 _newTaxAmt) public onlyOwner() { taxAmt1 = _newTaxAmt; } function setTaxAmt2(uint256 _newTaxAmt) public onlyOwner() { taxAmt2 = _newTaxAmt; } function setTaxAmt3(uint256 _newTaxAmt) public onlyOwner() { taxAmt3 = _newTaxAmt; } function setTaxAmt4(uint256 _newTaxAmt) public onlyOwner() { taxAmt4 = _newTaxAmt; } function seterc20Address(address _erc20Address) public onlyOwner() { erc20Address = _erc20Address; } function setemissions(bool _set) public onlyOwner(){ emissions = _set; } //check deposit amount. - Tested function depositsOf(address account) public 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; } //reward amount by address/tokenIds[] - Tested 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/tokenId - Tested 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 - Tested function claimRewards(uint256[] calldata tokenIds) public whenNotPaused { uint256 reward; uint256 blockCur = Math.min(block.number, expiration); uint256 tax; bool uberDiscount = false; require(tokenIds.length <= 1, "Can only Claim/Stake/Unstake 1 at a time"); for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i]); _depositBlocks[msg.sender][tokenIds[i]] = blockCur; //checks if tokenId is uber which means they only pay 10% tax no matter what amount if(uber[tokenIds[i]] == true){ uberDiscount = true; } } if(reward > 0) { //uber discount if(uberDiscount == true){ for (uint256 i; i < tokenIds.length; i++){ require(uber[tokenIds[i]] == true, "Not Uber"); } burn(calcTax(calcTax(reward, 10), 60)); IERC20(erc20Address).safeTransfer(landContract, calcTax(calcTax(reward, 10), 20)); reward = reward - calcTax(reward, 10); IERC20(erc20Address).safeTransfer(msg.sender, reward); uberDiscount = false; // regular bonding claim tax }else { tax = calcTaxRate(reward); burn(calcTax(calcTax(reward, tax), 60)); IERC20(erc20Address).safeTransfer(landContract, calcTax(calcTax(reward, tax), 20)); reward = reward - calcTax(reward, tax); IERC20(erc20Address).safeTransfer(msg.sender, reward); } } } //deposit function. - Tested function deposit(uint256[] calldata tokenIds) external whenNotPaused nonReentrant() { require(emissions == true, "Emissions Over"); require(msg.sender != stakingDestinationAddress, "Invalid address"); require(exploiter[msg.sender] == false, "EXPLOITER GIVE ME MY MONEY"); IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), taxDeposit); burn(calcTax(taxDeposit, 60)); IERC20(erc20Address).safeTransfer(landContract, calcTax(taxDeposit, 20)); claimRewards(tokenIds); for (uint256 i; i < tokenIds.length; i++) { IERC721(stakingDestinationAddress).safeTransferFrom(msg.sender,address(this),tokenIds[i],""); _deposits[msg.sender].add(tokenIds[i]); } } //withdrawal function. Tested function withdraw(uint256[] calldata tokenIds) external whenNotPaused nonReentrant() { IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), taxDeposit); burn(calcTax(taxDeposit, 60)); IERC20(erc20Address).safeTransfer(landContract, calcTax(taxDeposit, 20)); 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(stakingDestinationAddress).safeTransferFrom(address(this), msg.sender,tokenIds[i],""); } } //withdrawal function. function withdrawAllTokens() external onlyOwner() { uint256 tokenSupply = IERC20(erc20Address).balanceOf(address(this)); IERC20(erc20Address).safeTransfer(msg.sender, tokenSupply); } function withdrawTokens(address _erc20Address, uint256 _amount) external onlyOwner() { IERC20(_erc20Address).safeTransfer(msg.sender, _amount); } function onERC721Received(address,address,uint256,bytes calldata) external pure override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } function exploiters(address[] calldata _users) public onlyOwner() { for (uint256 i = 0; i < _users.length; i++){ exploiter[_users[i]] = true; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakingDestinationAddress","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":"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":"_users","type":"uint256[]"}],"name":"clearUber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_users","type":"address[]"}],"name":"exploiters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"landContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"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":"uint256","name":"_expiration","type":"uint256"}],"name":"setExpiration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_landContract","type":"address"}],"name":"setLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTaxAmt","type":"uint256"}],"name":"setTaxAmt1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTaxAmt","type":"uint256"}],"name":"setTaxAmt2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTaxAmt","type":"uint256"}],"name":"setTaxAmt3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTaxAmt","type":"uint256"}],"name":"setTaxAmt4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxRate1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxRate2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxRate3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxRate4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxRate5","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_users","type":"uint256[]"}],"name":"setUber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_set","type":"bool"}],"name":"setemissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"}],"name":"seterc20Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingDestinationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAmt1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAmt2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAmt3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAmt4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate5","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260028054610100600160a81b0319169055670de0b6b3a7640000600881905560326009556028600a908155601e600b556014600c55600d55600e55671bc16d674ec80000600f556729a2241af62c0000601055673782dace9d9000006011556013805460ff191660011790553480156200007d57600080fd5b506040516200267d3803806200267d833981016040819052620000a09162000222565b620000ab3362000117565b600180556002805460ff19169055600380546001600160a01b0319166001600160a01b0386161790556007839055620000e582436200026d565b600655600480546001600160a01b0319166001600160a01b0383161790556200010d62000167565b5050505062000294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615620001b25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620001e83390565b6040516001600160a01b03909116815260200160405180910390a1565b80516001600160a01b03811681146200021d57600080fd5b919050565b600080600080608085870312156200023957600080fd5b620002448562000205565b93506020850151925060408501519150620002626060860162000205565b905092959194509250565b600082198211156200028f57634e487b7160e01b600052601160045260246000fd5b500190565b6123d980620002a46000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80635eac6239116101825780639b2a22b1116100e9578063e42ac3e6116100a2578063efe055021161007c578063efe0550214610619578063f11d493a1461062c578063f2fde38b14610635578063f5e28a031461064857600080fd5b8063e42ac3e6146105e0578063ea9921aa146105f3578063efa9f5ee1461060657600080fd5b80639b2a22b114610560578063b343ae1414610573578063b5f388ee1461059e578063d982307f146105b1578063de27ef79146105ba578063e3a9db1a146105cd57600080fd5b80637de853031161013b5780637de85303146105055780637f137bbe1461051857806381d9e0cf146105215780638456cb59146105345780638da5cb5b1461053c578063983d95ce1461054d57600080fd5b80635eac6239146104a8578063715018a6146104bb57806373c71311146104c357806375454712146104d657806378a0e199146104e95780637b898939146104fc57600080fd5b8063276184ae116102415780633aded61d116101fa578063515a20ba116101d4578063515a20ba14610463578063598b8e71146104765780635c975abb146104895780635e7f01581461049f57600080fd5b80633aded61d146104495780633f4ba83a146104525780634665096d1461045a57600080fd5b8063276184ae146103f65780632790000d14610409578063280da6fa1461041c5780632c4e722e1461042457806331dc04c71461042d57806334fcf4371461043657600080fd5b8063150b7a0211610293578063150b7a021461037d5780631852e8d9146103b55780631929adc7146103c8578063193fe216146103d15780631c843912146103e4578063215c9dc3146103ed57600080fd5b80630222a2c4146102db57806303d073401461030b578063068c526f1461031e57806306b091f91461033e5780630d312a6e146103535780631060418f1461036a575b600080fd5b6003546102ee906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6005546102ee906001600160a01b031681565b61033161032c366004611fe4565b61065b565b60405161030291906121b0565b61035161034c3660046120bc565b61079c565b005b61035c600c5481565b604051908152602001610302565b610351610378366004612162565b6107e7565b61039c61038b366004611f49565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610302565b61035c6103c33660046120bc565b610816565b61035c600d5481565b6103516103df366004612162565b610913565b61035c60105481565b61035c60095481565b6004546102ee906001600160a01b031681565b610351610417366004611f2e565b610942565b61035161098e565b61035c60075481565b61035c600b5481565b610351610444366004612162565b610a56565b61035c600f5481565b610351610a85565b61035c60065481565b610351610471366004612162565b610ab9565b6103516104843660046120e6565b610af3565b60025460ff166040519015158152602001610302565b61035c60115481565b6103516104b63660046120e6565b610dcf565b6103516110b4565b6103516104d13660046120e6565b6110e8565b6103516104e4366004612128565b611179565b6103516104f73660046120e6565b6111b6565b61035c60125481565b610351610513366004612162565b611252565b61035c60085481565b61035161052f366004611f2e565b611281565b6103516112cd565b6000546001600160a01b03166102ee565b61035161055b3660046120e6565b6112ff565b61035161056e366004612162565b611545565b61035c6105813660046120bc565b601560209081526000928352604080842090915290825290205481565b6103516105ac366004612162565b611574565b61035c600a5481565b6103516105c8366004612162565b6115a3565b6103316105db366004611f2e565b6115d2565b6103516105ee3660046120e6565b61168e565b610351610601366004612162565b61171a565b610351610614366004612162565b611749565b610351610627366004612162565b611778565b61035c600e5481565b610351610643366004611f2e565b6117a7565b610351610656366004612162565b61183f565b6060815167ffffffffffffffff8111156106775761067761237f565b6040519080825280602002602001820160405280156106a0578160200160208202803683370190505b50905060005b82518110156107945760008382815181106106c3576106c3612369565b6020026020010151905060156000866001600160a01b03166001600160a01b031681526020019081526020016000206000828152602001908152602001600020546107104360065461186e565b61071a91906122df565b6001600160a01b038616600090815260146020526040902061073c9083611884565b61074757600061074a565b60015b60ff1660075461075a91906122c0565b61076491906122c0565b83838151811061077657610776612369565b6020908102919091010152508061078c81612322565b9150506106a6565b505b92915050565b6000546001600160a01b031633146107cf5760405162461bcd60e51b81526004016107c690612251565b60405180910390fd5b6107e36001600160a01b038316338361189c565b5050565b6000546001600160a01b031633146108115760405162461bcd60e51b81526004016107c690612251565b600d55565b6001600160a01b038216600090815260156020908152604080832084845290915281205460065461084890439061186e565b116108865760405162461bcd60e51b815260206004820152600e60248201526d496e76616c696420626c6f636b7360901b60448201526064016107c6565b6001600160a01b03831660009081526015602090815260408083208584529091529020546006546108b890439061186e565b6108c291906122df565b6001600160a01b03841660009081526014602052604090206108e49084611884565b6108ef5760006108f2565b60015b60ff1660075461090291906122c0565b61090c91906122c0565b9392505050565b6000546001600160a01b0316331461093d5760405162461bcd60e51b81526004016107c690612251565b600b55565b6000546001600160a01b0316331461096c5760405162461bcd60e51b81526004016107c690612251565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016107c690612251565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a39919061217b565b600454909150610a53906001600160a01b0316338361189c565b50565b6000546001600160a01b03163314610a805760405162461bcd60e51b81526004016107c690612251565b600755565b6000546001600160a01b03163314610aaf5760405162461bcd60e51b81526004016107c690612251565b610ab76118ff565b565b6000546001600160a01b03163314610ae35760405162461bcd60e51b81526004016107c690612251565b610aed8143612286565b60065550565b60025460ff1615610b165760405162461bcd60e51b81526004016107c690612227565b60026001541415610b695760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107c6565b6002600190815560135460ff16151514610bb65760405162461bcd60e51b815260206004820152600e60248201526d22b6b4b9b9b4b7b7399027bb32b960911b60448201526064016107c6565b6003546001600160a01b0316331415610c035760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107c6565b3360009081526017602052604090205460ff1615610c635760405162461bcd60e51b815260206004820152601a60248201527f4558504c4f495445522047495645204d45204d59204d4f4e455900000000000060448201526064016107c6565b600854600454610c82916001600160a01b039091169033903090611992565b610c97610c92600854603c6119d0565b6119f1565b600554600854610cc9916001600160a01b031690610cb69060146119d0565b6004546001600160a01b0316919061189c565b610cd38282610dcf565b60005b81811015610dc6576003546001600160a01b031663b88d4fde3330868686818110610d0357610d03612369565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152608060648201526000608482015260a401600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b50505050610db3838383818110610d9557610d95612369565b33600090815260146020908152604090912093910201359050611a50565b5080610dbe81612322565b915050610cd6565b50506001805550565b60025460ff1615610df25760405162461bcd60e51b81526004016107c690612227565b600080610e014360065461186e565b90506000806001851115610e685760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c7920436c61696d2f5374616b652f556e7374616b65203120616044820152677420612074696d6560c01b60648201526084016107c6565b60005b85811015610f3357610e9533888884818110610e8957610e89612369565b90506020020135610816565b610e9f9086612286565b336000908152601560205260408120919650859190898985818110610ec657610ec6612369565b9050602002013581526020019081526020016000208190555060166000888884818110610ef557610ef5612369565b602090810292909201358352508101919091526040016000205460ff16151560011415610f2157600191505b80610f2b81612322565b915050610e6b565b5083156110ac57600181151514156110465760005b85811015610fd15760166000888884818110610f6657610f66612369565b602090810292909201358352508101919091526040016000205460ff161515600114610fbf5760405162461bcd60e51b81526020600482015260086024820152672737ba102ab132b960c11b60448201526064016107c6565b80610fc981612322565b915050610f48565b50610fea610c92610fe386600a6119d0565b603c6119d0565b60055461100f906001600160a01b0316610cb661100887600a6119d0565b60146119d0565b61101a84600a6119d0565b61102490856122df565b60045490945061103e906001600160a01b0316338661189c565b5060006110ac565b61104f84611a5c565b9150611061610c92610fe386856119d0565b60055461107e906001600160a01b0316610cb661100887866119d0565b61108884836119d0565b61109290856122df565b6004549094506110ac906001600160a01b0316338661189c565b505050505050565b6000546001600160a01b031633146110de5760405162461bcd60e51b81526004016107c690612251565b610ab76000611aaf565b6000546001600160a01b031633146111125760405162461bcd60e51b81526004016107c690612251565b60005b818110156111745760016016600085858581811061113557611135612369565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061116c90612322565b915050611115565b505050565b6000546001600160a01b031633146111a35760405162461bcd60e51b81526004016107c690612251565b6013805460ff1916911515919091179055565b6000546001600160a01b031633146111e05760405162461bcd60e51b81526004016107c690612251565b60005b818110156111745760016017600085858581811061120357611203612369565b90506020020160208101906112189190611f2e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061124a81612322565b9150506111e3565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016107c690612251565b600f55565b6000546001600160a01b031633146112ab5760405162461bcd60e51b81526004016107c690612251565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112f75760405162461bcd60e51b81526004016107c690612251565b610ab7611aff565b60025460ff16156113225760405162461bcd60e51b81526004016107c690612227565b600260015414156113755760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107c6565b6002600155600854600454611399916001600160a01b039091169033903090611992565b6113a9610c92600854603c6119d0565b6005546008546113c8916001600160a01b031690610cb69060146119d0565b6113d28282610dcf565b60005b81811015610dc6576114108383838181106113f2576113f2612369565b33600090815260146020908152604090912093910201359050611884565b61145c5760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a20746f6b656e206e6f74206465706f73697465640000000060448201526064016107c6565b61148f83838381811061147157611471612369565b33600090815260146020908152604090912093910201359050611b57565b506003546001600160a01b031663b88d4fde30338686868181106114b5576114b5612369565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152608060648201526000608482015260a401600060405180830381600087803b15801561151a57600080fd5b505af115801561152e573d6000803e3d6000fd5b50505050808061153d90612322565b9150506113d5565b6000546001600160a01b0316331461156f5760405162461bcd60e51b81526004016107c690612251565b601155565b6000546001600160a01b0316331461159e5760405162461bcd60e51b81526004016107c690612251565b600c55565b6000546001600160a01b031633146115cd5760405162461bcd60e51b81526004016107c690612251565b600e55565b6001600160a01b03811660009081526014602052604081206060916115f682611b63565b67ffffffffffffffff81111561160e5761160e61237f565b604051908082528060200260200182016040528015611637578160200160208202803683370190505b50905060005b61164683611b63565b811015611686576116578382611b6d565b82828151811061166957611669612369565b60209081029190910101528061167e81612322565b91505061163d565b509392505050565b6000546001600160a01b031633146116b85760405162461bcd60e51b81526004016107c690612251565b60005b81811015611174576000601660008585858181106116db576116db612369565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061171290612322565b9150506116bb565b6000546001600160a01b031633146117445760405162461bcd60e51b81526004016107c690612251565b601055565b6000546001600160a01b031633146117735760405162461bcd60e51b81526004016107c690612251565b600855565b6000546001600160a01b031633146117a25760405162461bcd60e51b81526004016107c690612251565b600a55565b6000546001600160a01b031633146117d15760405162461bcd60e51b81526004016107c690612251565b6001600160a01b0381166118365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c6565b610a5381611aaf565b6000546001600160a01b031633146118695760405162461bcd60e51b81526004016107c690612251565b600955565b600081831061187d578161090c565b5090919050565b6000818152600183016020526040812054151561090c565b6040516001600160a01b03831660248201526044810182905261117490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b79565b60025460ff166119485760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107c6565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516001600160a01b03808516602483015283166044820152606481018290526119ca9085906323b872dd60e01b906084016118c8565b50505050565b60008060646119df85856122c0565b6119e9919061229e565b949350505050565b60048054604051630852cd8d60e31b81529182018390526001600160a01b0316906342966c6890602401600060405180830381600087803b158015611a3557600080fd5b505af1158015611a49573d6000803e3d6000fd5b5050505050565b600061090c8383611c4b565b6000600e548211611a6f57505060095490565b600f548211611a80575050600a5490565b6010548211611a91575050600b5490565b6011548211611aa2575050600c5490565b5050600d5490565b919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615611b225760405162461bcd60e51b81526004016107c690612227565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119753390565b600061090c8383611c9a565b6000610796825490565b600061090c8383611d8d565b6000611bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611db79092919063ffffffff16565b8051909150156111745780806020019051810190611bec9190612145565b6111745760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107c6565b6000818152600183016020526040812054611c9257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610796565b506000610796565b60008181526001830160205260408120548015611d83576000611cbe6001836122df565b8554909150600090611cd2906001906122df565b9050818114611d37576000866000018281548110611cf257611cf2612369565b9060005260206000200154905080876000018481548110611d1557611d15612369565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d4857611d48612353565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610796565b6000915050610796565b6000826000018281548110611da457611da4612369565b9060005260206000200154905092915050565b60606119e98484600085856001600160a01b0385163b611e195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107c6565b600080866001600160a01b03168587604051611e359190612194565b60006040518083038185875af1925050503d8060008114611e72576040519150601f19603f3d011682016040523d82523d6000602084013e611e77565b606091505b5091509150611e87828286611e92565b979650505050505050565b60608315611ea157508161090c565b825115611eb15782518084602001fd5b8160405162461bcd60e51b81526004016107c691906121f4565b80356001600160a01b0381168114611aaa57600080fd5b60008083601f840112611ef457600080fd5b50813567ffffffffffffffff811115611f0c57600080fd5b6020830191508360208260051b8501011115611f2757600080fd5b9250929050565b600060208284031215611f4057600080fd5b61090c82611ecb565b600080600080600060808688031215611f6157600080fd5b611f6a86611ecb565b9450611f7860208701611ecb565b935060408601359250606086013567ffffffffffffffff80821115611f9c57600080fd5b818801915088601f830112611fb057600080fd5b813581811115611fbf57600080fd5b896020828501011115611fd157600080fd5b9699959850939650602001949392505050565b60008060408385031215611ff757600080fd5b61200083611ecb565b915060208084013567ffffffffffffffff8082111561201e57600080fd5b818601915086601f83011261203257600080fd5b8135818111156120445761204461237f565b8060051b604051601f19603f830116810181811085821117156120695761206961237f565b604052828152858101935084860182860187018b101561208857600080fd5b600095505b838610156120ab57803585526001959095019493860193860161208d565b508096505050505050509250929050565b600080604083850312156120cf57600080fd5b6120d883611ecb565b946020939093013593505050565b600080602083850312156120f957600080fd5b823567ffffffffffffffff81111561211057600080fd5b61211c85828601611ee2565b90969095509350505050565b60006020828403121561213a57600080fd5b813561090c81612395565b60006020828403121561215757600080fd5b815161090c81612395565b60006020828403121561217457600080fd5b5035919050565b60006020828403121561218d57600080fd5b5051919050565b600082516121a68184602087016122f6565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156121e8578351835292840192918401916001016121cc565b50909695505050505050565b60208152600082518060208401526122138160408501602087016122f6565b601f01601f19169190910160400192915050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156122995761229961233d565b500190565b6000826122bb57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156122da576122da61233d565b500290565b6000828210156122f1576122f161233d565b500390565b60005b838110156123115781810151838201526020016122f9565b838111156119ca5750506000910152565b60006000198214156123365761233661233d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610a5357600080fdfea2646970667358221220c0ec852ceacd29a99b140826cf728148bba7dd5c0f485cdaba2f415ead9be06a64736f6c63430008070033000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000079a3f74382cb60f176b1d05e34d0b1c71c71c71c7000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000079a3f74382cb60f176b1d05e34d0b1c71c71c71c7000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58
-----Decoded View---------------
Arg [0] : _stakingDestinationAddress (address): 0xec2e4e100b26015dc7dee337b4dc5decfe28db58
Arg [1] : _rate (uint256): 1000000000000
Arg [2] : _expiration (uint256): 11111111111111111111111111111111111111111111111111
Arg [3] : _erc20Address (address): 0xec2e4e100b26015dc7dee337b4dc5decfe28db58
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58
Arg [1] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [2] : 0000000000000000000000079a3f74382cb60f176b1d05e34d0b1c71c71c71c7
Arg [3] : 000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58
Deployed ByteCode Sourcemap
50599:10017:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50863:40;;;;;-1:-1:-1;;;;;50863:40:0;;;;;;-1:-1:-1;;;;;5229:32:1;;;5211:51;;5199:2;5184:18;50863:40:0;;;;;;;;50944:27;;;;;-1:-1:-1;;;;;50944:27:0;;;55867:454;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;60092:167::-;;;;;;:::i;:::-;;:::i;:::-;;51301:28;;;;;;;;;13547:25:1;;;13535:2;13520:18;51301:28:0;13401:177:1;54675:92:0;;;;;;:::i;:::-;;:::i;60268:173::-;;;;;;:::i;:::-;-1:-1:-1;;;60268:173:0;;;;;;;;;;;-1:-1:-1;;;;;;7483:33:1;;;7465:52;;7453:2;7438:18;60268:173:0;7321:202:1;56379:345:0;;;;;;:::i;:::-;;:::i;51336:28::-;;;;;;54471:92;;;;;;:::i;:::-;;:::i;51473:32::-;;;;;;51196:28;;;;;;50910:27;;;;;-1:-1:-1;;;;;50910:27:0;;;55194:112;;;;;;:::i;:::-;;:::i;59878:205::-;;;:::i;51073:19::-;;;;;;51266:28;;;;;;53396:80;;;;;;:::i;:::-;;:::i;51434:32::-;;;;;;53115:67;;;:::i;50987:25::-;;;;;;53588:119;;;;;;:::i;:::-;;:::i;58328:788::-;;;;;;:::i;:::-;;:::i;34392:86::-;34463:7;;;;34392:86;;7294:14:1;;7287:22;7269:41;;7257:2;7242:18;34392:86:0;7129:187:1;51512:32:0;;;;;;56771:1513;;;;;;:::i;:::-;;:::i;2392:103::-;;;:::i;53715:159::-;;;;;;:::i;:::-;;:::i;55315:84::-;;;;;;:::i;:::-;;:::i;60446:167::-;;;;;;:::i;:::-;;:::i;51551:27::-;;;;;;54879:96;;;;;;:::i;:::-;;:::i;51129:35::-;;;;;;54051:104;;;;;;:::i;:::-;;:::i;53043:63::-;;;:::i;1741:87::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;1741:87;;59165:675;;;;;;:::i;:::-;;:::i;55089:96::-;;;;;;:::i;:::-;;:::i;51708:69::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;54571:92;;;;;;:::i;:::-;;:::i;51231:28::-;;;;;;54775:96;;;;;;:::i;:::-;;:::i;55445:361::-;;;;;;:::i;:::-;;:::i;53881:162::-;;;;;;:::i;:::-;;:::i;54984:96::-;;;;;;:::i;:::-;;:::i;54167:::-;;;;;;:::i;:::-;;:::i;54371:92::-;;;;;;:::i;:::-;;:::i;51395:32::-;;;;;;2650:201;;;;;;:::i;:::-;;:::i;54271:92::-;;;;;;:::i;:::-;;:::i;55867:454::-;55958:24;56017:8;:15;56003:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56003:30:0;;55993:40;;56050:9;56045:243;56065:8;:15;56061:1;:19;56045:243;;;56098:15;56116:8;56125:1;56116:11;;;;;;;;:::i;:::-;;;;;;;56098:29;;56245:14;:23;56260:7;-1:-1:-1;;;;;56245:23:0;-1:-1:-1;;;;;56245:23:0;;;;;;;;;;;;:32;56269:7;56245:32;;;;;;;;;;;;56208:34;56217:12;56231:10;;56208:8;:34::i;:::-;:69;;;;:::i;:::-;-1:-1:-1;;;;;56159:18:0;;;;;;:9;:18;;;;;:36;;56187:7;56159:27;:36::i;:::-;:44;;56202:1;56159:44;;;56198:1;56159:44;56151:53;;:4;;:53;;;;:::i;:::-;:127;;;;:::i;:::-;56138:7;56146:1;56138:10;;;;;;;;:::i;:::-;;;;;;;;;;:140;-1:-1:-1;56082:3:0;;;;:::i;:::-;;;;56045:243;;;;55867:454;;;;;:::o;60092:167::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;;;;;;;;;60196:55:::1;-1:-1:-1::0;;;;;60196:34:0;::::1;60231:10;60243:7:::0;60196:34:::1;:55::i;:::-;60092:167:::0;;:::o;54675:92::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54741:8:::1;:18:::0;54675:92::o;56379:345::-;-1:-1:-1;;;;;56522:23:0;;56459:7;56522:23;;;:14;:23;;;;;;;;:32;;;;;;;;;56508:10;;56485:34;;56494:12;;56485:8;:34::i;:::-;:69;56477:96;;;;-1:-1:-1;;;56477:96:0;;13260:2:1;56477:96:0;;;13242:21:1;13299:2;13279:18;;;13272:30;-1:-1:-1;;;13318:18:1;;;13311:44;13372:18;;56477:96:0;13058:338:1;56477:96:0;-1:-1:-1;;;;;56683:23:0;;;;;;:14;:23;;;;;;;;:32;;;;;;;;;56669:10;;56646:34;;56655:12;;56646:8;:34::i;:::-;:69;;;;:::i;:::-;-1:-1:-1;;;;;56597:18:0;;;;;;:9;:18;;;;;:36;;56625:7;56597:27;:36::i;:::-;:44;;56640:1;56597:44;;;56636:1;56597:44;56589:53;;:4;;:53;;;;:::i;:::-;:127;;;;:::i;:::-;56582:134;56379:345;-1:-1:-1;;;56379:345:0:o;54471:92::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54537:8:::1;:18:::0;54471:92::o;55194:112::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;55270:12:::1;:28:::0;;-1:-1:-1;;;;;;55270:28:0::1;-1:-1:-1::0;;;;;55270:28:0;;;::::1;::::0;;;::::1;::::0;;55194:112::o;59878:205::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;59968:12:::1;::::0;;59961:45:::1;::::0;-1:-1:-1;;;59961:45:0;;60000:4:::1;59961:45:::0;;::::1;5211:51:1::0;;;;59939:19:0::1;::::0;-1:-1:-1;;;;;59968:12:0;;::::1;::::0;59961:30:::1;::::0;5184:18:1;;59961:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60024:12;::::0;59939:67;;-1:-1:-1;60017:58:0::1;::::0;-1:-1:-1;;;;;60024:12:0::1;60051:10;59939:67:::0;60017:33:::1;:58::i;:::-;59928:155;59878:205::o:0;53396:80::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;53456:4:::1;:12:::0;53396:80::o;53115:67::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;53164:10:::1;:8;:10::i;:::-;53115:67::o:0;53588:119::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;53673:26:::1;53688:11:::0;53673:12:::1;:26;:::i;:::-;53660:10;:39:::0;-1:-1:-1;53588:119:0:o;58328:788::-;34463:7;;;;34717:9;34709:38;;;;-1:-1:-1;;;34709:38:0;;;;;;;:::i;:::-;31327:1:::1;31925:7;;:19;;31917:63;;;::::0;-1:-1:-1;;;31917:63:0;;12900:2:1;31917:63:0::1;::::0;::::1;12882:21:1::0;12939:2;12919:18;;;12912:30;12978:33;12958:18;;;12951:61;13029:18;;31917:63:0::1;12698:355:1::0;31917:63:0::1;31327:1;32058:7;:18:::0;;;58431:9:::2;::::0;::::2;;:17;;;58423:44;;;::::0;-1:-1:-1;;;58423:44:0;;11452:2:1;58423:44:0::2;::::0;::::2;11434:21:1::0;11491:2;11471:18;;;11464:30;-1:-1:-1;;;11510:18:1;;;11503:44;11564:18;;58423:44:0::2;11250:338:1::0;58423:44:0::2;58500:25;::::0;-1:-1:-1;;;;;58500:25:0::2;58486:10;:39;;58478:67;;;::::0;-1:-1:-1;;;58478:67:0;;8876:2:1;58478:67:0::2;::::0;::::2;8858:21:1::0;8915:2;8895:18;;;8888:30;-1:-1:-1;;;8934:18:1;;;8927:45;8989:18;;58478:67:0::2;8674:339:1::0;58478:67:0::2;58574:10;58564:21;::::0;;;:9:::2;:21;::::0;;;;;::::2;;:30;58556:69;;;::::0;-1:-1:-1;;;58556:69:0;;9627:2:1;58556:69:0::2;::::0;::::2;9609:21:1::0;9666:2;9646:18;;;9639:30;9705:28;9685:18;;;9678:56;9751:18;;58556:69:0::2;9425:350:1::0;58556:69:0::2;58701:10;::::0;58643:12:::2;::::0;58636:76:::2;::::0;-1:-1:-1;;;;;58643:12:0;;::::2;::::0;58674:10:::2;::::0;58694:4:::2;::::0;58636:37:::2;:76::i;:::-;58723:29;58728:23;58736:10;;58748:2;58728:7;:23::i;:::-;58723:4;:29::i;:::-;58797:12;::::0;58819:10:::2;::::0;58763:72:::2;::::0;-1:-1:-1;;;;;58797:12:0::2;::::0;58811:23:::2;::::0;58831:2:::2;58811:7;:23::i;:::-;58770:12;::::0;-1:-1:-1;;;;;58770:12:0::2;::::0;58763:72;:33:::2;:72::i;:::-;58846:22;58859:8;;58846:12;:22::i;:::-;58887:9;58882:227;58898:19:::0;;::::2;58882:227;;;58947:25;::::0;-1:-1:-1;;;;;58947:25:0::2;58939:51;58991:10;59010:4;59016:8:::0;;59025:1;59016:11;;::::2;;;;;:::i;:::-;58939:92;::::0;-1:-1:-1;;;;;;58939:92:0::2;::::0;;;;;;-1:-1:-1;;;;;5976:15:1;;;58939:92:0::2;::::0;::::2;5958:34:1::0;6028:15;;;;6008:18;;;6001:43;-1:-1:-1;59016:11:0::2;::::0;;::::2;;;6060:18:1::0;;;6053:34;6123:3;6103:18;;;6096:31;-1:-1:-1;6143:19:1;;;6136:30;6183:19;;58939:92:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;59046:38;59072:8;;59081:1;59072:11;;;;;;;:::i;:::-;59056:10;59046:21;::::0;;;:9:::2;59072:11;59046:21:::0;;;;;;;;59072:11;::::2;;;::::0;-1:-1:-1;59046:25:0::2;:38::i;:::-;-1:-1:-1::0;58919:3:0;::::2;::::0;::::2;:::i;:::-;;;;58882:227;;;-1:-1:-1::0;;31283:1:0::1;32237:22:::0;;-1:-1:-1;58328:788:0:o;56771:1513::-;34463:7;;;;34717:9;34709:38;;;;-1:-1:-1;;;34709:38:0;;;;;;;:::i;:::-;56852:14:::1;56876:16:::0;56895:34:::1;56904:12;56918:10;;56895:8;:34::i;:::-;56876:53:::0;-1:-1:-1;56938:11:0::1;::::0;57019:1:::1;57000:20:::0;::::1;;56992:73;;;::::0;-1:-1:-1;;;56992:73:0;;8118:2:1;56992:73:0::1;::::0;::::1;8100:21:1::0;8157:2;8137:18;;;8130:30;8196:34;8176:18;;;8169:62;-1:-1:-1;;;8247:18:1;;;8240:38;8295:19;;56992:73:0::1;7916:404:1::0;56992:73:0::1;57079:9;57074:350;57090:19:::0;;::::1;57074:350;;;57137:40;57153:10;57165:8;;57174:1;57165:11;;;;;;;:::i;:::-;;;;;;;57137:15;:40::i;:::-;57127:50;::::0;;::::1;:::i;:::-;57203:10;57188:26;::::0;;;:14:::1;:26;::::0;;;;57127:50;;-1:-1:-1;57230:8:0;;57188:26;57215:8;;57224:1;57215:11;;::::1;;;;;:::i;:::-;;;;;;;57188:39;;;;;;;;;;;:50;;;;57344:4;:17;57349:8;;57358:1;57349:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;57344:17:::0;;-1:-1:-1;57344:17:0;::::1;::::0;;;;;;-1:-1:-1;57344:17:0;;::::1;;:25;;:17:::0;:25:::1;57341:74;;;57398:4;57383:19;;57341:74;57111:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57074:350;;;-1:-1:-1::0;57435:10:0;;57432:847:::1;;57498:4;57482:20:::0;::::1;;;57479:793;;;57519:9;57514:110;57530:19:::0;;::::1;57514:110;;;57574:4;:17;57579:8;;57588:1;57579:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;57574:17:::0;;-1:-1:-1;57574:17:0;::::1;::::0;;;;;;-1:-1:-1;57574:17:0;;::::1;;:25;;:17:::0;:25:::1;57566:46;;;::::0;-1:-1:-1;;;57566:46:0;;12564:2:1;57566:46:0::1;::::0;::::1;12546:21:1::0;12603:1;12583:18;;;12576:29;-1:-1:-1;;;12621:18:1;;;12614:38;12669:18;;57566:46:0::1;12362:331:1::0;57566:46:0::1;57551:3:::0;::::1;::::0;::::1;:::i;:::-;;;;57514:110;;;;57634:38;57639:32;57647:19;57655:6;57663:2;57647:7;:19::i;:::-;57668:2;57639:7;:32::i;57634:38::-;57717:12;::::0;57683:81:::1;::::0;-1:-1:-1;;;;;57717:12:0::1;57731:32;57739:19;57747:6:::0;57755:2:::1;57739:7;:19::i;:::-;57760:2;57731:7;:32::i;57683:81::-;57793:19;57801:6;57809:2;57793:7;:19::i;:::-;57784:28;::::0;:6;:28:::1;:::i;:::-;57830:12;::::0;57775:37;;-1:-1:-1;57823:53:0::1;::::0;-1:-1:-1;;;;;57830:12:0::1;57857:10;57775:37:::0;57823:33:::1;:53::i;:::-;-1:-1:-1::0;57912:5:0::1;57479:793;;;57987:19;57999:6;57987:11;:19::i;:::-;57981:25;;58017:39;58022:33;58030:20;58038:6;58046:3;58030:7;:20::i;58017:39::-;58101:12;::::0;58067:82:::1;::::0;-1:-1:-1;;;;;58101:12:0::1;58115:33;58123:20;58131:6:::0;58139:3;58123:7:::1;:20::i;58067:82::-;58178:20;58186:6;58194:3;58178:7;:20::i;:::-;58169:29;::::0;:6;:29:::1;:::i;:::-;58216:12;::::0;58160:38;;-1:-1:-1;58209:53:0::1;::::0;-1:-1:-1;;;;;58216:12:0::1;58243:10;58160:38:::0;58209:33:::1;:53::i;:::-;56843:1441;;;;56771:1513:::0;;:::o;2392:103::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;2457:30:::1;2484:1;2457:18;:30::i;53715:159::-:0;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;53790:9:::1;53785:84;53805:17:::0;;::::1;53785:84;;;53857:4;53839;:15;53844:6;;53851:1;53844:9;;;;;;;:::i;:::-;;;;;;;53839:15;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;53824:3;;;;;:::i;:::-;;;;53785:84;;;;53715:159:::0;;:::o;55315:84::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;55375:9:::1;:16:::0;;-1:-1:-1;;55375:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55315:84::o;60446:167::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;60524:9:::1;60519:89;60539:17:::0;;::::1;60519:89;;;60596:4;60573:9;:20;60583:6;;60590:1;60583:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;60573:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;60573:20:0;:27;;-1:-1:-1;;60573:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;60558:3;::::1;::::0;::::1;:::i;:::-;;;;60519:89;;54879:96:::0;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54947:7:::1;:20:::0;54879:96::o;54051:104::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54119:12:::1;:28:::0;;-1:-1:-1;;;;;;54119:28:0::1;-1:-1:-1::0;;;;;54119:28:0;;;::::1;::::0;;;::::1;::::0;;54051:104::o;53043:63::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;53090:8:::1;:6;:8::i;59165:675::-:0;34463:7;;;;34717:9;34709:38;;;;-1:-1:-1;;;34709:38:0;;;;;;;:::i;:::-;31327:1:::1;31925:7;;:19;;31917:63;;;::::0;-1:-1:-1;;;31917:63:0;;12900:2:1;31917:63:0::1;::::0;::::1;12882:21:1::0;12939:2;12919:18;;;12912:30;12978:33;12958:18;;;12951:61;13029:18;;31917:63:0::1;12698:355:1::0;31917:63:0::1;31327:1;32058:7;:18:::0;59326:10:::2;::::0;59268:12:::2;::::0;59261:76:::2;::::0;-1:-1:-1;;;;;59268:12:0;;::::2;::::0;59299:10:::2;::::0;59319:4:::2;::::0;59261:37:::2;:76::i;:::-;59348:29;59353:23;59361:10;;59373:2;59353:7;:23::i;59348:29::-;59422:12;::::0;59444:10:::2;::::0;59388:72:::2;::::0;-1:-1:-1;;;;;59422:12:0::2;::::0;59436:23:::2;::::0;59456:2:::2;59436:7;:23::i;59388:72::-;59471:22;59484:8;;59471:12;:22::i;:::-;59509:9;59504:329;59520:19:::0;;::::2;59504:329;;;59570:43;59601:8;;59610:1;59601:11;;;;;;;:::i;:::-;59580:10;59570:21;::::0;;;:9:::2;59601:11;59570:21:::0;;;;;;;;59601:11;::::2;;;::::0;-1:-1:-1;59570:30:0::2;:43::i;:::-;59561:84;;;::::0;-1:-1:-1;;;59561:84:0;;11095:2:1;59561:84:0::2;::::0;::::2;11077:21:1::0;11134:2;11114:18;;;11107:30;11173;11153:18;;;11146:58;11221:18;;59561:84:0::2;10893:352:1::0;59561:84:0::2;59660:41;59689:8;;59698:1;59689:11;;;;;;;:::i;:::-;59670:10;59660:21;::::0;;;:9:::2;59689:11;59660:21:::0;;;;;;;;59689:11;::::2;;;::::0;-1:-1:-1;59660:28:0::2;:41::i;:::-;-1:-1:-1::0;59724:25:0::2;::::0;-1:-1:-1;;;;;59724:25:0::2;59716:51;59776:4;59783:10;59794:8:::0;;59803:1;59794:11;;::::2;;;;;:::i;:::-;59716:93;::::0;-1:-1:-1;;;;;;59716:93:0::2;::::0;;;;;;-1:-1:-1;;;;;5976:15:1;;;59716:93:0::2;::::0;::::2;5958:34:1::0;6028:15;;;;6008:18;;;6001:43;-1:-1:-1;59794:11:0::2;::::0;;::::2;;;6060:18:1::0;;;6053:34;6123:3;6103:18;;;6096:31;-1:-1:-1;6143:19:1;;;6136:30;6183:19;;59716:93:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;59541:3;;;;;:::i;:::-;;;;59504:329;;55089:96:::0;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;55157:7:::1;:20:::0;55089:96::o;54571:92::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54637:8:::1;:18:::0;54571:92::o;54775:96::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54843:7:::1;:20:::0;54775:96::o;55445:361::-;-1:-1:-1;;;;;55573:18:0;;55530:40;55573:18;;;:9;:18;;;;;55503:16;;55643:19;55573:18;55643:17;:19::i;:::-;55628:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55628:35:0;;55600:63;;55680:9;55675:97;55695:19;:10;:17;:19::i;:::-;55691:1;:23;55675:97;;;55746:16;:10;55760:1;55746:13;:16::i;:::-;55732:8;55741:1;55732:11;;;;;;;;:::i;:::-;;;;;;;;;;:30;55716:3;;;;:::i;:::-;;;;55675:97;;;-1:-1:-1;55790:8:0;55445:361;-1:-1:-1;;;55445:361:0:o;53881:162::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;53958:9:::1;53953:85;53973:17:::0;;::::1;53953:85;;;54025:5;54007:4;:15;54012:6;;54019:1;54012:9;;;;;;;:::i;:::-;;;;;;;54007:15;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;53992:3;;;;;:::i;:::-;;;;53953:85;;54984:96:::0;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;55052:7:::1;:20:::0;54984:96::o;54167:::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54235:10:::1;:20:::0;54167:96::o;54371:92::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54437:8:::1;:18:::0;54371:92::o;2650:201::-;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2739:22:0;::::1;2731:73;;;::::0;-1:-1:-1;;;2731:73:0;;9220:2:1;2731:73:0::1;::::0;::::1;9202:21:1::0;9259:2;9239:18;;;9232:30;9298:34;9278:18;;;9271:62;-1:-1:-1;;;9349:18:1;;;9342:36;9395:19;;2731:73:0::1;9018:402:1::0;2731:73:0::1;2815:28;2834:8;2815:18;:28::i;54271:92::-:0;1787:7;1814:6;-1:-1:-1;;;;;1814:6:0;689:10;1961:23;1953:68;;;;-1:-1:-1;;;1953:68:0;;;;;;;:::i;:::-;54337:8:::1;:18:::0;54271:92::o;32619:106::-;32677:7;32708:1;32704;:5;:13;;32716:1;32704:13;;;-1:-1:-1;32712:1:0;;32619:106;-1:-1:-1;32619:106:0:o;28021:146::-;28098:4;21081:19;;;:12;;;:19;;;;;;:24;;28122:37;20984:129;47194:211;47338:58;;-1:-1:-1;;;;;6405:32:1;;47338:58:0;;;6387:51:1;6454:18;;;6447:34;;;47311:86:0;;47331:5;;-1:-1:-1;;;47361:23:0;6360:18:1;;47338:58:0;;;;-1:-1:-1;;47338:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;47338:58:0;-1:-1:-1;;;;;;47338:58:0;;;;;;;;;;47311:19;:86::i;35451:120::-;34463:7;;;;34987:41;;;;-1:-1:-1;;;34987:41:0;;8527:2:1;34987:41:0;;;8509:21:1;8566:2;8546:18;;;8539:30;-1:-1:-1;;;8585:18:1;;;8578:50;8645:18;;34987:41:0;8325:344:1;34987:41:0;35510:7:::1;:15:::0;;-1:-1:-1;;35510:15:0::1;::::0;;35541:22:::1;689:10:::0;35550:12:::1;35541:22;::::0;-1:-1:-1;;;;;5229:32:1;;;5211:51;;5199:2;5184:18;35541:22:0::1;;;;;;;35451:120::o:0;47413:248::-;47584:68;;-1:-1:-1;;;;;5531:15:1;;;47584:68:0;;;5513:34:1;5583:15;;5563:18;;;5556:43;5615:18;;;5608:34;;;47557:96:0;;47577:5;;-1:-1:-1;;;47607:27:0;5448:18:1;;47584:68:0;5273:375:1;47557:96:0;47413:248;;;;:::o;52838:196::-;52911:7;;52994:3;52974:17;52984:7;52974;:17;:::i;:::-;:23;;;;:::i;:::-;52960:37;52838:196;-1:-1:-1;;;;52838:196:0:o;52725:89::-;52781:12;;;52775:33;;-1:-1:-1;;;52775:33:0;;;;;13547:25:1;;;-1:-1:-1;;;;;52781:12:0;;52775:24;;13520:18:1;;52775:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52725:89;:::o;27491:131::-;27558:4;27582:32;27587:3;27607:5;27582:4;:32::i;52210:508::-;52269:11;52326:7;;52315:6;:19;52312:389;;-1:-1:-1;;52355:8:0;;;52210:508::o;52312:389::-;52414:7;;52403:6;:19;52400:301;;-1:-1:-1;;52443:8:0;;;52210:508::o;52400:301::-;52503:7;;52492:6;:19;52489:212;;-1:-1:-1;;52532:8:0;;;52210:508::o;52489:212::-;52591:7;;52580:6;:19;52577:124;;-1:-1:-1;;52620:8:0;;;52210:508::o;52577:124::-;-1:-1:-1;;52681:8:0;;;52210:508::o;52577:124::-;52210:508;;;:::o;3011:191::-;3085:16;3104:6;;-1:-1:-1;;;;;3121:17:0;;;-1:-1:-1;;;;;;3121:17:0;;;;;;3154:40;;3104:6;;;;;;;3154:40;;3085:16;3154:40;3074:128;3011:191;:::o;35192:118::-;34463:7;;;;34717:9;34709:38;;;;-1:-1:-1;;;34709:38:0;;;;;;;:::i;:::-;35252:7:::1;:14:::0;;-1:-1:-1;;35252:14:0::1;35262:4;35252:14;::::0;;35282:20:::1;35289:12;689:10:::0;;609:98;27798:137;27868:4;27892:35;27900:3;27920:5;27892:7;:35::i;28253:114::-;28313:7;28340:19;28348:3;21282:18;;21199:109;28721:137;28792:7;28827:22;28831:3;28843:5;28827:3;:22::i;49767:716::-;50191:23;50217:69;50245:4;50217:69;;;;;;;;;;;;;;;;;50225:5;-1:-1:-1;;;;;50217:27:0;;;:69;;;;;:::i;:::-;50301:17;;50191:95;;-1:-1:-1;50301:21:0;50297:179;;50398:10;50387:30;;;;;;;;;;;;:::i;:::-;50379:85;;;;-1:-1:-1;;;50379:85:0;;12153:2:1;50379:85:0;;;12135:21:1;12192:2;12172:18;;;12165:30;12231:34;12211:18;;;12204:62;-1:-1:-1;;;12282:18:1;;;12275:40;12332:19;;50379:85:0;11951:406:1;18888:414:0;18951:4;21081:19;;;:12;;;:19;;;;;;18968:327;;-1:-1:-1;19011:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;19194:18;;19172:19;;;:12;;;:19;;;;;;:40;;;;19227:11;;18968:327;-1:-1:-1;19278:5:0;19271:12;;19478:1420;19544:4;19683:19;;;:12;;;:19;;;;;;19719:15;;19715:1176;;20094:21;20118:14;20131:1;20118:10;:14;:::i;:::-;20167:18;;20094:38;;-1:-1:-1;20147:17:0;;20167:22;;20188:1;;20167:22;:::i;:::-;20147:42;;20223:13;20210:9;:26;20206:405;;20257:17;20277:3;:11;;20289:9;20277:22;;;;;;;;:::i;:::-;;;;;;;;;20257:42;;20431:9;20402:3;:11;;20414:13;20402:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;20516:23;;;:12;;;:23;;;;;:36;;;20206:405;20692:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20787:3;:12;;:19;20800:5;20787:19;;;;;;;;;;;20780:26;;;20830:4;20823:11;;;;;;;19715:1176;20874:5;20867:12;;;;;21662:120;21729:7;21756:3;:11;;21768:5;21756:18;;;;;;;;:::i;:::-;;;;;;;;;21749:25;;21662:120;;;;:::o;42145:229::-;42282:12;42314:52;42336:6;42344:4;42350:1;42353:12;42282;-1:-1:-1;;;;;39695:19:0;;;43552:60;;;;-1:-1:-1;;;43552:60:0;;11795:2:1;43552:60:0;;;11777:21:1;11834:2;11814:18;;;11807:30;11873:31;11853:18;;;11846:59;11922:18;;43552:60:0;11593:353:1;43552:60:0;43626:12;43640:23;43667:6;-1:-1:-1;;;;;43667:11:0;43686:5;43693:4;43667:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43625:73;;;;43716:51;43733:7;43742:10;43754:12;43716:16;:51::i;:::-;43709:58;43265:510;-1:-1:-1;;;;;;;43265:510:0:o;45951:712::-;46101:12;46130:7;46126:530;;;-1:-1:-1;46161:10:0;46154:17;;46126:530;46275:17;;:21;46271:374;;46473:10;46467:17;46534:15;46521:10;46517:2;46513:19;46506:44;46271:374;46616:12;46609:20;;-1:-1:-1;;;46609:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:367;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:55;;337:1;334;327:12;286:55;-1:-1:-1;360:20:1;;403:18;392:30;;389:50;;;435:1;432;425:12;389:50;472:4;464:6;460:17;448:29;;532:3;525:4;515:6;512:1;508:14;500:6;496:27;492:38;489:47;486:67;;;549:1;546;539:12;486:67;192:367;;;;;:::o;564:186::-;623:6;676:2;664:9;655:7;651:23;647:32;644:52;;;692:1;689;682:12;644:52;715:29;734:9;715:29;:::i;755:808::-;852:6;860;868;876;884;937:3;925:9;916:7;912:23;908:33;905:53;;;954:1;951;944:12;905:53;977:29;996:9;977:29;:::i;:::-;967:39;;1025:38;1059:2;1048:9;1044:18;1025:38;:::i;:::-;1015:48;;1110:2;1099:9;1095:18;1082:32;1072:42;;1165:2;1154:9;1150:18;1137:32;1188:18;1229:2;1221:6;1218:14;1215:34;;;1245:1;1242;1235:12;1215:34;1283:6;1272:9;1268:22;1258:32;;1328:7;1321:4;1317:2;1313:13;1309:27;1299:55;;1350:1;1347;1340:12;1299:55;1390:2;1377:16;1416:2;1408:6;1405:14;1402:34;;;1432:1;1429;1422:12;1402:34;1477:7;1472:2;1463:6;1459:2;1455:15;1451:24;1448:37;1445:57;;;1498:1;1495;1488:12;1445:57;755:808;;;;-1:-1:-1;755:808:1;;-1:-1:-1;1529:2:1;1521:11;;1551:6;755:808;-1:-1:-1;;;755:808:1:o;1568:1200::-;1661:6;1669;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1761:29;1780:9;1761:29;:::i;:::-;1751:39;;1809:2;1862;1851:9;1847:18;1834:32;1885:18;1926:2;1918:6;1915:14;1912:34;;;1942:1;1939;1932:12;1912:34;1980:6;1969:9;1965:22;1955:32;;2025:7;2018:4;2014:2;2010:13;2006:27;1996:55;;2047:1;2044;2037:12;1996:55;2083:2;2070:16;2105:2;2101;2098:10;2095:36;;;2111:18;;:::i;:::-;2157:2;2154:1;2150:10;2189:2;2183:9;2252:2;2248:7;2243:2;2239;2235:11;2231:25;2223:6;2219:38;2307:6;2295:10;2292:22;2287:2;2275:10;2272:18;2269:46;2266:72;;;2318:18;;:::i;:::-;2354:2;2347:22;2404:18;;;2438:15;;;;-1:-1:-1;2473:11:1;;;2503;;;2499:20;;2496:33;-1:-1:-1;2493:53:1;;;2542:1;2539;2532:12;2493:53;2564:1;2555:10;;2574:163;2588:2;2585:1;2582:9;2574:163;;;2645:17;;2633:30;;2606:1;2599:9;;;;;2683:12;;;;2715;;2574:163;;;2578:3;2756:6;2746:16;;;;;;;;1568:1200;;;;;:::o;2773:254::-;2841:6;2849;2902:2;2890:9;2881:7;2877:23;2873:32;2870:52;;;2918:1;2915;2908:12;2870:52;2941:29;2960:9;2941:29;:::i;:::-;2931:39;3017:2;3002:18;;;;2989:32;;-1:-1:-1;;;2773:254:1:o;3032:437::-;3118:6;3126;3179:2;3167:9;3158:7;3154:23;3150:32;3147:52;;;3195:1;3192;3185:12;3147:52;3235:9;3222:23;3268:18;3260:6;3257:30;3254:50;;;3300:1;3297;3290:12;3254:50;3339:70;3401:7;3392:6;3381:9;3377:22;3339:70;:::i;:::-;3428:8;;3313:96;;-1:-1:-1;3032:437:1;-1:-1:-1;;;;3032:437:1:o;3916:241::-;3972:6;4025:2;4013:9;4004:7;4000:23;3996:32;3993:52;;;4041:1;4038;4031:12;3993:52;4080:9;4067:23;4099:28;4121:5;4099:28;:::i;4162:245::-;4229:6;4282:2;4270:9;4261:7;4257:23;4253:32;4250:52;;;4298:1;4295;4288:12;4250:52;4330:9;4324:16;4349:28;4371:5;4349:28;:::i;4412:180::-;4471:6;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;-1:-1:-1;4563:23:1;;4412:180;-1:-1:-1;4412:180:1:o;4597:184::-;4667:6;4720:2;4708:9;4699:7;4695:23;4691:32;4688:52;;;4736:1;4733;4726:12;4688:52;-1:-1:-1;4759:16:1;;4597:184;-1:-1:-1;4597:184:1:o;4786:274::-;4915:3;4953:6;4947:13;4969:53;5015:6;5010:3;5003:4;4995:6;4991:17;4969:53;:::i;:::-;5038:16;;;;;4786:274;-1:-1:-1;;4786:274:1:o;6492:632::-;6663:2;6715:21;;;6785:13;;6688:18;;;6807:22;;;6634:4;;6663:2;6886:15;;;;6860:2;6845:18;;;6634:4;6929:169;6943:6;6940:1;6937:13;6929:169;;;7004:13;;6992:26;;7073:15;;;;7038:12;;;;6965:1;6958:9;6929:169;;;-1:-1:-1;7115:3:1;;6492:632;-1:-1:-1;;;;;;6492:632:1:o;7528:383::-;7677:2;7666:9;7659:21;7640:4;7709:6;7703:13;7752:6;7747:2;7736:9;7732:18;7725:34;7768:66;7827:6;7822:2;7811:9;7807:18;7802:2;7794:6;7790:15;7768:66;:::i;:::-;7895:2;7874:15;-1:-1:-1;;7870:29:1;7855:45;;;;7902:2;7851:54;;7528:383;-1:-1:-1;;7528:383:1:o;10187:340::-;10389:2;10371:21;;;10428:2;10408:18;;;10401:30;-1:-1:-1;;;10462:2:1;10447:18;;10440:46;10518:2;10503:18;;10187:340::o;10532:356::-;10734:2;10716:21;;;10753:18;;;10746:30;10812:34;10807:2;10792:18;;10785:62;10879:2;10864:18;;10532:356::o;13583:128::-;13623:3;13654:1;13650:6;13647:1;13644:13;13641:39;;;13660:18;;:::i;:::-;-1:-1:-1;13696:9:1;;13583:128::o;13716:217::-;13756:1;13782;13772:132;;13826:10;13821:3;13817:20;13814:1;13807:31;13861:4;13858:1;13851:15;13889:4;13886:1;13879:15;13772:132;-1:-1:-1;13918:9:1;;13716:217::o;13938:168::-;13978:7;14044:1;14040;14036:6;14032:14;14029:1;14026:21;14021:1;14014:9;14007:17;14003:45;14000:71;;;14051:18;;:::i;:::-;-1:-1:-1;14091:9:1;;13938:168::o;14111:125::-;14151:4;14179:1;14176;14173:8;14170:34;;;14184:18;;:::i;:::-;-1:-1:-1;14221:9:1;;14111:125::o;14241:258::-;14313:1;14323:113;14337:6;14334:1;14331:13;14323:113;;;14413:11;;;14407:18;14394:11;;;14387:39;14359:2;14352:10;14323:113;;;14454:6;14451:1;14448:13;14445:48;;;-1:-1:-1;;14489:1:1;14471:16;;14464:27;14241:258::o;14504:135::-;14543:3;-1:-1:-1;;14564:17:1;;14561:43;;;14584:18;;:::i;:::-;-1:-1:-1;14631:1:1;14620:13;;14504:135::o;14644:127::-;14705:10;14700:3;14696:20;14693:1;14686:31;14736:4;14733:1;14726:15;14760:4;14757:1;14750:15;14776:127;14837:10;14832:3;14828:20;14825:1;14818:31;14868:4;14865:1;14858:15;14892:4;14889:1;14882:15;14908:127;14969:10;14964:3;14960:20;14957:1;14950:31;15000:4;14997:1;14990:15;15024:4;15021:1;15014:15;15040:127;15101:10;15096:3;15092:20;15089:1;15082:31;15132:4;15129:1;15122:15;15156:4;15153:1;15146:15;15172:118;15258:5;15251:13;15244:21;15237:5;15234:32;15224:60;;15280:1;15277;15270:12
Swarm Source
ipfs://c0ec852ceacd29a99b140826cf728148bba7dd5c0f485cdaba2f415ead9be06a