More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake Batch Lion... | 27321173 | 1062 days ago | IN | 0 POL | 0.01714327 |
Loading...
Loading
Contract Name:
LMUtility
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-19 */ // File: guest.sol // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.0 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts v4.4.0 (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: contracts/LMUtility.sol pragma solidity ^0.8.2; contract LMUtility is ERC20, AccessControl, ERC721Holder { bytes32 public constant CONTRACT_ADMIN_ROLE = keccak256("CONTRACT_ADMIN_ROLE"); bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); address public collectionAddressLionMastersNFT; address public collectionAddressNFTv2; uint256 public numberOfBlocksPerRewardUnit; uint256 public coinAmountPerRewardUnitLionMastersNFT; uint256 public coinAmountPerRewardUnitNFTv2; uint256 public welcomeBonusAmountLionMastersNFT; uint256 public welcomeBonusAmountNFTv2; uint256 public amountOfStakersLionMastersNFT; uint256 public amountOfStakersNFTv2; uint256 public tokensStakedLionMastersNFT; uint256 public tokensStakedNFTv2; uint256 immutable public contractCreationBlock; struct StakeInfo { uint256 stakedAtBlock; uint256 lastHarvestBlock; bool currentlyStaked; } /// owner => tokenId => StakeInfo mapping (address => mapping(uint256 => StakeInfo)) public stakeLogLionMastersNFT; /// owner => tokenId => StakeInfo mapping (address => mapping(uint256 => StakeInfo)) public stakeLogNFTv2; /// owner => #NFTsStaked mapping (address => uint256) public tokensStakedByUserLionMastersNFT; /// owner => #NFTsStaked mapping (address => uint256) public tokensStakedByUserNFTv2; /// tokenId => true/false (true if welcome bonus has been collected for a specific tokenId) mapping (uint256 => bool) public welcomeBonusCollectedLionMastersNFT; /// tokenId => true/false (true if welcome bonus has been collected for a specific tokenId) mapping (uint256 => bool) public welcomeBonusCollectedNFTv2; /// owner => list of all tokenIds that the user has staked mapping (address => uint256[]) public stakePortfolioByUserLionMastersNFT; /// owner => list of all tokenIds that the user has staked mapping (address => uint256[]) public stakePortfolioByUserNFTv2; /// tokenId => indexInStakePortfolio mapping(uint256 => uint256) public indexOfTokenIdInStakePortfolioLionMastersNFT; /// tokenId => indexInStakePortfolio mapping(uint256 => uint256) public indexOfTokenIdInStakePortfolioNFTv2; event RewardsHarvestedLionMastersNFT (address owner, uint256 amount); event NFTStakedLionMastersNFT (address owner, uint256 tokenId); event NFTUnstakedLionMastersNFT (address owner, uint256 tokenId); event RewardsHarvestedNFTv2 (address owner, uint256 amount); event NFTStakedNFTv2 (address owner, uint256 tokenId); event NFTUnstakedNFTv2 (address owner, uint256 tokenId); constructor(address owner, address _collectionAddressLionMastersNFT, address _collectionAddressNFTv2) ERC20("LionMastersUtility", "LMU") AccessControl(){ _mint(owner, 100000 * 10 ** 18); _setupRole(DEFAULT_ADMIN_ROLE, owner); _setupRole(CONTRACT_ADMIN_ROLE, owner); _setupRole(BURNER_ROLE, owner); _setupRole(MINTER_ROLE, owner); collectionAddressLionMastersNFT = _collectionAddressLionMastersNFT; collectionAddressNFTv2 = _collectionAddressNFTv2; contractCreationBlock = block.number; coinAmountPerRewardUnitLionMastersNFT = 15 * 10 ** 18; // 5 ERC20 coins per rewardUnit, may be changed later on coinAmountPerRewardUnitNFTv2 = 15 * 10 ** 18; // 15 ERC20 coins per rewardUnit, may be changed later on numberOfBlocksPerRewardUnit = 29000; // 24 hours per reward unit , may be changed later on welcomeBonusAmountLionMastersNFT = 300 * 10 ** 18; // 300 tokens welcome bonus, only paid once per tokenId welcomeBonusAmountNFTv2 = 600 * 10 ** 18; // 600 tokens welcome bonus, only paid once per tokenId } function stakedNFTSByUserLionMastersNFT(address owner) external view returns (uint256[] memory){ return stakePortfolioByUserLionMastersNFT[owner]; } function stakedNFTSByUserNFTv2(address owner) external view returns (uint256[] memory){ return stakePortfolioByUserNFTv2[owner]; } function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { _mint(to, amount); } function burn(address from, uint256 amount) external onlyRole(BURNER_ROLE) { super._burn(from, amount); } function pendingRewardsLionMastersNFT(address owner, uint256 tokenId) public view returns (uint256){ StakeInfo memory info = stakeLogLionMastersNFT[owner][tokenId]; if(info.lastHarvestBlock < contractCreationBlock || info.currentlyStaked == false) { return 0; } uint256 blocksPassedSinceLastHarvest = block.number - info.lastHarvestBlock; if (blocksPassedSinceLastHarvest < numberOfBlocksPerRewardUnit * 2) { return 0; } uint256 rewardAmount = blocksPassedSinceLastHarvest / numberOfBlocksPerRewardUnit - 1; return rewardAmount * coinAmountPerRewardUnitLionMastersNFT; } function pendingRewardsNFTv2(address owner, uint256 tokenId) public view returns (uint256){ StakeInfo memory info = stakeLogNFTv2[owner][tokenId]; if(info.lastHarvestBlock < contractCreationBlock || info.currentlyStaked == false) { return 0; } uint256 blocksPassedSinceLastHarvest = block.number - info.lastHarvestBlock; if (blocksPassedSinceLastHarvest < numberOfBlocksPerRewardUnit * 2) { return 0; } uint256 rewardAmount = blocksPassedSinceLastHarvest / numberOfBlocksPerRewardUnit - 1; return rewardAmount * coinAmountPerRewardUnitNFTv2; } function stakeLionMastersNFT(uint256 tokenId) public { IERC721(collectionAddressLionMastersNFT).safeTransferFrom(_msgSender(), address(this), tokenId); require(IERC721(collectionAddressLionMastersNFT).ownerOf(tokenId) == address(this), "LMUtility: Error while transferring token"); StakeInfo storage info = stakeLogLionMastersNFT[_msgSender()][tokenId]; info.stakedAtBlock = block.number; info.lastHarvestBlock = block.number; info.currentlyStaked = true; if(tokensStakedByUserLionMastersNFT[_msgSender()] == 0){ amountOfStakersLionMastersNFT += 1; } tokensStakedByUserLionMastersNFT[_msgSender()] += 1; tokensStakedLionMastersNFT += 1; stakePortfolioByUserLionMastersNFT[_msgSender()].push(tokenId); uint256 indexOfNewElement = stakePortfolioByUserLionMastersNFT[_msgSender()].length - 1; indexOfTokenIdInStakePortfolioLionMastersNFT[tokenId] = indexOfNewElement; if(!welcomeBonusCollectedLionMastersNFT[tokenId]) { _mint(_msgSender(), welcomeBonusAmountLionMastersNFT); welcomeBonusCollectedLionMastersNFT[tokenId] = true; } emit NFTStakedLionMastersNFT(_msgSender(), tokenId); } function stakeNFTv2(uint256 tokenId) public { IERC721(collectionAddressNFTv2).safeTransferFrom(_msgSender(), address(this), tokenId); require(IERC721(collectionAddressNFTv2).ownerOf(tokenId) == address(this), "LMUtility: Error while transferring token"); StakeInfo storage info = stakeLogNFTv2[_msgSender()][tokenId]; info.stakedAtBlock = block.number; info.lastHarvestBlock = block.number; info.currentlyStaked = true; if(tokensStakedByUserNFTv2[_msgSender()] == 0){ amountOfStakersNFTv2 += 1; } tokensStakedByUserNFTv2[_msgSender()] += 1; tokensStakedNFTv2 += 1; stakePortfolioByUserNFTv2[_msgSender()].push(tokenId); uint256 indexOfNewElement = stakePortfolioByUserNFTv2[_msgSender()].length - 1; indexOfTokenIdInStakePortfolioNFTv2[tokenId] = indexOfNewElement; if(!welcomeBonusCollectedNFTv2[tokenId]) { _mint(_msgSender(), welcomeBonusAmountNFTv2); welcomeBonusCollectedNFTv2[tokenId] = true; } emit NFTStakedNFTv2(_msgSender(), tokenId); } function stakeBatchLionMastersNFT(uint256[] memory tokenIds) external { for(uint currentId = 0; currentId < tokenIds.length; currentId++) { if(tokenIds[currentId] == 0) { continue; } stakeLionMastersNFT(tokenIds[currentId]); } } function stakeBatchNFTv2(uint256[] memory tokenIds) external { for(uint currentId = 0; currentId < tokenIds.length; currentId++) { if(tokenIds[currentId] == 0) { continue; } stakeNFTv2(tokenIds[currentId]); } } function unstakeBatchLionMastersNFT(uint256[] memory tokenIds) external { for(uint currentId = 0; currentId < tokenIds.length; currentId++) { if(tokenIds[currentId] == 0) { continue; } unstakeLionMastersNFT(tokenIds[currentId]); } } function unstakeBatchNFTv2(uint256[] memory tokenIds) external { for(uint currentId = 0; currentId < tokenIds.length; currentId++) { if(tokenIds[currentId] == 0) { continue; } unstakeNFTv2(tokenIds[currentId]); } } function unstakeLionMastersNFT(uint256 tokenId) public { if(pendingRewardsLionMastersNFT(_msgSender(), tokenId) > 0){ harvestLionMastersNFT(tokenId); } StakeInfo storage info = stakeLogLionMastersNFT[_msgSender()][tokenId]; info.currentlyStaked = true; IERC721(collectionAddressLionMastersNFT).safeTransferFrom(address(this), _msgSender(), tokenId); require(IERC721(collectionAddressLionMastersNFT).ownerOf(tokenId) == _msgSender(), "LMUtility: Error while transferring token"); if(tokensStakedByUserLionMastersNFT[_msgSender()] == 1){ amountOfStakersLionMastersNFT -= 1; } tokensStakedByUserLionMastersNFT[_msgSender()] -= 1; tokensStakedLionMastersNFT -= 1; stakePortfolioByUserLionMastersNFT[_msgSender()][indexOfTokenIdInStakePortfolioLionMastersNFT[tokenId]] = 0; emit NFTUnstakedLionMastersNFT(_msgSender(), tokenId); } function unstakeNFTv2(uint256 tokenId) public { if(pendingRewardsNFTv2(_msgSender(), tokenId) > 0){ harvestNFTv2(tokenId); } StakeInfo storage info = stakeLogNFTv2[_msgSender()][tokenId]; info.currentlyStaked = true; IERC721(collectionAddressNFTv2).safeTransferFrom(address(this), _msgSender(), tokenId); require(IERC721(collectionAddressNFTv2).ownerOf(tokenId) == _msgSender(), "LMUtility: Error while transferring token"); if(tokensStakedByUserNFTv2[_msgSender()] == 1){ amountOfStakersNFTv2 -= 1; } tokensStakedByUserNFTv2[_msgSender()] -= 1; tokensStakedNFTv2 -= 1; stakePortfolioByUserNFTv2[_msgSender()][indexOfTokenIdInStakePortfolioNFTv2[tokenId]] = 0; emit NFTUnstakedNFTv2(_msgSender(), tokenId); } function harvestLionMastersNFT(uint256 tokenId) public { StakeInfo storage info = stakeLogLionMastersNFT[_msgSender()][tokenId]; uint256 rewardAmountInERC20Tokens = pendingRewardsLionMastersNFT(_msgSender(), tokenId); if(rewardAmountInERC20Tokens > 0) { info.lastHarvestBlock = block.number; _mint(_msgSender(), rewardAmountInERC20Tokens); emit RewardsHarvestedLionMastersNFT(_msgSender(), rewardAmountInERC20Tokens); } } function harvestNFTv2(uint256 tokenId) public { StakeInfo storage info = stakeLogNFTv2[_msgSender()][tokenId]; uint256 rewardAmountInERC20Tokens = pendingRewardsNFTv2(_msgSender(), tokenId); if(rewardAmountInERC20Tokens > 0) { info.lastHarvestBlock = block.number; _mint(_msgSender(), rewardAmountInERC20Tokens); emit RewardsHarvestedNFTv2(_msgSender(), rewardAmountInERC20Tokens); } } function harvestBatchLionMastersNFT(address user) external { uint256[] memory tokenIds = stakePortfolioByUserLionMastersNFT[user]; for(uint currentId = 0; currentId < tokenIds.length; currentId++) { if(tokenIds[currentId] == 0) { continue; } harvestLionMastersNFT(tokenIds[currentId]); } } function harvestBatchNFTv2(address user) external { uint256[] memory tokenIds = stakePortfolioByUserNFTv2[user]; for(uint currentId = 0; currentId < tokenIds.length; currentId++) { if(tokenIds[currentId] == 0) { continue; } harvestNFTv2(tokenIds[currentId]); } } // ADMIN / SETTER FUNCTIONS function setNumberOfBlocksPerRewardUnit(uint256 numberOfBlocks) external onlyRole(CONTRACT_ADMIN_ROLE){ numberOfBlocksPerRewardUnit = numberOfBlocks; } // parameter value must be supplied with 18 zeros..... // e.g.: 3 token = setCoinAmountPerRewardUnit(3000000000000000000) function setCoinAmountPerRewardUnitLionMastersNFT(uint256 coinAmount) external onlyRole(CONTRACT_ADMIN_ROLE){ coinAmountPerRewardUnitLionMastersNFT = coinAmount; } function setCoinAmountPerRewardUnitNFTv2(uint256 coinAmount) external onlyRole(CONTRACT_ADMIN_ROLE){ coinAmountPerRewardUnitNFTv2 = coinAmount; } // same as setCoinAmountPerRewardUnit() function setWelcomeBonusAmountLionMastersNFT(uint256 coinAmount) external onlyRole(CONTRACT_ADMIN_ROLE){ welcomeBonusAmountLionMastersNFT = coinAmount; } function setWelcomeBonusAmountNFTv2(uint256 coinAmount) external onlyRole(CONTRACT_ADMIN_ROLE){ welcomeBonusAmountNFTv2 = coinAmount; } function setCollectionAddressLionMastersNFT(address newAddress) external onlyRole(CONTRACT_ADMIN_ROLE){ require (newAddress != address(0), "VIBE: update to zero address not possible"); collectionAddressLionMastersNFT = newAddress; } function setCollectionAddressNFTv2(address newAddress) external onlyRole(CONTRACT_ADMIN_ROLE){ require (newAddress != address(0), "VIBE: update to zero address not possible"); collectionAddressNFTv2 = newAddress; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"_collectionAddressLionMastersNFT","type":"address"},{"internalType":"address","name":"_collectionAddressNFTv2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTStakedLionMastersNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTStakedNFTv2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTUnstakedLionMastersNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTUnstakedNFTv2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsHarvestedLionMastersNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsHarvestedNFTv2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountOfStakersLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountOfStakersNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coinAmountPerRewardUnitLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinAmountPerRewardUnitNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionAddressLionMastersNFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionAddressNFTv2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractCreationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"harvestBatchLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"harvestBatchNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvestLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvestNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexOfTokenIdInStakePortfolioLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexOfTokenIdInStakePortfolioNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfBlocksPerRewardUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewardsLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewardsNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"setCoinAmountPerRewardUnitLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"setCoinAmountPerRewardUnitNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setCollectionAddressLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setCollectionAddressNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocks","type":"uint256"}],"name":"setNumberOfBlocksPerRewardUnit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"setWelcomeBonusAmountLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"setWelcomeBonusAmountNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBatchLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBatchNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakeLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLogLionMastersNFT","outputs":[{"internalType":"uint256","name":"stakedAtBlock","type":"uint256"},{"internalType":"uint256","name":"lastHarvestBlock","type":"uint256"},{"internalType":"bool","name":"currentlyStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLogNFTv2","outputs":[{"internalType":"uint256","name":"stakedAtBlock","type":"uint256"},{"internalType":"uint256","name":"lastHarvestBlock","type":"uint256"},{"internalType":"bool","name":"currentlyStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakeNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakePortfolioByUserLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakePortfolioByUserNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"stakedNFTSByUserLionMastersNFT","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"stakedNFTSByUserNFTv2","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensStakedByUserLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensStakedByUserNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensStakedLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensStakedNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeBatchLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeBatchNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstakeLionMastersNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstakeNFTv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"welcomeBonusAmountLionMastersNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"welcomeBonusAmountNFTv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"welcomeBonusCollectedLionMastersNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"welcomeBonusCollectedNFTv2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200334538038062003345833981016040819052620000349162000417565b604051806040016040528060128152602001714c696f6e4d6173746572735574696c69747960701b815250604051806040016040528060038152602001624c4d5560e81b81525081600390805190602001906200009392919062000354565b508051620000a990600490602084019062000354565b505050620000c88369152d02c7e14af6800000620001c160201b60201c565b620000d5600084620002aa565b620001017f2ce8d04a9c35987429af538825cd2438cc5c5bb5dc427955f84daaa3ea10501684620002aa565b6200012d7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84884620002aa565b620001597f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684620002aa565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055504360805267d02ab486cedc00006009819055600a55617148600855681043561a8829300000600b55682086ac351052600000600c55620004c5565b6001600160a01b0382166200021c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806002600082825462000230919062000461565b90915550506001600160a01b038216600090815260208190526040812080548392906200025f90849062000461565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b620002a6828260008281526005602090815260408083206001600160a01b038516845290915290205460ff16620002a65760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b828054620003629062000488565b90600052602060002090601f016020900481019282620003865760008555620003d1565b82601f10620003a157805160ff1916838001178555620003d1565b82800160010185558215620003d1579182015b82811115620003d1578251825591602001919060010190620003b4565b50620003df929150620003e3565b5090565b5b80821115620003df5760008155600101620003e4565b80516001600160a01b03811681146200041257600080fd5b919050565b6000806000606084860312156200042d57600080fd5b6200043884620003fa565b92506200044860208501620003fa565b91506200045860408501620003fa565b90509250925092565b600082198211156200048357634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200049d57607f821691505b60208210811415620004bf57634e487b7160e01b600052602260045260246000fd5b50919050565b608051612e56620004ef600039600081816104cc0152818161111a01526115010152612e566000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c80638103ab3511610220578063b97d332e11610130578063d5391393116100b8578063ed6236be11610087578063ed6236be146109ec578063f6590b42146109ff578063f6b917f314610a08578063f7e25e7614610a1b578063fa238d4d14610a2e57600080fd5b8063d539139314610970578063d547741f14610997578063d72b4b38146109aa578063dd62ed3e146109b357600080fd5b8063c797190c116100ff578063c797190c1461090b578063c7a9462514610914578063cbded2d814610934578063cf69e75014610954578063d4eafd8d1461096757600080fd5b8063b97d332e146108bf578063b9b0130e146108d2578063bc91121b146108e5578063c2aaa739146108f857600080fd5b80639b7a4189116101b3578063a53c333611610182578063a53c333614610860578063a60bd00314610873578063a9059cbb14610886578063aaa0691b14610899578063b27c5a1e146108ac57600080fd5b80639b7a41891461081f5780639dc29fac14610832578063a217fddf14610845578063a457c2d71461084d57600080fd5b80638bbd3941116101ef5780638bbd3941146107e857806391d14854146107f157806395d89b41146108045780639968bd541461080c57600080fd5b80638103ab351461078c578063827e60b11461079f57806383db5a04146107b25780638ba98699146107c557600080fd5b80633a165b601161031b578063588c3353116102ae57806370a082311161027d57806370a08231146106b657806374a65793146106df5780637ae1b20f146106f25780637b78d3301461074c5780637fa3d7bf1461076c57600080fd5b8063588c33531461067e57806361766e9d146106915780636c8a66ed1461069a5780636f185501146106a357600080fd5b80634634d24e116102ea5780634634d24e1461060a5780634c65e2591461063557806352c9853e146106485780635318f1c21461065b57600080fd5b80633a165b60146105bb57806340affef6146105ce57806340c10f19146105ee5780634479c0431461060157600080fd5b80631da033121161039e5780632f2ff15d1161036d5780632f2ff15d14610560578063313ce5671461057357806334b4ded11461058257806336568abe1461059557806339509351146105a857600080fd5b80631da03312146104ee57806323b872dd14610503578063248a9ca314610516578063282c51f31461053957600080fd5b8063095ea7b3116103da578063095ea7b314610475578063150b7a021461048857806318160ddd146104bf5780631ac2bd9e146104c757600080fd5b806301ffc9a71461040c57806302273d2b1461043457806306fdde03146104495780630821dee51461045e575b600080fd5b61041f61041a366004612aa0565b610a6b565b60405190151581526020015b60405180910390f35b610447610442366004612811565b610aa2565b005b610451610b0d565b60405161042b9190612ba7565b610467600e5481565b60405190815260200161042b565b61041f610483366004612989565b610b9f565b6104a66104963660046128c5565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161042b565b600254610467565b6104677f000000000000000000000000000000000000000000000000000000000000000081565b610467600080516020612e0183398151915281565b61041f610511366004612884565b610bb5565b610467610524366004612a62565b60009081526005602052604090206001015490565b6104677f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61044761056e366004612a7b565b610c5f565b6040516012815260200161042b565b610447610590366004612811565b610c8a565b6104476105a3366004612a7b565b610cec565b61041f6105b6366004612989565b610d6a565b6104476105c9366004612a62565b610da6565b6104676105dc366004612a62565b60196020526000908152604090205481565b6104476105fc366004612989565b610dc5565b610467600d5481565b60065461061d906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b610447610643366004612a62565b610dfa565b610447610656366004612a62565b610e82565b61041f610669366004612a62565b60166020526000908152604090205460ff1681565b61046761068c366004612989565b6110cb565b610467600b5481565b610467600c5481565b6104476106b1366004612a62565b6111c1565b6104676106c4366004612811565b6001600160a01b031660009081526020819052604090205490565b6104476106ed366004612a62565b6111e0565b61072f610700366004612989565b601260209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161042b565b61075f61075a366004612811565b611446565b60405161042b9190612b63565b61046761077a366004612a62565b601a6020526000908152604090205481565b61046761079a366004612989565b6114b2565b6104476107ad366004612811565b61159e565b6104476107c0366004612a62565b61166c565b61041f6107d3366004612a62565b60156020526000908152604090205460ff1681565b610467600a5481565b61041f6107ff366004612a7b565b61168b565b6104516116b6565b61046761081a366004612989565b6116c5565b61044761082d3660046129b5565b6116f6565b610447610840366004612989565b61175d565b610467600081565b61041f61085b366004612989565b611792565b61044761086e366004612a62565b61182b565b60075461061d906001600160a01b031681565b61041f610894366004612989565b61188e565b6104476108a7366004612a62565b61189b565b6104476108ba366004612811565b611ac3565b6104476108cd3660046129b5565b611b91565b6104476108e0366004612a62565b611bf8565b6104676108f3366004612989565b611e44565b6104476109063660046129b5565b611e60565b61046760105481565b610467610922366004612811565b60146020526000908152604090205481565b610467610942366004612811565b60136020526000908152604090205481565b61075f610962366004612811565b611ec7565b61046760095481565b6104677f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6104476109a5366004612a7b565b611f31565b61046760085481565b6104676109c136600461284b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104476109fa366004612a62565b611f57565b610467600f5481565b610447610a163660046129b5565b611f76565b610447610a29366004612a62565b611fdd565b61072f610a3c366004612989565b601160209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60006001600160e01b03198216637965db0b60e01b1480610a9c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612e01833981519152610abb8133611ffc565b6001600160a01b038216610aea5760405162461bcd60e51b8152600401610ae190612c23565b60405180910390fd5b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610b1c90612d50565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4890612d50565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b5050505050905090565b6000610bac338484612060565b50600192915050565b6000610bc2848484612184565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c475760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ae1565b610c548533858403612060565b506001949350505050565b600082815260056020526040902060010154610c7b8133611ffc565b610c858383612354565b505050565b600080516020612e01833981519152610ca38133611ffc565b6001600160a01b038216610cc95760405162461bcd60e51b8152600401610ae190612c23565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163314610d5c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ae1565b610d6682826123da565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bac918590610da1908690612c9d565b612060565b600080516020612e01833981519152610dbf8133611ffc565b50600c55565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610df08133611ffc565b610c858383612441565b336000818152601260209081526040808320858452909152812091610e1f90846110cb565b90508015610c8557436001830155610e38335b82612441565b7fc62aa71075d4c9ea2a293ecf4a12696cdba10daaf37ceb063c88998afd864bb4335b604080516001600160a01b03909216825260208201849052015b60405180910390a1505050565b6000610e8e33836114b2565b1115610e9d57610e9d8161182b565b3360008181526011602090815260408083208584529091529081902060028101805460ff191660011790556006549151632142170760e11b815290926001600160a01b03909216916342842e0e91610efb9130918790600401612b3f565b600060405180830381600087803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b50505050610f343390565b6006546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b158015610f7c57600080fd5b505afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb4919061282e565b6001600160a01b031614610fda5760405162461bcd60e51b8152600401610ae190612bda565b336000908152601360205260409020546001141561100b576001600d60008282546110059190612cf6565b90915550505b33600090815260136020526040812080546001929061102b908490612cf6565b925050819055506001600f60008282546110459190612cf6565b909155505033600090815260176020908152604080832085845260199092528220548154811061107757611077612dbc565b6000918252602090912001557fd57638a40ebd5e55acd0bba76c779cac4f52e4826b154f35819569e621253a34335b604080516001600160a01b039092168252602082018590520160405180910390a15050565b6001600160a01b03821660009081526012602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff16151591810191909152907f0000000000000000000000000000000000000000000000000000000000000000118061114757506040810151155b15611156576000915050610a9c565b60008160200151436111689190612cf6565b905060085460026111799190612cd7565b81101561118b57600092505050610a9c565b600060016008548361119d9190612cb5565b6111a79190612cf6565b9050600a54816111b79190612cd7565b9695505050505050565b600080516020612e018339815191526111da8133611ffc565b50600b55565b6007546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b815260040161121293929190612b3f565b600060405180830381600087803b15801561122c57600080fd5b505af1158015611240573d6000803e3d6000fd5b50506007546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c2919061282e565b6001600160a01b0316146112e85760405162461bcd60e51b8152600401610ae190612bda565b33600081815260126020908152604080832085845282528083204380825560018083019190915560028201805460ff191690911790559383526014909152902054611346576001600e60008282546113409190612c9d565b90915550505b336000908152601460205260408120805460019290611366908490612c9d565b925050819055506001601060008282546113809190612c9d565b9091555050336000818152601860209081526040822080546001808201835582855292842001869055928252915490916113b991612cf6565b6000848152601a60209081526040808320849055601690915290205490915060ff16611405576113eb33600c54612441565b6000838152601660205260409020805460ff191660011790555b7fd4d04f7de89b31a01c06b313a552fe356ad21c99270bf22d3ea7182da8a55d3e335b604080516001600160a01b0390921682526020820186905201610e75565b6001600160a01b0381166000908152601760209081526040918290208054835181840281018401909452808452606093928301828280156114a657602002820191906000526020600020905b815481526020019060010190808311611492575b50505050509050919050565b6001600160a01b03821660009081526011602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff16151591810191909152907f0000000000000000000000000000000000000000000000000000000000000000118061152e57506040810151155b1561153d576000915050610a9c565b600081602001514361154f9190612cf6565b905060085460026115609190612cd7565b81101561157257600092505050610a9c565b60006001600854836115849190612cb5565b61158e9190612cf6565b9050600954816111b79190612cd7565b6001600160a01b0381166000908152601860209081526040808320805482518185028101850190935280835291929091908301828280156115fe57602002820191906000526020600020905b8154815260200190600101908083116115ea575b5050505050905060005b8151811015610c855781818151811061162357611623612dbc565b6020026020010151600014156116385761165a565b61165a82828151811061164d5761164d612dbc565b6020026020010151610dfa565b8061166481612d8b565b915050611608565b600080516020612e018339815191526116858133611ffc565b50600a55565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610b1c90612d50565b601760205281600052604060002081815481106116e157600080fd5b90600052602060002001600091509150505481565b60005b8151811015610d665781818151811061171457611714612dbc565b6020026020010151600014156117295761174b565b61174b82828151811061173e5761173e612dbc565b6020026020010151611bf8565b8061175581612d8b565b9150506116f9565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8486117888133611ffc565b610c858383612520565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ae1565b6118213385858403612060565b5060019392505050565b33600081815260116020908152604080832085845290915281209161185090846114b2565b90508015610c855743600183015561186733610e32565b7f2380a252be9b85d1d565164913f6335cb23048276325968b9cb76d0ee62f5a3233610e5b565b6000610bac338484612184565b60006118a733836110cb565b11156118b6576118b681610dfa565b3360008181526012602090815260408083208584529091529081902060028101805460ff191660011790556007549151632142170760e11b815290926001600160a01b03909216916342842e0e916119149130918790600401612b3f565b600060405180830381600087803b15801561192e57600080fd5b505af1158015611942573d6000803e3d6000fd5b5050505061194d3390565b6007546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561199557600080fd5b505afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd919061282e565b6001600160a01b0316146119f35760405162461bcd60e51b8152600401610ae190612bda565b3360009081526014602052604090205460011415611a24576001600e6000828254611a1e9190612cf6565b90915550505b336000908152601460205260408120805460019290611a44908490612cf6565b92505081905550600160106000828254611a5e9190612cf6565b9091555050336000908152601860209081526040808320858452601a90925282205481548110611a9057611a90612dbc565b6000918252602090912001557fdc546340bf27064c19daabcafed9a74610e11889eb3f87d0454518a2dbc87ca5336110a6565b6001600160a01b038116600090815260176020908152604080832080548251818502810185019093528083529192909190830182828015611b2357602002820191906000526020600020905b815481526020019060010190808311611b0f575b5050505050905060005b8151811015610c8557818181518110611b4857611b48612dbc565b602002602001015160001415611b5d57611b7f565b611b7f828281518110611b7257611b72612dbc565b602002602001015161182b565b80611b8981612d8b565b915050611b2d565b60005b8151811015610d6657818181518110611baf57611baf612dbc565b602002602001015160001415611bc457611be6565b611be6828281518110611bd957611bd9612dbc565b6020026020010151610e82565b80611bf081612d8b565b915050611b94565b6006546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b8152600401611c2a93929190612b3f565b600060405180830381600087803b158015611c4457600080fd5b505af1158015611c58573d6000803e3d6000fd5b50506006546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b158015611ca257600080fd5b505afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda919061282e565b6001600160a01b031614611d005760405162461bcd60e51b8152600401610ae190612bda565b33600081815260116020908152604080832085845282528083204380825560018083019190915560028201805460ff191690911790559383526013909152902054611d5e576001600d6000828254611d589190612c9d565b90915550505b336000908152601360205260408120805460019290611d7e908490612c9d565b925050819055506001600f6000828254611d989190612c9d565b909155505033600081815260176020908152604082208054600180820183558285529284200186905592825291549091611dd191612cf6565b6000848152601960209081526040808320849055601590915290205490915060ff16611e1d57611e0333600b54612441565b6000838152601560205260409020805460ff191660011790555b7fa3ed92d89e893c07cf2fb75907416df81c5952183c49bd85b929bbc79be5d21433611428565b601860205281600052604060002081815481106116e157600080fd5b60005b8151811015610d6657818181518110611e7e57611e7e612dbc565b602002602001015160001415611e9357611eb5565b611eb5828281518110611ea857611ea8612dbc565b60200260200101516111e0565b80611ebf81612d8b565b915050611e63565b6001600160a01b0381166000908152601860209081526040918290208054835181840281018401909452808452606093928301828280156114a657602002820191906000526020600020908154815260200190600101908083116114925750505050509050919050565b600082815260056020526040902060010154611f4d8133611ffc565b610c8583836123da565b600080516020612e01833981519152611f708133611ffc565b50600855565b60005b8151811015610d6657818181518110611f9457611f94612dbc565b602002602001015160001415611fa957611fcb565b611fcb828281518110611fbe57611fbe612dbc565b602002602001015161189b565b80611fd581612d8b565b915050611f79565b600080516020612e01833981519152611ff68133611ffc565b50600955565b612006828261168b565b610d665761201e816001600160a01b0316601461266e565b61202983602061266e565b60405160200161203a929190612aca565b60408051601f198184030181529082905262461bcd60e51b8252610ae191600401612ba7565b6001600160a01b0383166120c25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae1565b6001600160a01b0382166121235760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ae1565b6001600160a01b03821661224a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ae1565b6001600160a01b038316600090815260208190526040902054818110156122c25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ae1565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122f9908490612c9d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161234591815260200190565b60405180910390a35b50505050565b61235e828261168b565b610d665760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556123963390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6123e4828261168b565b15610d665760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166124975760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ae1565b80600260008282546124a99190612c9d565b90915550506001600160a01b038216600090815260208190526040812080548392906124d6908490612c9d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ae1565b6001600160a01b038216600090815260208190526040902054818110156125f45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ae1565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612623908490612cf6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6060600061267d836002612cd7565b612688906002612c9d565b67ffffffffffffffff8111156126a0576126a0612dd2565b6040519080825280601f01601f1916602001820160405280156126ca576020820181803683370190505b509050600360fc1b816000815181106126e5576126e5612dbc565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061271457612714612dbc565b60200101906001600160f81b031916908160001a9053506000612738846002612cd7565b612743906001612c9d565b90505b60018111156127bb576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061277757612777612dbc565b1a60f81b82828151811061278d5761278d612dbc565b60200101906001600160f81b031916908160001a90535060049490941c936127b481612d39565b9050612746565b50831561280a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ae1565b9392505050565b60006020828403121561282357600080fd5b813561280a81612de8565b60006020828403121561284057600080fd5b815161280a81612de8565b6000806040838503121561285e57600080fd5b823561286981612de8565b9150602083013561287981612de8565b809150509250929050565b60008060006060848603121561289957600080fd5b83356128a481612de8565b925060208401356128b481612de8565b929592945050506040919091013590565b600080600080608085870312156128db57600080fd5b84356128e681612de8565b93506020858101356128f781612de8565b935060408601359250606086013567ffffffffffffffff8082111561291b57600080fd5b818801915088601f83011261292f57600080fd5b81358181111561294157612941612dd2565b612953601f8201601f19168501612c6c565b9150808252898482850101111561296957600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561299c57600080fd5b82356129a781612de8565b946020939093013593505050565b600060208083850312156129c857600080fd5b823567ffffffffffffffff808211156129e057600080fd5b818501915085601f8301126129f457600080fd5b813581811115612a0657612a06612dd2565b8060051b9150612a17848301612c6c565b8181528481019084860184860187018a1015612a3257600080fd5b600095505b83861015612a55578035835260019590950194918601918601612a37565b5098975050505050505050565b600060208284031215612a7457600080fd5b5035919050565b60008060408385031215612a8e57600080fd5b82359150602083013561287981612de8565b600060208284031215612ab257600080fd5b81356001600160e01b03198116811461280a57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b02816017850160208801612d0d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b33816028840160208801612d0d565b01602801949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b81811015612b9b57835183529284019291840191600101612b7f565b50909695505050505050565b6020815260008251806020840152612bc6816040850160208701612d0d565b601f01601f19169190910160400192915050565b60208082526029908201527f4c4d5574696c6974793a204572726f72207768696c65207472616e736665727260408201526834b733903a37b5b2b760b91b606082015260800190565b60208082526029908201527f564942453a2075706461746520746f207a65726f2061646472657373206e6f7460408201526820706f737369626c6560b81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c9557612c95612dd2565b604052919050565b60008219821115612cb057612cb0612da6565b500190565b600082612cd257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612cf157612cf1612da6565b500290565b600082821015612d0857612d08612da6565b500390565b60005b83811015612d28578181015183820152602001612d10565b8381111561234e5750506000910152565b600081612d4857612d48612da6565b506000190190565b600181811c90821680612d6457607f821691505b60208210811415612d8557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9f57612d9f612da6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612dfd57600080fd5b5056fe2ce8d04a9c35987429af538825cd2438cc5c5bb5dc427955f84daaa3ea105016a26469706673582212206df6184e9d68b0eef5e2234f8b3f0b8811e41e7a19aeb3df76c64bafb65f992564736f6c63430008070033000000000000000000000000fe65593a05b0a28a0fede6efa127370a7cc73b8e0000000000000000000000009b49684d894b3554f3c7b6a1e3593e6c87571fb7000000000000000000000000fe65593a05b0a28a0fede6efa127370a7cc73b8e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104075760003560e01c80638103ab3511610220578063b97d332e11610130578063d5391393116100b8578063ed6236be11610087578063ed6236be146109ec578063f6590b42146109ff578063f6b917f314610a08578063f7e25e7614610a1b578063fa238d4d14610a2e57600080fd5b8063d539139314610970578063d547741f14610997578063d72b4b38146109aa578063dd62ed3e146109b357600080fd5b8063c797190c116100ff578063c797190c1461090b578063c7a9462514610914578063cbded2d814610934578063cf69e75014610954578063d4eafd8d1461096757600080fd5b8063b97d332e146108bf578063b9b0130e146108d2578063bc91121b146108e5578063c2aaa739146108f857600080fd5b80639b7a4189116101b3578063a53c333611610182578063a53c333614610860578063a60bd00314610873578063a9059cbb14610886578063aaa0691b14610899578063b27c5a1e146108ac57600080fd5b80639b7a41891461081f5780639dc29fac14610832578063a217fddf14610845578063a457c2d71461084d57600080fd5b80638bbd3941116101ef5780638bbd3941146107e857806391d14854146107f157806395d89b41146108045780639968bd541461080c57600080fd5b80638103ab351461078c578063827e60b11461079f57806383db5a04146107b25780638ba98699146107c557600080fd5b80633a165b601161031b578063588c3353116102ae57806370a082311161027d57806370a08231146106b657806374a65793146106df5780637ae1b20f146106f25780637b78d3301461074c5780637fa3d7bf1461076c57600080fd5b8063588c33531461067e57806361766e9d146106915780636c8a66ed1461069a5780636f185501146106a357600080fd5b80634634d24e116102ea5780634634d24e1461060a5780634c65e2591461063557806352c9853e146106485780635318f1c21461065b57600080fd5b80633a165b60146105bb57806340affef6146105ce57806340c10f19146105ee5780634479c0431461060157600080fd5b80631da033121161039e5780632f2ff15d1161036d5780632f2ff15d14610560578063313ce5671461057357806334b4ded11461058257806336568abe1461059557806339509351146105a857600080fd5b80631da03312146104ee57806323b872dd14610503578063248a9ca314610516578063282c51f31461053957600080fd5b8063095ea7b3116103da578063095ea7b314610475578063150b7a021461048857806318160ddd146104bf5780631ac2bd9e146104c757600080fd5b806301ffc9a71461040c57806302273d2b1461043457806306fdde03146104495780630821dee51461045e575b600080fd5b61041f61041a366004612aa0565b610a6b565b60405190151581526020015b60405180910390f35b610447610442366004612811565b610aa2565b005b610451610b0d565b60405161042b9190612ba7565b610467600e5481565b60405190815260200161042b565b61041f610483366004612989565b610b9f565b6104a66104963660046128c5565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161042b565b600254610467565b6104677f0000000000000000000000000000000000000000000000000000000001a0d74881565b610467600080516020612e0183398151915281565b61041f610511366004612884565b610bb5565b610467610524366004612a62565b60009081526005602052604090206001015490565b6104677f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61044761056e366004612a7b565b610c5f565b6040516012815260200161042b565b610447610590366004612811565b610c8a565b6104476105a3366004612a7b565b610cec565b61041f6105b6366004612989565b610d6a565b6104476105c9366004612a62565b610da6565b6104676105dc366004612a62565b60196020526000908152604090205481565b6104476105fc366004612989565b610dc5565b610467600d5481565b60065461061d906001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b610447610643366004612a62565b610dfa565b610447610656366004612a62565b610e82565b61041f610669366004612a62565b60166020526000908152604090205460ff1681565b61046761068c366004612989565b6110cb565b610467600b5481565b610467600c5481565b6104476106b1366004612a62565b6111c1565b6104676106c4366004612811565b6001600160a01b031660009081526020819052604090205490565b6104476106ed366004612a62565b6111e0565b61072f610700366004612989565b601260209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161042b565b61075f61075a366004612811565b611446565b60405161042b9190612b63565b61046761077a366004612a62565b601a6020526000908152604090205481565b61046761079a366004612989565b6114b2565b6104476107ad366004612811565b61159e565b6104476107c0366004612a62565b61166c565b61041f6107d3366004612a62565b60156020526000908152604090205460ff1681565b610467600a5481565b61041f6107ff366004612a7b565b61168b565b6104516116b6565b61046761081a366004612989565b6116c5565b61044761082d3660046129b5565b6116f6565b610447610840366004612989565b61175d565b610467600081565b61041f61085b366004612989565b611792565b61044761086e366004612a62565b61182b565b60075461061d906001600160a01b031681565b61041f610894366004612989565b61188e565b6104476108a7366004612a62565b61189b565b6104476108ba366004612811565b611ac3565b6104476108cd3660046129b5565b611b91565b6104476108e0366004612a62565b611bf8565b6104676108f3366004612989565b611e44565b6104476109063660046129b5565b611e60565b61046760105481565b610467610922366004612811565b60146020526000908152604090205481565b610467610942366004612811565b60136020526000908152604090205481565b61075f610962366004612811565b611ec7565b61046760095481565b6104677f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6104476109a5366004612a7b565b611f31565b61046760085481565b6104676109c136600461284b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104476109fa366004612a62565b611f57565b610467600f5481565b610447610a163660046129b5565b611f76565b610447610a29366004612a62565b611fdd565b61072f610a3c366004612989565b601160209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60006001600160e01b03198216637965db0b60e01b1480610a9c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612e01833981519152610abb8133611ffc565b6001600160a01b038216610aea5760405162461bcd60e51b8152600401610ae190612c23565b60405180910390fd5b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610b1c90612d50565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4890612d50565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b5050505050905090565b6000610bac338484612060565b50600192915050565b6000610bc2848484612184565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c475760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ae1565b610c548533858403612060565b506001949350505050565b600082815260056020526040902060010154610c7b8133611ffc565b610c858383612354565b505050565b600080516020612e01833981519152610ca38133611ffc565b6001600160a01b038216610cc95760405162461bcd60e51b8152600401610ae190612c23565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163314610d5c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ae1565b610d6682826123da565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bac918590610da1908690612c9d565b612060565b600080516020612e01833981519152610dbf8133611ffc565b50600c55565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610df08133611ffc565b610c858383612441565b336000818152601260209081526040808320858452909152812091610e1f90846110cb565b90508015610c8557436001830155610e38335b82612441565b7fc62aa71075d4c9ea2a293ecf4a12696cdba10daaf37ceb063c88998afd864bb4335b604080516001600160a01b03909216825260208201849052015b60405180910390a1505050565b6000610e8e33836114b2565b1115610e9d57610e9d8161182b565b3360008181526011602090815260408083208584529091529081902060028101805460ff191660011790556006549151632142170760e11b815290926001600160a01b03909216916342842e0e91610efb9130918790600401612b3f565b600060405180830381600087803b158015610f1557600080fd5b505af1158015610f29573d6000803e3d6000fd5b50505050610f343390565b6006546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b158015610f7c57600080fd5b505afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb4919061282e565b6001600160a01b031614610fda5760405162461bcd60e51b8152600401610ae190612bda565b336000908152601360205260409020546001141561100b576001600d60008282546110059190612cf6565b90915550505b33600090815260136020526040812080546001929061102b908490612cf6565b925050819055506001600f60008282546110459190612cf6565b909155505033600090815260176020908152604080832085845260199092528220548154811061107757611077612dbc565b6000918252602090912001557fd57638a40ebd5e55acd0bba76c779cac4f52e4826b154f35819569e621253a34335b604080516001600160a01b039092168252602082018590520160405180910390a15050565b6001600160a01b03821660009081526012602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff16151591810191909152907f0000000000000000000000000000000000000000000000000000000001a0d748118061114757506040810151155b15611156576000915050610a9c565b60008160200151436111689190612cf6565b905060085460026111799190612cd7565b81101561118b57600092505050610a9c565b600060016008548361119d9190612cb5565b6111a79190612cf6565b9050600a54816111b79190612cd7565b9695505050505050565b600080516020612e018339815191526111da8133611ffc565b50600b55565b6007546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b815260040161121293929190612b3f565b600060405180830381600087803b15801561122c57600080fd5b505af1158015611240573d6000803e3d6000fd5b50506007546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c2919061282e565b6001600160a01b0316146112e85760405162461bcd60e51b8152600401610ae190612bda565b33600081815260126020908152604080832085845282528083204380825560018083019190915560028201805460ff191690911790559383526014909152902054611346576001600e60008282546113409190612c9d565b90915550505b336000908152601460205260408120805460019290611366908490612c9d565b925050819055506001601060008282546113809190612c9d565b9091555050336000818152601860209081526040822080546001808201835582855292842001869055928252915490916113b991612cf6565b6000848152601a60209081526040808320849055601690915290205490915060ff16611405576113eb33600c54612441565b6000838152601660205260409020805460ff191660011790555b7fd4d04f7de89b31a01c06b313a552fe356ad21c99270bf22d3ea7182da8a55d3e335b604080516001600160a01b0390921682526020820186905201610e75565b6001600160a01b0381166000908152601760209081526040918290208054835181840281018401909452808452606093928301828280156114a657602002820191906000526020600020905b815481526020019060010190808311611492575b50505050509050919050565b6001600160a01b03821660009081526011602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff16151591810191909152907f0000000000000000000000000000000000000000000000000000000001a0d748118061152e57506040810151155b1561153d576000915050610a9c565b600081602001514361154f9190612cf6565b905060085460026115609190612cd7565b81101561157257600092505050610a9c565b60006001600854836115849190612cb5565b61158e9190612cf6565b9050600954816111b79190612cd7565b6001600160a01b0381166000908152601860209081526040808320805482518185028101850190935280835291929091908301828280156115fe57602002820191906000526020600020905b8154815260200190600101908083116115ea575b5050505050905060005b8151811015610c855781818151811061162357611623612dbc565b6020026020010151600014156116385761165a565b61165a82828151811061164d5761164d612dbc565b6020026020010151610dfa565b8061166481612d8b565b915050611608565b600080516020612e018339815191526116858133611ffc565b50600a55565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610b1c90612d50565b601760205281600052604060002081815481106116e157600080fd5b90600052602060002001600091509150505481565b60005b8151811015610d665781818151811061171457611714612dbc565b6020026020010151600014156117295761174b565b61174b82828151811061173e5761173e612dbc565b6020026020010151611bf8565b8061175581612d8b565b9150506116f9565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8486117888133611ffc565b610c858383612520565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ae1565b6118213385858403612060565b5060019392505050565b33600081815260116020908152604080832085845290915281209161185090846114b2565b90508015610c855743600183015561186733610e32565b7f2380a252be9b85d1d565164913f6335cb23048276325968b9cb76d0ee62f5a3233610e5b565b6000610bac338484612184565b60006118a733836110cb565b11156118b6576118b681610dfa565b3360008181526012602090815260408083208584529091529081902060028101805460ff191660011790556007549151632142170760e11b815290926001600160a01b03909216916342842e0e916119149130918790600401612b3f565b600060405180830381600087803b15801561192e57600080fd5b505af1158015611942573d6000803e3d6000fd5b5050505061194d3390565b6007546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561199557600080fd5b505afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd919061282e565b6001600160a01b0316146119f35760405162461bcd60e51b8152600401610ae190612bda565b3360009081526014602052604090205460011415611a24576001600e6000828254611a1e9190612cf6565b90915550505b336000908152601460205260408120805460019290611a44908490612cf6565b92505081905550600160106000828254611a5e9190612cf6565b9091555050336000908152601860209081526040808320858452601a90925282205481548110611a9057611a90612dbc565b6000918252602090912001557fdc546340bf27064c19daabcafed9a74610e11889eb3f87d0454518a2dbc87ca5336110a6565b6001600160a01b038116600090815260176020908152604080832080548251818502810185019093528083529192909190830182828015611b2357602002820191906000526020600020905b815481526020019060010190808311611b0f575b5050505050905060005b8151811015610c8557818181518110611b4857611b48612dbc565b602002602001015160001415611b5d57611b7f565b611b7f828281518110611b7257611b72612dbc565b602002602001015161182b565b80611b8981612d8b565b915050611b2d565b60005b8151811015610d6657818181518110611baf57611baf612dbc565b602002602001015160001415611bc457611be6565b611be6828281518110611bd957611bd9612dbc565b6020026020010151610e82565b80611bf081612d8b565b915050611b94565b6006546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b8152600401611c2a93929190612b3f565b600060405180830381600087803b158015611c4457600080fd5b505af1158015611c58573d6000803e3d6000fd5b50506006546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b158015611ca257600080fd5b505afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda919061282e565b6001600160a01b031614611d005760405162461bcd60e51b8152600401610ae190612bda565b33600081815260116020908152604080832085845282528083204380825560018083019190915560028201805460ff191690911790559383526013909152902054611d5e576001600d6000828254611d589190612c9d565b90915550505b336000908152601360205260408120805460019290611d7e908490612c9d565b925050819055506001600f6000828254611d989190612c9d565b909155505033600081815260176020908152604082208054600180820183558285529284200186905592825291549091611dd191612cf6565b6000848152601960209081526040808320849055601590915290205490915060ff16611e1d57611e0333600b54612441565b6000838152601560205260409020805460ff191660011790555b7fa3ed92d89e893c07cf2fb75907416df81c5952183c49bd85b929bbc79be5d21433611428565b601860205281600052604060002081815481106116e157600080fd5b60005b8151811015610d6657818181518110611e7e57611e7e612dbc565b602002602001015160001415611e9357611eb5565b611eb5828281518110611ea857611ea8612dbc565b60200260200101516111e0565b80611ebf81612d8b565b915050611e63565b6001600160a01b0381166000908152601860209081526040918290208054835181840281018401909452808452606093928301828280156114a657602002820191906000526020600020908154815260200190600101908083116114925750505050509050919050565b600082815260056020526040902060010154611f4d8133611ffc565b610c8583836123da565b600080516020612e01833981519152611f708133611ffc565b50600855565b60005b8151811015610d6657818181518110611f9457611f94612dbc565b602002602001015160001415611fa957611fcb565b611fcb828281518110611fbe57611fbe612dbc565b602002602001015161189b565b80611fd581612d8b565b915050611f79565b600080516020612e01833981519152611ff68133611ffc565b50600955565b612006828261168b565b610d665761201e816001600160a01b0316601461266e565b61202983602061266e565b60405160200161203a929190612aca565b60408051601f198184030181529082905262461bcd60e51b8252610ae191600401612ba7565b6001600160a01b0383166120c25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae1565b6001600160a01b0382166121235760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ae1565b6001600160a01b03821661224a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ae1565b6001600160a01b038316600090815260208190526040902054818110156122c25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ae1565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122f9908490612c9d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161234591815260200190565b60405180910390a35b50505050565b61235e828261168b565b610d665760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556123963390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6123e4828261168b565b15610d665760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166124975760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ae1565b80600260008282546124a99190612c9d565b90915550506001600160a01b038216600090815260208190526040812080548392906124d6908490612c9d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ae1565b6001600160a01b038216600090815260208190526040902054818110156125f45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ae1565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612623908490612cf6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6060600061267d836002612cd7565b612688906002612c9d565b67ffffffffffffffff8111156126a0576126a0612dd2565b6040519080825280601f01601f1916602001820160405280156126ca576020820181803683370190505b509050600360fc1b816000815181106126e5576126e5612dbc565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061271457612714612dbc565b60200101906001600160f81b031916908160001a9053506000612738846002612cd7565b612743906001612c9d565b90505b60018111156127bb576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061277757612777612dbc565b1a60f81b82828151811061278d5761278d612dbc565b60200101906001600160f81b031916908160001a90535060049490941c936127b481612d39565b9050612746565b50831561280a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ae1565b9392505050565b60006020828403121561282357600080fd5b813561280a81612de8565b60006020828403121561284057600080fd5b815161280a81612de8565b6000806040838503121561285e57600080fd5b823561286981612de8565b9150602083013561287981612de8565b809150509250929050565b60008060006060848603121561289957600080fd5b83356128a481612de8565b925060208401356128b481612de8565b929592945050506040919091013590565b600080600080608085870312156128db57600080fd5b84356128e681612de8565b93506020858101356128f781612de8565b935060408601359250606086013567ffffffffffffffff8082111561291b57600080fd5b818801915088601f83011261292f57600080fd5b81358181111561294157612941612dd2565b612953601f8201601f19168501612c6c565b9150808252898482850101111561296957600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561299c57600080fd5b82356129a781612de8565b946020939093013593505050565b600060208083850312156129c857600080fd5b823567ffffffffffffffff808211156129e057600080fd5b818501915085601f8301126129f457600080fd5b813581811115612a0657612a06612dd2565b8060051b9150612a17848301612c6c565b8181528481019084860184860187018a1015612a3257600080fd5b600095505b83861015612a55578035835260019590950194918601918601612a37565b5098975050505050505050565b600060208284031215612a7457600080fd5b5035919050565b60008060408385031215612a8e57600080fd5b82359150602083013561287981612de8565b600060208284031215612ab257600080fd5b81356001600160e01b03198116811461280a57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612b02816017850160208801612d0d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b33816028840160208801612d0d565b01602801949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b81811015612b9b57835183529284019291840191600101612b7f565b50909695505050505050565b6020815260008251806020840152612bc6816040850160208701612d0d565b601f01601f19169190910160400192915050565b60208082526029908201527f4c4d5574696c6974793a204572726f72207768696c65207472616e736665727260408201526834b733903a37b5b2b760b91b606082015260800190565b60208082526029908201527f564942453a2075706461746520746f207a65726f2061646472657373206e6f7460408201526820706f737369626c6560b81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c9557612c95612dd2565b604052919050565b60008219821115612cb057612cb0612da6565b500190565b600082612cd257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612cf157612cf1612da6565b500290565b600082821015612d0857612d08612da6565b500390565b60005b83811015612d28578181015183820152602001612d10565b8381111561234e5750506000910152565b600081612d4857612d48612da6565b506000190190565b600181811c90821680612d6457607f821691505b60208210811415612d8557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9f57612d9f612da6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612dfd57600080fd5b5056fe2ce8d04a9c35987429af538825cd2438cc5c5bb5dc427955f84daaa3ea105016a26469706673582212206df6184e9d68b0eef5e2234f8b3f0b8811e41e7a19aeb3df76c64bafb65f992564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fe65593a05b0a28a0fede6efa127370a7cc73b8e0000000000000000000000009b49684d894b3554f3c7b6a1e3593e6c87571fb7000000000000000000000000fe65593a05b0a28a0fede6efa127370a7cc73b8e
-----Decoded View---------------
Arg [0] : owner (address): 0xfE65593a05b0a28a0fEDe6eFa127370A7CC73B8E
Arg [1] : _collectionAddressLionMastersNFT (address): 0x9B49684D894B3554f3C7B6a1E3593E6c87571fB7
Arg [2] : _collectionAddressNFTv2 (address): 0xfE65593a05b0a28a0fEDe6eFa127370A7CC73B8E
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000fe65593a05b0a28a0fede6efa127370a7cc73b8e
Arg [1] : 0000000000000000000000009b49684d894b3554f3c7b6a1e3593e6c87571fb7
Arg [2] : 000000000000000000000000fe65593a05b0a28a0fede6efa127370a7cc73b8e
Deployed Bytecode Sourcemap
38076:14652:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17325:204;;;;;;:::i;:::-;;:::i;:::-;;;7212:14:1;;7205:22;7187:41;;7175:2;7160:18;17325:204:0;;;;;;;;52225:255;;;;;;:::i;:::-;;:::i;:::-;;28048:100;;;:::i;:::-;;;;;;;:::i;38778:35::-;;;;;;;;;7385:25:1;;;7373:2;7358:18;38778:35:0;7239:177:1;30215:169:0;;;;;;:::i;:::-;;:::i;1669:207::-;;;;;;:::i;:::-;-1:-1:-1;;;1669:207:0;;;;;;;;;;-1:-1:-1;;;;;;7583:33:1;;;7565:52;;7553:2;7538:18;1669:207:0;7421:202:1;29168:108:0;29256:12;;29168:108;;38911:46;;;;;38140:78;;-1:-1:-1;;;;;;;;;;;38140:78:0;;30866:492;;;;;;:::i;:::-;;:::i;18736:123::-;;;;;;:::i;:::-;18802:7;18829:12;;;:6;:12;;;;;:22;;;;18736:123;38225:62;;38263:24;38225:62;;19121:147;;;;;;:::i;:::-;;:::i;29010:93::-;;;29093:2;14276:36:1;;14264:2;14249:18;29010:93:0;14134:184:1;52488:237:0;;;;;;:::i;:::-;;:::i;20169:218::-;;;;;;:::i;:::-;;:::i;31767:215::-;;;;;;:::i;:::-;;:::i;52068:149::-;;;;;;:::i;:::-;;:::i;40225:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;42300:107;;;;;;:::i;:::-;;:::i;38727:44::-;;;;;;38365:46;;;;;-1:-1:-1;;;;;38365:46:0;;;;;;-1:-1:-1;;;;;5707:32:1;;;5689:51;;5677:2;5662:18;38365:46:0;5543:203:1;49938:465:0;;;;;;:::i;:::-;;:::i;47576:977::-;;;;;;:::i;:::-;;:::i;39830:59::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43231:650;;;;;;:::i;:::-;;:::i;38626:47::-;;;;;;38680:38;;;;;;51893:167;;;;;;:::i;:::-;;:::i;29339:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;29440:18:0;29413:7;29440:18;;;;;;;;;;;;29339:127;45183:1149;;;;;;:::i;:::-;;:::i;39266:71::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13996:25:1;;;14052:2;14037:18;;14030:34;;;;14107:14;14100:22;14080:18;;;14073:50;13984:2;13969:18;39266:71:0;13800:329:1;41974:162:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40359:70::-;;;;;;:::i;:::-;;;;;;;;;;;;;;42542:677;;;;;;:::i;:::-;;:::i;50798:352::-;;;;;;:::i;:::-;;:::i;51681:159::-;;;;;;:::i;:::-;;:::i;39652:68::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38574:43;;;;;;17621:139;;;;;;:::i;:::-;;:::i;28267:104::-;;;:::i;39962:72::-;;;;;;:::i;:::-;;:::i;46340:307::-;;;;;;:::i;:::-;;:::i;42415:119::-;;;;;;:::i;:::-;;:::i;16712:49::-;;16757:4;16712:49;;32485:413;;;;;;:::i;:::-;;:::i;49429:501::-;;;;;;:::i;:::-;;:::i;38418:37::-;;;;;-1:-1:-1;;;;;38418:37:0;;;29679:175;;;;;;:::i;:::-;;:::i;48561:860::-;;;;;;:::i;:::-;;:::i;50411:379::-;;;;;;:::i;:::-;;:::i;46952:311::-;;;;;;:::i;:::-;;:::i;43887:1284::-;;;;;;:::i;:::-;;:::i;40111:63::-;;;;;;:::i;:::-;;:::i;46655:289::-;;;;;;:::i;:::-;;:::i;38870:32::-;;;;;;39487:59;;;;;;:::i;:::-;;;;;;;;;;;;;;39376:68;;;;;;:::i;:::-;;;;;;;;;;;;;;42148:144;;;;;;:::i;:::-;;:::i;38515:52::-;;;;;;38294:62;;38332:24;38294:62;;19513:149;;;;;;:::i;:::-;;:::i;38464:42::-;;;;;;29917:151;;;;;;:::i;:::-;-1:-1:-1;;;;;30033:18:0;;;30006:7;30033:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29917:151;51191:165;;;;;;:::i;:::-;;:::i;38822:41::-;;;;;;47275:293;;;;;;:::i;:::-;;:::i;51496:177::-;;;;;;:::i;:::-;;:::i;39134:80::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17325:204;17410:4;-1:-1:-1;;;;;;17434:47:0;;-1:-1:-1;;;17434:47:0;;:87;;-1:-1:-1;;;;;;;;;;8636:40:0;;;17485:36;17427:94;17325:204;-1:-1:-1;;17325:204:0:o;52225:255::-;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;;;;;52347:24:0;::::1;52338:79;;;;-1:-1:-1::0;;;52338:79:0::1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;52428:31:0::1;:44:::0;;-1:-1:-1;;;;;;52428:44:0::1;-1:-1:-1::0;;;;;52428:44:0;;;::::1;::::0;;;::::1;::::0;;52225:255::o;28048:100::-;28102:13;28135:5;28128:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28048:100;:::o;30215:169::-;30298:4;30315:39;14615:10;30338:7;30347:6;30315:8;:39::i;:::-;-1:-1:-1;30372:4:0;30215:169;;;;:::o;30866:492::-;31006:4;31023:36;31033:6;31041:9;31052:6;31023:9;:36::i;:::-;-1:-1:-1;;;;;31099:19:0;;31072:24;31099:19;;;:11;:19;;;;;;;;14615:10;31099:33;;;;;;;;31151:26;;;;31143:79;;;;-1:-1:-1;;;31143:79:0;;10606:2:1;31143:79:0;;;10588:21:1;10645:2;10625:18;;;10618:30;10684:34;10664:18;;;10657:62;-1:-1:-1;;;10735:18:1;;;10728:38;10783:19;;31143:79:0;10404:404:1;31143:79:0;31258:57;31267:6;14615:10;31308:6;31289:16;:25;31258:8;:57::i;:::-;-1:-1:-1;31346:4:0;;30866:492;-1:-1:-1;;;;30866:492:0:o;19121:147::-;18802:7;18829:12;;;:6;:12;;;;;:22;;;17203:30;17214:4;14615:10;17203;:30::i;:::-;19235:25:::1;19246:4;19252:7;19235:10;:25::i;:::-;19121:147:::0;;;:::o;52488:237::-;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;;;;;52601:24:0;::::1;52592:79;;;;-1:-1:-1::0;;;52592:79:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;52682:22:0::1;:35:::0;;-1:-1:-1;;;;;;52682:35:0::1;-1:-1:-1::0;;;;;52682:35:0;;;::::1;::::0;;;::::1;::::0;;52488:237::o;20169:218::-;-1:-1:-1;;;;;20265:23:0;;14615:10;20265:23;20257:83;;;;-1:-1:-1;;;20257:83:0;;13044:2:1;20257:83:0;;;13026:21:1;13083:2;13063:18;;;13056:30;13122:34;13102:18;;;13095:62;-1:-1:-1;;;13173:18:1;;;13166:45;13228:19;;20257:83:0;12842:411:1;20257:83:0;20353:26;20365:4;20371:7;20353:11;:26::i;:::-;20169:218;;:::o;31767:215::-;14615:10;31855:4;31904:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31904:34:0;;;;;;;;;;31855:4;;31872:80;;31895:7;;31904:47;;31941:10;;31904:47;:::i;:::-;31872:8;:80::i;52068:149::-;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;52173:23:0::1;:36:::0;52068:149::o;42300:107::-;38332:24;17203:30;38332:24;14615:10;17203;:30::i;:::-;42382:17:::1;42388:2;42392:6;42382:5;:17::i;49938:465::-:0;14615:10;49995:22;50020:27;;;:13;:27;;;;;;;;:36;;;;;;;;;50103:42;;50020:36;50103:19;:42::i;:::-;50067:78;-1:-1:-1;50159:29:0;;50156:240;;50229:12;50205:21;;;:36;50256:46;14615:10;50262:12;50276:25;50256:5;:46::i;:::-;50322:62;14615:10;50344:12;50322:62;;;-1:-1:-1;;;;;6323:32:1;;;6305:51;;6387:2;6372:18;;6365:34;;;6278:18;50322:62:0;;;;;;;;49984:419;;49938:465;:::o;47576:977::-;47699:1;47645:51;14615:10;47688:7;47645:28;:51::i;:::-;:55;47642:116;;;47716:30;47738:7;47716:21;:30::i;:::-;14615:10;47768:22;47793:36;;;:22;:36;;;;;;;;:45;;;;;;;;;;47849:20;;;:27;;-1:-1:-1;;47849:27:0;47872:4;47849:27;;;47895:31;;47887:95;;-1:-1:-1;;;47887:95:0;;47793:45;;-1:-1:-1;;;;;47895:31:0;;;;47887:57;;:95;;47953:4;;47793:45;;47887:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48062:12;14615:10;;14535:98;48062:12;48009:31;;48001:57;;-1:-1:-1;;;48001:57:0;;;;;7385:25:1;;;-1:-1:-1;;;;;48001:73:0;;;;48009:31;;;;48001:48;;7358:18:1;;48001:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48001:73:0;;47993:140;;;;-1:-1:-1;;;47993:140:0;;;;;;;:::i;:::-;14615:10;48147:46;;;;:32;:46;;;;;;48197:1;48147:51;48144:116;;;48247:1;48214:29;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;48144:116:0;14615:10;48270:46;;;;:32;:46;;;;;:51;;48320:1;;48270:46;:51;;48320:1;;48270:51;:::i;:::-;;;;;;;;48362:1;48332:26;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;14615:10:0;48480:1;48374:48;;;:34;:48;;;;;;;;48423:53;;;:44;:53;;;;;;48374:103;;;;;;;;:::i;:::-;;;;;;;;;;:107;48497:48;14615:10;48523:12;48497:48;;;-1:-1:-1;;;;;6323:32:1;;;6305:51;;6387:2;6372:18;;6365:34;;;6278:18;48497:48:0;;;;;;;47631:922;47576:977;:::o;43231:650::-;-1:-1:-1;;;;;43356:20:0;;43313:7;43356:20;;;:13;:20;;;;;;;;:29;;;;;;;;43332:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43425:21;-1:-1:-1;43401:45:0;:78;;-1:-1:-1;43450:20:0;;;;:29;43401:78;43398:118;;;43503:1;43496:8;;;;;43398:118;43526:36;43580:4;:21;;;43565:12;:36;;;;:::i;:::-;43526:75;;43647:27;;43677:1;43647:31;;;;:::i;:::-;43616:28;:62;43612:103;;;43702:1;43695:8;;;;;;43612:103;43725:20;43809:1;43779:27;;43748:28;:58;;;;:::i;:::-;:62;;;;:::i;:::-;43725:85;;43843:28;;43828:12;:43;;;;:::i;:::-;43821:50;43231:650;-1:-1:-1;;;;;;43231:650:0:o;51893:167::-;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;52007:32:0::1;:45:::0;51893:167::o;45183:1149::-;45246:22;;-1:-1:-1;;;;;45246:22:0;45238:48;14615:10;45309:4;45316:7;45238:86;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45351:22:0;;45343:48;;-1:-1:-1;;;45343:48:0;;;;;7385:25:1;;;45403:4:0;;-1:-1:-1;;;;;;45351:22:0;;;;-1:-1:-1;45343:39:0;;7358:18:1;;45343:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45343:65:0;;45335:132;;;;-1:-1:-1;;;45335:132:0;;;;;;;:::i;:::-;14615:10;45478:22;45503:27;;;:13;:27;;;;;;;;:36;;;;;;;;45571:12;45550:33;;;45594:21;;;;:36;;;;45641:20;;;:27;;-1:-1:-1;;45641:27:0;;;;;;45682:37;;;:23;:37;;;;;;45679:98;;45764:1;45740:20;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;45679:98:0;14615:10;45787:37;;;;:23;:37;;;;;:42;;45828:1;;45787:37;:42;;45828:1;;45787:42;:::i;:::-;;;;;;;;45861:1;45840:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;14615:10:0;45873:39;;;;:25;:39;;;;;;;:53;;;;;;;;;;;;;;;;;;45965:39;;;:46;;45873:39;;45965:50;;;:::i;:::-;46026:44;;;;:35;:44;;;;;;;;:64;;;46105:26;:35;;;;;;45937:78;;-1:-1:-1;46105:35:0;;46101:169;;46157:44;14615:10;46177:23;;46157:5;:44::i;:::-;46216:35;;;;:26;:35;;;;;:42;;-1:-1:-1;;46216:42:0;46254:4;46216:42;;;46101:169;46287:37;14615:10;46302:12;46287:37;;;-1:-1:-1;;;;;6323:32:1;;;6305:51;;6387:2;6372:18;;6365:34;;;6278:18;46287:37:0;6131:274:1;41974:162:0;-1:-1:-1;;;;;42087:41:0;;;;;;:34;:41;;;;;;;;;42080:48;;;;;;;;;;;;;;;;;42052:16;;42080:48;;;42087:41;42080:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41974:162;;;:::o;42542:677::-;-1:-1:-1;;;;;42676:29:0;;42633:7;42676:29;;;:22;:29;;;;;;;;:38;;;;;;;;42652:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42754:21;-1:-1:-1;42730:45:0;:78;;-1:-1:-1;42779:20:0;;;;:29;42730:78;42727:118;;;42832:1;42825:8;;;;;42727:118;42855:36;42909:4;:21;;;42894:12;:36;;;;:::i;:::-;42855:75;;42976:27;;43006:1;42976:31;;;;:::i;:::-;42945:28;:62;42941:103;;;43031:1;43024:8;;;;;;42941:103;43054:20;43138:1;43108:27;;43077:28;:58;;;;:::i;:::-;:62;;;;:::i;:::-;43054:85;;43172:37;;43157:12;:52;;;;:::i;50798:352::-;-1:-1:-1;;;;;50887:31:0;;50859:25;50887:31;;;:25;:31;;;;;;;;50859:59;;;;;;;;;;;;;;;;;;;50887:31;;50859:59;;;50887:31;50859:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50935:14;50931:212;50967:8;:15;50955:9;:27;50931:212;;;51015:8;51024:9;51015:19;;;;;;;;:::i;:::-;;;;;;;51038:1;51015:24;51012:72;;;51060:8;;51012:72;51098:33;51111:8;51120:9;51111:19;;;;;;;;:::i;:::-;;;;;;;51098:12;:33::i;:::-;50984:11;;;;:::i;:::-;;;;50931:212;;51681:159;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;51791:28:0::1;:41:::0;51681:159::o;17621:139::-;17699:4;17723:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;17723:29:0;;;;;;;;;;;;;;;17621:139::o;28267:104::-;28323:13;28356:7;28349:14;;;;;:::i;39962:72::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46340:307::-;46425:14;46421:219;46457:8;:15;46445:9;:27;46421:219;;;46505:8;46514:9;46505:19;;;;;;;;:::i;:::-;;;;;;;46528:1;46505:24;46502:72;;;46550:8;;46502:72;46588:40;46608:8;46617:9;46608:19;;;;;;;;:::i;:::-;;;;;;;46588;:40::i;:::-;46474:11;;;;:::i;:::-;;;;46421:219;;42415:119;38263:24;17203:30;38263:24;14615:10;17203;:30::i;:::-;42501:25:::1;42513:4;42519:6;42501:11;:25::i;32485:413::-:0;14615:10;32578:4;32622:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32622:34:0;;;;;;;;;;32675:35;;;;32667:85;;;;-1:-1:-1;;;32667:85:0;;12638:2:1;32667:85:0;;;12620:21:1;12677:2;12657:18;;;12650:30;12716:34;12696:18;;;12689:62;-1:-1:-1;;;12767:18:1;;;12760:35;12812:19;;32667:85:0;12436:401:1;32667:85:0;32788:67;14615:10;32811:7;32839:15;32820:16;:34;32788:8;:67::i;:::-;-1:-1:-1;32886:4:0;;32485:413;-1:-1:-1;;;32485:413:0:o;49429:501::-;14615:10;49495:22;49520:36;;;:22;:36;;;;;;;;:45;;;;;;;;;49612:51;;49520:45;49612:28;:51::i;:::-;49576:87;-1:-1:-1;49677:29:0;;49674:249;;49747:12;49723:21;;;:36;49774:46;14615:10;49780:12;14535:98;49774:46;49840:71;14615:10;49871:12;14535:98;29679:175;29765:4;29782:42;14615:10;29806:9;29817:6;29782:9;:42::i;48561:860::-;48666:1;48621:42;14615:10;48655:7;48621:19;:42::i;:::-;:46;48618:98;;;48683:21;48696:7;48683:12;:21::i;:::-;14615:10;48726:22;48751:27;;;:13;:27;;;;;;;;:36;;;;;;;;;;48798:20;;;:27;;-1:-1:-1;;48798:27:0;48821:4;48798:27;;;48844:22;;48836:86;;-1:-1:-1;;;48836:86:0;;48751:36;;-1:-1:-1;;;;;48844:22:0;;;;48836:48;;:86;;48893:4;;48751:36;;48836:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48993:12;14615:10;;14535:98;48993:12;48949:22;;48941:48;;-1:-1:-1;;;48941:48:0;;;;;7385:25:1;;;-1:-1:-1;;;;;48941:64:0;;;;48949:22;;;;48941:39;;7358:18:1;;48941:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48941:64:0;;48933:131;;;;-1:-1:-1;;;48933:131:0;;;;;;;:::i;:::-;14615:10;49078:37;;;;:23;:37;;;;;;49119:1;49078:42;49075:98;;;49160:1;49136:20;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;49075:98:0;14615:10;49183:37;;;;:23;:37;;;;;:42;;49224:1;;49183:37;:42;;49224:1;;49183:42;:::i;:::-;;;;;;;;49257:1;49236:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;14615:10:0;49357:1;49269:39;;;:25;:39;;;;;;;;49309:44;;;:35;:44;;;;;;49269:85;;;;;;;;:::i;:::-;;;;;;;;;;:89;49374:39;14615:10;49391:12;14535:98;50411:379;-1:-1:-1;;;;;50509:40:0;;50481:25;50509:40;;;:34;:40;;;;;;;;50481:68;;;;;;;;;;;;;;;;;;;50509:40;;50481:68;;;50509:40;50481:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50566:14;50562:221;50598:8;:15;50586:9;:27;50562:221;;;50646:8;50655:9;50646:19;;;;;;;;:::i;:::-;;;;;;;50669:1;50646:24;50643:72;;;50691:8;;50643:72;50729:42;50751:8;50760:9;50751:19;;;;;;;;:::i;:::-;;;;;;;50729:21;:42::i;:::-;50615:11;;;;:::i;:::-;;;;50562:221;;46952:311;47039:14;47035:221;47071:8;:15;47059:9;:27;47035:221;;;47119:8;47128:9;47119:19;;;;;;;;:::i;:::-;;;;;;;47142:1;47119:24;47116:72;;;47164:8;;47116:72;47202:42;47224:8;47233:9;47224:19;;;;;;;;:::i;:::-;;;;;;;47202:21;:42::i;:::-;47088:11;;;;:::i;:::-;;;;47035:221;;43887:1284;43959:31;;-1:-1:-1;;;;;43959:31:0;43951:57;14615:10;44031:4;44038:7;43951:95;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44073:31:0;;44065:57;;-1:-1:-1;;;44065:57:0;;;;;7385:25:1;;;44134:4:0;;-1:-1:-1;;;;;;44073:31:0;;;;-1:-1:-1;44065:48:0;;7358:18:1;;44065:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44065:74:0;;44057:141;;;;-1:-1:-1;;;44057:141:0;;;;;;;:::i;:::-;14615:10;44209:22;44234:36;;;:22;:36;;;;;;;;:45;;;;;;;;44311:12;44290:33;;;44334:21;;;;:36;;;;44381:20;;;:27;;-1:-1:-1;;44381:27:0;;;;;;44422:46;;;:32;:46;;;;;;44419:116;;44522:1;44489:29;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;44419:116:0;14615:10;44545:46;;;;:32;:46;;;;;:51;;44595:1;;44545:46;:51;;44595:1;;44545:51;:::i;:::-;;;;;;;;44637:1;44607:26;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;14615:10:0;44649:48;;;;:34;:48;;;;;;;:62;;;;;;;;;;;;;;;;;;44750:48;;;:55;;44649:48;;44750:59;;;:::i;:::-;44820:53;;;;:44;:53;;;;;;;;:73;;;44908:35;:44;;;;;;44722:87;;-1:-1:-1;44908:44:0;;44904:196;;44969:53;14615:10;44989:32;;44969:5;:53::i;:::-;45037:44;;;;:35;:44;;;;;:51;;-1:-1:-1;;45037:51:0;45084:4;45037:51;;;44904:196;45117:46;14615:10;45141:12;14535:98;40111:63;;;;;;;;;;;;;;;;;;;;46655:289;46731:14;46727:210;46763:8;:15;46751:9;:27;46727:210;;;46811:8;46820:9;46811:19;;;;;;;;:::i;:::-;;;;;;;46834:1;46811:24;46808:72;;;46856:8;;46808:72;46894:31;46905:8;46914:9;46905:19;;;;;;;;:::i;:::-;;;;;;;46894:10;:31::i;:::-;46780:11;;;;:::i;:::-;;;;46727:210;;42148:144;-1:-1:-1;;;;;42252:32:0;;;;;;:25;:32;;;;;;;;;42245:39;;;;;;;;;;;;;;;;;42217:16;;42245:39;;;42252:32;42245:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42148:144;;;:::o;19513:149::-;18802:7;18829:12;;;:6;:12;;;;;:22;;;17203:30;17214:4;14615:10;17203;:30::i;:::-;19628:26:::1;19640:4;19646:7;19628:11;:26::i;51191:165::-:0;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;51304:27:0::1;:44:::0;51191:165::o;47275:293::-;47353:14;47349:212;47385:8;:15;47373:9;:27;47349:212;;;47433:8;47442:9;47433:19;;;;;;;;:::i;:::-;;;;;;;47456:1;47433:24;47430:72;;;47478:8;;47430:72;47516:33;47529:8;47538:9;47529:19;;;;;;;;:::i;:::-;;;;;;;47516:12;:33::i;:::-;47402:11;;;;:::i;:::-;;;;47349:212;;51496:177;-1:-1:-1;;;;;;;;;;;17203:30:0;38186:32;14615:10;17203;:30::i;:::-;-1:-1:-1;51615:37:0::1;:50:::0;51496:177::o;18050:497::-;18131:22;18139:4;18145:7;18131;:22::i;:::-;18126:414;;18319:41;18347:7;-1:-1:-1;;;;;18319:41:0;18357:2;18319:19;:41::i;:::-;18433:38;18461:4;18468:2;18433:19;:38::i;:::-;18224:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;18224:270:0;;;;;;;;;;-1:-1:-1;;;18170:358:0;;;;;;;:::i;36169:380::-;-1:-1:-1;;;;;36305:19:0;;36297:68;;;;-1:-1:-1;;;36297:68:0;;12233:2:1;36297:68:0;;;12215:21:1;12272:2;12252:18;;;12245:30;12311:34;12291:18;;;12284:62;-1:-1:-1;;;12362:18:1;;;12355:34;12406:19;;36297:68:0;12031:400:1;36297:68:0;-1:-1:-1;;;;;36384:21:0;;36376:68;;;;-1:-1:-1;;;36376:68:0;;9796:2:1;36376:68:0;;;9778:21:1;9835:2;9815:18;;;9808:30;9874:34;9854:18;;;9847:62;-1:-1:-1;;;9925:18:1;;;9918:32;9967:19;;36376:68:0;9594:398:1;36376:68:0;-1:-1:-1;;;;;36457:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36509:32;;7385:25:1;;;36509:32:0;;7358:18:1;36509:32:0;;;;;;;36169:380;;;:::o;33388:733::-;-1:-1:-1;;;;;33528:20:0;;33520:70;;;;-1:-1:-1;;;33520:70:0;;11827:2:1;33520:70:0;;;11809:21:1;11866:2;11846:18;;;11839:30;11905:34;11885:18;;;11878:62;-1:-1:-1;;;11956:18:1;;;11949:35;12001:19;;33520:70:0;11625:401:1;33520:70:0;-1:-1:-1;;;;;33609:23:0;;33601:71;;;;-1:-1:-1;;;33601:71:0;;8579:2:1;33601:71:0;;;8561:21:1;8618:2;8598:18;;;8591:30;8657:34;8637:18;;;8630:62;-1:-1:-1;;;8708:18:1;;;8701:33;8751:19;;33601:71:0;8377:399:1;33601:71:0;-1:-1:-1;;;;;33769:17:0;;33745:21;33769:17;;;;;;;;;;;33805:23;;;;33797:74;;;;-1:-1:-1;;;33797:74:0;;10199:2:1;33797:74:0;;;10181:21:1;10238:2;10218:18;;;10211:30;10277:34;10257:18;;;10250:62;-1:-1:-1;;;10328:18:1;;;10321:36;10374:19;;33797:74:0;9997:402:1;33797:74:0;-1:-1:-1;;;;;33907:17:0;;;:9;:17;;;;;;;;;;;33927:22;;;33907:42;;33971:20;;;;;;;;:30;;33943:6;;33907:9;33971:30;;33943:6;;33971:30;:::i;:::-;;;;;;;;34036:9;-1:-1:-1;;;;;34019:35:0;34028:6;-1:-1:-1;;;;;34019:35:0;;34047:6;34019:35;;;;7385:25:1;;7373:2;7358:18;;7239:177;34019:35:0;;;;;;;;34067:46;33509:612;33388:733;;;:::o;21670:238::-;21754:22;21762:4;21768:7;21754;:22::i;:::-;21749:152;;21793:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;21793:29:0;;;;;;;;;:36;;-1:-1:-1;;21793:36:0;21825:4;21793:36;;;21876:12;14615:10;;14535:98;21876:12;-1:-1:-1;;;;;21849:40:0;21867:7;-1:-1:-1;;;;;21849:40:0;21861:4;21849:40;;;;;;;;;;21670:238;;:::o;22040:239::-;22124:22;22132:4;22138:7;22124;:22::i;:::-;22120:152;;;22195:5;22163:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;22163:29:0;;;;;;;;;;:37;;-1:-1:-1;;22163:37:0;;;22220:40;14615:10;;22163:12;;22220:40;;22195:5;22220:40;22040:239;;:::o;34408:399::-;-1:-1:-1;;;;;34492:21:0;;34484:65;;;;-1:-1:-1;;;34484:65:0;;13460:2:1;34484:65:0;;;13442:21:1;13499:2;13479:18;;;13472:30;13538:33;13518:18;;;13511:61;13589:18;;34484:65:0;13258:355:1;34484:65:0;34640:6;34624:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;34657:18:0;;:9;:18;;;;;;;;;;:28;;34679:6;;34657:9;:28;;34679:6;;34657:28;:::i;:::-;;;;-1:-1:-1;;34701:37:0;;7385:25:1;;;-1:-1:-1;;;;;34701:37:0;;;34718:1;;34701:37;;7373:2:1;7358:18;34701:37:0;;;;;;;20169:218;;:::o;35140:591::-;-1:-1:-1;;;;;35224:21:0;;35216:67;;;;-1:-1:-1;;;35216:67:0;;11425:2:1;35216:67:0;;;11407:21:1;11464:2;11444:18;;;11437:30;11503:34;11483:18;;;11476:62;-1:-1:-1;;;11554:18:1;;;11547:31;11595:19;;35216:67:0;11223:397:1;35216:67:0;-1:-1:-1;;;;;35383:18:0;;35358:22;35383:18;;;;;;;;;;;35420:24;;;;35412:71;;;;-1:-1:-1;;;35412:71:0;;8983:2:1;35412:71:0;;;8965:21:1;9022:2;9002:18;;;8995:30;9061:34;9041:18;;;9034:62;-1:-1:-1;;;9112:18:1;;;9105:32;9154:19;;35412:71:0;8781:398:1;35412:71:0;-1:-1:-1;;;;;35519:18:0;;:9;:18;;;;;;;;;;35540:23;;;35519:44;;35585:12;:22;;35557:6;;35519:9;35585:22;;35557:6;;35585:22;:::i;:::-;;;;-1:-1:-1;;35625:37:0;;7385:25:1;;;35651:1:0;;-1:-1:-1;;;;;35625:37:0;;;;;7373:2:1;7358:18;35625:37:0;;;;;;;19121:147;;;:::o;10357:451::-;10432:13;10458:19;10490:10;10494:6;10490:1;:10;:::i;:::-;:14;;10503:1;10490:14;:::i;:::-;10480:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10480:25:0;;10458:47;;-1:-1:-1;;;10516:6:0;10523:1;10516:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10516:15:0;;;;;;;;;-1:-1:-1;;;10542:6:0;10549:1;10542:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10542:15:0;;;;;;;;-1:-1:-1;10573:9:0;10585:10;10589:6;10585:1;:10;:::i;:::-;:14;;10598:1;10585:14;:::i;:::-;10573:26;;10568:135;10605:1;10601;:5;10568:135;;;-1:-1:-1;;;10653:5:0;10661:3;10653:11;10640:25;;;;;;;:::i;:::-;;;;10628:6;10635:1;10628:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;10628:37:0;;;;;;;;-1:-1:-1;10690:1:0;10680:11;;;;;10608:3;;;:::i;:::-;;;10568:135;;;-1:-1:-1;10721:10:0;;10713:55;;;;-1:-1:-1;;;10713:55:0;;8218:2:1;10713:55:0;;;8200:21:1;;;8237:18;;;8230:30;8296:34;8276:18;;;8269:62;8348:18;;10713:55:0;8016:356:1;10713:55:0;10793:6;10357:451;-1:-1:-1;;;10357:451:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:1108::-;1471:6;1479;1487;1495;1548:3;1536:9;1527:7;1523:23;1519:33;1516:53;;;1565:1;1562;1555:12;1516:53;1604:9;1591:23;1623:31;1648:5;1623:31;:::i;:::-;1673:5;-1:-1:-1;1697:2:1;1736:18;;;1723:32;1764:33;1723:32;1764:33;:::i;:::-;1816:7;-1:-1:-1;1870:2:1;1855:18;;1842:32;;-1:-1:-1;1925:2:1;1910:18;;1897:32;1948:18;1978:14;;;1975:34;;;2005:1;2002;1995:12;1975:34;2043:6;2032:9;2028:22;2018:32;;2088:7;2081:4;2077:2;2073:13;2069:27;2059:55;;2110:1;2107;2100:12;2059:55;2146:2;2133:16;2168:2;2164;2161:10;2158:36;;;2174:18;;:::i;:::-;2216:53;2259:2;2240:13;;-1:-1:-1;;2236:27:1;2232:36;;2216:53;:::i;:::-;2203:66;;2292:2;2285:5;2278:17;2332:7;2327:2;2322;2318;2314:11;2310:20;2307:33;2304:53;;;2353:1;2350;2343:12;2304:53;2408:2;2403;2399;2395:11;2390:2;2383:5;2379:14;2366:45;2452:1;2447:2;2442;2435:5;2431:14;2427:23;2420:34;;2473:5;2463:15;;;;;1376:1108;;;;;;;:::o;2489:315::-;2557:6;2565;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;2673:9;2660:23;2692:31;2717:5;2692:31;:::i;:::-;2742:5;2794:2;2779:18;;;;2766:32;;-1:-1:-1;;;2489:315:1:o;2809:957::-;2893:6;2924:2;2967;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;3023:9;3010:23;3052:18;3093:2;3085:6;3082:14;3079:34;;;3109:1;3106;3099:12;3079:34;3147:6;3136:9;3132:22;3122:32;;3192:7;3185:4;3181:2;3177:13;3173:27;3163:55;;3214:1;3211;3204:12;3163:55;3250:2;3237:16;3272:2;3268;3265:10;3262:36;;;3278:18;;:::i;:::-;3324:2;3321:1;3317:10;3307:20;;3347:28;3371:2;3367;3363:11;3347:28;:::i;:::-;3409:15;;;3440:12;;;;3472:11;;;3502;;;3498:20;;3495:33;-1:-1:-1;3492:53:1;;;3541:1;3538;3531:12;3492:53;3563:1;3554:10;;3573:163;3587:2;3584:1;3581:9;3573:163;;;3644:17;;3632:30;;3605:1;3598:9;;;;;3682:12;;;;3714;;3573:163;;;-1:-1:-1;3755:5:1;2809:957;-1:-1:-1;;;;;;;;2809:957:1:o;3771:180::-;3830:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:52;;;3899:1;3896;3889:12;3851:52;-1:-1:-1;3922:23:1;;3771:180;-1:-1:-1;3771:180:1:o;3956:315::-;4024:6;4032;4085:2;4073:9;4064:7;4060:23;4056:32;4053:52;;;4101:1;4098;4091:12;4053:52;4137:9;4124:23;4114:33;;4197:2;4186:9;4182:18;4169:32;4210:31;4235:5;4210:31;:::i;4276:286::-;4334:6;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4429:23;;-1:-1:-1;;;;;;4481:32:1;;4471:43;;4461:71;;4528:1;4525;4518:12;4752:786;5163:25;5158:3;5151:38;5133:3;5218:6;5212:13;5234:62;5289:6;5284:2;5279:3;5275:12;5268:4;5260:6;5256:17;5234:62;:::i;:::-;-1:-1:-1;;;5355:2:1;5315:16;;;5347:11;;;5340:40;5405:13;;5427:63;5405:13;5476:2;5468:11;;5461:4;5449:17;;5427:63;:::i;:::-;5510:17;5529:2;5506:26;;4752:786;-1:-1:-1;;;;4752:786:1:o;5751:375::-;-1:-1:-1;;;;;6009:15:1;;;5991:34;;6061:15;;;;6056:2;6041:18;;6034:43;6108:2;6093:18;;6086:34;;;;5941:2;5926:18;;5751:375::o;6410:632::-;6581:2;6633:21;;;6703:13;;6606:18;;;6725:22;;;6552:4;;6581:2;6804:15;;;;6778:2;6763:18;;;6552:4;6847:169;6861:6;6858:1;6855:13;6847:169;;;6922:13;;6910:26;;6991:15;;;;6956:12;;;;6883:1;6876:9;6847:169;;;-1:-1:-1;7033:3:1;;6410:632;-1:-1:-1;;;;;;6410:632:1:o;7628:383::-;7777:2;7766:9;7759:21;7740:4;7809:6;7803:13;7852:6;7847:2;7836:9;7832:18;7825:34;7868:66;7927:6;7922:2;7911:9;7907:18;7902:2;7894:6;7890:15;7868:66;:::i;:::-;7995:2;7974:15;-1:-1:-1;;7970:29:1;7955:45;;;;8002:2;7951:54;;7628:383;-1:-1:-1;;7628:383:1:o;9184:405::-;9386:2;9368:21;;;9425:2;9405:18;;;9398:30;9464:34;9459:2;9444:18;;9437:62;-1:-1:-1;;;9530:2:1;9515:18;;9508:39;9579:3;9564:19;;9184:405::o;10813:::-;11015:2;10997:21;;;11054:2;11034:18;;;11027:30;11093:34;11088:2;11073:18;;11066:62;-1:-1:-1;;;11159:2:1;11144:18;;11137:39;11208:3;11193:19;;10813:405::o;14323:275::-;14394:2;14388:9;14459:2;14440:13;;-1:-1:-1;;14436:27:1;14424:40;;14494:18;14479:34;;14515:22;;;14476:62;14473:88;;;14541:18;;:::i;:::-;14577:2;14570:22;14323:275;;-1:-1:-1;14323:275:1:o;14603:128::-;14643:3;14674:1;14670:6;14667:1;14664:13;14661:39;;;14680:18;;:::i;:::-;-1:-1:-1;14716:9:1;;14603:128::o;14736:217::-;14776:1;14802;14792:132;;14846:10;14841:3;14837:20;14834:1;14827:31;14881:4;14878:1;14871:15;14909:4;14906:1;14899:15;14792:132;-1:-1:-1;14938:9:1;;14736:217::o;14958:168::-;14998:7;15064:1;15060;15056:6;15052:14;15049:1;15046:21;15041:1;15034:9;15027:17;15023:45;15020:71;;;15071:18;;:::i;:::-;-1:-1:-1;15111:9:1;;14958:168::o;15131:125::-;15171:4;15199:1;15196;15193:8;15190:34;;;15204:18;;:::i;:::-;-1:-1:-1;15241:9:1;;15131:125::o;15261:258::-;15333:1;15343:113;15357:6;15354:1;15351:13;15343:113;;;15433:11;;;15427:18;15414:11;;;15407:39;15379:2;15372:10;15343:113;;;15474:6;15471:1;15468:13;15465:48;;;-1:-1:-1;;15509:1:1;15491:16;;15484:27;15261:258::o;15524:136::-;15563:3;15591:5;15581:39;;15600:18;;:::i;:::-;-1:-1:-1;;;15636:18:1;;15524:136::o;15665:380::-;15744:1;15740:12;;;;15787;;;15808:61;;15862:4;15854:6;15850:17;15840:27;;15808:61;15915:2;15907:6;15904:14;15884:18;15881:38;15878:161;;;15961:10;15956:3;15952:20;15949:1;15942:31;15996:4;15993:1;15986:15;16024:4;16021:1;16014:15;15878:161;;15665:380;;;:::o;16050:135::-;16089:3;-1:-1:-1;;16110:17:1;;16107:43;;;16130:18;;:::i;:::-;-1:-1:-1;16177:1:1;16166:13;;16050:135::o;16190:127::-;16251:10;16246:3;16242:20;16239:1;16232:31;16282:4;16279:1;16272:15;16306:4;16303:1;16296:15;16322:127;16383:10;16378:3;16374:20;16371:1;16364:31;16414:4;16411:1;16404:15;16438:4;16435:1;16428:15;16454:127;16515:10;16510:3;16506:20;16503:1;16496:31;16546:4;16543:1;16536:15;16570:4;16567:1;16560:15;16586:131;-1:-1:-1;;;;;16661:31:1;;16651:42;;16641:70;;16707:1;16704;16697:12;16641:70;16586:131;:::o
Swarm Source
ipfs://6df6184e9d68b0eef5e2234f8b3f0b8811e41e7a19aeb3df76c64bafb65f9925
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.