Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Staking
Overview
Max Total Supply
431,038,446 JELLY
Holders
257 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Jelly
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-28 */ pragma solidity 0.8.6; /** * @title Jelly Token: * * ,,,, * g@@@@@@K * ]@@@@@@@@P * $@@@@@@@" ]@@@ ]@@@ * "*NNM" ]@@@ ]@@@ * ]@@@ ]@@@ * ,g@@@g ,,gg@gg, ]@@@ ]@@@ ,ggg ,ggg * @@@@@@@@p g@@@BPMBB@@W ]@@@ ]@@@ $@@@ ,@@@P * ]@@@@@@@@@ @@@P ]@@@ ]@@@ ]@@@ $@@g ,@@@P * ]@@@@@@@@@ $@@D,,,,,,,,]@@@ ]@@@ ]@@@ '@@@p @@@C * ]@@@@@@@@@ @@@@NNNNNNNNNNNN ]@@@ ]@@@ "@@@p @@@P * ]@@@@@@@@@ ]@@K ]@@@ ]@@@ '@@@, @@@P * @@@@@@@@@ %@@@, ,g@@@ ]@@@ ]@@@ ^@@@@@@C * "@@@@@@@@ "N@@@@@@@@N* ]@@@ ]@@@ "*@@@P * "B@@@@@@ "**"" ''' ''' @@@P * ,gg@@g "B@@@P @@@P * @@@@@@@@p B@@' @@@P * @@@@@@@@P ]@h RNNP * 'B@@@@@@ $P * "NE@@@p"' * * */ /** * @author ProfWobble & Jiggle * @dev * - Ability for holders to burn (destroy) their tokens * - Minter role that allows for token minting * - Token transfers paused on deployment (Jelly not set yet!). * - An operator role that allows for transfers of unset tokens. * - SetJelly() function that allows $JELLY to transfer when ready. * */ /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface OZIERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev 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); } } /** * @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; } } // Part: IERC20Metadata /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is OZIERC20 { /** * @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); } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev 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 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 {_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 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()); } } } /** * @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, OZIERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; // PW: Changed to internal here to be able to setJelly() string internal _name; string internal _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 {} } contract JellyAdminAccess is AccessControl { /// @dev Whether access is initialised. bool private initAccess; /// @notice Events for adding and removing various roles. event AdminRoleGranted( address indexed beneficiary, address indexed caller ); event AdminRoleRemoved( address indexed beneficiary, address indexed caller ); /// @notice The deployer is automatically given the admin role which will allow them to then grant roles to other addresses. constructor() { initAccessControls(_msgSender()); } /** * @notice Initializes access controls. * @param _admin Admins address. */ function initAccessControls(address _admin) public { require(!initAccess, "Already initialised"); _setupRole(DEFAULT_ADMIN_ROLE, _admin); initAccess = true; } ///////////// // Lookups // ///////////// /** * @notice Used to check whether an address has the admin role. * @param _address EOA or contract being checked. * @return bool True if the account has the role or false if it does not. */ function hasAdminRole(address _address) public view returns (bool) { return hasRole(DEFAULT_ADMIN_ROLE, _address); } /////////////// // Modifiers // /////////////// /** * @notice Grants the admin role to an address. * @dev The sender must have the admin role. * @param _address EOA or contract receiving the new role. */ function addAdminRole(address _address) external { grantRole(DEFAULT_ADMIN_ROLE, _address); emit AdminRoleGranted(_address, _msgSender()); } /** * @notice Removes the admin role from an address. * @dev The sender must have the admin role. * @param _address EOA or contract affected. */ function removeAdminRole(address _address) external { revokeRole(DEFAULT_ADMIN_ROLE, _address); emit AdminRoleRemoved(_address, _msgSender()); } } contract JellyOperatorAccess is JellyAdminAccess { /// @notice Role definitions bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); /// @notice Events for adding and removing various roles event OperatorRoleGranted( address indexed beneficiary, address indexed caller ); event OperatorRoleRemoved( address indexed beneficiary, address indexed caller ); constructor() { } ///////////// // Lookups // ///////////// /** * @notice Used to check whether an address has the operator role * @param _address EOA or contract being checked * @return bool True if the account has the role or false if it does not */ function hasOperatorRole(address _address) public view returns (bool) { return hasRole(OPERATOR_ROLE, _address); } /////////////// // Modifiers // /////////////// /** * @notice Grants the operator role to an address * @dev The sender must have the admin role * @param _address EOA or contract receiving the new role */ function addOperatorRole(address _address) external { grantRole(OPERATOR_ROLE, _address); emit OperatorRoleGranted(_address, _msgSender()); } /** * @notice Removes the operator role from an address * @dev The sender must have the admin role * @param _address EOA or contract affected */ function removeOperatorRole(address _address) external { revokeRole(OPERATOR_ROLE, _address); emit OperatorRoleRemoved(_address, _msgSender()); } } contract JellyMinterAccess is JellyOperatorAccess { /// @notice Role definitions bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); /// @notice Events for adding and removing various roles event MinterRoleGranted( address indexed beneficiary, address indexed caller ); event MinterRoleRemoved( address indexed beneficiary, address indexed caller ); constructor() { } ///////////// // Lookups // ///////////// /** * @notice Used to check whether an address has the minter role * @param _address EOA or contract being checked * @return bool True if the account has the role or false if it does not */ function hasMinterRole(address _address) public view returns (bool) { return hasRole(MINTER_ROLE, _address); } /////////////// // Modifiers // /////////////// /** * @notice Grants the minter role to an address * @dev The sender must have the admin role * @param _address EOA or contract receiving the new role */ function addMinterRole(address _address) external { grantRole(MINTER_ROLE, _address); emit MinterRoleGranted(_address, _msgSender()); } /** * @notice Removes the minter role from an address * @dev The sender must have the admin role * @param _address EOA or contract affected */ function removeMinterRole(address _address) external { revokeRole(MINTER_ROLE, _address); emit MinterRoleRemoved(_address, _msgSender()); } } /** * @dev Jelly {ERC20} token: * * - A minter role that allows for token minting * - Ability for holders to burn (destroy) their tokens * - Token transfers paused on deployment (unset jelly). * - An operator role that allows for transfers of unset tokens. * - SetJelly() function that allows for $JELLY to trade freely. * */ contract Jelly is ERC20, Pausable, JellyMinterAccess { uint public cap; event CapUpdated(uint256 cap); event JellySet(); /** * @dev Grants `DEFAULT_ADMIN_ROLE` to the account that deploys the contract * and `OPERATOR_ROLE` to the vault to be able to move those tokens. */ constructor(string memory _name, string memory _symbol, address _vault, uint256 _initialSupply, uint256 _cap) ERC20(_name,_symbol) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(OPERATOR_ROLE, _vault); require(_cap >= _initialSupply, "Cap exceeded"); cap = _cap; _mint(_vault, _initialSupply); _pause(); } /** * @dev Serves $JELLY when the time is just right. */ function setJelly() external { require( hasAdminRole(_msgSender()), "JELLY.setJelly: Sender must be admin" ); _unpause(); emit JellySet(); } /** * @dev Sets the hard cap on token supply. */ function setCap(uint _cap) external { require( hasAdminRole(_msgSender()), "JELLY.setCap: Sender must be admin" ); require( _cap >= totalSupply(), "JELLY: Cap less than totalSupply"); cap = _cap; emit CapUpdated(cap); } /** * @dev Checks if Jelly is ready yet. */ function canTransfer( address _from ) external view returns (bool _status) { return (!paused() || hasOperatorRole(_msgSender())); } /** * @dev Returns the amount a user is permitted to mint. */ function availableToMint() external view returns (uint256 tokens) { if (hasMinterRole(_msgSender())) { if (cap > 0) { tokens = cap - totalSupply(); } } } /** * @dev Creates `amount` new tokens for `to`. */ function mint(address to, uint256 amount) public { require(to != address(0), "JELLY: no mint to zero address"); require(hasMinterRole(_msgSender()), "JELLY: must have minter role to mint"); require(totalSupply() + amount <= cap, "Cap exceeded"); _mint(to, amount); } /** * @dev Destroys `amount` tokens from the caller. */ function burn(uint256 amount) public { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. */ function burnFrom(address account, uint256 amount) public { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "JELLY: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } /** * @dev Requires hasOperatorRole for token transfers before Jelly has been set. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override { if (paused()) { require(hasOperatorRole(_msgSender()), "JELLY: tokens cannot be transferred until setJelly has been executed"); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256","name":"_cap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AdminRoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"AdminRoleRemoved","type":"event"},{"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":"uint256","name":"cap","type":"uint256"}],"name":"CapUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"JellySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MinterRoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MinterRoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"OperatorRoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"OperatorRoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":[],"name":"OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addMinterRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addOperatorRole","outputs":[],"stateMutability":"nonpayable","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":[],"name":"availableToMint","outputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"_from","type":"address"}],"name":"canTransfer","outputs":[{"internalType":"bool","name":"_status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","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":"_address","type":"address"}],"name":"hasAdminRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hasMinterRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hasOperatorRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_admin","type":"address"}],"name":"initAccessControls","outputs":[],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeMinterRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeOperatorRole","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":"uint256","name":"_cap","type":"uint256"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setJelly","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"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002283380380620022838339810160408190526200003491620005f5565b8451859085906200004d90600390602085019062000498565b5080516200006390600490602084019062000498565b50506005805460ff19169055506200007b336200011f565b6200008860003362000191565b620000b47f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298462000191565b81811015620000f95760405162461bcd60e51b815260206004820152600c60248201526b10d85c08195e18d95959195960a21b60448201526064015b60405180910390fd5b60088190556200010a8383620001a1565b6200011462000294565b50505050506200070d565b60075460ff1615620001745760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c69736564000000000000000000000000006044820152606401620000f0565b6200018160008262000191565b506007805460ff19166001179055565b6200019d82826200032f565b5050565b6001600160a01b038216620001f95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000f0565b6200020760008383620003d3565b80600260008282546200021b919062000693565b90915550506001600160a01b038216600090815260208190526040812080548392906200024a90849062000693565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60055460ff1615620002dc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401620000f0565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003123390565b6040516001600160a01b03909116815260200160405180910390a1565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff166200019d5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200038f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60055460ff161562000493573360009081527f61f0f4fc423bfa88e8d2f029f9b768dd4a7c569ac8e600b83668449acadcfc5a602052604090205460ff16620004935760405162461bcd60e51b8152602060048201526044602482018190527f4a454c4c593a20746f6b656e732063616e6e6f74206265207472616e73666572908201527f72656420756e74696c207365744a656c6c7920686173206265656e20657865636064820152631d5d195960e21b608482015260a401620000f0565b505050565b828054620004a690620006ba565b90600052602060002090601f016020900481019282620004ca576000855562000515565b82601f10620004e557805160ff191683800117855562000515565b8280016001018555821562000515579182015b8281111562000515578251825591602001919060010190620004f8565b506200052392915062000527565b5090565b5b8082111562000523576000815560010162000528565b600082601f8301126200055057600080fd5b81516001600160401b03808211156200056d576200056d620006f7565b604051601f8301601f19908116603f01168101908282118183101715620005985762000598620006f7565b81604052838152602092508683858801011115620005b557600080fd5b600091505b83821015620005d95785820183015181830184015290820190620005ba565b83821115620005eb5760008385830101525b9695505050505050565b600080600080600060a086880312156200060e57600080fd5b85516001600160401b03808211156200062657600080fd5b6200063489838a016200053e565b965060208801519150808211156200064b57600080fd5b506200065a888289016200053e565b604088015190955090506001600160a01b03811681146200067a57600080fd5b6060870151608090970151959894975095949392505050565b60008219821115620006b557634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620006cf57607f821691505b60208210811415620006f157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611b66806200071d6000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806374601c3c1161013b578063adbf3776116100b8578063dccfe3101161007c578063dccfe310146104c6578063dd62ed3e146104d9578063e6594abd14610512578063f5b541a614610525578063fc4e3e0a1461053a57600080fd5b8063adbf377614610465578063b7928b1d14610478578063c395fcb31461048b578063d53913931461049e578063d547741f146104b357600080fd5b806395d89b41116100ff57806395d89b4114610427578063996fa3e11461042f578063a217fddf14610437578063a457c2d71461043f578063a9059cbb1461045257600080fd5b806374601c3c146103d357806378fc3cb3146103db57806379cc6790146103ee57806391d14854146104015780639478941c1461041457600080fd5b8063355274ea116101c957806347786d371161018d57806347786d371461036657806354f1e126146103795780635c975abb1461038c5780636595171c1461039757806370a08231146103aa57600080fd5b8063355274ea1461031157806336568abe1461031a578063395093511461032d57806340c10f191461034057806342966c681461035357600080fd5b806318160ddd1161021057806318160ddd146102a557806323b872dd146102b7578063248a9ca3146102ca5780632f2ff15d146102ed578063313ce5671461030257600080fd5b806301ffc9a71461024257806306fdde031461026a578063095ea7b31461027f578063099db01714610292575b600080fd5b610255610250366004611910565b61054d565b60405190151581526020015b60405180910390f35b610272610584565b60405161026191906119af565b61025561028d3660046118aa565b610616565b6102556102a0366004611820565b61062c565b6002545b604051908152602001610261565b6102556102c536600461186e565b610646565b6102a96102d83660046118d4565b60009081526006602052604090206001015490565b6103006102fb3660046118ed565b6106f5565b005b60405160128152602001610261565b6102a960085481565b6103006103283660046118ed565b610720565b61025561033b3660046118aa565b61079e565b61030061034e3660046118aa565b6107da565b6103006103613660046118d4565b6108ef565b6103006103743660046118d4565b6108fc565b610300610387366004611820565b6109e9565b60055460ff16610255565b6103006103a5366004611820565b610a3a565b6102a96103b8366004611820565b6001600160a01b031660009081526020819052604090205490565b6102a9610a7e565b6102556103e9366004611820565b610aac565b6103006103fc3660046118aa565b610aca565b61025561040f3660046118ed565b610b4b565b610300610422366004611820565b610b76565b610272610bc7565b610300610bd6565b6102a9600081565b61025561044d3660046118aa565b610c6a565b6102556104603660046118aa565b610d03565b610300610473366004611820565b610d10565b610300610486366004611820565b610d61565b610255610499366004611820565b610db2565b6102a9600080516020611b1183398151915281565b6103006104c13660046118ed565b610dbe565b6103006104d4366004611820565b610de4565b6102a96104e736600461183b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610300610520366004611820565b610e28565b6102a9600080516020611af183398151915281565b610255610548366004611820565b610e8c565b60006001600160e01b03198216637965db0b60e01b148061057e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461059390611a73565b80601f01602080910402602001604051908101604052809291908181526020018280546105bf90611a73565b801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b5050505050905090565b6000610623338484610ea6565b50600192915050565b600061057e600080516020611b1183398151915283610b4b565b6000610653848484610fca565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156106dd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106ea8533858403610ea6565b506001949350505050565b60008281526006602052604090206001015461071181336111a5565b61071b8383611209565b505050565b6001600160a01b03811633146107905760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106d4565b61079a828261128f565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106239185906107d59086906119e2565b610ea6565b6001600160a01b0382166108305760405162461bcd60e51b815260206004820152601e60248201527f4a454c4c593a206e6f206d696e7420746f207a65726f2061646472657373000060448201526064016106d4565b6108393361062c565b6108915760405162461bcd60e51b8152602060048201526024808201527f4a454c4c593a206d7573742068617665206d696e74657220726f6c6520746f206044820152631b5a5b9d60e21b60648201526084016106d4565b6008548161089e60025490565b6108a891906119e2565b11156108e55760405162461bcd60e51b815260206004820152600c60248201526b10d85c08195e18d95959195960a21b60448201526064016106d4565b61079a82826112f6565b6108f933826113e1565b50565b61090533610db2565b61095c5760405162461bcd60e51b815260206004820152602260248201527f4a454c4c592e7365744361703a2053656e646572206d7573742062652061646d60448201526134b760f11b60648201526084016106d4565b6002548110156109ae5760405162461bcd60e51b815260206004820181905260248201527f4a454c4c593a20436170206c657373207468616e20746f74616c537570706c7960448201526064016106d4565b60088190556040518181527f3c8eb7c49d332f4c1e4d92a27cda93c31cc9452f7a408e0c6109fcddbc9946ea9060200160405180910390a150565b610a01600080516020611b1183398151915282610dbe565b60405133906001600160a01b038316907f56692a161ffec953ddf9def93b958ea8d1ec95e21b80870c66be91a4374dc4e390600090a350565b610a456000826106f5565b60405133906001600160a01b038316907f2570ac42fd8b322dc453ada624dc2ed0e9bdd67f16f201a25bbd30468f2aa18790600090a350565b6000610a893361062c565b15610aa95760085415610aa957600254600854610aa69190611a19565b90505b90565b6000610aba60055460ff1690565b158061057e575061057e33610e8c565b6000610ad683336104e7565b905081811015610b345760405162461bcd60e51b8152602060048201526024808201527f4a454c4c593a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b60648201526084016106d4565b610b418333848403610ea6565b61071b83836113e1565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610b8e600080516020611af183398151915282610dbe565b60405133906001600160a01b038316907f70b25138b6fadeb9992d18b9653564271823e34b3e3257515d12a6d4b15fcddf90600090a350565b60606004805461059390611a73565b610bdf33610db2565b610c375760405162461bcd60e51b8152602060048201526024808201527f4a454c4c592e7365744a656c6c793a2053656e646572206d75737420626520616044820152633236b4b760e11b60648201526084016106d4565b610c3f61153b565b6040517ff8cae5c6689c0438a60eefc96cc182e609e583494ec7611e57ef82f651888f0c90600090a1565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610cec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106d4565b610cf93385858403610ea6565b5060019392505050565b6000610623338484610fca565b610d28600080516020611b11833981519152826106f5565b60405133906001600160a01b038316907f0be6ab9784c7401fafb73f7bc47bc67cc4ef8c47a60ad3cb66d1de0353a0784c90600090a350565b610d79600080516020611af1833981519152826106f5565b60405133906001600160a01b038316907f2d45ee102874989882745a26688d0b4fffee125a18df26536b12582c7fde4e1790600090a350565b600061057e8183610b4b565b600082815260066020526040902060010154610dda81336111a5565b61071b838361128f565b610def600082610dbe565b60405133906001600160a01b038316907f21ba1239795d4e22874e3dc55f0a9d7b65bfb23069d32965d7c23be9524ccf9590600090a350565b60075460ff1615610e715760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5cd959606a1b60448201526064016106d4565b610e7c6000826115c3565b506007805460ff19166001179055565b600061057e600080516020611af183398151915283610b4b565b6001600160a01b038316610f085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d4565b6001600160a01b038216610f695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661102e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d4565b6001600160a01b0382166110905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d4565b61109b8383836115cd565b6001600160a01b038316600090815260208190526040902054818110156111135760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106d4565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061114a9084906119e2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161119691815260200190565b60405180910390a35b50505050565b6111af8282610b4b565b61079a576111c7816001600160a01b03166014611661565b6111d2836020611661565b6040516020016111e392919061193a565b60408051601f198184030181529082905262461bcd60e51b82526106d4916004016119af565b6112138282610b4b565b61079a5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561124b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6112998282610b4b565b1561079a5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b03821661134c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106d4565b611358600083836115cd565b806002600082825461136a91906119e2565b90915550506001600160a01b038216600090815260208190526040812080548392906113979084906119e2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106d4565b61144d826000836115cd565b6001600160a01b038216600090815260208190526040902054818110156114c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106d4565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114f0908490611a19565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60055460ff166115845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106d4565b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b61079a8282611209565b60055460ff161561071b576115e133610e8c565b61071b5760405162461bcd60e51b8152602060048201526044602482018190527f4a454c4c593a20746f6b656e732063616e6e6f74206265207472616e73666572908201527f72656420756e74696c207365744a656c6c7920686173206265656e20657865636064820152631d5d195960e21b608482015260a4016106d4565b606060006116708360026119fa565b61167b9060026119e2565b67ffffffffffffffff81111561169357611693611ada565b6040519080825280601f01601f1916602001820160405280156116bd576020820181803683370190505b509050600360fc1b816000815181106116d8576116d8611ac4565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061170757611707611ac4565b60200101906001600160f81b031916908160001a905350600061172b8460026119fa565b6117369060016119e2565b90505b60018111156117ae576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061176a5761176a611ac4565b1a60f81b82828151811061178057611780611ac4565b60200101906001600160f81b031916908160001a90535060049490941c936117a781611a5c565b9050611739565b5083156117fd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d4565b9392505050565b80356001600160a01b038116811461181b57600080fd5b919050565b60006020828403121561183257600080fd5b6117fd82611804565b6000806040838503121561184e57600080fd5b61185783611804565b915061186560208401611804565b90509250929050565b60008060006060848603121561188357600080fd5b61188c84611804565b925061189a60208501611804565b9150604084013590509250925092565b600080604083850312156118bd57600080fd5b6118c683611804565b946020939093013593505050565b6000602082840312156118e657600080fd5b5035919050565b6000806040838503121561190057600080fd5b8235915061186560208401611804565b60006020828403121561192257600080fd5b81356001600160e01b0319811681146117fd57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611972816017850160208801611a30565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516119a3816028840160208801611a30565b01602801949350505050565b60208152600082518060208401526119ce816040850160208701611a30565b601f01601f19169190910160400192915050565b600082198211156119f5576119f5611aae565b500190565b6000816000190483118215151615611a1457611a14611aae565b500290565b600082821015611a2b57611a2b611aae565b500390565b60005b83811015611a4b578181015183820152602001611a33565b8381111561119f5750506000910152565b600081611a6b57611a6b611aae565b506000190190565b600181811c90821680611a8757607f821691505b60208210811415611aa857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a26469706673582212200f11667a9fa29c4dc807e2afaad0db4abef4cc3600dffdb6a370dfc01a37deb764736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000005aae9bbbd739216766de5c6d714c2bcb9e03e11f0000000000000000000000000000000000000000001f04ef12cb04cf158000000000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000000000000000000b4a656c6c7920546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054a454c4c59000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023d5760003560e01c806374601c3c1161013b578063adbf3776116100b8578063dccfe3101161007c578063dccfe310146104c6578063dd62ed3e146104d9578063e6594abd14610512578063f5b541a614610525578063fc4e3e0a1461053a57600080fd5b8063adbf377614610465578063b7928b1d14610478578063c395fcb31461048b578063d53913931461049e578063d547741f146104b357600080fd5b806395d89b41116100ff57806395d89b4114610427578063996fa3e11461042f578063a217fddf14610437578063a457c2d71461043f578063a9059cbb1461045257600080fd5b806374601c3c146103d357806378fc3cb3146103db57806379cc6790146103ee57806391d14854146104015780639478941c1461041457600080fd5b8063355274ea116101c957806347786d371161018d57806347786d371461036657806354f1e126146103795780635c975abb1461038c5780636595171c1461039757806370a08231146103aa57600080fd5b8063355274ea1461031157806336568abe1461031a578063395093511461032d57806340c10f191461034057806342966c681461035357600080fd5b806318160ddd1161021057806318160ddd146102a557806323b872dd146102b7578063248a9ca3146102ca5780632f2ff15d146102ed578063313ce5671461030257600080fd5b806301ffc9a71461024257806306fdde031461026a578063095ea7b31461027f578063099db01714610292575b600080fd5b610255610250366004611910565b61054d565b60405190151581526020015b60405180910390f35b610272610584565b60405161026191906119af565b61025561028d3660046118aa565b610616565b6102556102a0366004611820565b61062c565b6002545b604051908152602001610261565b6102556102c536600461186e565b610646565b6102a96102d83660046118d4565b60009081526006602052604090206001015490565b6103006102fb3660046118ed565b6106f5565b005b60405160128152602001610261565b6102a960085481565b6103006103283660046118ed565b610720565b61025561033b3660046118aa565b61079e565b61030061034e3660046118aa565b6107da565b6103006103613660046118d4565b6108ef565b6103006103743660046118d4565b6108fc565b610300610387366004611820565b6109e9565b60055460ff16610255565b6103006103a5366004611820565b610a3a565b6102a96103b8366004611820565b6001600160a01b031660009081526020819052604090205490565b6102a9610a7e565b6102556103e9366004611820565b610aac565b6103006103fc3660046118aa565b610aca565b61025561040f3660046118ed565b610b4b565b610300610422366004611820565b610b76565b610272610bc7565b610300610bd6565b6102a9600081565b61025561044d3660046118aa565b610c6a565b6102556104603660046118aa565b610d03565b610300610473366004611820565b610d10565b610300610486366004611820565b610d61565b610255610499366004611820565b610db2565b6102a9600080516020611b1183398151915281565b6103006104c13660046118ed565b610dbe565b6103006104d4366004611820565b610de4565b6102a96104e736600461183b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610300610520366004611820565b610e28565b6102a9600080516020611af183398151915281565b610255610548366004611820565b610e8c565b60006001600160e01b03198216637965db0b60e01b148061057e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461059390611a73565b80601f01602080910402602001604051908101604052809291908181526020018280546105bf90611a73565b801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b5050505050905090565b6000610623338484610ea6565b50600192915050565b600061057e600080516020611b1183398151915283610b4b565b6000610653848484610fca565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156106dd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106ea8533858403610ea6565b506001949350505050565b60008281526006602052604090206001015461071181336111a5565b61071b8383611209565b505050565b6001600160a01b03811633146107905760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106d4565b61079a828261128f565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106239185906107d59086906119e2565b610ea6565b6001600160a01b0382166108305760405162461bcd60e51b815260206004820152601e60248201527f4a454c4c593a206e6f206d696e7420746f207a65726f2061646472657373000060448201526064016106d4565b6108393361062c565b6108915760405162461bcd60e51b8152602060048201526024808201527f4a454c4c593a206d7573742068617665206d696e74657220726f6c6520746f206044820152631b5a5b9d60e21b60648201526084016106d4565b6008548161089e60025490565b6108a891906119e2565b11156108e55760405162461bcd60e51b815260206004820152600c60248201526b10d85c08195e18d95959195960a21b60448201526064016106d4565b61079a82826112f6565b6108f933826113e1565b50565b61090533610db2565b61095c5760405162461bcd60e51b815260206004820152602260248201527f4a454c4c592e7365744361703a2053656e646572206d7573742062652061646d60448201526134b760f11b60648201526084016106d4565b6002548110156109ae5760405162461bcd60e51b815260206004820181905260248201527f4a454c4c593a20436170206c657373207468616e20746f74616c537570706c7960448201526064016106d4565b60088190556040518181527f3c8eb7c49d332f4c1e4d92a27cda93c31cc9452f7a408e0c6109fcddbc9946ea9060200160405180910390a150565b610a01600080516020611b1183398151915282610dbe565b60405133906001600160a01b038316907f56692a161ffec953ddf9def93b958ea8d1ec95e21b80870c66be91a4374dc4e390600090a350565b610a456000826106f5565b60405133906001600160a01b038316907f2570ac42fd8b322dc453ada624dc2ed0e9bdd67f16f201a25bbd30468f2aa18790600090a350565b6000610a893361062c565b15610aa95760085415610aa957600254600854610aa69190611a19565b90505b90565b6000610aba60055460ff1690565b158061057e575061057e33610e8c565b6000610ad683336104e7565b905081811015610b345760405162461bcd60e51b8152602060048201526024808201527f4a454c4c593a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b60648201526084016106d4565b610b418333848403610ea6565b61071b83836113e1565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610b8e600080516020611af183398151915282610dbe565b60405133906001600160a01b038316907f70b25138b6fadeb9992d18b9653564271823e34b3e3257515d12a6d4b15fcddf90600090a350565b60606004805461059390611a73565b610bdf33610db2565b610c375760405162461bcd60e51b8152602060048201526024808201527f4a454c4c592e7365744a656c6c793a2053656e646572206d75737420626520616044820152633236b4b760e11b60648201526084016106d4565b610c3f61153b565b6040517ff8cae5c6689c0438a60eefc96cc182e609e583494ec7611e57ef82f651888f0c90600090a1565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610cec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106d4565b610cf93385858403610ea6565b5060019392505050565b6000610623338484610fca565b610d28600080516020611b11833981519152826106f5565b60405133906001600160a01b038316907f0be6ab9784c7401fafb73f7bc47bc67cc4ef8c47a60ad3cb66d1de0353a0784c90600090a350565b610d79600080516020611af1833981519152826106f5565b60405133906001600160a01b038316907f2d45ee102874989882745a26688d0b4fffee125a18df26536b12582c7fde4e1790600090a350565b600061057e8183610b4b565b600082815260066020526040902060010154610dda81336111a5565b61071b838361128f565b610def600082610dbe565b60405133906001600160a01b038316907f21ba1239795d4e22874e3dc55f0a9d7b65bfb23069d32965d7c23be9524ccf9590600090a350565b60075460ff1615610e715760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5cd959606a1b60448201526064016106d4565b610e7c6000826115c3565b506007805460ff19166001179055565b600061057e600080516020611af183398151915283610b4b565b6001600160a01b038316610f085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d4565b6001600160a01b038216610f695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661102e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d4565b6001600160a01b0382166110905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d4565b61109b8383836115cd565b6001600160a01b038316600090815260208190526040902054818110156111135760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106d4565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061114a9084906119e2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161119691815260200190565b60405180910390a35b50505050565b6111af8282610b4b565b61079a576111c7816001600160a01b03166014611661565b6111d2836020611661565b6040516020016111e392919061193a565b60408051601f198184030181529082905262461bcd60e51b82526106d4916004016119af565b6112138282610b4b565b61079a5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561124b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6112998282610b4b565b1561079a5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b03821661134c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106d4565b611358600083836115cd565b806002600082825461136a91906119e2565b90915550506001600160a01b038216600090815260208190526040812080548392906113979084906119e2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106d4565b61144d826000836115cd565b6001600160a01b038216600090815260208190526040902054818110156114c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106d4565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114f0908490611a19565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60055460ff166115845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106d4565b6005805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b61079a8282611209565b60055460ff161561071b576115e133610e8c565b61071b5760405162461bcd60e51b8152602060048201526044602482018190527f4a454c4c593a20746f6b656e732063616e6e6f74206265207472616e73666572908201527f72656420756e74696c207365744a656c6c7920686173206265656e20657865636064820152631d5d195960e21b608482015260a4016106d4565b606060006116708360026119fa565b61167b9060026119e2565b67ffffffffffffffff81111561169357611693611ada565b6040519080825280601f01601f1916602001820160405280156116bd576020820181803683370190505b509050600360fc1b816000815181106116d8576116d8611ac4565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061170757611707611ac4565b60200101906001600160f81b031916908160001a905350600061172b8460026119fa565b6117369060016119e2565b90505b60018111156117ae576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061176a5761176a611ac4565b1a60f81b82828151811061178057611780611ac4565b60200101906001600160f81b031916908160001a90535060049490941c936117a781611a5c565b9050611739565b5083156117fd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d4565b9392505050565b80356001600160a01b038116811461181b57600080fd5b919050565b60006020828403121561183257600080fd5b6117fd82611804565b6000806040838503121561184e57600080fd5b61185783611804565b915061186560208401611804565b90509250929050565b60008060006060848603121561188357600080fd5b61188c84611804565b925061189a60208501611804565b9150604084013590509250925092565b600080604083850312156118bd57600080fd5b6118c683611804565b946020939093013593505050565b6000602082840312156118e657600080fd5b5035919050565b6000806040838503121561190057600080fd5b8235915061186560208401611804565b60006020828403121561192257600080fd5b81356001600160e01b0319811681146117fd57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611972816017850160208801611a30565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516119a3816028840160208801611a30565b01602801949350505050565b60208152600082518060208401526119ce816040850160208701611a30565b601f01601f19169190910160400192915050565b600082198211156119f5576119f5611aae565b500190565b6000816000190483118215151615611a1457611a14611aae565b500290565b600082821015611a2b57611a2b611aae565b500390565b60005b83811015611a4b578181015183820152602001611a33565b8381111561119f5750506000910152565b600081611a6b57611a6b611aae565b506000190190565b600181811c90821680611a8757607f821691505b60208210811415611aa857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a26469706673582212200f11667a9fa29c4dc807e2afaad0db4abef4cc3600dffdb6a370dfc01a37deb764736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000005aae9bbbd739216766de5c6d714c2bcb9e03e11f0000000000000000000000000000000000000000001f04ef12cb04cf158000000000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000000000000000000b4a656c6c7920546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054a454c4c59000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Jelly Token
Arg [1] : _symbol (string): JELLY
Arg [2] : _vault (address): 0x5AAE9bBBd739216766de5c6D714C2bCb9e03E11F
Arg [3] : _initialSupply (uint256): 37500000000000000000000000
Arg [4] : _cap (uint256): 1000000000000000000000000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000005aae9bbbd739216766de5c6d714c2bcb9e03e11f
Arg [3] : 0000000000000000000000000000000000000000001f04ef12cb04cf15800000
Arg [4] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [6] : 4a656c6c7920546f6b656e000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 4a454c4c59000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
37828:3346:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15410:204;;;;;;:::i;:::-;;:::i;:::-;;;3324:14:1;;3317:22;3299:41;;3287:2;3272:18;15410:204:0;;;;;;;;22078:100;;;:::i;:::-;;;;;;;:::i;24245:169::-;;;;;;:::i;:::-;;:::i;36583:124::-;;;;;;:::i;:::-;;:::i;23198:108::-;23286:12;;23198:108;;;3497:25:1;;;3485:2;3470:18;23198:108:0;3452:76:1;24896:492:0;;;;;;:::i;:::-;;:::i;16821:123::-;;;;;;:::i;:::-;16887:7;16914:12;;;:6;:12;;;;;:22;;;;16821:123;17206:147;;;;;;:::i;:::-;;:::i;:::-;;23040:93;;;23123:2;12880:36:1;;12868:2;12853:18;23040:93:0;12835:87:1;37890:15:0;;;;;;18254:218;;;;;;:::i;:::-;;:::i;25797:215::-;;;;;;:::i;:::-;;:::i;39803:307::-;;;;;;:::i;:::-;;:::i;40191:83::-;;;;;;:::i;:::-;;:::i;38892:296::-;;;;;;:::i;:::-;;:::i;37301:162::-;;;;;;:::i;:::-;;:::i;10694:86::-;10765:7;;;;10694:86;;33624:163;;;;;;:::i;:::-;;:::i;23369:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23470:18:0;23443:7;23470:18;;;;;;;;;;;;23369:127;39505:221;;;:::i;39258:159::-;;;;;;:::i;:::-;;:::i;40406:360::-;;;;;;:::i;:::-;;:::i;15706:139::-;;;;;;:::i;:::-;;:::i;35645:168::-;;;;;;:::i;:::-;;:::i;22297:104::-;;;:::i;38610:207::-;;;:::i;13684:49::-;;13729:4;13684:49;;26515:413;;;;;;:::i;:::-;;:::i;23709:175::-;;;;;;:::i;:::-;;:::i;36963:158::-;;;;;;:::i;:::-;;:::i;35299:164::-;;;;;;:::i;:::-;;:::i;33235:131::-;;;;;;:::i;:::-;;:::i;35917:62::-;;-1:-1:-1;;;;;;;;;;;35917:62:0;;17598:149;;;;;;:::i;:::-;;:::i;33969:167::-;;;;;;:::i;:::-;;:::i;23947:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24063:18:0;;;24036:7;24063:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23947:151;32757:190;;;;;;:::i;:::-;;:::i;34235:66::-;;-1:-1:-1;;;;;;;;;;;34235:66:0;;34913:128;;;;;;:::i;:::-;;:::i;15410:204::-;15495:4;-1:-1:-1;;;;;;15519:47:0;;-1:-1:-1;;;15519:47:0;;:87;;-1:-1:-1;;;;;;;;;;9079:40:0;;;15570:36;15512:94;15410:204;-1:-1:-1;;15410:204:0:o;22078:100::-;22132:13;22165:5;22158:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22078:100;:::o;24245:169::-;24328:4;24345:39;2154:10;24368:7;24377:6;24345:8;:39::i;:::-;-1:-1:-1;24402:4:0;24245:169;;;;:::o;36583:124::-;36645:4;36669:30;-1:-1:-1;;;;;;;;;;;36690:8:0;36669:7;:30::i;24896:492::-;25036:4;25053:36;25063:6;25071:9;25082:6;25053:9;:36::i;:::-;-1:-1:-1;;;;;25129:19:0;;25102:24;25129:19;;;:11;:19;;;;;;;;2154:10;25129:33;;;;;;;;25181:26;;;;25173:79;;;;-1:-1:-1;;;25173:79:0;;8446:2:1;25173:79:0;;;8428:21:1;8485:2;8465:18;;;8458:30;8524:34;8504:18;;;8497:62;-1:-1:-1;;;8575:18:1;;;8568:38;8623:19;;25173:79:0;;;;;;;;;25288:57;25297:6;2154:10;25338:6;25319:16;:25;25288:8;:57::i;:::-;-1:-1:-1;25376:4:0;;24896:492;-1:-1:-1;;;;24896:492:0:o;17206:147::-;16887:7;16914:12;;;:6;:12;;;;;:22;;;15288:30;15299:4;2154:10;15288;:30::i;:::-;17320:25:::1;17331:4;17337:7;17320:10;:25::i;:::-;17206:147:::0;;;:::o;18254:218::-;-1:-1:-1;;;;;18350:23:0;;2154:10;18350:23;18342:83;;;;-1:-1:-1;;;18342:83:0;;11982:2:1;18342:83:0;;;11964:21:1;12021:2;12001:18;;;11994:30;12060:34;12040:18;;;12033:62;-1:-1:-1;;;12111:18:1;;;12104:45;12166:19;;18342:83:0;11954:237:1;18342:83:0;18438:26;18450:4;18456:7;18438:11;:26::i;:::-;18254:218;;:::o;25797:215::-;2154:10;25885:4;25934:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25934:34:0;;;;;;;;;;25885:4;;25902:80;;25925:7;;25934:47;;25971:10;;25934:47;:::i;:::-;25902:8;:80::i;39803:307::-;-1:-1:-1;;;;;39871:16:0;;39863:59;;;;-1:-1:-1;;;39863:59:0;;10066:2:1;39863:59:0;;;10048:21:1;10105:2;10085:18;;;10078:30;10144:32;10124:18;;;10117:60;10194:18;;39863:59:0;10038:180:1;39863:59:0;39941:27;2154:10;36583:124;:::i;39941:27::-;39933:76;;;;-1:-1:-1;;;39933:76:0;;10830:2:1;39933:76:0;;;10812:21:1;10869:2;10849:18;;;10842:30;10908:34;10888:18;;;10881:62;-1:-1:-1;;;10959:18:1;;;10952:34;11003:19;;39933:76:0;10802:226:1;39933:76:0;40054:3;;40044:6;40028:13;23286:12;;;23198:108;40028:13;:22;;;;:::i;:::-;:29;;40020:54;;;;-1:-1:-1;;;40020:54:0;;11235:2:1;40020:54:0;;;11217:21:1;11274:2;11254:18;;;11247:30;-1:-1:-1;;;11293:18:1;;;11286:42;11345:18;;40020:54:0;11207:162:1;40020:54:0;40085:17;40091:2;40095:6;40085:5;:17::i;40191:83::-;40239:27;2154:10;40259:6;40239:5;:27::i;:::-;40191:83;:::o;38892:296::-;38962:26;2154:10;33235:131;:::i;38962:26::-;38940:110;;;;-1:-1:-1;;;38940:110:0;;8855:2:1;38940:110:0;;;8837:21:1;8894:2;8874:18;;;8867:30;8933:34;8913:18;;;8906:62;-1:-1:-1;;;8984:18:1;;;8977:32;9026:19;;38940:110:0;8827:224:1;38940:110:0;23286:12;;39070:4;:21;;39061:67;;;;-1:-1:-1;;;39061:67:0;;7273:2:1;39061:67:0;;;7255:21:1;;;7292:18;;;7285:30;7351:34;7331:18;;;7324:62;7403:18;;39061:67:0;7245:182:1;39061:67:0;39139:3;:10;;;39165:15;;3497:25:1;;;39165:15:0;;3485:2:1;3470:18;39165:15:0;;;;;;;38892:296;:::o;37301:162::-;37365:33;-1:-1:-1;;;;;;;;;;;37389:8:0;37365:10;:33::i;:::-;37414:41;;2154:10;;-1:-1:-1;;;;;37414:41:0;;;;;;;;37301:162;:::o;33624:163::-;33684:39;13729:4;33714:8;33684:9;:39::i;:::-;33739:40;;2154:10;;-1:-1:-1;;;;;33739:40:0;;;;;;;;33624:163;:::o;39505:221::-;39555:14;39586:27;2154:10;36583:124;:::i;39586:27::-;39582:136;;;39634:3;;:7;39630:76;;23286:12;;39671:3;;:19;;;;:::i;:::-;39662:28;;39630:76;39505:221;:::o;39258:159::-;39333:12;39367:8;10765:7;;;;;10694:86;39367:8;39366:9;:42;;;-1:-1:-1;39379:29:0;2154:10;34913:128;:::i;40406:360::-;40475:24;40502:32;40512:7;2154:10;23947:151;:::i;40502:32::-;40475:59;;40573:6;40553:16;:26;;40545:75;;;;-1:-1:-1;;;40545:75:0;;6391:2:1;40545:75:0;;;6373:21:1;6430:2;6410:18;;;6403:30;6469:34;6449:18;;;6442:62;-1:-1:-1;;;6520:18:1;;;6513:34;6564:19;;40545:75:0;6363:226:1;40545:75:0;40656:58;40665:7;2154:10;40707:6;40688:16;:25;40656:8;:58::i;:::-;40736:22;40742:7;40751:6;40736:5;:22::i;15706:139::-;15784:4;15808:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;15808:29:0;;;;;;;;;;;;;;;15706:139::o;35645:168::-;35711:35;-1:-1:-1;;;;;;;;;;;35737:8:0;35711:10;:35::i;:::-;35762:43;;2154:10;;-1:-1:-1;;;;;35762:43:0;;;;;;;;35645:168;:::o;22297:104::-;22353:13;22386:7;22379:14;;;;;:::i;38610:207::-;38672:26;2154:10;33235:131;:::i;38672:26::-;38650:112;;;;-1:-1:-1;;;38650:112:0;;8041:2:1;38650:112:0;;;8023:21:1;8080:2;8060:18;;;8053:30;8119:34;8099:18;;;8092:62;-1:-1:-1;;;8170:18:1;;;8163:34;8214:19;;38650:112:0;8013:226:1;38650:112:0;38773:10;:8;:10::i;:::-;38799;;;;;;;38610:207::o;26515:413::-;2154:10;26608:4;26652:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26652:34:0;;;;;;;;;;26705:35;;;;26697:85;;;;-1:-1:-1;;;26697:85:0;;11576:2:1;26697:85:0;;;11558:21:1;11615:2;11595:18;;;11588:30;11654:34;11634:18;;;11627:62;-1:-1:-1;;;11705:18:1;;;11698:35;11750:19;;26697:85:0;11548:227:1;26697:85:0;26818:67;2154:10;26841:7;26869:15;26850:16;:34;26818:8;:67::i;:::-;-1:-1:-1;26916:4:0;;26515:413;-1:-1:-1;;;26515:413:0:o;23709:175::-;23795:4;23812:42;2154:10;23836:9;23847:6;23812:9;:42::i;36963:158::-;37024:32;-1:-1:-1;;;;;;;;;;;37047:8:0;37024:9;:32::i;:::-;37072:41;;2154:10;;-1:-1:-1;;;;;37072:41:0;;;;;;;;36963:158;:::o;35299:164::-;35362:34;-1:-1:-1;;;;;;;;;;;35387:8:0;35362:9;:34::i;:::-;35412:43;;2154:10;;-1:-1:-1;;;;;35412:43:0;;;;;;;;35299:164;:::o;33235:131::-;33297:4;33321:37;33297:4;33349:8;33321:7;:37::i;17598:149::-;16887:7;16914:12;;;:6;:12;;;;;:22;;;15288:30;15299:4;2154:10;15288;:30::i;:::-;17713:26:::1;17725:4;17731:7;17713:11;:26::i;33969:167::-:0;34032:40;13729:4;34063:8;34032:10;:40::i;:::-;34088;;2154:10;;-1:-1:-1;;;;;34088:40:0;;;;;;;;33969:167;:::o;32757:190::-;32828:10;;;;32827:11;32819:43;;;;-1:-1:-1;;;32819:43:0;;4123:2:1;32819:43:0;;;4105:21:1;4162:2;4142:18;;;4135:30;-1:-1:-1;;;4181:18:1;;;4174:49;4240:18;;32819:43:0;4095:169:1;32819:43:0;32873:38;13729:4;32904:6;32873:10;:38::i;:::-;-1:-1:-1;32922:10:0;:17;;-1:-1:-1;;32922:17:0;32935:4;32922:17;;;32757:190::o;34913:128::-;34977:4;35001:32;-1:-1:-1;;;;;;;;;;;35024:8:0;35001:7;:32::i;30199:380::-;-1:-1:-1;;;;;30335:19:0;;30327:68;;;;-1:-1:-1;;;30327:68:0;;10425:2:1;30327:68:0;;;10407:21:1;10464:2;10444:18;;;10437:30;10503:34;10483:18;;;10476:62;-1:-1:-1;;;10554:18:1;;;10547:34;10598:19;;30327:68:0;10397:226:1;30327:68:0;-1:-1:-1;;;;;30414:21:0;;30406:68;;;;-1:-1:-1;;;30406:68:0;;5988:2:1;30406:68:0;;;5970:21:1;6027:2;6007:18;;;6000:30;6066:34;6046:18;;;6039:62;-1:-1:-1;;;6117:18:1;;;6110:32;6159:19;;30406:68:0;5960:224:1;30406:68:0;-1:-1:-1;;;;;30487:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30539:32;;3497:25:1;;;30539:32:0;;3470:18:1;30539:32:0;;;;;;;30199:380;;;:::o;27418:733::-;-1:-1:-1;;;;;27558:20:0;;27550:70;;;;-1:-1:-1;;;27550:70:0;;9660:2:1;27550:70:0;;;9642:21:1;9699:2;9679:18;;;9672:30;9738:34;9718:18;;;9711:62;-1:-1:-1;;;9789:18:1;;;9782:35;9834:19;;27550:70:0;9632:227:1;27550:70:0;-1:-1:-1;;;;;27639:23:0;;27631:71;;;;-1:-1:-1;;;27631:71:0;;4832:2:1;27631:71:0;;;4814:21:1;4871:2;4851:18;;;4844:30;4910:34;4890:18;;;4883:62;-1:-1:-1;;;4961:18:1;;;4954:33;5004:19;;27631:71:0;4804:225:1;27631:71:0;27715:47;27736:6;27744:9;27755:6;27715:20;:47::i;:::-;-1:-1:-1;;;;;27799:17:0;;27775:21;27799:17;;;;;;;;;;;27835:23;;;;27827:74;;;;-1:-1:-1;;;27827:74:0;;7634:2:1;27827:74:0;;;7616:21:1;7673:2;7653:18;;;7646:30;7712:34;7692:18;;;7685:62;-1:-1:-1;;;7763:18:1;;;7756:36;7809:19;;27827:74:0;7606:228:1;27827:74:0;-1:-1:-1;;;;;27937:17:0;;;:9;:17;;;;;;;;;;;27957:22;;;27937:42;;28001:20;;;;;;;;:30;;27973:6;;27937:9;28001:30;;27973:6;;28001:30;:::i;:::-;;;;;;;;28066:9;-1:-1:-1;;;;;28049:35:0;28058:6;-1:-1:-1;;;;;28049:35:0;;28077:6;28049:35;;;;3497:25:1;;3485:2;3470:18;;3452:76;28049:35:0;;;;;;;;28097:46;27539:612;27418:733;;;:::o;16135:497::-;16216:22;16224:4;16230:7;16216;:22::i;:::-;16211:414;;16404:41;16432:7;-1:-1:-1;;;;;16404:41:0;16442:2;16404:19;:41::i;:::-;16518:38;16546:4;16553:2;16518:19;:38::i;:::-;16309:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;16309:270:0;;;;;;;;;;-1:-1:-1;;;16255:358:0;;;;;;;:::i;19558:229::-;19633:22;19641:4;19647:7;19633;:22::i;:::-;19628:152;;19672:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;19672:29:0;;;;;;;;;:36;;-1:-1:-1;;19672:36:0;19704:4;19672:36;;;19755:12;2154:10;;2074:98;19755:12;-1:-1:-1;;;;;19728:40:0;19746:7;-1:-1:-1;;;;;19728:40:0;19740:4;19728:40;;;;;;;;;;19558:229;;:::o;19795:230::-;19870:22;19878:4;19884:7;19870;:22::i;:::-;19866:152;;;19941:5;19909:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;19909:29:0;;;;;;;;;;:37;;-1:-1:-1;;19909:37:0;;;19966:40;2154:10;;19909:12;;19966:40;;19941:5;19966:40;19795:230;;:::o;28438:399::-;-1:-1:-1;;;;;28522:21:0;;28514:65;;;;-1:-1:-1;;;28514:65:0;;12398:2:1;28514:65:0;;;12380:21:1;12437:2;12417:18;;;12410:30;12476:33;12456:18;;;12449:61;12527:18;;28514:65:0;12370:181:1;28514:65:0;28592:49;28621:1;28625:7;28634:6;28592:20;:49::i;:::-;28670:6;28654:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;28687:18:0;;:9;:18;;;;;;;;;;:28;;28709:6;;28687:9;:28;;28709:6;;28687:28;:::i;:::-;;;;-1:-1:-1;;28731:37:0;;3497:25:1;;;-1:-1:-1;;;;;28731:37:0;;;28748:1;;28731:37;;3485:2:1;3470:18;28731:37:0;;;;;;;18254:218;;:::o;29170:591::-;-1:-1:-1;;;;;29254:21:0;;29246:67;;;;-1:-1:-1;;;29246:67:0;;9258:2:1;29246:67:0;;;9240:21:1;9297:2;9277:18;;;9270:30;9336:34;9316:18;;;9309:62;-1:-1:-1;;;9387:18:1;;;9380:31;9428:19;;29246:67:0;9230:223:1;29246:67:0;29326:49;29347:7;29364:1;29368:6;29326:20;:49::i;:::-;-1:-1:-1;;;;;29413:18:0;;29388:22;29413:18;;;;;;;;;;;29450:24;;;;29442:71;;;;-1:-1:-1;;;29442:71:0;;5585:2:1;29442:71:0;;;5567:21:1;5624:2;5604:18;;;5597:30;5663:34;5643:18;;;5636:62;-1:-1:-1;;;5714:18:1;;;5707:32;5756:19;;29442:71:0;5557:224:1;29442:71:0;-1:-1:-1;;;;;29549:18:0;;:9;:18;;;;;;;;;;29570:23;;;29549:44;;29615:12;:22;;29587:6;;29549:9;29615:22;;29587:6;;29615:22;:::i;:::-;;;;-1:-1:-1;;29655:37:0;;3497:25:1;;;29681:1:0;;-1:-1:-1;;;;;29655:37:0;;;;;3485:2:1;3470:18;29655:37:0;;;;;;;17206:147;;;:::o;11753:120::-;10765:7;;;;11289:41;;;;-1:-1:-1;;;11289:41:0;;5236:2:1;11289:41:0;;;5218:21:1;5275:2;5255:18;;;5248:30;-1:-1:-1;;;5294:18:1;;;5287:50;5354:18;;11289:41:0;5208:170:1;11289:41:0;11812:7:::1;:15:::0;;-1:-1:-1;;11812:15:0::1;::::0;;11843:22:::1;::::0;;2154:10;3097:51:1;;11843:22:0;;::::1;::::0;;;;3085:2:1;11843:22:0;;::::1;11753:120::o:0;19055:112::-;19134:25;19145:4;19151:7;19134:10;:25::i;40878:293::-;10765:7;;;;41013:151;;;41050:29;2154:10;34913:128;:::i;41050:29::-;41042:110;;;;-1:-1:-1;;;41042:110:0;;6796:2:1;41042:110:0;;;6778:21:1;6835:2;6815:18;;;6808:30;;;6874:34;6854:18;;;6847:62;6945:34;6925:18;;;6918:62;-1:-1:-1;;;6996:19:1;;;6989:35;7041:19;;41042:110:0;6768:298:1;7812:451:0;7887:13;7913:19;7945:10;7949:6;7945:1;:10;:::i;:::-;:14;;7958:1;7945:14;:::i;:::-;7935:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7935:25:0;;7913:47;;-1:-1:-1;;;7971:6:0;7978:1;7971:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;7971:15:0;;;;;;;;;-1:-1:-1;;;7997:6:0;8004:1;7997:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;7997:15:0;;;;;;;;-1:-1:-1;8028:9:0;8040:10;8044:6;8040:1;:10;:::i;:::-;:14;;8053:1;8040:14;:::i;:::-;8028:26;;8023:135;8060:1;8056;:5;8023:135;;;-1:-1:-1;;;8108:5:0;8116:3;8108:11;8095:25;;;;;;;:::i;:::-;;;;8083:6;8090:1;8083:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;8083:37:0;;;;;;;;-1:-1:-1;8145:1:0;8135:11;;;;;8063:3;;;:::i;:::-;;;8023:135;;;-1:-1:-1;8176:10:0;;8168:55;;;;-1:-1:-1;;;8168:55:0;;4471:2:1;8168:55:0;;;4453:21:1;;;4490:18;;;4483:30;4549:34;4529:18;;;4522:62;4601:18;;8168:55:0;4443:182:1;8168:55:0;8248:6;7812:451;-1:-1:-1;;;7812:451:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;320:1;317;310:12;272:2;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:2;;;528:1;525;518:12;480:2;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;470:173;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;752:224;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1126:1;1123;1116:12;1078:2;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;1068:167:1:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:2;;;1368:1;1365;1358:12;1320:2;-1:-1:-1;1391:23:1;;1310:110;-1:-1:-1;1310:110:1:o;1425:254::-;1493:6;1501;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1570:1;1567;1560:12;1522:2;1606:9;1593:23;1583:33;;1635:38;1669:2;1658:9;1654:18;1635:38;:::i;1684:286::-;1742:6;1795:2;1783:9;1774:7;1770:23;1766:32;1763:2;;;1811:1;1808;1801:12;1763:2;1837:23;;-1:-1:-1;;;;;;1889:32:1;;1879:43;;1869:2;;1936:1;1933;1926:12;2160:786;2571:25;2566:3;2559:38;2541:3;2626:6;2620:13;2642:62;2697:6;2692:2;2687:3;2683:12;2676:4;2668:6;2664:17;2642:62;:::i;:::-;-1:-1:-1;;;2763:2:1;2723:16;;;2755:11;;;2748:40;2813:13;;2835:63;2813:13;2884:2;2876:11;;2869:4;2857:17;;2835:63;:::i;:::-;2918:17;2937:2;2914:26;;2549:397;-1:-1:-1;;;;2549:397:1:o;3533:383::-;3682:2;3671:9;3664:21;3645:4;3714:6;3708:13;3757:6;3752:2;3741:9;3737:18;3730:34;3773:66;3832:6;3827:2;3816:9;3812:18;3807:2;3799:6;3795:15;3773:66;:::i;:::-;3900:2;3879:15;-1:-1:-1;;3875:29:1;3860:45;;;;3907:2;3856:54;;3654:262;-1:-1:-1;;3654:262:1:o;12927:128::-;12967:3;12998:1;12994:6;12991:1;12988:13;12985:2;;;13004:18;;:::i;:::-;-1:-1:-1;13040:9:1;;12975:80::o;13060:168::-;13100:7;13166:1;13162;13158:6;13154:14;13151:1;13148:21;13143:1;13136:9;13129:17;13125:45;13122:2;;;13173:18;;:::i;:::-;-1:-1:-1;13213:9:1;;13112:116::o;13233:125::-;13273:4;13301:1;13298;13295:8;13292:2;;;13306:18;;:::i;:::-;-1:-1:-1;13343:9:1;;13282:76::o;13363:258::-;13435:1;13445:113;13459:6;13456:1;13453:13;13445:113;;;13535:11;;;13529:18;13516:11;;;13509:39;13481:2;13474:10;13445:113;;;13576:6;13573:1;13570:13;13567:2;;;-1:-1:-1;;13611:1:1;13593:16;;13586:27;13416:205::o;13626:136::-;13665:3;13693:5;13683:2;;13702:18;;:::i;:::-;-1:-1:-1;;;13738:18:1;;13673:89::o;13767:380::-;13846:1;13842:12;;;;13889;;;13910:2;;13964:4;13956:6;13952:17;13942:27;;13910:2;14017;14009:6;14006:14;13986:18;13983:38;13980:2;;;14063:10;14058:3;14054:20;14051:1;14044:31;14098:4;14095:1;14088:15;14126:4;14123:1;14116:15;13980:2;;13822:325;;;:::o;14152:127::-;14213:10;14208:3;14204:20;14201:1;14194:31;14244:4;14241:1;14234:15;14268:4;14265:1;14258:15;14284:127;14345:10;14340:3;14336:20;14333:1;14326:31;14376:4;14373:1;14366:15;14400:4;14397:1;14390:15;14416:127;14477:10;14472:3;14468:20;14465:1;14458:31;14508:4;14505:1;14498:15;14532:4;14529:1;14522:15
Swarm Source
ipfs://0f11667a9fa29c4dc807e2afaad0db4abef4cc3600dffdb6a370dfc01a37deb7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.