ETH Price: $2,210.07 (-9.00%)
 

Overview

Max Total Supply

147,718,731.933734048 ZMAT

Holders

300

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ZMAT

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
london EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol';
import '@openzeppelin/contracts/security/ReentrancyGuard.sol';

/** 
*   Token Name: ZoomArt Token
*   Symbol: ZMAT
*   Decimal: 18
*/ 

contract ZMAT is ERC20, Ownable, ERC20Burnable, ReentrancyGuard {
    address public pegContract;
    address public treasurer;

    // Multipliers for minting and burning
    uint256 public mintMultiplier;
    uint256 public treasurerPercentage;
    uint256 public burnMultiplier;
    uint256 public baseMultiplier;

    // Event declarations
    event PegContractUpdated(address indexed newPegContract);
    event TreasurerUpdated(address indexed newTreasurer);
    event MintMultiplierUpdated(uint256 newMultiplier);
    event TreasurerPercentageUpdated(uint256 newPercentage);
    event BurnMultiplierUpdated(uint256 newMultiplier);
    event TokensMinted(address indexed to, uint256 ownerAmount, uint256 treasurerAmount);
    event TokensBurned(address indexed from, uint256 amount);

    constructor(uint256 initMintMultiplier, uint256 initTreasurerPercentage, uint256 initBurnMultiplier, uint256 initBaseMultiplier) ERC20("ZoomArt Token", "ZMAT") {
        require(initMintMultiplier > 0 , "Mint multiplier must be greater than zero");
        require(initTreasurerPercentage > 0 , "Treasurer percentage must be greater than zero");
        require(initBurnMultiplier > 0 , "Burn multiplier must be greater than zero");
        require(initBaseMultiplier > 0, "Base multiplier must be greater than zero");

        mintMultiplier = initMintMultiplier;
        treasurerPercentage = initTreasurerPercentage;
        burnMultiplier = initBurnMultiplier;
        baseMultiplier = initBaseMultiplier;
    }

    function setPegContract(address _pegContract) external onlyOwner {
        require(_pegContract != address(0), "New address is the zero address");
        pegContract = _pegContract;
        emit PegContractUpdated(_pegContract); 
    }

    function setTreasurer(address newTreasurer) external onlyOwner {
        require(newTreasurer != address(0), "New address is the zero address");
        treasurer = newTreasurer;
        emit TreasurerUpdated(newTreasurer); 
    }

    function setMintMultiplier(uint256 newMultiplier) external onlyOwner {
        require(newMultiplier > 0, "Multiplier must be greater than zero");
        mintMultiplier = newMultiplier;
        emit MintMultiplierUpdated(newMultiplier);
    }

    function setTreasurerPercentage(uint256 newPercentage) external onlyOwner {
        require(newPercentage > 0 , "Percentage must be greater than zero");
        treasurerPercentage = newPercentage;
        emit TreasurerPercentageUpdated(newPercentage);
    }

    function setBurnMultiplier(uint256 newMultiplier) external onlyOwner {
        require(newMultiplier > 0 , "Multiplier must be greater than zero");
        burnMultiplier = newMultiplier;
        emit BurnMultiplierUpdated(newMultiplier);
    }

    function pegContractMint(uint256 amount) external nonReentrant {
        require(msg.sender == pegContract, "Only the peg contract can mint");
        require(treasurer != address(0), "Treasurer address not set");

        uint256 ownerAmount = (amount * mintMultiplier) / baseMultiplier;
        uint256 treasurerAmount = (ownerAmount * treasurerPercentage) / baseMultiplier;

        _mint(owner(), ownerAmount);
        _mint(treasurer, treasurerAmount);

        emit TokensMinted(owner(), ownerAmount, treasurerAmount); 
    }

    function pegContractBurn(uint256 amount) external nonReentrant {
        require(msg.sender == pegContract, "Only the peg contract can burn");
        uint256 burnAmount = (amount * burnMultiplier) / baseMultiplier;

        _burn(owner(), burnAmount);
        emit TokensBurned(owner(), burnAmount); 
    }

    function mint(uint256 amount) public onlyOwner nonReentrant {
        require(treasurer != address(0), "Treasurer address not set");

        uint256 ownerAmount = (amount * mintMultiplier) / baseMultiplier;
        uint256 treasurerAmount = (ownerAmount * treasurerPercentage) / baseMultiplier;

        _mint(owner(), ownerAmount);
        _mint(treasurer, treasurerAmount);

        emit TokensMinted(owner(), ownerAmount, treasurerAmount); 
    }

    function burn(uint256 amount) public override onlyOwner nonReentrant {
        uint256 burnAmount = (amount * burnMultiplier) / baseMultiplier;

        _burn(owner(), burnAmount);
        emit TokensBurned(owner(), burnAmount); 
    }

    function getMintMultiplier() external view returns (uint256) {
        return mintMultiplier;
    }

    function getTreasurerPercentage() external view returns (uint256) {
        return treasurerPercentage;
    }

    function getBurnMultiplier() external view returns (uint256) {
        return burnMultiplier;
    }

    function getBaseMultiplier() external view returns (uint256) {
        return baseMultiplier;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

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

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;

import "../ERC20.sol";
import "../../../utils/Context.sol";

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 7 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "london",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"initMintMultiplier","type":"uint256"},{"internalType":"uint256","name":"initTreasurerPercentage","type":"uint256"},{"internalType":"uint256","name":"initBurnMultiplier","type":"uint256"},{"internalType":"uint256","name":"initBaseMultiplier","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"BurnMultiplierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"MintMultiplierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newPegContract","type":"address"}],"name":"PegContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"ownerAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasurerAmount","type":"uint256"}],"name":"TokensMinted","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":"newPercentage","type":"uint256"}],"name":"TreasurerPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTreasurer","type":"address"}],"name":"TreasurerUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasurerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pegContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pegContractBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pegContractMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setBurnMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setMintMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pegContract","type":"address"}],"name":"setPegContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasurer","type":"address"}],"name":"setTreasurer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"setTreasurerPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasurer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003a8d38038062003a8d83398181016040528101906200003791906200033d565b6040518060400160405280600d81526020017f5a6f6f6d41727420546f6b656e000000000000000000000000000000000000008152506040518060400160405280600481526020017f5a4d4154000000000000000000000000000000000000000000000000000000008152508160039081620000b491906200061f565b508060049081620000c691906200061f565b505050620000e9620000dd6200022f60201b60201c565b6200023760201b60201c565b60016006819055506000841162000137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012e906200078d565b60405180910390fd5b600083116200017d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001749062000825565b60405180910390fd5b60008211620001c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ba90620008bd565b60405180910390fd5b6000811162000209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002009062000955565b60405180910390fd5b8360098190555082600a8190555081600b8190555080600c819055505050505062000977565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b6000819050919050565b620003178162000302565b81146200032357600080fd5b50565b60008151905062000337816200030c565b92915050565b600080600080608085870312156200035a5762000359620002fd565b5b60006200036a8782880162000326565b94505060206200037d8782880162000326565b9350506040620003908782880162000326565b9250506060620003a38782880162000326565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043157607f821691505b602082108103620004475762000446620003e9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000472565b620004bd868362000472565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000500620004fa620004f48462000302565b620004d5565b62000302565b9050919050565b6000819050919050565b6200051c83620004df565b620005346200052b8262000507565b8484546200047f565b825550505050565b600090565b6200054b6200053c565b6200055881848462000511565b505050565b5b8181101562000580576200057460008262000541565b6001810190506200055e565b5050565b601f821115620005cf5762000599816200044d565b620005a48462000462565b81016020851015620005b4578190505b620005cc620005c38562000462565b8301826200055d565b50505b505050565b600082821c905092915050565b6000620005f460001984600802620005d4565b1980831691505092915050565b60006200060f8383620005e1565b9150826002028217905092915050565b6200062a82620003af565b67ffffffffffffffff811115620006465762000645620003ba565b5b62000652825462000418565b6200065f82828562000584565b600060209050601f83116001811462000697576000841562000682578287015190505b6200068e858262000601565b865550620006fe565b601f198416620006a7866200044d565b60005b82811015620006d157848901518255600182019150602085019450602081019050620006aa565b86831015620006f15784890151620006ed601f891682620005e1565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4d696e74206d756c7469706c696572206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006200077560298362000706565b9150620007828262000717565b604082019050919050565b60006020820190508181036000830152620007a88162000766565b9050919050565b7f5472656173757265722070657263656e74616765206d7573742062652067726560008201527f61746572207468616e207a65726f000000000000000000000000000000000000602082015250565b60006200080d602e8362000706565b91506200081a82620007af565b604082019050919050565b600060208201905081810360008301526200084081620007fe565b9050919050565b7f4275726e206d756c7469706c696572206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000620008a560298362000706565b9150620008b28262000847565b604082019050919050565b60006020820190508181036000830152620008d88162000896565b9050919050565b7f42617365206d756c7469706c696572206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006200093d60298362000706565b91506200094a82620008df565b604082019050919050565b6000602082019050818103600083015262000970816200092e565b9050919050565b61310680620009876000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638a47f9631161011a578063b8947703116100ad578063eb0eec481161007c578063eb0eec48146105cb578063f2fde38b146105e7578063f5bf395f14610603578063fc20b2c51461061f578063fda49eb41461063d57610206565b8063b894770314610543578063ceb63c531461055f578063d60a09551461057d578063dd62ed3e1461059b57610206565b8063a0712d68116100e9578063a0712d68146104a9578063a457c2d7146104c5578063a9059cbb146104f5578063b77a92801461052557610206565b80638a47f963146104335780638da5cb5b1461045157806395d89b411461046f5780639845e7081461048d57610206565b8063395093511161019d578063671d64291161016c578063671d6429146103a55780636e0b65dd146103c157806370a08231146103dd578063715018a61461040d57806379cc67901461041757610206565b8063395093511461031d5780633acd81a51461034d57806342966c681461036b5780634c65c1211461038757610206565b806323b872dd116101d957806323b872dd14610295578063313ce567146102c557806336412688146102e35780633939a897146102ff57610206565b8063043b8cda1461020b57806306fdde0314610229578063095ea7b31461024757806318160ddd14610277575b600080fd5b61021361065b565b6040516102209190612205565b60405180910390f35b610231610665565b60405161023e91906122b9565b60405180910390f35b610261600480360381019061025c919061236a565b6106f7565b60405161026e91906123c5565b60405180910390f35b61027f61071a565b60405161028c9190612205565b60405180910390f35b6102af60048036038101906102aa91906123e0565b610724565b6040516102bc91906123c5565b60405180910390f35b6102cd610753565b6040516102da919061244f565b60405180910390f35b6102fd60048036038101906102f8919061246a565b61075c565b005b6103076108ce565b6040516103149190612205565b60405180910390f35b6103376004803603810190610332919061236a565b6108d4565b60405161034491906123c5565b60405180910390f35b61035561090b565b6040516103629190612205565b60405180910390f35b61038560048036038101906103809190612497565b610911565b005b61038f610a6b565b60405161039c9190612205565b60405180910390f35b6103bf60048036038101906103ba919061246a565b610a75565b005b6103db60048036038101906103d69190612497565b610be7565b005b6103f760048036038101906103f2919061246a565b610ce7565b6040516104049190612205565b60405180910390f35b610415610d2f565b005b610431600480360381019061042c919061236a565b610db7565b005b61043b610dd7565b6040516104489190612205565b60405180910390f35b610459610de1565b60405161046691906124d3565b60405180910390f35b610477610e0b565b60405161048491906122b9565b60405180910390f35b6104a760048036038101906104a29190612497565b610e9d565b005b6104c360048036038101906104be9190612497565b61100b565b005b6104df60048036038101906104da919061236a565b611244565b6040516104ec91906123c5565b60405180910390f35b61050f600480360381019061050a919061236a565b6112bb565b60405161051c91906123c5565b60405180910390f35b61052d6112de565b60405161053a91906124d3565b60405180910390f35b61055d60048036038101906105589190612497565b611304565b005b610567611551565b6040516105749190612205565b60405180910390f35b610585611557565b6040516105929190612205565b60405180910390f35b6105b560048036038101906105b091906124ee565b61155d565b6040516105c29190612205565b60405180910390f35b6105e560048036038101906105e09190612497565b6115e4565b005b61060160048036038101906105fc919061246a565b6116e4565b005b61061d60048036038101906106189190612497565b6117db565b005b6106276118db565b6040516106349190612205565b60405180910390f35b6106456118e5565b60405161065291906124d3565b60405180910390f35b6000600a54905090565b6060600380546106749061255d565b80601f01602080910402602001604051908101604052809291908181526020018280546106a09061255d565b80156106ed5780601f106106c2576101008083540402835291602001916106ed565b820191906000526020600020905b8154815290600101906020018083116106d057829003601f168201915b5050505050905090565b60008061070261190b565b905061070f818585611913565b600191505092915050565b6000600254905090565b60008061072f61190b565b905061073c858285611adc565b610747858585611b68565b60019150509392505050565b60006012905090565b61076461190b565b73ffffffffffffffffffffffffffffffffffffffff16610782610de1565b73ffffffffffffffffffffffffffffffffffffffff16146107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf906125da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e90612646565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5725becf294167e20c2a62ac3745cf857a92c3525f2c71015cbd9cce47027adb60405160405180910390a250565b600b5481565b6000806108df61190b565b90506109008185856108f1858961155d565b6108fb9190612695565b611913565b600191505092915050565b60095481565b61091961190b565b73ffffffffffffffffffffffffffffffffffffffff16610937610de1565b73ffffffffffffffffffffffffffffffffffffffff161461098d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610984906125da565b60405180910390fd5b6002600654036109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990612737565b60405180910390fd5b60026006819055506000600c54600b54836109ed9190612757565b6109f791906127e0565b9050610a0a610a04610de1565b82611de7565b610a12610de1565b73ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb682604051610a579190612205565b60405180910390a250600160068190555050565b6000600b54905090565b610a7d61190b565b73ffffffffffffffffffffffffffffffffffffffff16610a9b610de1565b73ffffffffffffffffffffffffffffffffffffffff1614610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae8906125da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790612646565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fec879c789244c68c9c8f506f7791d267ee2c0a0ce68894482d9e97deca6f27ac60405160405180910390a250565b610bef61190b565b73ffffffffffffffffffffffffffffffffffffffff16610c0d610de1565b73ffffffffffffffffffffffffffffffffffffffff1614610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a906125da565b60405180910390fd5b60008111610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90612883565b60405180910390fd5b80600a819055507f49ae8bcdae0a2a58872f757703b2c9f96782cb6086e09131bb2e1ffb1a33472081604051610cdc9190612205565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d3761190b565b73ffffffffffffffffffffffffffffffffffffffff16610d55610de1565b73ffffffffffffffffffffffffffffffffffffffff1614610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906125da565b60405180910390fd5b610db56000611fbd565b565b610dc982610dc361190b565b83611adc565b610dd38282611de7565b5050565b6000600c54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e1a9061255d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e469061255d565b8015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b5050505050905090565b600260065403610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990612737565b60405180910390fd5b6002600681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f71906128ef565b60405180910390fd5b6000600c54600b5483610f8d9190612757565b610f9791906127e0565b9050610faa610fa4610de1565b82611de7565b610fb2610de1565b73ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb682604051610ff79190612205565b60405180910390a250600160068190555050565b61101361190b565b73ffffffffffffffffffffffffffffffffffffffff16611031610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e906125da565b60405180910390fd5b6002600654036110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390612737565b60405180910390fd5b6002600681905550600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c9061295b565b60405180910390fd5b6000600c54600954836111789190612757565b61118291906127e0565b90506000600c54600a54836111979190612757565b6111a191906127e0565b90506111b46111ae610de1565b83612083565b6111e0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612083565b6111e8610de1565b73ffffffffffffffffffffffffffffffffffffffff167f2e8ac5177a616f2aec08c3048f5021e4e9743ece034e8d83ba5caf76688bb475838360405161122f92919061297b565b60405180910390a25050600160068190555050565b60008061124f61190b565b9050600061125d828661155d565b9050838110156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612a16565b60405180910390fd5b6112af8286868403611913565b60019250505092915050565b6000806112c661190b565b90506112d3818585611b68565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260065403611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090612737565b60405180910390fd5b6002600681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890612a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114699061295b565b60405180910390fd5b6000600c54600954836114859190612757565b61148f91906127e0565b90506000600c54600a54836114a49190612757565b6114ae91906127e0565b90506114c16114bb610de1565b83612083565b6114ed600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612083565b6114f5610de1565b73ffffffffffffffffffffffffffffffffffffffff167f2e8ac5177a616f2aec08c3048f5021e4e9743ece034e8d83ba5caf76688bb475838360405161153c92919061297b565b60405180910390a25050600160068190555050565b600a5481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115ec61190b565b73ffffffffffffffffffffffffffffffffffffffff1661160a610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906125da565b60405180910390fd5b600081116116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90612b14565b60405180910390fd5b806009819055507f26a9c43d1a20766db2ed63b9eebdee8d48d8420b4f77990e89f7f2ac51e3e2f4816040516116d99190612205565b60405180910390a150565b6116ec61190b565b73ffffffffffffffffffffffffffffffffffffffff1661170a610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611757906125da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690612ba6565b60405180910390fd5b6117d881611fbd565b50565b6117e361190b565b73ffffffffffffffffffffffffffffffffffffffff16611801610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906125da565b60405180910390fd5b6000811161189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190612b14565b60405180910390fd5b80600b819055507fad7700d3cee75d0da12afc93ca4ae2bfd1fd998bf13e8ed4cd8cd3d04d80f566816040516118d09190612205565b60405180910390a150565b6000600954905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990612c38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e890612cca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611acf9190612205565b60405180910390a3505050565b6000611ae8848461155d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b625781811015611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90612d36565b60405180910390fd5b611b618484848403611913565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90612dc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d90612e5a565b60405180910390fd5b611c518383836121e2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90612eec565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6a9190612695565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dce9190612205565b60405180910390a3611de18484846121e7565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90612f7e565b60405180910390fd5b611e62826000836121e2565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90613010565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611f3f9190613030565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fa49190612205565b60405180910390a3611fb8836000846121e7565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e9906130b0565b60405180910390fd5b6120fe600083836121e2565b80600260008282546121109190612695565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121659190612695565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ca9190612205565b60405180910390a36121de600083836121e7565b5050565b505050565b505050565b6000819050919050565b6121ff816121ec565b82525050565b600060208201905061221a60008301846121f6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225a57808201518184015260208101905061223f565b83811115612269576000848401525b50505050565b6000601f19601f8301169050919050565b600061228b82612220565b612295818561222b565b93506122a581856020860161223c565b6122ae8161226f565b840191505092915050565b600060208201905081810360008301526122d38184612280565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061230b826122e0565b9050919050565b61231b81612300565b811461232657600080fd5b50565b60008135905061233881612312565b92915050565b612347816121ec565b811461235257600080fd5b50565b6000813590506123648161233e565b92915050565b60008060408385031215612381576123806122db565b5b600061238f85828601612329565b92505060206123a085828601612355565b9150509250929050565b60008115159050919050565b6123bf816123aa565b82525050565b60006020820190506123da60008301846123b6565b92915050565b6000806000606084860312156123f9576123f86122db565b5b600061240786828701612329565b935050602061241886828701612329565b925050604061242986828701612355565b9150509250925092565b600060ff82169050919050565b61244981612433565b82525050565b60006020820190506124646000830184612440565b92915050565b6000602082840312156124805761247f6122db565b5b600061248e84828501612329565b91505092915050565b6000602082840312156124ad576124ac6122db565b5b60006124bb84828501612355565b91505092915050565b6124cd81612300565b82525050565b60006020820190506124e860008301846124c4565b92915050565b60008060408385031215612505576125046122db565b5b600061251385828601612329565b925050602061252485828601612329565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061257557607f821691505b6020821081036125885761258761252e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125c460208361222b565b91506125cf8261258e565b602082019050919050565b600060208201905081810360008301526125f3816125b7565b9050919050565b7f4e6577206164647265737320697320746865207a65726f206164647265737300600082015250565b6000612630601f8361222b565b915061263b826125fa565b602082019050919050565b6000602082019050818103600083015261265f81612623565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126a0826121ec565b91506126ab836121ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126e0576126df612666565b5b828201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612721601f8361222b565b915061272c826126eb565b602082019050919050565b6000602082019050818103600083015261275081612714565b9050919050565b6000612762826121ec565b915061276d836121ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127a6576127a5612666565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127eb826121ec565b91506127f6836121ec565b925082612806576128056127b1565b5b828204905092915050565b7f50657263656e74616765206d7573742062652067726561746572207468616e2060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b600061286d60248361222b565b915061287882612811565b604082019050919050565b6000602082019050818103600083015261289c81612860565b9050919050565b7f4f6e6c79207468652070656720636f6e74726163742063616e206275726e0000600082015250565b60006128d9601e8361222b565b91506128e4826128a3565b602082019050919050565b60006020820190508181036000830152612908816128cc565b9050919050565b7f5472656173757265722061646472657373206e6f742073657400000000000000600082015250565b600061294560198361222b565b91506129508261290f565b602082019050919050565b6000602082019050818103600083015261297481612938565b9050919050565b600060408201905061299060008301856121f6565b61299d60208301846121f6565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612a0060258361222b565b9150612a0b826129a4565b604082019050919050565b60006020820190508181036000830152612a2f816129f3565b9050919050565b7f4f6e6c79207468652070656720636f6e74726163742063616e206d696e740000600082015250565b6000612a6c601e8361222b565b9150612a7782612a36565b602082019050919050565b60006020820190508181036000830152612a9b81612a5f565b9050919050565b7f4d756c7469706c696572206d7573742062652067726561746572207468616e2060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b6000612afe60248361222b565b9150612b0982612aa2565b604082019050919050565b60006020820190508181036000830152612b2d81612af1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b9060268361222b565b9150612b9b82612b34565b604082019050919050565b60006020820190508181036000830152612bbf81612b83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c2260248361222b565b9150612c2d82612bc6565b604082019050919050565b60006020820190508181036000830152612c5181612c15565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cb460228361222b565b9150612cbf82612c58565b604082019050919050565b60006020820190508181036000830152612ce381612ca7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612d20601d8361222b565b9150612d2b82612cea565b602082019050919050565b60006020820190508181036000830152612d4f81612d13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612db260258361222b565b9150612dbd82612d56565b604082019050919050565b60006020820190508181036000830152612de181612da5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4460238361222b565b9150612e4f82612de8565b604082019050919050565b60006020820190508181036000830152612e7381612e37565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612ed660268361222b565b9150612ee182612e7a565b604082019050919050565b60006020820190508181036000830152612f0581612ec9565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f6860218361222b565b9150612f7382612f0c565b604082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ffa60228361222b565b915061300582612f9e565b604082019050919050565b6000602082019050818103600083015261302981612fed565b9050919050565b600061303b826121ec565b9150613046836121ec565b92508282101561305957613058612666565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061309a601f8361222b565b91506130a582613064565b602082019050919050565b600060208201905081810360008301526130c98161308d565b905091905056fea26469706673582212202c10eee20fc9f366a940ca29e1f5fe793785165ab1fcd10d1d6711e6d7fa41ab64736f6c634300080f003300000000000000000000000000000000000000000000000000000000000034150000000000000000000000000000000000000000000000000000000000000ce40000000000000000000000000000000000000000000000000000000000000d020000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638a47f9631161011a578063b8947703116100ad578063eb0eec481161007c578063eb0eec48146105cb578063f2fde38b146105e7578063f5bf395f14610603578063fc20b2c51461061f578063fda49eb41461063d57610206565b8063b894770314610543578063ceb63c531461055f578063d60a09551461057d578063dd62ed3e1461059b57610206565b8063a0712d68116100e9578063a0712d68146104a9578063a457c2d7146104c5578063a9059cbb146104f5578063b77a92801461052557610206565b80638a47f963146104335780638da5cb5b1461045157806395d89b411461046f5780639845e7081461048d57610206565b8063395093511161019d578063671d64291161016c578063671d6429146103a55780636e0b65dd146103c157806370a08231146103dd578063715018a61461040d57806379cc67901461041757610206565b8063395093511461031d5780633acd81a51461034d57806342966c681461036b5780634c65c1211461038757610206565b806323b872dd116101d957806323b872dd14610295578063313ce567146102c557806336412688146102e35780633939a897146102ff57610206565b8063043b8cda1461020b57806306fdde0314610229578063095ea7b31461024757806318160ddd14610277575b600080fd5b61021361065b565b6040516102209190612205565b60405180910390f35b610231610665565b60405161023e91906122b9565b60405180910390f35b610261600480360381019061025c919061236a565b6106f7565b60405161026e91906123c5565b60405180910390f35b61027f61071a565b60405161028c9190612205565b60405180910390f35b6102af60048036038101906102aa91906123e0565b610724565b6040516102bc91906123c5565b60405180910390f35b6102cd610753565b6040516102da919061244f565b60405180910390f35b6102fd60048036038101906102f8919061246a565b61075c565b005b6103076108ce565b6040516103149190612205565b60405180910390f35b6103376004803603810190610332919061236a565b6108d4565b60405161034491906123c5565b60405180910390f35b61035561090b565b6040516103629190612205565b60405180910390f35b61038560048036038101906103809190612497565b610911565b005b61038f610a6b565b60405161039c9190612205565b60405180910390f35b6103bf60048036038101906103ba919061246a565b610a75565b005b6103db60048036038101906103d69190612497565b610be7565b005b6103f760048036038101906103f2919061246a565b610ce7565b6040516104049190612205565b60405180910390f35b610415610d2f565b005b610431600480360381019061042c919061236a565b610db7565b005b61043b610dd7565b6040516104489190612205565b60405180910390f35b610459610de1565b60405161046691906124d3565b60405180910390f35b610477610e0b565b60405161048491906122b9565b60405180910390f35b6104a760048036038101906104a29190612497565b610e9d565b005b6104c360048036038101906104be9190612497565b61100b565b005b6104df60048036038101906104da919061236a565b611244565b6040516104ec91906123c5565b60405180910390f35b61050f600480360381019061050a919061236a565b6112bb565b60405161051c91906123c5565b60405180910390f35b61052d6112de565b60405161053a91906124d3565b60405180910390f35b61055d60048036038101906105589190612497565b611304565b005b610567611551565b6040516105749190612205565b60405180910390f35b610585611557565b6040516105929190612205565b60405180910390f35b6105b560048036038101906105b091906124ee565b61155d565b6040516105c29190612205565b60405180910390f35b6105e560048036038101906105e09190612497565b6115e4565b005b61060160048036038101906105fc919061246a565b6116e4565b005b61061d60048036038101906106189190612497565b6117db565b005b6106276118db565b6040516106349190612205565b60405180910390f35b6106456118e5565b60405161065291906124d3565b60405180910390f35b6000600a54905090565b6060600380546106749061255d565b80601f01602080910402602001604051908101604052809291908181526020018280546106a09061255d565b80156106ed5780601f106106c2576101008083540402835291602001916106ed565b820191906000526020600020905b8154815290600101906020018083116106d057829003601f168201915b5050505050905090565b60008061070261190b565b905061070f818585611913565b600191505092915050565b6000600254905090565b60008061072f61190b565b905061073c858285611adc565b610747858585611b68565b60019150509392505050565b60006012905090565b61076461190b565b73ffffffffffffffffffffffffffffffffffffffff16610782610de1565b73ffffffffffffffffffffffffffffffffffffffff16146107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf906125da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e90612646565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5725becf294167e20c2a62ac3745cf857a92c3525f2c71015cbd9cce47027adb60405160405180910390a250565b600b5481565b6000806108df61190b565b90506109008185856108f1858961155d565b6108fb9190612695565b611913565b600191505092915050565b60095481565b61091961190b565b73ffffffffffffffffffffffffffffffffffffffff16610937610de1565b73ffffffffffffffffffffffffffffffffffffffff161461098d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610984906125da565b60405180910390fd5b6002600654036109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990612737565b60405180910390fd5b60026006819055506000600c54600b54836109ed9190612757565b6109f791906127e0565b9050610a0a610a04610de1565b82611de7565b610a12610de1565b73ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb682604051610a579190612205565b60405180910390a250600160068190555050565b6000600b54905090565b610a7d61190b565b73ffffffffffffffffffffffffffffffffffffffff16610a9b610de1565b73ffffffffffffffffffffffffffffffffffffffff1614610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae8906125da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790612646565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fec879c789244c68c9c8f506f7791d267ee2c0a0ce68894482d9e97deca6f27ac60405160405180910390a250565b610bef61190b565b73ffffffffffffffffffffffffffffffffffffffff16610c0d610de1565b73ffffffffffffffffffffffffffffffffffffffff1614610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a906125da565b60405180910390fd5b60008111610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90612883565b60405180910390fd5b80600a819055507f49ae8bcdae0a2a58872f757703b2c9f96782cb6086e09131bb2e1ffb1a33472081604051610cdc9190612205565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d3761190b565b73ffffffffffffffffffffffffffffffffffffffff16610d55610de1565b73ffffffffffffffffffffffffffffffffffffffff1614610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906125da565b60405180910390fd5b610db56000611fbd565b565b610dc982610dc361190b565b83611adc565b610dd38282611de7565b5050565b6000600c54905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e1a9061255d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e469061255d565b8015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b5050505050905090565b600260065403610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990612737565b60405180910390fd5b6002600681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f71906128ef565b60405180910390fd5b6000600c54600b5483610f8d9190612757565b610f9791906127e0565b9050610faa610fa4610de1565b82611de7565b610fb2610de1565b73ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb682604051610ff79190612205565b60405180910390a250600160068190555050565b61101361190b565b73ffffffffffffffffffffffffffffffffffffffff16611031610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e906125da565b60405180910390fd5b6002600654036110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390612737565b60405180910390fd5b6002600681905550600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c9061295b565b60405180910390fd5b6000600c54600954836111789190612757565b61118291906127e0565b90506000600c54600a54836111979190612757565b6111a191906127e0565b90506111b46111ae610de1565b83612083565b6111e0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612083565b6111e8610de1565b73ffffffffffffffffffffffffffffffffffffffff167f2e8ac5177a616f2aec08c3048f5021e4e9743ece034e8d83ba5caf76688bb475838360405161122f92919061297b565b60405180910390a25050600160068190555050565b60008061124f61190b565b9050600061125d828661155d565b9050838110156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612a16565b60405180910390fd5b6112af8286868403611913565b60019250505092915050565b6000806112c661190b565b90506112d3818585611b68565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260065403611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090612737565b60405180910390fd5b6002600681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890612a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114699061295b565b60405180910390fd5b6000600c54600954836114859190612757565b61148f91906127e0565b90506000600c54600a54836114a49190612757565b6114ae91906127e0565b90506114c16114bb610de1565b83612083565b6114ed600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612083565b6114f5610de1565b73ffffffffffffffffffffffffffffffffffffffff167f2e8ac5177a616f2aec08c3048f5021e4e9743ece034e8d83ba5caf76688bb475838360405161153c92919061297b565b60405180910390a25050600160068190555050565b600a5481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115ec61190b565b73ffffffffffffffffffffffffffffffffffffffff1661160a610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906125da565b60405180910390fd5b600081116116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90612b14565b60405180910390fd5b806009819055507f26a9c43d1a20766db2ed63b9eebdee8d48d8420b4f77990e89f7f2ac51e3e2f4816040516116d99190612205565b60405180910390a150565b6116ec61190b565b73ffffffffffffffffffffffffffffffffffffffff1661170a610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611757906125da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690612ba6565b60405180910390fd5b6117d881611fbd565b50565b6117e361190b565b73ffffffffffffffffffffffffffffffffffffffff16611801610de1565b73ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906125da565b60405180910390fd5b6000811161189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190612b14565b60405180910390fd5b80600b819055507fad7700d3cee75d0da12afc93ca4ae2bfd1fd998bf13e8ed4cd8cd3d04d80f566816040516118d09190612205565b60405180910390a150565b6000600954905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990612c38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e890612cca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611acf9190612205565b60405180910390a3505050565b6000611ae8848461155d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b625781811015611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90612d36565b60405180910390fd5b611b618484848403611913565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90612dc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d90612e5a565b60405180910390fd5b611c518383836121e2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90612eec565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6a9190612695565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dce9190612205565b60405180910390a3611de18484846121e7565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90612f7e565b60405180910390fd5b611e62826000836121e2565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90613010565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611f3f9190613030565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fa49190612205565b60405180910390a3611fb8836000846121e7565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e9906130b0565b60405180910390fd5b6120fe600083836121e2565b80600260008282546121109190612695565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121659190612695565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ca9190612205565b60405180910390a36121de600083836121e7565b5050565b505050565b505050565b6000819050919050565b6121ff816121ec565b82525050565b600060208201905061221a60008301846121f6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225a57808201518184015260208101905061223f565b83811115612269576000848401525b50505050565b6000601f19601f8301169050919050565b600061228b82612220565b612295818561222b565b93506122a581856020860161223c565b6122ae8161226f565b840191505092915050565b600060208201905081810360008301526122d38184612280565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061230b826122e0565b9050919050565b61231b81612300565b811461232657600080fd5b50565b60008135905061233881612312565b92915050565b612347816121ec565b811461235257600080fd5b50565b6000813590506123648161233e565b92915050565b60008060408385031215612381576123806122db565b5b600061238f85828601612329565b92505060206123a085828601612355565b9150509250929050565b60008115159050919050565b6123bf816123aa565b82525050565b60006020820190506123da60008301846123b6565b92915050565b6000806000606084860312156123f9576123f86122db565b5b600061240786828701612329565b935050602061241886828701612329565b925050604061242986828701612355565b9150509250925092565b600060ff82169050919050565b61244981612433565b82525050565b60006020820190506124646000830184612440565b92915050565b6000602082840312156124805761247f6122db565b5b600061248e84828501612329565b91505092915050565b6000602082840312156124ad576124ac6122db565b5b60006124bb84828501612355565b91505092915050565b6124cd81612300565b82525050565b60006020820190506124e860008301846124c4565b92915050565b60008060408385031215612505576125046122db565b5b600061251385828601612329565b925050602061252485828601612329565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061257557607f821691505b6020821081036125885761258761252e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125c460208361222b565b91506125cf8261258e565b602082019050919050565b600060208201905081810360008301526125f3816125b7565b9050919050565b7f4e6577206164647265737320697320746865207a65726f206164647265737300600082015250565b6000612630601f8361222b565b915061263b826125fa565b602082019050919050565b6000602082019050818103600083015261265f81612623565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126a0826121ec565b91506126ab836121ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126e0576126df612666565b5b828201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612721601f8361222b565b915061272c826126eb565b602082019050919050565b6000602082019050818103600083015261275081612714565b9050919050565b6000612762826121ec565b915061276d836121ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127a6576127a5612666565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127eb826121ec565b91506127f6836121ec565b925082612806576128056127b1565b5b828204905092915050565b7f50657263656e74616765206d7573742062652067726561746572207468616e2060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b600061286d60248361222b565b915061287882612811565b604082019050919050565b6000602082019050818103600083015261289c81612860565b9050919050565b7f4f6e6c79207468652070656720636f6e74726163742063616e206275726e0000600082015250565b60006128d9601e8361222b565b91506128e4826128a3565b602082019050919050565b60006020820190508181036000830152612908816128cc565b9050919050565b7f5472656173757265722061646472657373206e6f742073657400000000000000600082015250565b600061294560198361222b565b91506129508261290f565b602082019050919050565b6000602082019050818103600083015261297481612938565b9050919050565b600060408201905061299060008301856121f6565b61299d60208301846121f6565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612a0060258361222b565b9150612a0b826129a4565b604082019050919050565b60006020820190508181036000830152612a2f816129f3565b9050919050565b7f4f6e6c79207468652070656720636f6e74726163742063616e206d696e740000600082015250565b6000612a6c601e8361222b565b9150612a7782612a36565b602082019050919050565b60006020820190508181036000830152612a9b81612a5f565b9050919050565b7f4d756c7469706c696572206d7573742062652067726561746572207468616e2060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b6000612afe60248361222b565b9150612b0982612aa2565b604082019050919050565b60006020820190508181036000830152612b2d81612af1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b9060268361222b565b9150612b9b82612b34565b604082019050919050565b60006020820190508181036000830152612bbf81612b83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c2260248361222b565b9150612c2d82612bc6565b604082019050919050565b60006020820190508181036000830152612c5181612c15565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cb460228361222b565b9150612cbf82612c58565b604082019050919050565b60006020820190508181036000830152612ce381612ca7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612d20601d8361222b565b9150612d2b82612cea565b602082019050919050565b60006020820190508181036000830152612d4f81612d13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612db260258361222b565b9150612dbd82612d56565b604082019050919050565b60006020820190508181036000830152612de181612da5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4460238361222b565b9150612e4f82612de8565b604082019050919050565b60006020820190508181036000830152612e7381612e37565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612ed660268361222b565b9150612ee182612e7a565b604082019050919050565b60006020820190508181036000830152612f0581612ec9565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f6860218361222b565b9150612f7382612f0c565b604082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ffa60228361222b565b915061300582612f9e565b604082019050919050565b6000602082019050818103600083015261302981612fed565b9050919050565b600061303b826121ec565b9150613046836121ec565b92508282101561305957613058612666565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061309a601f8361222b565b91506130a582613064565b602082019050919050565b600060208201905081810360008301526130c98161308d565b905091905056fea26469706673582212202c10eee20fc9f366a940ca29e1f5fe793785165ab1fcd10d1d6711e6d7fa41ab64736f6c634300080f0033

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

00000000000000000000000000000000000000000000000000000000000034150000000000000000000000000000000000000000000000000000000000000ce40000000000000000000000000000000000000000000000000000000000000d020000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : initMintMultiplier (uint256): 13333
Arg [1] : initTreasurerPercentage (uint256): 3300
Arg [2] : initBurnMultiplier (uint256): 3330
Arg [3] : initBaseMultiplier (uint256): 10000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000003415
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000ce4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000d02
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002710


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.