ETH Price: $2,880.58 (-5.59%)
Gas: 2 Gwei

Token

Amorphic Token (AMRC)
 

Overview

Max Total Supply

200,000,000 AMRC

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
xan.eth
Balance
10,531,758.540405673957190581 AMRC

Value
$0.00
0xF80593EebE46DF21217c5cf6bF470e81e6D9543a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AmorphicToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-04
*/

pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.20;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys a `value` amount of tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 value) public virtual {
        _burn(_msgSender(), value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, deducting from
     * the caller's allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `value`.
     */
    function burnFrom(address account, uint256 value) public virtual {
        _spendAllowance(account, _msgSender(), value);
        _burn(account, value);
    }
}

// File: flatten.sol



pragma solidity ^0.8.20;




contract AmorphicToken is ERC20, ERC20Burnable, Ownable {
    uint256 private _cap;
    uint256 private _initialSupply = 200_000_000 * 10 ** decimals();
    uint256 public inflationRate = 2;
    uint256 public constant MAX_INFLATION_RATE = 5;

    mapping(address => uint256) private _stakes;
    uint256 private _totalStaked;

    constructor(address initialOwner) 
        ERC20("Amorphic Token", "AMRC")
        Ownable(initialOwner)
    {
        _cap = _initialSupply;
        _mint(initialOwner, _initialSupply);
    }

    function mint(address to, uint256 amount) public onlyOwner {
        require(totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded");
        _mint(to, amount);
    }

    function cap() public view returns (uint256) {
        return _cap;
    }

    function setCap(uint256 newCap) external onlyOwner {
        require(newCap >= totalSupply(), "New cap is below current total supply");
        _cap = newCap;
    }

    function mintInflation() external onlyOwner {
        uint256 inflationAmount = (totalSupply() * inflationRate) / 100;
        require(totalSupply() + inflationAmount <= cap(), "ERC20Capped: cap exceeded");
        _mint(owner(), inflationAmount);
    }

    function stake(uint256 amount) external {
        require(amount > 0, "Amount must be greater than 0");
        transfer(address(this), amount);
        _stakes[msg.sender] += amount;
        _totalStaked += amount;
    }

    function withdrawStake(uint256 amount) external {
        require(amount > 0, "Amount must be greater than 0");
        require(_stakes[msg.sender] >= amount, "Insufficient staked balance");
        _stakes[msg.sender] -= amount;
        _totalStaked -= amount;
        transfer(msg.sender, amount);
    }

    function stakedBalance(address account) external view returns (uint256) {
        return _stakes[account];
    }

    function totalStaked() external view returns (uint256) {
        return _totalStaked;
    }


    struct Proposal {
        uint256 newInflationRate;
        uint256 voteCount;
        bool executed;
        uint256 creationTime;
        mapping(address => bool) votes;
    }

    Proposal[] public proposals;
    uint256 public constant MIN_PROPOSAL_DURATION = 3 days;

    event ProposalCreated(uint256 proposalId, uint256 newInflationRate);
    event Voted(uint256 proposalId, address voter);
    event ProposalExecuted(uint256 proposalId, uint256 newInflationRate);

    function createProposal(uint256 newInflationRate) external {
        require(newInflationRate <= MAX_INFLATION_RATE, "Inflation rate exceeds maximum");

        Proposal storage newProposal = proposals.push();
        newProposal.newInflationRate = newInflationRate;
        newProposal.creationTime = block.timestamp;
        emit ProposalCreated(proposals.length - 1, newInflationRate);
    }

    function vote(uint256 proposalId) external {
        require(proposalId < proposals.length, "Invalid proposal ID");
        Proposal storage proposal = proposals[proposalId];
        require(!proposal.votes[msg.sender], "Already voted");

        proposal.votes[msg.sender] = true;
        proposal.voteCount += balanceOf(msg.sender);
        emit Voted(proposalId, msg.sender);
    }

    function executeProposal(uint256 proposalId) external onlyOwner {
        require(proposalId < proposals.length, "Invalid proposal ID");
        Proposal storage proposal = proposals[proposalId];
        require(!proposal.executed, "Proposal already executed");
        require(block.timestamp >= proposal.creationTime + MIN_PROPOSAL_DURATION, "Voting period not ended");

        uint256 totalVotes = totalSupply();
        require(proposal.voteCount > totalVotes / 2, "Not enough votes");

        proposal.executed = true;
        inflationRate = proposal.newInflationRate;
        emit ProposalExecuted(proposalId, proposal.newInflationRate);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newInflationRate","type":"uint256"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newInflationRate","type":"uint256"}],"name":"ProposalExecuted","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":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"Voted","type":"event"},{"inputs":[],"name":"MAX_INFLATION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_PROPOSAL_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInflationRate","type":"uint256"}],"name":"createProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"executeProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inflationRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"newInflationRate","type":"uint256"},{"internalType":"uint256","name":"voteCount","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"creationTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCap","type":"uint256"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405262000014620001a960201b60201c565b600a620000229190620006b4565b630bebc20062000033919062000704565b600755600260085534801562000047575f80fd5b5060405162002eff38038062002eff83398181016040528101906200006d9190620007b3565b806040518060400160405280600e81526020017f416d6f727068696320546f6b656e0000000000000000000000000000000000008152506040518060400160405280600481526020017f414d5243000000000000000000000000000000000000000000000000000000008152508160039081620000eb919062000a3e565b508060049081620000fd919062000a3e565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000173575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200016a919062000b33565b60405180910390fd5b6200018481620001b160201b60201c565b50600754600681905550620001a2816007546200027460201b60201c565b5062000bef565b5f6012905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002e7575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002de919062000b33565b60405180910390fd5b620002fa5f8383620002fe60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000352578060025f82825462000345919062000b4e565b9250508190555062000423565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620003de578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003d59392919062000b99565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200046c578060025f8282540392505081905550620004b6565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000515919062000bd4565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620005ac5780860481111562000584576200058362000522565b5b6001851615620005945780820291505b8081029050620005a4856200054f565b945062000564565b94509492505050565b5f82620005c6576001905062000698565b81620005d5575f905062000698565b8160018114620005ee5760028114620005f9576200062f565b600191505062000698565b60ff8411156200060e576200060d62000522565b5b8360020a91508482111562000628576200062762000522565b5b5062000698565b5060208310610133831016604e8410600b8410161715620006695782820a90508381111562000663576200066262000522565b5b62000698565b6200067884848460016200055b565b9250905081840481111562000692576200069162000522565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620006c0826200069f565b9150620006cd83620006a8565b9250620006fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005b5565b905092915050565b5f62000710826200069f565b91506200071d836200069f565b92508282026200072d816200069f565b9150828204841483151762000747576200074662000522565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200077d8262000752565b9050919050565b6200078f8162000771565b81146200079a575f80fd5b50565b5f81519050620007ad8162000784565b92915050565b5f60208284031215620007cb57620007ca6200074e565b5b5f620007da848285016200079d565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200085f57607f821691505b6020821081036200087557620008746200081a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200089c565b620008e586836200089c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000926620009206200091a846200069f565b620008fd565b6200069f565b9050919050565b5f819050919050565b620009418362000906565b6200095962000950826200092d565b848454620008a8565b825550505050565b5f90565b6200096f62000961565b6200097c81848462000936565b505050565b5b81811015620009a357620009975f8262000965565b60018101905062000982565b5050565b601f821115620009f257620009bc816200087b565b620009c7846200088d565b81016020851015620009d7578190505b620009ef620009e6856200088d565b83018262000981565b50505b505050565b5f82821c905092915050565b5f62000a145f1984600802620009f7565b1980831691505092915050565b5f62000a2e838362000a03565b9150826002028217905092915050565b62000a4982620007e3565b67ffffffffffffffff81111562000a655762000a64620007ed565b5b62000a71825462000847565b62000a7e828285620009a7565b5f60209050601f83116001811462000ab4575f841562000a9f578287015190505b62000aab858262000a21565b86555062000b1a565b601f19841662000ac4866200087b565b5f5b8281101562000aed5784890151825560018201915060208501945060208101905062000ac6565b8683101562000b0d578489015162000b09601f89168262000a03565b8355505b6001600288020188555050505b505050505050565b62000b2d8162000771565b82525050565b5f60208201905062000b485f83018462000b22565b92915050565b5f62000b5a826200069f565b915062000b67836200069f565b925082820190508082111562000b825762000b8162000522565b5b92915050565b62000b93816200069f565b82525050565b5f60608201905062000bae5f83018662000b22565b62000bbd602083018562000b88565b62000bcc604083018462000b88565b949350505050565b5f60208201905062000be95f83018462000b88565b92915050565b6123028062000bfd5f395ff3fe608060405234801561000f575f80fd5b50600436106101cd575f3560e01c806347786d37116101025780638da5cb5b116100a0578063a9059cbb1161006f578063a9059cbb146104f6578063c551a2f914610526578063dd62ed3e14610530578063f2fde38b14610560576101cd565b80638da5cb5b14610480578063944ee22d1461049e57806395d89b41146104bc578063a694fc3a146104da576101cd565b806370a08231116100dc57806370a082311461040c578063715018a61461043c57806379cc679014610446578063817b1cd214610462576101cd565b806347786d37146103a45780635a43dc00146103c057806360217267146103dc576101cd565b806325d5971f1161016f57806331f9e35b1161014957806331f9e35b14610330578063355274ea1461034e57806340c10f191461036c57806342966c6814610388576101cd565b806325d5971f146102d85780632ed1f923146102f4578063313ce56714610312576101cd565b8063095ea7b3116101ab578063095ea7b31461023e5780630d61b5191461026e57806318160ddd1461028a57806323b872dd146102a8576101cd565b80630121b93f146101d1578063013cf08b146101ed57806306fdde0314610220575b5f80fd5b6101eb60048036038101906101e69190611938565b61057c565b005b61020760048036038101906102029190611938565b610728565b604051610217949392919061198c565b60405180910390f35b61022861076f565b6040516102359190611a59565b60405180910390f35b61025860048036038101906102539190611ad3565b6107ff565b6040516102659190611b11565b60405180910390f35b61028860048036038101906102839190611938565b610821565b005b6102926109fd565b60405161029f9190611b2a565b60405180910390f35b6102c260048036038101906102bd9190611b43565b610a06565b6040516102cf9190611b11565b60405180910390f35b6102f260048036038101906102ed9190611938565b610a34565b005b6102fc610b6f565b6040516103099190611b2a565b60405180910390f35b61031a610b74565b6040516103279190611bae565b60405180910390f35b610338610b7c565b6040516103459190611b2a565b60405180910390f35b610356610b82565b6040516103639190611b2a565b60405180910390f35b61038660048036038101906103819190611ad3565b610b8b565b005b6103a2600480360381019061039d9190611938565b610bfd565b005b6103be60048036038101906103b99190611938565b610c11565b005b6103da60048036038101906103d59190611938565b610c6d565b005b6103f660048036038101906103f19190611bc7565b610d31565b6040516104039190611b2a565b60405180910390f35b61042660048036038101906104219190611bc7565b610d77565b6040516104339190611b2a565b60405180910390f35b610444610dbc565b005b610460600480360381019061045b9190611ad3565b610dcf565b005b61046a610def565b6040516104779190611b2a565b60405180910390f35b610488610df8565b6040516104959190611c01565b60405180910390f35b6104a6610e20565b6040516104b39190611b2a565b60405180910390f35b6104c4610e27565b6040516104d19190611a59565b60405180910390f35b6104f460048036038101906104ef9190611938565b610eb7565b005b610510600480360381019061050b9190611ad3565b610f72565b60405161051d9190611b11565b60405180910390f35b61052e610f94565b005b61054a60048036038101906105459190611c1a565b611030565b6040516105579190611b2a565b60405180910390f35b61057a60048036038101906105759190611bc7565b6110b2565b005b600b8054905081106105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90611ca2565b60405180910390fd5b5f600b82815481106105d8576105d7611cc0565b5b905f5260205f2090600502019050806004015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066990611d37565b60405180910390fd5b6001816004015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506106d233610d77565b816001015f8282546106e49190611d82565b925050819055507f030b0f8dcd86a031eddb071f91882edeac8173663ba775713b677b42b51be44b823360405161071c929190611db5565b60405180910390a15050565b600b8181548110610737575f80fd5b905f5260205f2090600502015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060030154905084565b60606003805461077e90611e09565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa90611e09565b80156107f55780601f106107cc576101008083540402835291602001916107f5565b820191905f5260205f20905b8154815290600101906020018083116107d857829003601f168201915b5050505050905090565b5f80610809611136565b905061081681858561113d565b600191505092915050565b61082961114f565b600b805490508110610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086790611ca2565b60405180910390fd5b5f600b828154811061088557610884611cc0565b5b905f5260205f2090600502019050806002015f9054906101000a900460ff16156108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db90611e83565b60405180910390fd5b6203f48081600301546108f79190611d82565b421015610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090611eeb565b60405180910390fd5b5f6109426109fd565b90506002816109519190611f36565b826001015411610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90611fb0565b60405180910390fd5b6001826002015f6101000a81548160ff021916908315150217905550815f01546008819055507ff758fc91e01b00ea6b4a6138756f7f28e021f9bf21db6dbf8c36c88eb737257a83835f01546040516109f0929190611fce565b60405180910390a1505050565b5f600254905090565b5f80610a10611136565b9050610a1d8582856111d6565b610a28858585611268565b60019150509392505050565b5f8111610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d9061203f565b60405180910390fd5b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed906120a7565b60405180910390fd5b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b4291906120c5565b9250508190555080600a5f828254610b5a91906120c5565b92505081905550610b6b3382610f72565b5050565b600581565b5f6012905090565b60085481565b5f600654905090565b610b9361114f565b610b9b610b82565b81610ba46109fd565b610bae9190611d82565b1115610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690612142565b60405180910390fd5b610bf98282611358565b5050565b610c0e610c08611136565b826113d7565b50565b610c1961114f565b610c216109fd565b811015610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a906121d0565b60405180910390fd5b8060068190555050565b6005811115610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890612238565b60405180910390fd5b5f600b60018160018154018082558091505003905f5260205f209060050201905081815f01819055504281600301819055507ffcf3b1aa65a464cef2889608f99e8b8c0f680a4be6c2acb9d961c536a5a9294b6001600b80549050610d1691906120c5565b83604051610d25929190611fce565b60405180910390a15050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610dc461114f565b610dcd5f611456565b565b610de182610ddb611136565b836111d6565b610deb82826113d7565b5050565b5f600a54905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6203f48081565b606060048054610e3690611e09565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6290611e09565b8015610ead5780601f10610e8457610100808354040283529160200191610ead565b820191905f5260205f20905b815481529060010190602001808311610e9057829003601f168201915b5050505050905090565b5f8111610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061203f565b60405180910390fd5b610f033082610f72565b508060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610f509190611d82565b9250508190555080600a5f828254610f689190611d82565b9250508190555050565b5f80610f7c611136565b9050610f89818585611268565b600191505092915050565b610f9c61114f565b5f6064600854610faa6109fd565b610fb49190612256565b610fbe9190611f36565b9050610fc8610b82565b81610fd16109fd565b610fdb9190611d82565b111561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390612142565b60405180910390fd5b61102d611027610df8565b82611358565b50565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6110ba61114f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361112a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016111219190611c01565b60405180910390fd5b61113381611456565b50565b5f33905090565b61114a8383836001611519565b505050565b611157611136565b73ffffffffffffffffffffffffffffffffffffffff16611175610df8565b73ffffffffffffffffffffffffffffffffffffffff16146111d457611198611136565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111cb9190611c01565b60405180910390fd5b565b5f6111e18484611030565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112625781811015611253578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161124a93929190612297565b60405180910390fd5b61126184848484035f611519565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d8575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016112cf9190611c01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611348575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161133f9190611c01565b60405180910390fd5b6113538383836116e8565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c8575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113bf9190611c01565b60405180910390fd5b6113d35f83836116e8565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611447575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161143e9190611c01565b60405180910390fd5b611452825f836116e8565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611589575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016115809190611c01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115f9575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016115f09190611c01565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156116e2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516116d99190611b2a565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611738578060025f82825461172c9190611d82565b92505081905550611806565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156117c1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016117b893929190612297565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361184d578060025f8282540392505081905550611897565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118f49190611b2a565b60405180910390a3505050565b5f80fd5b5f819050919050565b61191781611905565b8114611921575f80fd5b50565b5f813590506119328161190e565b92915050565b5f6020828403121561194d5761194c611901565b5b5f61195a84828501611924565b91505092915050565b61196c81611905565b82525050565b5f8115159050919050565b61198681611972565b82525050565b5f60808201905061199f5f830187611963565b6119ac6020830186611963565b6119b9604083018561197d565b6119c66060830184611963565b95945050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a065780820151818401526020810190506119eb565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a2b826119cf565b611a3581856119d9565b9350611a458185602086016119e9565b611a4e81611a11565b840191505092915050565b5f6020820190508181035f830152611a718184611a21565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611aa282611a79565b9050919050565b611ab281611a98565b8114611abc575f80fd5b50565b5f81359050611acd81611aa9565b92915050565b5f8060408385031215611ae957611ae8611901565b5b5f611af685828601611abf565b9250506020611b0785828601611924565b9150509250929050565b5f602082019050611b245f83018461197d565b92915050565b5f602082019050611b3d5f830184611963565b92915050565b5f805f60608486031215611b5a57611b59611901565b5b5f611b6786828701611abf565b9350506020611b7886828701611abf565b9250506040611b8986828701611924565b9150509250925092565b5f60ff82169050919050565b611ba881611b93565b82525050565b5f602082019050611bc15f830184611b9f565b92915050565b5f60208284031215611bdc57611bdb611901565b5b5f611be984828501611abf565b91505092915050565b611bfb81611a98565b82525050565b5f602082019050611c145f830184611bf2565b92915050565b5f8060408385031215611c3057611c2f611901565b5b5f611c3d85828601611abf565b9250506020611c4e85828601611abf565b9150509250929050565b7f496e76616c69642070726f706f73616c204944000000000000000000000000005f82015250565b5f611c8c6013836119d9565b9150611c9782611c58565b602082019050919050565b5f6020820190508181035f830152611cb981611c80565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f416c726561647920766f746564000000000000000000000000000000000000005f82015250565b5f611d21600d836119d9565b9150611d2c82611ced565b602082019050919050565b5f6020820190508181035f830152611d4e81611d15565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d8c82611905565b9150611d9783611905565b9250828201905080821115611daf57611dae611d55565b5b92915050565b5f604082019050611dc85f830185611963565b611dd56020830184611bf2565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611e2057607f821691505b602082108103611e3357611e32611ddc565b5b50919050565b7f50726f706f73616c20616c7265616479206578656375746564000000000000005f82015250565b5f611e6d6019836119d9565b9150611e7882611e39565b602082019050919050565b5f6020820190508181035f830152611e9a81611e61565b9050919050565b7f566f74696e6720706572696f64206e6f7420656e6465640000000000000000005f82015250565b5f611ed56017836119d9565b9150611ee082611ea1565b602082019050919050565b5f6020820190508181035f830152611f0281611ec9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611f4082611905565b9150611f4b83611905565b925082611f5b57611f5a611f09565b5b828204905092915050565b7f4e6f7420656e6f75676820766f746573000000000000000000000000000000005f82015250565b5f611f9a6010836119d9565b9150611fa582611f66565b602082019050919050565b5f6020820190508181035f830152611fc781611f8e565b9050919050565b5f604082019050611fe15f830185611963565b611fee6020830184611963565b9392505050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f612029601d836119d9565b915061203482611ff5565b602082019050919050565b5f6020820190508181035f8301526120568161201d565b9050919050565b7f496e73756666696369656e74207374616b65642062616c616e636500000000005f82015250565b5f612091601b836119d9565b915061209c8261205d565b602082019050919050565b5f6020820190508181035f8301526120be81612085565b9050919050565b5f6120cf82611905565b91506120da83611905565b92508282039050818111156120f2576120f1611d55565b5b92915050565b7f45524332304361707065643a20636170206578636565646564000000000000005f82015250565b5f61212c6019836119d9565b9150612137826120f8565b602082019050919050565b5f6020820190508181035f83015261215981612120565b9050919050565b7f4e6577206361702069732062656c6f772063757272656e7420746f74616c20735f8201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b5f6121ba6025836119d9565b91506121c582612160565b604082019050919050565b5f6020820190508181035f8301526121e7816121ae565b9050919050565b7f496e666c6174696f6e20726174652065786365656473206d6178696d756d00005f82015250565b5f612222601e836119d9565b915061222d826121ee565b602082019050919050565b5f6020820190508181035f83015261224f81612216565b9050919050565b5f61226082611905565b915061226b83611905565b925082820261227981611905565b915082820484148315176122905761228f611d55565b5b5092915050565b5f6060820190506122aa5f830186611bf2565b6122b76020830185611963565b6122c46040830184611963565b94935050505056fea2646970667358221220ad2e54337f461b2864ef9aa1919eb42fdb1afc8df8aaa9185e111868efbde76a64736f6c63430008140033000000000000000000000000d19a871f6e96790292d563cc3ab0d9b734ce6a9b

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101cd575f3560e01c806347786d37116101025780638da5cb5b116100a0578063a9059cbb1161006f578063a9059cbb146104f6578063c551a2f914610526578063dd62ed3e14610530578063f2fde38b14610560576101cd565b80638da5cb5b14610480578063944ee22d1461049e57806395d89b41146104bc578063a694fc3a146104da576101cd565b806370a08231116100dc57806370a082311461040c578063715018a61461043c57806379cc679014610446578063817b1cd214610462576101cd565b806347786d37146103a45780635a43dc00146103c057806360217267146103dc576101cd565b806325d5971f1161016f57806331f9e35b1161014957806331f9e35b14610330578063355274ea1461034e57806340c10f191461036c57806342966c6814610388576101cd565b806325d5971f146102d85780632ed1f923146102f4578063313ce56714610312576101cd565b8063095ea7b3116101ab578063095ea7b31461023e5780630d61b5191461026e57806318160ddd1461028a57806323b872dd146102a8576101cd565b80630121b93f146101d1578063013cf08b146101ed57806306fdde0314610220575b5f80fd5b6101eb60048036038101906101e69190611938565b61057c565b005b61020760048036038101906102029190611938565b610728565b604051610217949392919061198c565b60405180910390f35b61022861076f565b6040516102359190611a59565b60405180910390f35b61025860048036038101906102539190611ad3565b6107ff565b6040516102659190611b11565b60405180910390f35b61028860048036038101906102839190611938565b610821565b005b6102926109fd565b60405161029f9190611b2a565b60405180910390f35b6102c260048036038101906102bd9190611b43565b610a06565b6040516102cf9190611b11565b60405180910390f35b6102f260048036038101906102ed9190611938565b610a34565b005b6102fc610b6f565b6040516103099190611b2a565b60405180910390f35b61031a610b74565b6040516103279190611bae565b60405180910390f35b610338610b7c565b6040516103459190611b2a565b60405180910390f35b610356610b82565b6040516103639190611b2a565b60405180910390f35b61038660048036038101906103819190611ad3565b610b8b565b005b6103a2600480360381019061039d9190611938565b610bfd565b005b6103be60048036038101906103b99190611938565b610c11565b005b6103da60048036038101906103d59190611938565b610c6d565b005b6103f660048036038101906103f19190611bc7565b610d31565b6040516104039190611b2a565b60405180910390f35b61042660048036038101906104219190611bc7565b610d77565b6040516104339190611b2a565b60405180910390f35b610444610dbc565b005b610460600480360381019061045b9190611ad3565b610dcf565b005b61046a610def565b6040516104779190611b2a565b60405180910390f35b610488610df8565b6040516104959190611c01565b60405180910390f35b6104a6610e20565b6040516104b39190611b2a565b60405180910390f35b6104c4610e27565b6040516104d19190611a59565b60405180910390f35b6104f460048036038101906104ef9190611938565b610eb7565b005b610510600480360381019061050b9190611ad3565b610f72565b60405161051d9190611b11565b60405180910390f35b61052e610f94565b005b61054a60048036038101906105459190611c1a565b611030565b6040516105579190611b2a565b60405180910390f35b61057a60048036038101906105759190611bc7565b6110b2565b005b600b8054905081106105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90611ca2565b60405180910390fd5b5f600b82815481106105d8576105d7611cc0565b5b905f5260205f2090600502019050806004015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066990611d37565b60405180910390fd5b6001816004015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506106d233610d77565b816001015f8282546106e49190611d82565b925050819055507f030b0f8dcd86a031eddb071f91882edeac8173663ba775713b677b42b51be44b823360405161071c929190611db5565b60405180910390a15050565b600b8181548110610737575f80fd5b905f5260205f2090600502015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060030154905084565b60606003805461077e90611e09565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa90611e09565b80156107f55780601f106107cc576101008083540402835291602001916107f5565b820191905f5260205f20905b8154815290600101906020018083116107d857829003601f168201915b5050505050905090565b5f80610809611136565b905061081681858561113d565b600191505092915050565b61082961114f565b600b805490508110610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086790611ca2565b60405180910390fd5b5f600b828154811061088557610884611cc0565b5b905f5260205f2090600502019050806002015f9054906101000a900460ff16156108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db90611e83565b60405180910390fd5b6203f48081600301546108f79190611d82565b421015610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090611eeb565b60405180910390fd5b5f6109426109fd565b90506002816109519190611f36565b826001015411610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90611fb0565b60405180910390fd5b6001826002015f6101000a81548160ff021916908315150217905550815f01546008819055507ff758fc91e01b00ea6b4a6138756f7f28e021f9bf21db6dbf8c36c88eb737257a83835f01546040516109f0929190611fce565b60405180910390a1505050565b5f600254905090565b5f80610a10611136565b9050610a1d8582856111d6565b610a28858585611268565b60019150509392505050565b5f8111610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d9061203f565b60405180910390fd5b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed906120a7565b60405180910390fd5b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b4291906120c5565b9250508190555080600a5f828254610b5a91906120c5565b92505081905550610b6b3382610f72565b5050565b600581565b5f6012905090565b60085481565b5f600654905090565b610b9361114f565b610b9b610b82565b81610ba46109fd565b610bae9190611d82565b1115610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690612142565b60405180910390fd5b610bf98282611358565b5050565b610c0e610c08611136565b826113d7565b50565b610c1961114f565b610c216109fd565b811015610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a906121d0565b60405180910390fd5b8060068190555050565b6005811115610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890612238565b60405180910390fd5b5f600b60018160018154018082558091505003905f5260205f209060050201905081815f01819055504281600301819055507ffcf3b1aa65a464cef2889608f99e8b8c0f680a4be6c2acb9d961c536a5a9294b6001600b80549050610d1691906120c5565b83604051610d25929190611fce565b60405180910390a15050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610dc461114f565b610dcd5f611456565b565b610de182610ddb611136565b836111d6565b610deb82826113d7565b5050565b5f600a54905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6203f48081565b606060048054610e3690611e09565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6290611e09565b8015610ead5780601f10610e8457610100808354040283529160200191610ead565b820191905f5260205f20905b815481529060010190602001808311610e9057829003601f168201915b5050505050905090565b5f8111610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061203f565b60405180910390fd5b610f033082610f72565b508060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610f509190611d82565b9250508190555080600a5f828254610f689190611d82565b9250508190555050565b5f80610f7c611136565b9050610f89818585611268565b600191505092915050565b610f9c61114f565b5f6064600854610faa6109fd565b610fb49190612256565b610fbe9190611f36565b9050610fc8610b82565b81610fd16109fd565b610fdb9190611d82565b111561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390612142565b60405180910390fd5b61102d611027610df8565b82611358565b50565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6110ba61114f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361112a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016111219190611c01565b60405180910390fd5b61113381611456565b50565b5f33905090565b61114a8383836001611519565b505050565b611157611136565b73ffffffffffffffffffffffffffffffffffffffff16611175610df8565b73ffffffffffffffffffffffffffffffffffffffff16146111d457611198611136565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111cb9190611c01565b60405180910390fd5b565b5f6111e18484611030565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112625781811015611253578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161124a93929190612297565b60405180910390fd5b61126184848484035f611519565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d8575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016112cf9190611c01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611348575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161133f9190611c01565b60405180910390fd5b6113538383836116e8565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c8575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113bf9190611c01565b60405180910390fd5b6113d35f83836116e8565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611447575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161143e9190611c01565b60405180910390fd5b611452825f836116e8565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611589575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016115809190611c01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115f9575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016115f09190611c01565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156116e2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516116d99190611b2a565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611738578060025f82825461172c9190611d82565b92505081905550611806565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156117c1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016117b893929190612297565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361184d578060025f8282540392505081905550611897565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118f49190611b2a565b60405180910390a3505050565b5f80fd5b5f819050919050565b61191781611905565b8114611921575f80fd5b50565b5f813590506119328161190e565b92915050565b5f6020828403121561194d5761194c611901565b5b5f61195a84828501611924565b91505092915050565b61196c81611905565b82525050565b5f8115159050919050565b61198681611972565b82525050565b5f60808201905061199f5f830187611963565b6119ac6020830186611963565b6119b9604083018561197d565b6119c66060830184611963565b95945050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a065780820151818401526020810190506119eb565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a2b826119cf565b611a3581856119d9565b9350611a458185602086016119e9565b611a4e81611a11565b840191505092915050565b5f6020820190508181035f830152611a718184611a21565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611aa282611a79565b9050919050565b611ab281611a98565b8114611abc575f80fd5b50565b5f81359050611acd81611aa9565b92915050565b5f8060408385031215611ae957611ae8611901565b5b5f611af685828601611abf565b9250506020611b0785828601611924565b9150509250929050565b5f602082019050611b245f83018461197d565b92915050565b5f602082019050611b3d5f830184611963565b92915050565b5f805f60608486031215611b5a57611b59611901565b5b5f611b6786828701611abf565b9350506020611b7886828701611abf565b9250506040611b8986828701611924565b9150509250925092565b5f60ff82169050919050565b611ba881611b93565b82525050565b5f602082019050611bc15f830184611b9f565b92915050565b5f60208284031215611bdc57611bdb611901565b5b5f611be984828501611abf565b91505092915050565b611bfb81611a98565b82525050565b5f602082019050611c145f830184611bf2565b92915050565b5f8060408385031215611c3057611c2f611901565b5b5f611c3d85828601611abf565b9250506020611c4e85828601611abf565b9150509250929050565b7f496e76616c69642070726f706f73616c204944000000000000000000000000005f82015250565b5f611c8c6013836119d9565b9150611c9782611c58565b602082019050919050565b5f6020820190508181035f830152611cb981611c80565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f416c726561647920766f746564000000000000000000000000000000000000005f82015250565b5f611d21600d836119d9565b9150611d2c82611ced565b602082019050919050565b5f6020820190508181035f830152611d4e81611d15565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d8c82611905565b9150611d9783611905565b9250828201905080821115611daf57611dae611d55565b5b92915050565b5f604082019050611dc85f830185611963565b611dd56020830184611bf2565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611e2057607f821691505b602082108103611e3357611e32611ddc565b5b50919050565b7f50726f706f73616c20616c7265616479206578656375746564000000000000005f82015250565b5f611e6d6019836119d9565b9150611e7882611e39565b602082019050919050565b5f6020820190508181035f830152611e9a81611e61565b9050919050565b7f566f74696e6720706572696f64206e6f7420656e6465640000000000000000005f82015250565b5f611ed56017836119d9565b9150611ee082611ea1565b602082019050919050565b5f6020820190508181035f830152611f0281611ec9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611f4082611905565b9150611f4b83611905565b925082611f5b57611f5a611f09565b5b828204905092915050565b7f4e6f7420656e6f75676820766f746573000000000000000000000000000000005f82015250565b5f611f9a6010836119d9565b9150611fa582611f66565b602082019050919050565b5f6020820190508181035f830152611fc781611f8e565b9050919050565b5f604082019050611fe15f830185611963565b611fee6020830184611963565b9392505050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f612029601d836119d9565b915061203482611ff5565b602082019050919050565b5f6020820190508181035f8301526120568161201d565b9050919050565b7f496e73756666696369656e74207374616b65642062616c616e636500000000005f82015250565b5f612091601b836119d9565b915061209c8261205d565b602082019050919050565b5f6020820190508181035f8301526120be81612085565b9050919050565b5f6120cf82611905565b91506120da83611905565b92508282039050818111156120f2576120f1611d55565b5b92915050565b7f45524332304361707065643a20636170206578636565646564000000000000005f82015250565b5f61212c6019836119d9565b9150612137826120f8565b602082019050919050565b5f6020820190508181035f83015261215981612120565b9050919050565b7f4e6577206361702069732062656c6f772063757272656e7420746f74616c20735f8201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b5f6121ba6025836119d9565b91506121c582612160565b604082019050919050565b5f6020820190508181035f8301526121e7816121ae565b9050919050565b7f496e666c6174696f6e20726174652065786365656473206d6178696d756d00005f82015250565b5f612222601e836119d9565b915061222d826121ee565b602082019050919050565b5f6020820190508181035f83015261224f81612216565b9050919050565b5f61226082611905565b915061226b83611905565b925082820261227981611905565b915082820484148315176122905761228f611d55565b5b5092915050565b5f6060820190506122aa5f830186611bf2565b6122b76020830185611963565b6122c46040830184611963565b94935050505056fea2646970667358221220ad2e54337f461b2864ef9aa1919eb42fdb1afc8df8aaa9185e111868efbde76a64736f6c63430008140033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d19a871f6e96790292d563cc3ab0d9b734ce6a9b

-----Decoded View---------------
Arg [0] : initialOwner (address): 0xD19a871f6E96790292d563Cc3AB0d9B734cE6A9b

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d19a871f6e96790292d563cc3ab0d9b734ce6a9b


Deployed Bytecode Sourcemap

26902:3999:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29834:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29124:27;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16329:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18622:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30234:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17431:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19390:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28389:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27101:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17282:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27062:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27632:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27449:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26254:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27715:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29425:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28708:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17593:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9942:103;;;:::i;:::-;;26672:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28830:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9267:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29158:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16539:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28155:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17916:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27890:257;;;:::i;:::-;;18161:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10200:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29834:392;29909:9;:16;;;;29896:10;:29;29888:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29960:25;29988:9;29998:10;29988:21;;;;;;;;:::i;:::-;;;;;;;;;;;;29960:49;;30029:8;:14;;:26;30044:10;30029:26;;;;;;;;;;;;;;;;;;;;;;;;;30028:27;30020:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;30115:4;30086:8;:14;;:26;30101:10;30086:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30152:21;30162:10;30152:9;:21::i;:::-;30130:8;:18;;;:43;;;;;;;:::i;:::-;;;;;;;;30189:29;30195:10;30207;30189:29;;;;;;;:::i;:::-;;;;;;;;29877:349;29834:392;:::o;29124:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16329:91::-;16374:13;16407:5;16400:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16329:91;:::o;18622:190::-;18695:4;18712:13;18728:12;:10;:12::i;:::-;18712:28;;18751:31;18760:5;18767:7;18776:5;18751:8;:31::i;:::-;18800:4;18793:11;;;18622:190;;;;:::o;30234:664::-;9153:13;:11;:13::i;:::-;30330:9:::1;:16;;;;30317:10;:29;30309:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30381:25;30409:9;30419:10;30409:21;;;;;;;;:::i;:::-;;;;;;;;;;;;30381:49;;30450:8;:17;;;;;;;;;;;;30449:18;30441:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29206:6;30535:8;:21;;;:45;;;;:::i;:::-;30516:15;:64;;30508:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30621:18;30642:13;:11;:13::i;:::-;30621:34;;30708:1;30695:10;:14;;;;:::i;:::-;30674:8;:18;;;:35;30666:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30763:4;30743:8;:17;;;:24;;;;;;;;;;;;;;;;;;30794:8;:25;;;30778:13;:41;;;;30835:55;30852:10;30864:8;:25;;;30835:55;;;;;;;:::i;:::-;;;;;;;;30298:600;;30234:664:::0;:::o;17431:99::-;17483:7;17510:12;;17503:19;;17431:99;:::o;19390:249::-;19477:4;19494:15;19512:12;:10;:12::i;:::-;19494:30;;19535:37;19551:4;19557:7;19566:5;19535:15;:37::i;:::-;19583:26;19593:4;19599:2;19603:5;19583:9;:26::i;:::-;19627:4;19620:11;;;19390:249;;;;;:::o;28389:311::-;28465:1;28456:6;:10;28448:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;28542:6;28519:7;:19;28527:10;28519:19;;;;;;;;;;;;;;;;:29;;28511:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28614:6;28591:7;:19;28599:10;28591:19;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;28647:6;28631:12;;:22;;;;;;;:::i;:::-;;;;;;;;28664:28;28673:10;28685:6;28664:8;:28::i;:::-;;28389:311;:::o;27101:46::-;27146:1;27101:46;:::o;17282:84::-;17331:5;17356:2;17349:9;;17282:84;:::o;27062:32::-;;;;:::o;27632:75::-;27668:7;27695:4;;27688:11;;27632:75;:::o;27449:175::-;9153:13;:11;:13::i;:::-;27553:5:::1;:3;:5::i;:::-;27543:6;27527:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;27519:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27599:17;27605:2;27609:6;27599:5;:17::i;:::-;27449:175:::0;;:::o;26254:89::-;26309:26;26315:12;:10;:12::i;:::-;26329:5;26309;:26::i;:::-;26254:89;:::o;27715:167::-;9153:13;:11;:13::i;:::-;27795::::1;:11;:13::i;:::-;27785:6;:23;;27777:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27868:6;27861:4;:13;;;;27715:167:::0;:::o;29425:401::-;27146:1;29503:16;:38;;29495:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29589:28;29620:9;:16;;;;;;;;;;;;;;;;;;;;;;;;29589:47;;29678:16;29647:11;:28;;:47;;;;29732:15;29705:11;:24;;:42;;;;29763:55;29798:1;29779:9;:16;;;;:20;;;;:::i;:::-;29801:16;29763:55;;;;;;;:::i;:::-;;;;;;;;29484:342;29425:401;:::o;28708:114::-;28771:7;28798;:16;28806:7;28798:16;;;;;;;;;;;;;;;;28791:23;;28708:114;;;:::o;17593:118::-;17658:7;17685:9;:18;17695:7;17685:18;;;;;;;;;;;;;;;;17678:25;;17593:118;;;:::o;9942:103::-;9153:13;:11;:13::i;:::-;10007:30:::1;10034:1;10007:18;:30::i;:::-;9942:103::o:0;26672:161::-;26748:45;26764:7;26773:12;:10;:12::i;:::-;26787:5;26748:15;:45::i;:::-;26804:21;26810:7;26819:5;26804;:21::i;:::-;26672:161;;:::o;28830:93::-;28876:7;28903:12;;28896:19;;28830:93;:::o;9267:87::-;9313:7;9340:6;;;;;;;;;;;9333:13;;9267:87;:::o;29158:54::-;29206:6;29158:54;:::o;16539:95::-;16586:13;16619:7;16612:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16539:95;:::o;28155:226::-;28223:1;28214:6;:10;28206:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;28269:31;28286:4;28293:6;28269:8;:31::i;:::-;;28334:6;28311:7;:19;28319:10;28311:19;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;28367:6;28351:12;;:22;;;;;;;:::i;:::-;;;;;;;;28155:226;:::o;17916:182::-;17985:4;18002:13;18018:12;:10;:12::i;:::-;18002:28;;18041:27;18051:5;18058:2;18062:5;18041:9;:27::i;:::-;18086:4;18079:11;;;17916:182;;;;:::o;27890:257::-;9153:13;:11;:13::i;:::-;27945:23:::1;28005:3;27988:13;;27972;:11;:13::i;:::-;:29;;;;:::i;:::-;27971:37;;;;:::i;:::-;27945:63;;28062:5;:3;:5::i;:::-;28043:15;28027:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:40;;28019:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;28108:31;28114:7;:5;:7::i;:::-;28123:15;28108:5;:31::i;:::-;27934:213;27890:257::o:0;18161:142::-;18241:7;18268:11;:18;18280:5;18268:18;;;;;;;;;;;;;;;:27;18287:7;18268:27;;;;;;;;;;;;;;;;18261:34;;18161:142;;;;:::o;10200:220::-;9153:13;:11;:13::i;:::-;10305:1:::1;10285:22;;:8;:22;;::::0;10281:93:::1;;10359:1;10331:31;;;;;;;;;;;:::i;:::-;;;;;;;;10281:93;10384:28;10403:8;10384:18;:28::i;:::-;10200:220:::0;:::o;7276:98::-;7329:7;7356:10;7349:17;;7276:98;:::o;23449:130::-;23534:37;23543:5;23550:7;23559:5;23566:4;23534:8;:37::i;:::-;23449:130;;;:::o;9432:166::-;9503:12;:10;:12::i;:::-;9492:23;;:7;:5;:7::i;:::-;:23;;;9488:103;;9566:12;:10;:12::i;:::-;9539:40;;;;;;;;;;;:::i;:::-;;;;;;;;9488:103;9432:166::o;25165:487::-;25265:24;25292:25;25302:5;25309:7;25292:9;:25::i;:::-;25265:52;;25352:17;25332:16;:37;25328:317;;25409:5;25390:16;:24;25386:132;;;25469:7;25478:16;25496:5;25442:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25386:132;25561:57;25570:5;25577:7;25605:5;25586:16;:24;25612:5;25561:8;:57::i;:::-;25328:317;25254:398;25165:487;;;:::o;20024:308::-;20124:1;20108:18;;:4;:18;;;20104:88;;20177:1;20150:30;;;;;;;;;;;:::i;:::-;;;;;;;;20104:88;20220:1;20206:16;;:2;:16;;;20202:88;;20275:1;20246:32;;;;;;;;;;;:::i;:::-;;;;;;;;20202:88;20300:24;20308:4;20314:2;20318:5;20300:7;:24::i;:::-;20024:308;;;:::o;22144:213::-;22234:1;22215:21;;:7;:21;;;22211:93;;22289:1;22260:32;;;;;;;;;;;:::i;:::-;;;;;;;;22211:93;22314:35;22330:1;22334:7;22343:5;22314:7;:35::i;:::-;22144:213;;:::o;22685:211::-;22775:1;22756:21;;:7;:21;;;22752:91;;22828:1;22801:30;;;;;;;;;;;:::i;:::-;;;;;;;;22752:91;22853:35;22861:7;22878:1;22882:5;22853:7;:35::i;:::-;22685:211;;:::o;10580:191::-;10654:16;10673:6;;;;;;;;;;;10654:25;;10699:8;10690:6;;:17;;;;;;;;;;;;;;;;;;10754:8;10723:40;;10744:8;10723:40;;;;;;;;;;;;10643:128;10580:191;:::o;24430:443::-;24560:1;24543:19;;:5;:19;;;24539:91;;24615:1;24586:32;;;;;;;;;;;:::i;:::-;;;;;;;;24539:91;24663:1;24644:21;;:7;:21;;;24640:92;;24717:1;24689:31;;;;;;;;;;;:::i;:::-;;;;;;;;24640:92;24772:5;24742:11;:18;24754:5;24742:18;;;;;;;;;;;;;;;:27;24761:7;24742:27;;;;;;;;;;;;;;;:35;;;;24792:9;24788:78;;;24839:7;24823:31;;24832:5;24823:31;;;24848:5;24823:31;;;;;;:::i;:::-;;;;;;;;24788:78;24430:443;;;;:::o;20656:1135::-;20762:1;20746:18;;:4;:18;;;20742:552;;20900:5;20884:12;;:21;;;;;;;:::i;:::-;;;;;;;;20742:552;;;20938:19;20960:9;:15;20970:4;20960:15;;;;;;;;;;;;;;;;20938:37;;21008:5;20994:11;:19;20990:117;;;21066:4;21072:11;21085:5;21041:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;20990:117;21262:5;21248:11;:19;21230:9;:15;21240:4;21230:15;;;;;;;;;;;;;;;:37;;;;20923:371;20742:552;21324:1;21310:16;;:2;:16;;;21306:435;;21492:5;21476:12;;:21;;;;;;;;;;;21306:435;;;21709:5;21692:9;:13;21702:2;21692:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21306:435;21773:2;21758:25;;21767:4;21758:25;;;21777:5;21758:25;;;;;;:::i;:::-;;;;;;;;20656:1135;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:90::-;1183:7;1226:5;1219:13;1212:21;1201:32;;1149:90;;;:::o;1245:109::-;1326:21;1341:5;1326:21;:::i;:::-;1321:3;1314:34;1245:109;;:::o;1360:541::-;1531:4;1569:3;1558:9;1554:19;1546:27;;1583:71;1651:1;1640:9;1636:17;1627:6;1583:71;:::i;:::-;1664:72;1732:2;1721:9;1717:18;1708:6;1664:72;:::i;:::-;1746:66;1808:2;1797:9;1793:18;1784:6;1746:66;:::i;:::-;1822:72;1890:2;1879:9;1875:18;1866:6;1822:72;:::i;:::-;1360:541;;;;;;;:::o;1907:99::-;1959:6;1993:5;1987:12;1977:22;;1907:99;;;:::o;2012:169::-;2096:11;2130:6;2125:3;2118:19;2170:4;2165:3;2161:14;2146:29;;2012:169;;;;:::o;2187:246::-;2268:1;2278:113;2292:6;2289:1;2286:13;2278:113;;;2377:1;2372:3;2368:11;2362:18;2358:1;2353:3;2349:11;2342:39;2314:2;2311:1;2307:10;2302:15;;2278:113;;;2425:1;2416:6;2411:3;2407:16;2400:27;2249:184;2187:246;;;:::o;2439:102::-;2480:6;2531:2;2527:7;2522:2;2515:5;2511:14;2507:28;2497:38;;2439:102;;;:::o;2547:377::-;2635:3;2663:39;2696:5;2663:39;:::i;:::-;2718:71;2782:6;2777:3;2718:71;:::i;:::-;2711:78;;2798:65;2856:6;2851:3;2844:4;2837:5;2833:16;2798:65;:::i;:::-;2888:29;2910:6;2888:29;:::i;:::-;2883:3;2879:39;2872:46;;2639:285;2547:377;;;;:::o;2930:313::-;3043:4;3081:2;3070:9;3066:18;3058:26;;3130:9;3124:4;3120:20;3116:1;3105:9;3101:17;3094:47;3158:78;3231:4;3222:6;3158:78;:::i;:::-;3150:86;;2930:313;;;;:::o;3249:126::-;3286:7;3326:42;3319:5;3315:54;3304:65;;3249:126;;;:::o;3381:96::-;3418:7;3447:24;3465:5;3447:24;:::i;:::-;3436:35;;3381:96;;;:::o;3483:122::-;3556:24;3574:5;3556:24;:::i;:::-;3549:5;3546:35;3536:63;;3595:1;3592;3585:12;3536:63;3483:122;:::o;3611:139::-;3657:5;3695:6;3682:20;3673:29;;3711:33;3738:5;3711:33;:::i;:::-;3611:139;;;;:::o;3756:474::-;3824:6;3832;3881:2;3869:9;3860:7;3856:23;3852:32;3849:119;;;3887:79;;:::i;:::-;3849:119;4007:1;4032:53;4077:7;4068:6;4057:9;4053:22;4032:53;:::i;:::-;4022:63;;3978:117;4134:2;4160:53;4205:7;4196:6;4185:9;4181:22;4160:53;:::i;:::-;4150:63;;4105:118;3756:474;;;;;:::o;4236:210::-;4323:4;4361:2;4350:9;4346:18;4338:26;;4374:65;4436:1;4425:9;4421:17;4412:6;4374:65;:::i;:::-;4236:210;;;;:::o;4452:222::-;4545:4;4583:2;4572:9;4568:18;4560:26;;4596:71;4664:1;4653:9;4649:17;4640:6;4596:71;:::i;:::-;4452:222;;;;:::o;4680:619::-;4757:6;4765;4773;4822:2;4810:9;4801:7;4797:23;4793:32;4790:119;;;4828:79;;:::i;:::-;4790:119;4948:1;4973:53;5018:7;5009:6;4998:9;4994:22;4973:53;:::i;:::-;4963:63;;4919:117;5075:2;5101:53;5146:7;5137:6;5126:9;5122:22;5101:53;:::i;:::-;5091:63;;5046:118;5203:2;5229:53;5274:7;5265:6;5254:9;5250:22;5229:53;:::i;:::-;5219:63;;5174:118;4680:619;;;;;:::o;5305:86::-;5340:7;5380:4;5373:5;5369:16;5358:27;;5305:86;;;:::o;5397:112::-;5480:22;5496:5;5480:22;:::i;:::-;5475:3;5468:35;5397:112;;:::o;5515:214::-;5604:4;5642:2;5631:9;5627:18;5619:26;;5655:67;5719:1;5708:9;5704:17;5695:6;5655:67;:::i;:::-;5515:214;;;;:::o;5735:329::-;5794:6;5843:2;5831:9;5822:7;5818:23;5814:32;5811:119;;;5849:79;;:::i;:::-;5811:119;5969:1;5994:53;6039:7;6030:6;6019:9;6015:22;5994:53;:::i;:::-;5984:63;;5940:117;5735:329;;;;:::o;6070:118::-;6157:24;6175:5;6157:24;:::i;:::-;6152:3;6145:37;6070:118;;:::o;6194:222::-;6287:4;6325:2;6314:9;6310:18;6302:26;;6338:71;6406:1;6395:9;6391:17;6382:6;6338:71;:::i;:::-;6194:222;;;;:::o;6422:474::-;6490:6;6498;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:53;6743:7;6734:6;6723:9;6719:22;6698:53;:::i;:::-;6688:63;;6644:117;6800:2;6826:53;6871:7;6862:6;6851:9;6847:22;6826:53;:::i;:::-;6816:63;;6771:118;6422:474;;;;;:::o;6902:169::-;7042:21;7038:1;7030:6;7026:14;7019:45;6902:169;:::o;7077:366::-;7219:3;7240:67;7304:2;7299:3;7240:67;:::i;:::-;7233:74;;7316:93;7405:3;7316:93;:::i;:::-;7434:2;7429:3;7425:12;7418:19;;7077:366;;;:::o;7449:419::-;7615:4;7653:2;7642:9;7638:18;7630:26;;7702:9;7696:4;7692:20;7688:1;7677:9;7673:17;7666:47;7730:131;7856:4;7730:131;:::i;:::-;7722:139;;7449:419;;;:::o;7874:180::-;7922:77;7919:1;7912:88;8019:4;8016:1;8009:15;8043:4;8040:1;8033:15;8060:163;8200:15;8196:1;8188:6;8184:14;8177:39;8060:163;:::o;8229:366::-;8371:3;8392:67;8456:2;8451:3;8392:67;:::i;:::-;8385:74;;8468:93;8557:3;8468:93;:::i;:::-;8586:2;8581:3;8577:12;8570:19;;8229:366;;;:::o;8601:419::-;8767:4;8805:2;8794:9;8790:18;8782:26;;8854:9;8848:4;8844:20;8840:1;8829:9;8825:17;8818:47;8882:131;9008:4;8882:131;:::i;:::-;8874:139;;8601:419;;;:::o;9026:180::-;9074:77;9071:1;9064:88;9171:4;9168:1;9161:15;9195:4;9192:1;9185:15;9212:191;9252:3;9271:20;9289:1;9271:20;:::i;:::-;9266:25;;9305:20;9323:1;9305:20;:::i;:::-;9300:25;;9348:1;9345;9341:9;9334:16;;9369:3;9366:1;9363:10;9360:36;;;9376:18;;:::i;:::-;9360:36;9212:191;;;;:::o;9409:332::-;9530:4;9568:2;9557:9;9553:18;9545:26;;9581:71;9649:1;9638:9;9634:17;9625:6;9581:71;:::i;:::-;9662:72;9730:2;9719:9;9715:18;9706:6;9662:72;:::i;:::-;9409:332;;;;;:::o;9747:180::-;9795:77;9792:1;9785:88;9892:4;9889:1;9882:15;9916:4;9913:1;9906:15;9933:320;9977:6;10014:1;10008:4;10004:12;9994:22;;10061:1;10055:4;10051:12;10082:18;10072:81;;10138:4;10130:6;10126:17;10116:27;;10072:81;10200:2;10192:6;10189:14;10169:18;10166:38;10163:84;;10219:18;;:::i;:::-;10163:84;9984:269;9933:320;;;:::o;10259:175::-;10399:27;10395:1;10387:6;10383:14;10376:51;10259:175;:::o;10440:366::-;10582:3;10603:67;10667:2;10662:3;10603:67;:::i;:::-;10596:74;;10679:93;10768:3;10679:93;:::i;:::-;10797:2;10792:3;10788:12;10781:19;;10440:366;;;:::o;10812:419::-;10978:4;11016:2;11005:9;11001:18;10993:26;;11065:9;11059:4;11055:20;11051:1;11040:9;11036:17;11029:47;11093:131;11219:4;11093:131;:::i;:::-;11085:139;;10812:419;;;:::o;11237:173::-;11377:25;11373:1;11365:6;11361:14;11354:49;11237:173;:::o;11416:366::-;11558:3;11579:67;11643:2;11638:3;11579:67;:::i;:::-;11572:74;;11655:93;11744:3;11655:93;:::i;:::-;11773:2;11768:3;11764:12;11757:19;;11416:366;;;:::o;11788:419::-;11954:4;11992:2;11981:9;11977:18;11969:26;;12041:9;12035:4;12031:20;12027:1;12016:9;12012:17;12005:47;12069:131;12195:4;12069:131;:::i;:::-;12061:139;;11788:419;;;:::o;12213:180::-;12261:77;12258:1;12251:88;12358:4;12355:1;12348:15;12382:4;12379:1;12372:15;12399:185;12439:1;12456:20;12474:1;12456:20;:::i;:::-;12451:25;;12490:20;12508:1;12490:20;:::i;:::-;12485:25;;12529:1;12519:35;;12534:18;;:::i;:::-;12519:35;12576:1;12573;12569:9;12564:14;;12399:185;;;;:::o;12590:166::-;12730:18;12726:1;12718:6;12714:14;12707:42;12590:166;:::o;12762:366::-;12904:3;12925:67;12989:2;12984:3;12925:67;:::i;:::-;12918:74;;13001:93;13090:3;13001:93;:::i;:::-;13119:2;13114:3;13110:12;13103:19;;12762:366;;;:::o;13134:419::-;13300:4;13338:2;13327:9;13323:18;13315:26;;13387:9;13381:4;13377:20;13373:1;13362:9;13358:17;13351:47;13415:131;13541:4;13415:131;:::i;:::-;13407:139;;13134:419;;;:::o;13559:332::-;13680:4;13718:2;13707:9;13703:18;13695:26;;13731:71;13799:1;13788:9;13784:17;13775:6;13731:71;:::i;:::-;13812:72;13880:2;13869:9;13865:18;13856:6;13812:72;:::i;:::-;13559:332;;;;;:::o;13897:179::-;14037:31;14033:1;14025:6;14021:14;14014:55;13897:179;:::o;14082:366::-;14224:3;14245:67;14309:2;14304:3;14245:67;:::i;:::-;14238:74;;14321:93;14410:3;14321:93;:::i;:::-;14439:2;14434:3;14430:12;14423:19;;14082:366;;;:::o;14454:419::-;14620:4;14658:2;14647:9;14643:18;14635:26;;14707:9;14701:4;14697:20;14693:1;14682:9;14678:17;14671:47;14735:131;14861:4;14735:131;:::i;:::-;14727:139;;14454:419;;;:::o;14879:177::-;15019:29;15015:1;15007:6;15003:14;14996:53;14879:177;:::o;15062:366::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:419::-;15600:4;15638:2;15627:9;15623:18;15615:26;;15687:9;15681:4;15677:20;15673:1;15662:9;15658:17;15651:47;15715:131;15841:4;15715:131;:::i;:::-;15707:139;;15434:419;;;:::o;15859:194::-;15899:4;15919:20;15937:1;15919:20;:::i;:::-;15914:25;;15953:20;15971:1;15953:20;:::i;:::-;15948:25;;15997:1;15994;15990:9;15982:17;;16021:1;16015:4;16012:11;16009:37;;;16026:18;;:::i;:::-;16009:37;15859:194;;;;:::o;16059:175::-;16199:27;16195:1;16187:6;16183:14;16176:51;16059:175;:::o;16240:366::-;16382:3;16403:67;16467:2;16462:3;16403:67;:::i;:::-;16396:74;;16479:93;16568:3;16479:93;:::i;:::-;16597:2;16592:3;16588:12;16581:19;;16240:366;;;:::o;16612:419::-;16778:4;16816:2;16805:9;16801:18;16793:26;;16865:9;16859:4;16855:20;16851:1;16840:9;16836:17;16829:47;16893:131;17019:4;16893:131;:::i;:::-;16885:139;;16612:419;;;:::o;17037:224::-;17177:34;17173:1;17165:6;17161:14;17154:58;17246:7;17241:2;17233:6;17229:15;17222:32;17037:224;:::o;17267:366::-;17409:3;17430:67;17494:2;17489:3;17430:67;:::i;:::-;17423:74;;17506:93;17595:3;17506:93;:::i;:::-;17624:2;17619:3;17615:12;17608:19;;17267:366;;;:::o;17639:419::-;17805:4;17843:2;17832:9;17828:18;17820:26;;17892:9;17886:4;17882:20;17878:1;17867:9;17863:17;17856:47;17920:131;18046:4;17920:131;:::i;:::-;17912:139;;17639:419;;;:::o;18064:180::-;18204:32;18200:1;18192:6;18188:14;18181:56;18064:180;:::o;18250:366::-;18392:3;18413:67;18477:2;18472:3;18413:67;:::i;:::-;18406:74;;18489:93;18578:3;18489:93;:::i;:::-;18607:2;18602:3;18598:12;18591:19;;18250:366;;;:::o;18622:419::-;18788:4;18826:2;18815:9;18811:18;18803:26;;18875:9;18869:4;18865:20;18861:1;18850:9;18846:17;18839:47;18903:131;19029:4;18903:131;:::i;:::-;18895:139;;18622:419;;;:::o;19047:410::-;19087:7;19110:20;19128:1;19110:20;:::i;:::-;19105:25;;19144:20;19162:1;19144:20;:::i;:::-;19139:25;;19199:1;19196;19192:9;19221:30;19239:11;19221:30;:::i;:::-;19210:41;;19400:1;19391:7;19387:15;19384:1;19381:22;19361:1;19354:9;19334:83;19311:139;;19430:18;;:::i;:::-;19311:139;19095:362;19047:410;;;;:::o;19463:442::-;19612:4;19650:2;19639:9;19635:18;19627:26;;19663:71;19731:1;19720:9;19716:17;19707:6;19663:71;:::i;:::-;19744:72;19812:2;19801:9;19797:18;19788:6;19744:72;:::i;:::-;19826;19894:2;19883:9;19879:18;19870:6;19826:72;:::i;:::-;19463:442;;;;;;:::o

Swarm Source

ipfs://ad2e54337f461b2864ef9aa1919eb42fdb1afc8df8aaa9185e111868efbde76a
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.