Overview
ETH Balance
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 10 from a total of 10 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 481678 | 693 days ago | IN | 0 ETH | 0.00015128 | ||||
| Approve | 481668 | 693 days ago | IN | 0 ETH | 0.00016751 | ||||
| Approve | 481548 | 693 days ago | IN | 0 ETH | 0.00019013 | ||||
| Transfer | 251225 | 699 days ago | IN | 0 ETH | 0.00021247 | ||||
| Transfer | 246374 | 699 days ago | IN | 0 ETH | 0.00018903 | ||||
| Transfer | 246342 | 699 days ago | IN | 0 ETH | 0.00019781 | ||||
| Transfer | 221890 | 699 days ago | IN | 0 ETH | 0.00018107 | ||||
| Transfer | 218508 | 699 days ago | IN | 0 ETH | 0.00020716 | ||||
| Approve | 217286 | 699 days ago | IN | 0 ETH | 0.00021037 | ||||
| Mint | 217148 | 699 days ago | IN | 0 ETH | 0.00023671 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at blastscan.io on 2024-02-29
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
/**
* @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/[email protected]
/**
* @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/utils/[email protected]
/**
* @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/token/ERC20/[email protected]
/**
* @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 @openzeppelin/contracts/access/[email protected]
/**
* @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/[email protected]
/**
* @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/utils/introspection/[email protected]
/**
* @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/utils/introspection/[email protected]
/**
* @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/access/[email protected]
/**
* @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 granted `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}.
* ====
*/
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);
}
function _grantRole(bytes32 role, address account) private {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
function _revokeRole(bytes32 role, address account) private {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}
// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]
/**
* @dev Extension of {ERC20} that allows token holders to destroy both their own
* tokens and those that they have an allowance for, in a way that can be
* recognized off-chain (via event analysis).
*/
abstract contract ERC20Burnable is Context, ERC20 {
/**
* @dev Destroys `amount` tokens from the caller.
*
* See {ERC20-_burn}.
*/
function burn(uint256 amount) public virtual {
_burn(_msgSender(), amount);
}
/**
* @dev Destroys `amount` tokens from `account`, deducting from the caller's
* allowance.
*
* See {ERC20-_burn} and {ERC20-allowance}.
*
* Requirements:
*
* - the caller must have allowance for ``accounts``'s tokens of at least
* `amount`.
*/
function burnFrom(address account, uint256 amount) public virtual {
uint256 currentAllowance = allowance(account, _msgSender());
require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
unchecked {
_approve(account, _msgSender(), currentAllowance - amount);
}
_burn(account, amount);
}
}
// File @openzeppelin/contracts/access/[email protected]
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
pragma solidity ^0.8.2;
contract DeBlast is ERC20, AccessControl, ERC20Burnable, Ownable {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
constructor() ERC20("DeBlast", "DBLAST") {
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
_setupRole(MINTER_ROLE, msg.sender);
}
function mint(address to, uint256 amount) public {
require(hasRole(MINTER_ROLE, msg.sender), "Caller is not the minter");
require(totalSupply() + amount <= 69420e18, "Max supply reached");
_mint(to, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"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":[{"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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","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":"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":"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"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":[],"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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801562000010575f80fd5b50604051806040016040528060078152602001661119509b185cdd60ca1b815250604051806040016040528060068152602001651110931054d560d21b815250816003908162000061919062000272565b50600462000070828262000272565b5050506200008d62000087620000cb60201b60201c565b620000cf565b620000995f3362000120565b620000c57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000120565b6200033a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6200012c828262000130565b5050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff166200012c575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200018e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001fb57607f821691505b6020821081036200021a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200026d575f81815260208120601f850160051c81016020861015620002485750805b601f850160051c820191505b81811015620002695782815560010162000254565b5050505b505050565b81516001600160401b038111156200028e576200028e620001d2565b620002a6816200029f8454620001e6565b8462000220565b602080601f831160018114620002dc575f8415620002c45750858301515b5f19600386901b1c1916600185901b17855562000269565b5f85815260208120601f198616915b828110156200030c57888601518255948401946001909101908401620002eb565b50858210156200032a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6117dd80620003485f395ff3fe608060405234801561000f575f80fd5b506004361061019a575f3560e01c806370a08231116100e8578063a217fddf11610093578063d53913931161006e578063d539139314610370578063d547741f14610397578063dd62ed3e146103aa578063f2fde38b146103e2575f80fd5b8063a217fddf14610343578063a457c2d71461034a578063a9059cbb1461035d575f80fd5b80638da5cb5b116100c35780638da5cb5b146102e857806391d148541461030357806395d89b411461033b575f80fd5b806370a08231146102a5578063715018a6146102cd57806379cc6790146102d5575f80fd5b80632f2ff15d116101485780633950935111610123578063395093511461026c57806340c10f191461027f57806342966c6814610292575f80fd5b80632f2ff15d14610235578063313ce5671461024a57806336568abe14610259575f80fd5b806318160ddd1161017857806318160ddd146101ee57806323b872dd14610200578063248a9ca314610213575f80fd5b806301ffc9a71461019e57806306fdde03146101c6578063095ea7b3146101db575b5f80fd5b6101b16101ac3660046114b1565b6103f5565b60405190151581526020015b60405180910390f35b6101ce61048d565b6040516101bd9190611512565b6101b16101e936600461155f565b61051d565b6002545b6040519081526020016101bd565b6101b161020e366004611587565b610532565b6101f26102213660046115c0565b5f9081526005602052604090206001015490565b6102486102433660046115d7565b6105f4565b005b604051601281526020016101bd565b6102486102673660046115d7565b61061e565b6101b161027a36600461155f565b6106aa565b61024861028d36600461155f565b6106e5565b6102486102a03660046115c0565b6107d9565b6101f26102b3366004611601565b6001600160a01b03165f9081526020819052604090205490565b6102486107e6565b6102486102e336600461155f565b61084b565b6006546040516001600160a01b0390911681526020016101bd565b6101b16103113660046115d7565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101ce6108e4565b6101f25f81565b6101b161035836600461155f565b6108f3565b6101b161036b36600461155f565b6109a3565b6101f27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102486103a53660046115d7565b6109af565b6101f26103b836600461161a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6102486103f0366004611601565b6109d4565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061048757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461049c90611642565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890611642565b80156105135780601f106104ea57610100808354040283529160200191610513565b820191905f5260205f20905b8154815290600101906020018083116104f657829003601f168201915b5050505050905090565b5f610529338484610ab3565b50600192915050565b5f61053e848484610c0a565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156105dc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105e98533858403610ab3565b506001949350505050565b5f8281526005602052604090206001015461060f8133610e20565b6106198383610e9f565b505050565b6001600160a01b038116331461069c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016105d3565b6106a68282610f3f565b5050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916105299185906106e090869061168e565b610ab3565b335f9081527f15a28d26fa1bf736cf7edc9922607171ccb09c3c73b808e7772a3013e068a522602052604090205460ff166107625760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f7420746865206d696e746572000000000000000060448201526064016105d3565b690eb344079513a13000008161077760025490565b610781919061168e565b11156107cf5760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c792072656163686564000000000000000000000000000060448201526064016105d3565b6106a68282610fc0565b6107e3338261109c565b50565b6006546001600160a01b031633146108405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105d3565b6108495f61121e565b565b5f61085683336103b8565b9050818110156108cd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6108da8333848403610ab3565b610619838361109c565b60606004805461049c90611642565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561098c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016105d3565b6109993385858403610ab3565b5060019392505050565b5f610529338484610c0a565b5f828152600560205260409020600101546109ca8133610e20565b6106198383610f3f565b6006546001600160a01b03163314610a2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105d3565b6001600160a01b038116610aaa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105d3565b6107e38161121e565b6001600160a01b038316610b2e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038216610baa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038216610d025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b0383165f9081526020819052604090205481811015610d905760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290610dc690849061168e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e1291815260200190565b60405180910390a350505050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff166106a657610e5d816001600160a01b03166014611287565b610e68836020611287565b604051602001610e799291906116a1565b60408051601f198184030181529082905262461bcd60e51b82526105d391600401611512565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff166106a6575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610efb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff16156106a6575f8281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166110165760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105d3565b8060025f828254611027919061168e565b90915550506001600160a01b0382165f908152602081905260408120805483929061105390849061168e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166111185760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b0382165f90815260208190526040902054818110156111a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b0383165f9081526020819052604081208383039055600280548492906111d4908490611721565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f611295836002611734565b6112a090600261168e565b67ffffffffffffffff8111156112b8576112b861174b565b6040519080825280601f01601f1916602001820160405280156112e2576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106113185761131861175f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061137a5761137a61175f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6113b4846002611734565b6113bf90600161168e565b90505b600181111561145b577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106114005761140061175f565b1a60f81b8282815181106114165761141661175f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c9361145481611773565b90506113c2565b5083156114aa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105d3565b9392505050565b5f602082840312156114c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114aa575f80fd5b5f5b8381101561150a5781810151838201526020016114f2565b50505f910152565b602081525f82518060208401526115308160408501602087016114f0565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461155a575f80fd5b919050565b5f8060408385031215611570575f80fd5b61157983611544565b946020939093013593505050565b5f805f60608486031215611599575f80fd5b6115a284611544565b92506115b060208501611544565b9150604084013590509250925092565b5f602082840312156115d0575f80fd5b5035919050565b5f80604083850312156115e8575f80fd5b823591506115f860208401611544565b90509250929050565b5f60208284031215611611575f80fd5b6114aa82611544565b5f806040838503121561162b575f80fd5b61163483611544565b91506115f860208401611544565b600181811c9082168061165657607f821691505b60208210810361167457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104875761048761167a565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516116d88160178501602088016114f0565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516117158160288401602088016114f0565b01602801949350505050565b818103818111156104875761048761167a565b80820281158282048414176104875761048761167a565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816117815761178161167a565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122093275862748c960873c303a9a6a3d6cd0a6ef5e4a69fd5965435546ad1ea60cf64736f6c63430008140033
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061019a575f3560e01c806370a08231116100e8578063a217fddf11610093578063d53913931161006e578063d539139314610370578063d547741f14610397578063dd62ed3e146103aa578063f2fde38b146103e2575f80fd5b8063a217fddf14610343578063a457c2d71461034a578063a9059cbb1461035d575f80fd5b80638da5cb5b116100c35780638da5cb5b146102e857806391d148541461030357806395d89b411461033b575f80fd5b806370a08231146102a5578063715018a6146102cd57806379cc6790146102d5575f80fd5b80632f2ff15d116101485780633950935111610123578063395093511461026c57806340c10f191461027f57806342966c6814610292575f80fd5b80632f2ff15d14610235578063313ce5671461024a57806336568abe14610259575f80fd5b806318160ddd1161017857806318160ddd146101ee57806323b872dd14610200578063248a9ca314610213575f80fd5b806301ffc9a71461019e57806306fdde03146101c6578063095ea7b3146101db575b5f80fd5b6101b16101ac3660046114b1565b6103f5565b60405190151581526020015b60405180910390f35b6101ce61048d565b6040516101bd9190611512565b6101b16101e936600461155f565b61051d565b6002545b6040519081526020016101bd565b6101b161020e366004611587565b610532565b6101f26102213660046115c0565b5f9081526005602052604090206001015490565b6102486102433660046115d7565b6105f4565b005b604051601281526020016101bd565b6102486102673660046115d7565b61061e565b6101b161027a36600461155f565b6106aa565b61024861028d36600461155f565b6106e5565b6102486102a03660046115c0565b6107d9565b6101f26102b3366004611601565b6001600160a01b03165f9081526020819052604090205490565b6102486107e6565b6102486102e336600461155f565b61084b565b6006546040516001600160a01b0390911681526020016101bd565b6101b16103113660046115d7565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101ce6108e4565b6101f25f81565b6101b161035836600461155f565b6108f3565b6101b161036b36600461155f565b6109a3565b6101f27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102486103a53660046115d7565b6109af565b6101f26103b836600461161a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6102486103f0366004611601565b6109d4565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061048757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461049c90611642565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890611642565b80156105135780601f106104ea57610100808354040283529160200191610513565b820191905f5260205f20905b8154815290600101906020018083116104f657829003601f168201915b5050505050905090565b5f610529338484610ab3565b50600192915050565b5f61053e848484610c0a565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156105dc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105e98533858403610ab3565b506001949350505050565b5f8281526005602052604090206001015461060f8133610e20565b6106198383610e9f565b505050565b6001600160a01b038116331461069c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016105d3565b6106a68282610f3f565b5050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916105299185906106e090869061168e565b610ab3565b335f9081527f15a28d26fa1bf736cf7edc9922607171ccb09c3c73b808e7772a3013e068a522602052604090205460ff166107625760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f7420746865206d696e746572000000000000000060448201526064016105d3565b690eb344079513a13000008161077760025490565b610781919061168e565b11156107cf5760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c792072656163686564000000000000000000000000000060448201526064016105d3565b6106a68282610fc0565b6107e3338261109c565b50565b6006546001600160a01b031633146108405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105d3565b6108495f61121e565b565b5f61085683336103b8565b9050818110156108cd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6108da8333848403610ab3565b610619838361109c565b60606004805461049c90611642565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561098c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016105d3565b6109993385858403610ab3565b5060019392505050565b5f610529338484610c0a565b5f828152600560205260409020600101546109ca8133610e20565b6106198383610f3f565b6006546001600160a01b03163314610a2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105d3565b6001600160a01b038116610aaa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105d3565b6107e38161121e565b6001600160a01b038316610b2e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038216610baa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038216610d025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b0383165f9081526020819052604090205481811015610d905760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290610dc690849061168e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e1291815260200190565b60405180910390a350505050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff166106a657610e5d816001600160a01b03166014611287565b610e68836020611287565b604051602001610e799291906116a1565b60408051601f198184030181529082905262461bcd60e51b82526105d391600401611512565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff166106a6575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610efb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff16156106a6575f8281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166110165760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105d3565b8060025f828254611027919061168e565b90915550506001600160a01b0382165f908152602081905260408120805483929061105390849061168e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166111185760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b0382165f90815260208190526040902054818110156111a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105d3565b6001600160a01b0383165f9081526020819052604081208383039055600280548492906111d4908490611721565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f611295836002611734565b6112a090600261168e565b67ffffffffffffffff8111156112b8576112b861174b565b6040519080825280601f01601f1916602001820160405280156112e2576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106113185761131861175f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061137a5761137a61175f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6113b4846002611734565b6113bf90600161168e565b90505b600181111561145b577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106114005761140061175f565b1a60f81b8282815181106114165761141661175f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c9361145481611773565b90506113c2565b5083156114aa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105d3565b9392505050565b5f602082840312156114c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114aa575f80fd5b5f5b8381101561150a5781810151838201526020016114f2565b50505f910152565b602081525f82518060208401526115308160408501602087016114f0565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461155a575f80fd5b919050565b5f8060408385031215611570575f80fd5b61157983611544565b946020939093013593505050565b5f805f60608486031215611599575f80fd5b6115a284611544565b92506115b060208501611544565b9150604084013590509250925092565b5f602082840312156115d0575f80fd5b5035919050565b5f80604083850312156115e8575f80fd5b823591506115f860208401611544565b90509250929050565b5f60208284031215611611575f80fd5b6114aa82611544565b5f806040838503121561162b575f80fd5b61163483611544565b91506115f860208401611544565b600181811c9082168061165657607f821691505b60208210810361167457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104875761048761167a565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516116d88160178501602088016114f0565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516117158160288401602088016114f0565b01602801949350505050565b818103818111156104875761048761167a565b80820281158282048414176104875761048761167a565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816117815761178161167a565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122093275862748c960873c303a9a6a3d6cd0a6ef5e4a69fd5965435546ad1ea60cf64736f6c63430008140033
Deployed Bytecode Sourcemap
33745:545:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25586:204;;;;;;:::i;:::-;;:::i;:::-;;;516:14:1;;509:22;491:41;;479:2;464:18;25586:204:0;;;;;;;;6329:100;;;:::i;:::-;;;;;;;:::i;8496:169::-;;;;;;:::i;:::-;;:::i;7449:108::-;7537:12;;7449:108;;;1864:25:1;;;1852:2;1837:18;7449:108:0;1718:177:1;9147:492:0;;;;;;:::i;:::-;;:::i;26997:123::-;;;;;;:::i;:::-;27063:7;27090:12;;;:6;:12;;;;;:22;;;;26997:123;27382:147;;;;;;:::i;:::-;;:::i;:::-;;7291:93;;;7374:2;3001:36:1;;2989:2;2974:18;7291:93:0;2859:184:1;28430:218:0;;;;;;:::i;:::-;;:::i;10048:215::-;;;;;;:::i;:::-;;:::i;34044:241::-;;;;;;:::i;:::-;;:::i;30672:91::-;;;;;;:::i;:::-;;:::i;7620:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7721:18:0;7694:7;7721:18;;;;;;;;;;;;7620:127;33089:94;;;:::i;31082:368::-;;;;;;:::i;:::-;;:::i;32438:87::-;32511:6;;32438:87;;-1:-1:-1;;;;;32511:6:0;;;3570:74:1;;3558:2;3543:18;32438:87:0;3424:226:1;25882:139:0;;;;;;:::i;:::-;25960:4;25984:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;25984:29:0;;;;;;;;;;;;;;;25882:139;6548:104;;;:::i;24973:49::-;;25018:4;24973:49;;10766:413;;;;;;:::i;:::-;;:::i;7960:175::-;;;;;;:::i;:::-;;:::i;33817:62::-;;33855:24;33817:62;;27774:149;;;;;;:::i;:::-;;:::i;8198:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8314:18:0;;;8287:7;8314:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8198:151;33338:192;;;;;;:::i;:::-;;:::i;25586:204::-;25671:4;25695:47;;;25710:32;25695:47;;:87;;-1:-1:-1;23048:25:0;23033:40;;;;25746:36;25688:94;25586:204;-1:-1:-1;;25586:204:0:o;6329:100::-;6383:13;6416:5;6409:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6329:100;:::o;8496:169::-;8579:4;8596:39;4139:10;8619:7;8628:6;8596:8;:39::i;:::-;-1:-1:-1;8653:4:0;8496:169;;;;:::o;9147:492::-;9287:4;9304:36;9314:6;9322:9;9333:6;9304:9;:36::i;:::-;-1:-1:-1;;;;;9380:19:0;;9353:24;9380:19;;;:11;:19;;;;;;;;4139:10;9380:33;;;;;;;;9432:26;;;;9424:79;;;;-1:-1:-1;;;9424:79:0;;4564:2:1;9424:79:0;;;4546:21:1;4603:2;4583:18;;;4576:30;4642:34;4622:18;;;4615:62;4713:10;4693:18;;;4686:38;4741:19;;9424:79:0;;;;;;;;;9539:57;9548:6;4139:10;9589:6;9570:16;:25;9539:8;:57::i;:::-;-1:-1:-1;9627:4:0;;9147:492;-1:-1:-1;;;;9147:492:0:o;27382:147::-;27063:7;27090:12;;;:6;:12;;;;;:22;;;25464:30;25475:4;4139:10;25464;:30::i;:::-;27496:25:::1;27507:4;27513:7;27496:10;:25::i;:::-;27382:147:::0;;;:::o;28430:218::-;-1:-1:-1;;;;;28526:23:0;;4139:10;28526:23;28518:83;;;;-1:-1:-1;;;28518:83:0;;4973:2:1;28518:83:0;;;4955:21:1;5012:2;4992:18;;;4985:30;5051:34;5031:18;;;5024:62;5122:17;5102:18;;;5095:45;5157:19;;28518:83:0;4771:411:1;28518:83:0;28614:26;28626:4;28632:7;28614:11;:26::i;:::-;28430:218;;:::o;10048:215::-;4139:10;10136:4;10185:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10185:34:0;;;;;;;;;;10136:4;;10153:80;;10176:7;;10185:47;;10222:10;;10185:47;:::i;:::-;10153:8;:80::i;34044:241::-;34133:10;25960:4;25984:29;;;:12;;:29;:12;:29;;;;;34104:69;;;;-1:-1:-1;;;34104:69:0;;5708:2:1;34104:69:0;;;5690:21:1;5747:2;5727:18;;;5720:30;5786:26;5766:18;;;5759:54;5830:18;;34104:69:0;5506:348:1;34104:69:0;34218:8;34208:6;34192:13;7537:12;;;7449:108;34192:13;:22;;;;:::i;:::-;:34;;34184:65;;;;-1:-1:-1;;;34184:65:0;;6061:2:1;34184:65:0;;;6043:21:1;6100:2;6080:18;;;6073:30;6139:20;6119:18;;;6112:48;6177:18;;34184:65:0;5859:342:1;34184:65:0;34260:17;34266:2;34270:6;34260:5;:17::i;30672:91::-;30728:27;4139:10;30748:6;30728:5;:27::i;:::-;30672:91;:::o;33089:94::-;32511:6;;-1:-1:-1;;;;;32511:6:0;4139:10;32658:23;32650:68;;;;-1:-1:-1;;;32650:68:0;;6408:2:1;32650:68:0;;;6390:21:1;;;6427:18;;;6420:30;6486:34;6466:18;;;6459:62;6538:18;;32650:68:0;6206:356:1;32650:68:0;33154:21:::1;33172:1;33154:9;:21::i;:::-;33089:94::o:0;31082:368::-;31159:24;31186:32;31196:7;4139:10;8198:151;:::i;31186:32::-;31159:59;;31257:6;31237:16;:26;;31229:75;;;;-1:-1:-1;;;31229:75:0;;6769:2:1;31229:75:0;;;6751:21:1;6808:2;6788:18;;;6781:30;6847:34;6827:18;;;6820:62;6918:6;6898:18;;;6891:34;6942:19;;31229:75:0;6567:400:1;31229:75:0;31340:58;31349:7;4139:10;31391:6;31372:16;:25;31340:8;:58::i;:::-;31420:22;31426:7;31435:6;31420:5;:22::i;6548:104::-;6604:13;6637:7;6630:14;;;;;:::i;10766:413::-;4139:10;10859:4;10903:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10903:34:0;;;;;;;;;;10956:35;;;;10948:85;;;;-1:-1:-1;;;10948:85:0;;7174:2:1;10948:85:0;;;7156:21:1;7213:2;7193:18;;;7186:30;7252:34;7232:18;;;7225:62;7323:7;7303:18;;;7296:35;7348:19;;10948:85:0;6972:401:1;10948:85:0;11069:67;4139:10;11092:7;11120:15;11101:16;:34;11069:8;:67::i;:::-;-1:-1:-1;11167:4:0;;10766:413;-1:-1:-1;;;10766:413:0:o;7960:175::-;8046:4;8063:42;4139:10;8087:9;8098:6;8063:9;:42::i;27774:149::-;27063:7;27090:12;;;:6;:12;;;;;:22;;;25464:30;25475:4;4139:10;25464;:30::i;:::-;27889:26:::1;27901:4;27907:7;27889:11;:26::i;33338:192::-:0;32511:6;;-1:-1:-1;;;;;32511:6:0;4139:10;32658:23;32650:68;;;;-1:-1:-1;;;32650:68:0;;6408:2:1;32650:68:0;;;6390:21:1;;;6427:18;;;6420:30;6486:34;6466:18;;;6459:62;6538:18;;32650:68:0;6206:356:1;32650:68:0;-1:-1:-1;;;;;33427:22:0;::::1;33419:73;;;::::0;-1:-1:-1;;;33419:73:0;;7580:2:1;33419:73:0::1;::::0;::::1;7562:21:1::0;7619:2;7599:18;;;7592:30;7658:34;7638:18;;;7631:62;7729:8;7709:18;;;7702:36;7755:19;;33419:73:0::1;7378:402:1::0;33419:73:0::1;33503:19;33513:8;33503:9;:19::i;14450:380::-:0;-1:-1:-1;;;;;14586:19:0;;14578:68;;;;-1:-1:-1;;;14578:68:0;;7987:2:1;14578:68:0;;;7969:21:1;8026:2;8006:18;;;7999:30;8065:34;8045:18;;;8038:62;8136:6;8116:18;;;8109:34;8160:19;;14578:68:0;7785:400:1;14578:68:0;-1:-1:-1;;;;;14665:21:0;;14657:68;;;;-1:-1:-1;;;14657:68:0;;8392:2:1;14657:68:0;;;8374:21:1;8431:2;8411:18;;;8404:30;8470:34;8450:18;;;8443:62;8541:4;8521:18;;;8514:32;8563:19;;14657:68:0;8190:398:1;14657:68:0;-1:-1:-1;;;;;14738:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14790:32;;1864:25:1;;;14790:32:0;;1837:18:1;14790:32:0;;;;;;;14450:380;;;:::o;11669:733::-;-1:-1:-1;;;;;11809:20:0;;11801:70;;;;-1:-1:-1;;;11801:70:0;;8795:2:1;11801:70:0;;;8777:21:1;8834:2;8814:18;;;8807:30;8873:34;8853:18;;;8846:62;8944:7;8924:18;;;8917:35;8969:19;;11801:70:0;8593:401:1;11801:70:0;-1:-1:-1;;;;;11890:23:0;;11882:71;;;;-1:-1:-1;;;11882:71:0;;9201:2:1;11882:71:0;;;9183:21:1;9240:2;9220:18;;;9213:30;9279:34;9259:18;;;9252:62;9350:5;9330:18;;;9323:33;9373:19;;11882:71:0;8999:399:1;11882:71:0;-1:-1:-1;;;;;12050:17:0;;12026:21;12050:17;;;;;;;;;;;12086:23;;;;12078:74;;;;-1:-1:-1;;;12078:74:0;;9605:2:1;12078:74:0;;;9587:21:1;9644:2;9624:18;;;9617:30;9683:34;9663:18;;;9656:62;9754:8;9734:18;;;9727:36;9780:19;;12078:74:0;9403:402:1;12078:74:0;-1:-1:-1;;;;;12188:17:0;;;:9;:17;;;;;;;;;;;12208:22;;;12188:42;;12252:20;;;;;;;;:30;;12224:6;;12188:9;12252:30;;12224:6;;12252:30;:::i;:::-;;;;;;;;12317:9;-1:-1:-1;;;;;12300:35:0;12309:6;-1:-1:-1;;;;;12300:35:0;;12328:6;12300:35;;;;1864:25:1;;1852:2;1837:18;;1718:177;12300:35:0;;;;;;;;11790:612;11669:733;;;:::o;26311:497::-;25960:4;25984:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;25984:29:0;;;;;;;;;;;;26387:414;;26580:41;26608:7;-1:-1:-1;;;;;26580:41:0;26618:2;26580:19;:41::i;:::-;26694:38;26722:4;26729:2;26694:19;:38::i;:::-;26485:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26485:270:0;;;;;;;;;;-1:-1:-1;;;26431:358:0;;;;;;;:::i;29734:229::-;25960:4;25984:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;25984:29:0;;;;;;;;;;;;29804:152;;29848:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;29848:29:0;;;;;;;;;:36;;-1:-1:-1;;29848:36:0;29880:4;29848:36;;;29931:12;4139:10;;4059:98;29931:12;-1:-1:-1;;;;;29904:40:0;29922:7;-1:-1:-1;;;;;29904:40:0;29916:4;29904:40;;;;;;;;;;29734:229;;:::o;29971:230::-;25960:4;25984:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;25984:29:0;;;;;;;;;;;;30042:152;;;30117:5;30085:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;30085:29:0;;;;;;;;;;:37;;-1:-1:-1;;30085:37:0;;;30142:40;4139:10;;30085:12;;30142:40;;30117:5;30142:40;29971:230;;:::o;12689:399::-;-1:-1:-1;;;;;12773:21:0;;12765:65;;;;-1:-1:-1;;;12765:65:0;;10829:2:1;12765:65:0;;;10811:21:1;10868:2;10848:18;;;10841:30;10907:33;10887:18;;;10880:61;10958:18;;12765:65:0;10627:355:1;12765:65:0;12921:6;12905:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12938:18:0;;:9;:18;;;;;;;;;;:28;;12960:6;;12938:9;:28;;12960:6;;12938:28;:::i;:::-;;;;-1:-1:-1;;12982:37:0;;1864:25:1;;;-1:-1:-1;;;;;12982:37:0;;;12999:1;;12982:37;;1852:2:1;1837:18;12982:37:0;;;;;;;28430:218;;:::o;13421:591::-;-1:-1:-1;;;;;13505:21:0;;13497:67;;;;-1:-1:-1;;;13497:67:0;;11189:2:1;13497:67:0;;;11171:21:1;11228:2;11208:18;;;11201:30;11267:34;11247:18;;;11240:62;11338:3;11318:18;;;11311:31;11359:19;;13497:67:0;10987:397:1;13497:67:0;-1:-1:-1;;;;;13664:18:0;;13639:22;13664:18;;;;;;;;;;;13701:24;;;;13693:71;;;;-1:-1:-1;;;13693:71:0;;11591:2:1;13693:71:0;;;11573:21:1;11630:2;11610:18;;;11603:30;11669:34;11649:18;;;11642:62;11740:4;11720:18;;;11713:32;11762:19;;13693:71:0;11389:398:1;13693:71:0;-1:-1:-1;;;;;13800:18:0;;:9;:18;;;;;;;;;;13821:23;;;13800:44;;13866:12;:22;;13838:6;;13800:9;13866:22;;13838:6;;13866:22;:::i;:::-;;;;-1:-1:-1;;13906:37:0;;1864:25:1;;;13932:1:0;;-1:-1:-1;;;;;13906:37:0;;;;;1852:2:1;1837:18;13906:37:0;;;;;;;27382:147;;;:::o;33538:173::-;33613:6;;;-1:-1:-1;;;;;33630:17:0;;;;;;;;;;;33663:40;;33613:6;;;33630:17;33613:6;;33663:40;;33594:16;;33663:40;33583:128;33538:173;:::o;20851:451::-;20926:13;20952:19;20984:10;20988:6;20984:1;:10;:::i;:::-;:14;;20997:1;20984:14;:::i;:::-;20974:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20974:25:0;;20952:47;;21010:15;:6;21017:1;21010:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;;21036;:6;21043:1;21036:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;-1:-1:-1;21067:9:0;21079:10;21083:6;21079:1;:10;:::i;:::-;:14;;21092:1;21079:14;:::i;:::-;21067:26;;21062:135;21099:1;21095;:5;21062:135;;;21134:12;21147:5;21155:3;21147:11;21134:25;;;;;;;:::i;:::-;;;;21122:6;21129:1;21122:9;;;;;;;;:::i;:::-;;;;:37;;;;;;;;;;-1:-1:-1;21184:1:0;21174:11;;;;;21102:3;;;:::i;:::-;;;21062:135;;;-1:-1:-1;21215:10:0;;21207:55;;;;-1:-1:-1;;;21207:55:0;;12879:2:1;21207:55:0;;;12861:21:1;;;12898:18;;;12891:30;12957:34;12937:18;;;12930:62;13009:18;;21207:55:0;12677:356:1;21207:55:0;21287:6;20851:451;-1:-1:-1;;;20851:451:0:o;14:332:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:250;628:1;638:113;652:6;649:1;646:13;638:113;;;728:11;;;722:18;709:11;;;702:39;674:2;667:10;638:113;;;-1:-1:-1;;785:1:1;767:16;;760:27;543:250::o;798:455::-;947:2;936:9;929:21;910:4;979:6;973:13;1022:6;1017:2;1006:9;1002:18;995:34;1038:79;1110:6;1105:2;1094:9;1090:18;1085:2;1077:6;1073:15;1038:79;:::i;:::-;1169:2;1157:15;-1:-1:-1;;1153:88:1;1138:104;;;;1244:2;1134:113;;798:455;-1:-1:-1;;798:455:1:o;1258:196::-;1326:20;;-1:-1:-1;;;;;1375:54:1;;1365:65;;1355:93;;1444:1;1441;1434:12;1355:93;1258:196;;;:::o;1459:254::-;1527:6;1535;1588:2;1576:9;1567:7;1563:23;1559:32;1556:52;;;1604:1;1601;1594:12;1556:52;1627:29;1646:9;1627:29;:::i;:::-;1617:39;1703:2;1688:18;;;;1675:32;;-1:-1:-1;;;1459:254:1:o;1900:328::-;1977:6;1985;1993;2046:2;2034:9;2025:7;2021:23;2017:32;2014:52;;;2062:1;2059;2052:12;2014:52;2085:29;2104:9;2085:29;:::i;:::-;2075:39;;2133:38;2167:2;2156:9;2152:18;2133:38;:::i;:::-;2123:48;;2218:2;2207:9;2203:18;2190:32;2180:42;;1900:328;;;;;:::o;2233:180::-;2292:6;2345:2;2333:9;2324:7;2320:23;2316:32;2313:52;;;2361:1;2358;2351:12;2313:52;-1:-1:-1;2384:23:1;;2233:180;-1:-1:-1;2233:180:1:o;2600:254::-;2668:6;2676;2729:2;2717:9;2708:7;2704:23;2700:32;2697:52;;;2745:1;2742;2735:12;2697:52;2781:9;2768:23;2758:33;;2810:38;2844:2;2833:9;2829:18;2810:38;:::i;:::-;2800:48;;2600:254;;;;;:::o;3233:186::-;3292:6;3345:2;3333:9;3324:7;3320:23;3316:32;3313:52;;;3361:1;3358;3351:12;3313:52;3384:29;3403:9;3384:29;:::i;3655:260::-;3723:6;3731;3784:2;3772:9;3763:7;3759:23;3755:32;3752:52;;;3800:1;3797;3790:12;3752:52;3823:29;3842:9;3823:29;:::i;:::-;3813:39;;3871:38;3905:2;3894:9;3890:18;3871:38;:::i;3920:437::-;3999:1;3995:12;;;;4042;;;4063:61;;4117:4;4109:6;4105:17;4095:27;;4063:61;4170:2;4162:6;4159:14;4139:18;4136:38;4133:218;;-1:-1:-1;;;4204:1:1;4197:88;4308:4;4305:1;4298:15;4336:4;4333:1;4326:15;4133:218;;3920:437;;;:::o;5187:184::-;-1:-1:-1;;;5236:1:1;5229:88;5336:4;5333:1;5326:15;5360:4;5357:1;5350:15;5376:125;5441:9;;;5462:10;;;5459:36;;;5475:18;;:::i;9810:812::-;10221:25;10216:3;10209:38;10191:3;10276:6;10270:13;10292:75;10360:6;10355:2;10350:3;10346:12;10339:4;10331:6;10327:17;10292:75;:::i;:::-;10431:19;10426:2;10386:16;;;10418:11;;;10411:40;10476:13;;10498:76;10476:13;10560:2;10552:11;;10545:4;10533:17;;10498:76;:::i;:::-;10594:17;10613:2;10590:26;;9810:812;-1:-1:-1;;;;9810:812:1:o;11792:128::-;11859:9;;;11880:11;;;11877:37;;;11894:18;;:::i;11925:168::-;11998:9;;;12029;;12046:15;;;12040:22;;12026:37;12016:71;;12067:18;;:::i;12098:184::-;-1:-1:-1;;;12147:1:1;12140:88;12247:4;12244:1;12237:15;12271:4;12268:1;12261:15;12287:184;-1:-1:-1;;;12336:1:1;12329:88;12436:4;12433:1;12426:15;12460:4;12457:1;12450:15;12476:196;12515:3;12543:5;12533:39;;12552:18;;:::i;:::-;-1:-1:-1;12599:66:1;12588:78;;12476:196::o
Swarm Source
ipfs://93275862748c960873c303a9a6a3d6cd0a6ef5e4a69fd5965435546ad1ea60cf
Net Worth in USD
Net Worth in ETH
Token Allocations
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| GNO | 100.00% | $0.999389 | 39.2436 | $39.22 |
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.