ETH Price: $3,062.20 (-2.31%)
Gas: 3 Gwei

Token

GOGO (GOGO)
 

Overview

Max Total Supply

8,678.759789000000000005 GOGO

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.098398 GOGO

Value
$0.00
0x2a6e07317424dfa497596a2b71d1500c53825463
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GoldToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-18
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

pragma solidity ^0.8.0;

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

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

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


pragma solidity ^0.8.4;

abstract contract AccessControl {
    event RoleGranted(uint8 role, address account, address admin);
    

    /// @notice Fee Decimals look like this: let's assume that you want set 1% transaction fee
    /// @notice well, the decimals are set to 6, so you should set fee equal to (1 * 10^6) to get 1% transaction fee
    /// @dev Later to calculate the %, given amount of trasaction fee will be divided by (10^6 * 100) (to get numeral part of percent)

    mapping(uint8 => uint32) public roleTxnFee;
    mapping(address => uint8) public addressToRole;

    uint8 public constant FEE_DECIMALS = 6;

    uint8 public constant USER = 0;            // DEFAULT
    uint8 public constant ADMIN = 1;           // OWNER
    uint8 public constant ROLE_1 = 2;          // CUSTOM_ROLE_1
    uint8 public constant ROLE_2 = 3;          // CUSTOM_ROLE_2
    uint8 public constant ROLE_3 = 4;          // CUSTOM_ROLE_3
    uint8 public constant ROLE_4 = 5;          // CUSTOM_ROLE_4
    uint8 public constant ROLE_5 = 6;          // CUSTOM_ROLE_5
    uint8 public constant ROLE_6 = 7;          // CUSTOM_ROLE_6
    uint8 public constant ROLE_7 = 8;          // CUSTOM_ROLE_7
    uint8 public constant ROLE_8 = 9;          // CUSTOM_ROLE_8

    event RoleTransactionFeeChanged(uint8 role, uint32 newTxhFee);

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyAdmin() {
        require(addressToRole[msg.sender] == ADMIN, "Function caller is not an ADMIN");
        _;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(uint8 role, address account) public onlyAdmin {
        require(addressToRole[account] != role, "account already has that role");
        _grantRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     */
    function _setupRole(uint8 role, address account) internal {
        _grantRole(role, account);
    }

    function _grantRole(uint8 role, address account) private {
        addressToRole[account] = role;
        emit RoleGranted(role, account, msg.sender);
    }

    /// @notice Sets given transaction fee to the role
    /// @param role The uint32 role.
    /// @param txhFee The amount of fee in percent.
    function setRoleTxnFee(uint8 role, uint32 txhFee) public onlyAdmin {
        require(txhFee <= 100000000, "[Transaction Fee]: Fee cannot be more than 100%");

        roleTxnFee[role] = txhFee;

        emit RoleTransactionFeeChanged(role, txhFee);
    }
}

pragma solidity ^0.8.4;

interface IERC20MintBurn is IERC20Metadata {
	function mint(address to, uint256 amount) external;

	function burn(address userAddress, uint256 amount) external;
} 

pragma solidity ^0.8.4;


contract GoldToken is IERC20MintBurn, AccessControl {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;
    
    address public transactionFeeCollector;
    address public bridgeAddress;

    string private _name;
    string private _symbol;

    event TransactionFeeCollected(uint256 amount);

    modifier onlyBridge {
        require(msg.sender == bridgeAddress, "Only Bridge can call this function");
        _;
    }

    constructor() {
        _name = "GOGO";
        _symbol = "GOGO";

        _setupRole(ADMIN, msg.sender); // Sets role admin to deployer
    }

    function setBridgeAddress(address newBridgeAddress) external onlyAdmin {
        require(newBridgeAddress != bridgeAddress, "Provided address is current bridge address");
        bridgeAddress = newBridgeAddress;
    }
    /**
     * @dev Returns the name of the token.
     */
    function name() public view override returns (string memory) {
        return _name;
    }

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

    /**
     * @dev Returns the number of decimals used to get its ROLE_3 representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a ROLE_3 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 pure override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);

        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);

        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked { _approve(sender, msg.sender, currentAllowance - amount); }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][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 returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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


    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked { _balances[sender] = senderBalance - amount; } 

        uint256 transactionFeeCost = (amount * roleTxnFee[addressToRole[sender]]) / 100000000;
        
        _balances[transactionFeeCollector] += transactionFeeCost; // amount * (transactionFeePercent /  100)
        _balances[recipient] += amount - transactionFeeCost; // amount - amount * transactionFee * AccessControl.feeDecimalMultiplier
        
        emit TransactionFeeCollected(transactionFeeCost);
        
        emit Transfer(sender, recipient, amount - transactionFeeCost);
    }

    /** @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 {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(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 {
        require(account != address(0), "ERC20: burn from the zero address");

        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);
    }

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

    /// @notice Sets new transaction fee collector address
    /// @param newAddress The new transaction fee collector address
    function setTransactionFeeCollector(address newAddress) public onlyAdmin {
        transactionFeeCollector = newAddress;
    }

    function mint(address to, uint256 amount) external onlyBridge override {
        _mint(to, amount);
    }

    function burn(address userAddress, uint256 amount) external onlyBridge override {
        _burn(userAddress, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"uint32","name":"newTxhFee","type":"uint32"}],"name":"RoleTransactionFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransactionFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADMIN","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_1","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_2","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_3","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_4","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_5","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_6","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_7","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROLE_8","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToRole","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"roleTxnFee","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newBridgeAddress","type":"address"}],"name":"setBridgeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"uint32","name":"txhFee","type":"uint32"}],"name":"setRoleTxnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTransactionFeeCollector","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":[],"name":"transactionFeeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060408051808201909152600480825263474f474f60e01b60209092019182526200003f91600791620000ff565b5060408051808201909152600480825263474f474f60e01b60209092019182526200006d91600891620000ff565b506200007b60013362000081565b620001e2565b6200008d828262000091565b5050565b6001600160a01b038116600081815260016020908152604091829020805460ff191660ff871690811790915582519081529081019290925233908201527f570d3756e5b890fbf84c01fc2daf898fa7e95ae3ca9f1ed5edf012eacb5c6ce69060600160405180910390a15050565b8280546200010d90620001a5565b90600052602060002090601f0160209004810192826200013157600085556200017c565b82601f106200014c57805160ff19168380011785556200017c565b828001600101855582156200017c579182015b828111156200017c5782518255916020019190600101906200015f565b506200018a9291506200018e565b5090565b5b808211156200018a57600081556001016200018f565b600181811c90821680620001ba57607f821691505b60208210811415620001dc57634e487b7160e01b600052602260045260246000fd5b50919050565b61135480620001f26000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637e8a51901161010f578063b9d60df6116100a2578063cdec68bb11610071578063cdec68bb1461042e578063cf09958014610426578063dd62ed3e14610436578063e951f0b21461046f57600080fd5b8063b9d60df614610403578063c84c43b11461040b578063caeced8b1461041e578063ccf288c61461042657600080fd5b80639dc29fac116100de5780639dc29fac1461039f578063a3c573eb146103b2578063a457c2d7146103dd578063a9059cbb146103f057600080fd5b80637e8a5190146103745780637f5a22f91461037c57806381e167cf1461038f57806395d89b411461039757600080fd5b8063313ce5671161018757806340c10f191161015657806340c10f19146103025780635d5664e11461031557806368aa9d1a1461032857806370a082311461034b57600080fd5b8063313ce567146102a557806332753d47146102ac57806339509351146102e75780633b1b00f7146102fa57600080fd5b806318160ddd116101c357806318160ddd1461025e57806323b872dd146102705780632a0acc6a146102835780632ca65c011461029d57600080fd5b806306fdde03146101f55780630854780b14610213578063095ea7b3146102285780630a4b92dc1461024b575b600080fd5b6101fd610477565b60405161020a919061118f565b60405180910390f35b61022661022136600461114f565b610509565b005b61023b6102363660046110ee565b61061a565b604051901515815260200161020a565b61022661025936600461105d565b610630565b6004545b60405190815260200161020a565b61023b61027e3660046110b2565b610685565b61028b600181565b60405160ff909116815260200161020a565b61028b600881565b601261028b565b6102d26102ba366004611118565b60006020819052908152604090205463ffffffff1681565b60405163ffffffff909116815260200161020a565b61023b6102f53660046110ee565b61072f565b61028b600481565b6102266103103660046110ee565b61076b565b610226610323366004611133565b6107a3565b61028b61033636600461105d565b60016020526000908152604090205460ff1681565b61026261035936600461105d565b6001600160a01b031660009081526002602052604090205490565b61028b600381565b61022661038a36600461105d565b61084e565b61028b600081565b6101fd610914565b6102266103ad3660046110ee565b610923565b6006546103c5906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b61023b6103eb3660046110ee565b610957565b61023b6103fe3660046110ee565b6109f0565b61028b600581565b6005546103c5906001600160a01b031681565b61028b600281565b61028b600681565b61028b600981565b61026261044436600461107f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61028b600781565b606060078054610486906112cd565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906112cd565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b3360009081526001602081905260409091205460ff16146105455760405162461bcd60e51b815260040161053c906111e4565b60405180910390fd5b6305f5e1008163ffffffff1611156105b75760405162461bcd60e51b815260206004820152602f60248201527f5b5472616e73616374696f6e204665655d3a204665652063616e6e6f7420626560448201526e206d6f7265207468616e203130302560881b606482015260840161053c565b60ff821660008181526020818152604091829020805463ffffffff191663ffffffff86169081179091558251938452908301527f05cfac8b3431c51bba3d142c06f98ee13f8ef3fe7ccabe59b91cef40c66e73ec91015b60405180910390a15050565b60006106273384846109fd565b50600192915050565b3360009081526001602081905260409091205460ff16146106635760405162461bcd60e51b815260040161053c906111e4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610692848484610b22565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107175760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161053c565b61072485338584036109fd565b506001949350505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161062791859061076690869061125d565b6109fd565b6006546001600160a01b031633146107955760405162461bcd60e51b815260040161053c9061121b565b61079f8282610da4565b5050565b3360009081526001602081905260409091205460ff16146107d65760405162461bcd60e51b815260040161053c906111e4565b6001600160a01b03811660009081526001602052604090205460ff838116911614156108445760405162461bcd60e51b815260206004820152601d60248201527f6163636f756e7420616c726561647920686173207468617420726f6c65000000604482015260640161053c565b61079f8282610e83565b3360009081526001602081905260409091205460ff16146108815760405162461bcd60e51b815260040161053c906111e4565b6006546001600160a01b03828116911614156108f25760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420616464726573732069732063757272656e7420627269646044820152696765206164647265737360b01b606482015260840161053c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b606060088054610486906112cd565b6006546001600160a01b0316331461094d5760405162461bcd60e51b815260040161053c9061121b565b61079f8282610eea565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156109d95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161053c565b6109e633858584036109fd565b5060019392505050565b6000610627338484610b22565b6001600160a01b038316610a5f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161053c565b6001600160a01b038216610ac05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161053c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610b865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161053c565b6001600160a01b038216610be85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161053c565b6001600160a01b03831660009081526002602052604090205481811015610c605760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161053c565b6001600160a01b03841660009081526002602090815260408083208585039055600182528083205460ff168352908290528120546305f5e10090610caa9063ffffffff1685611297565b610cb49190611275565b6005546001600160a01b0316600090815260026020526040812080549293508392909190610ce390849061125d565b90915550610cf3905081846112b6565b6001600160a01b03851660009081526002602052604081208054909190610d1b90849061125d565b90915550506040518181527f2c4c1a77446dbedae137ecd38c1731d1363e54b2a44a8f73d335fd0eb1bc85989060200160405180910390a16001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610d8c84876112b6565b60405190815260200160405180910390a35050505050565b6001600160a01b038216610dfa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161053c565b8060046000828254610e0c919061125d565b90915550506001600160a01b03821660009081526002602052604081208054839290610e3990849061125d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038116600081815260016020908152604091829020805460ff191660ff871690811790915582519081529081019290925233908201527f570d3756e5b890fbf84c01fc2daf898fa7e95ae3ca9f1ed5edf012eacb5c6ce69060600161060e565b6001600160a01b038216610f4a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161053c565b6001600160a01b03821660009081526002602052604090205481811015610fbe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161053c565b6001600160a01b0383166000908152600260205260408120838303905560048054849290610fed9084906112b6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b15565b80356001600160a01b038116811461104757600080fd5b919050565b803560ff8116811461104757600080fd5b60006020828403121561106f57600080fd5b61107882611030565b9392505050565b6000806040838503121561109257600080fd5b61109b83611030565b91506110a960208401611030565b90509250929050565b6000806000606084860312156110c757600080fd5b6110d084611030565b92506110de60208501611030565b9150604084013590509250925092565b6000806040838503121561110157600080fd5b61110a83611030565b946020939093013593505050565b60006020828403121561112a57600080fd5b6110788261104c565b6000806040838503121561114657600080fd5b61109b8361104c565b6000806040838503121561116257600080fd5b61116b8361104c565b9150602083013563ffffffff8116811461118457600080fd5b809150509250929050565b600060208083528351808285015260005b818110156111bc578581018301518582016040015282016111a0565b818111156111ce576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f46756e6374696f6e2063616c6c6572206973206e6f7420616e2041444d494e00604082015260600190565b60208082526022908201527f4f6e6c79204272696467652063616e2063616c6c20746869732066756e63746960408201526137b760f11b606082015260800190565b6000821982111561127057611270611308565b500190565b60008261129257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156112b1576112b1611308565b500290565b6000828210156112c8576112c8611308565b500390565b600181811c908216806112e157607f821691505b6020821081141561130257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212208acc30bb88b88a80ca1f421f0c8193ed6b2ee0dca70b721c761d93a582b30e4464736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637e8a51901161010f578063b9d60df6116100a2578063cdec68bb11610071578063cdec68bb1461042e578063cf09958014610426578063dd62ed3e14610436578063e951f0b21461046f57600080fd5b8063b9d60df614610403578063c84c43b11461040b578063caeced8b1461041e578063ccf288c61461042657600080fd5b80639dc29fac116100de5780639dc29fac1461039f578063a3c573eb146103b2578063a457c2d7146103dd578063a9059cbb146103f057600080fd5b80637e8a5190146103745780637f5a22f91461037c57806381e167cf1461038f57806395d89b411461039757600080fd5b8063313ce5671161018757806340c10f191161015657806340c10f19146103025780635d5664e11461031557806368aa9d1a1461032857806370a082311461034b57600080fd5b8063313ce567146102a557806332753d47146102ac57806339509351146102e75780633b1b00f7146102fa57600080fd5b806318160ddd116101c357806318160ddd1461025e57806323b872dd146102705780632a0acc6a146102835780632ca65c011461029d57600080fd5b806306fdde03146101f55780630854780b14610213578063095ea7b3146102285780630a4b92dc1461024b575b600080fd5b6101fd610477565b60405161020a919061118f565b60405180910390f35b61022661022136600461114f565b610509565b005b61023b6102363660046110ee565b61061a565b604051901515815260200161020a565b61022661025936600461105d565b610630565b6004545b60405190815260200161020a565b61023b61027e3660046110b2565b610685565b61028b600181565b60405160ff909116815260200161020a565b61028b600881565b601261028b565b6102d26102ba366004611118565b60006020819052908152604090205463ffffffff1681565b60405163ffffffff909116815260200161020a565b61023b6102f53660046110ee565b61072f565b61028b600481565b6102266103103660046110ee565b61076b565b610226610323366004611133565b6107a3565b61028b61033636600461105d565b60016020526000908152604090205460ff1681565b61026261035936600461105d565b6001600160a01b031660009081526002602052604090205490565b61028b600381565b61022661038a36600461105d565b61084e565b61028b600081565b6101fd610914565b6102266103ad3660046110ee565b610923565b6006546103c5906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b61023b6103eb3660046110ee565b610957565b61023b6103fe3660046110ee565b6109f0565b61028b600581565b6005546103c5906001600160a01b031681565b61028b600281565b61028b600681565b61028b600981565b61026261044436600461107f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61028b600781565b606060078054610486906112cd565b80601f01602080910402602001604051908101604052809291908181526020018280546104b2906112cd565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b3360009081526001602081905260409091205460ff16146105455760405162461bcd60e51b815260040161053c906111e4565b60405180910390fd5b6305f5e1008163ffffffff1611156105b75760405162461bcd60e51b815260206004820152602f60248201527f5b5472616e73616374696f6e204665655d3a204665652063616e6e6f7420626560448201526e206d6f7265207468616e203130302560881b606482015260840161053c565b60ff821660008181526020818152604091829020805463ffffffff191663ffffffff86169081179091558251938452908301527f05cfac8b3431c51bba3d142c06f98ee13f8ef3fe7ccabe59b91cef40c66e73ec91015b60405180910390a15050565b60006106273384846109fd565b50600192915050565b3360009081526001602081905260409091205460ff16146106635760405162461bcd60e51b815260040161053c906111e4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610692848484610b22565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107175760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161053c565b61072485338584036109fd565b506001949350505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161062791859061076690869061125d565b6109fd565b6006546001600160a01b031633146107955760405162461bcd60e51b815260040161053c9061121b565b61079f8282610da4565b5050565b3360009081526001602081905260409091205460ff16146107d65760405162461bcd60e51b815260040161053c906111e4565b6001600160a01b03811660009081526001602052604090205460ff838116911614156108445760405162461bcd60e51b815260206004820152601d60248201527f6163636f756e7420616c726561647920686173207468617420726f6c65000000604482015260640161053c565b61079f8282610e83565b3360009081526001602081905260409091205460ff16146108815760405162461bcd60e51b815260040161053c906111e4565b6006546001600160a01b03828116911614156108f25760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420616464726573732069732063757272656e7420627269646044820152696765206164647265737360b01b606482015260840161053c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b606060088054610486906112cd565b6006546001600160a01b0316331461094d5760405162461bcd60e51b815260040161053c9061121b565b61079f8282610eea565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156109d95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161053c565b6109e633858584036109fd565b5060019392505050565b6000610627338484610b22565b6001600160a01b038316610a5f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161053c565b6001600160a01b038216610ac05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161053c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610b865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161053c565b6001600160a01b038216610be85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161053c565b6001600160a01b03831660009081526002602052604090205481811015610c605760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161053c565b6001600160a01b03841660009081526002602090815260408083208585039055600182528083205460ff168352908290528120546305f5e10090610caa9063ffffffff1685611297565b610cb49190611275565b6005546001600160a01b0316600090815260026020526040812080549293508392909190610ce390849061125d565b90915550610cf3905081846112b6565b6001600160a01b03851660009081526002602052604081208054909190610d1b90849061125d565b90915550506040518181527f2c4c1a77446dbedae137ecd38c1731d1363e54b2a44a8f73d335fd0eb1bc85989060200160405180910390a16001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610d8c84876112b6565b60405190815260200160405180910390a35050505050565b6001600160a01b038216610dfa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161053c565b8060046000828254610e0c919061125d565b90915550506001600160a01b03821660009081526002602052604081208054839290610e3990849061125d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038116600081815260016020908152604091829020805460ff191660ff871690811790915582519081529081019290925233908201527f570d3756e5b890fbf84c01fc2daf898fa7e95ae3ca9f1ed5edf012eacb5c6ce69060600161060e565b6001600160a01b038216610f4a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161053c565b6001600160a01b03821660009081526002602052604090205481811015610fbe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161053c565b6001600160a01b0383166000908152600260205260408120838303905560048054849290610fed9084906112b6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b15565b80356001600160a01b038116811461104757600080fd5b919050565b803560ff8116811461104757600080fd5b60006020828403121561106f57600080fd5b61107882611030565b9392505050565b6000806040838503121561109257600080fd5b61109b83611030565b91506110a960208401611030565b90509250929050565b6000806000606084860312156110c757600080fd5b6110d084611030565b92506110de60208501611030565b9150604084013590509250925092565b6000806040838503121561110157600080fd5b61110a83611030565b946020939093013593505050565b60006020828403121561112a57600080fd5b6110788261104c565b6000806040838503121561114657600080fd5b61109b8361104c565b6000806040838503121561116257600080fd5b61116b8361104c565b9150602083013563ffffffff8116811461118457600080fd5b809150509250929050565b600060208083528351808285015260005b818110156111bc578581018301518582016040015282016111a0565b818111156111ce576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f46756e6374696f6e2063616c6c6572206973206e6f7420616e2041444d494e00604082015260600190565b60208082526022908201527f4f6e6c79204272696467652063616e2063616c6c20746869732066756e63746960408201526137b760f11b606082015260800190565b6000821982111561127057611270611308565b500190565b60008261129257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156112b1576112b1611308565b500290565b6000828210156112c8576112c8611308565b500390565b600181811c908216806112e157607f821691505b6020821081141561130257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212208acc30bb88b88a80ca1f421f0c8193ed6b2ee0dca70b721c761d93a582b30e4464736f6c63430008070033

Deployed Bytecode Sourcemap

7214:9797:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8215:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6720:260;;;;;;:::i;:::-;;:::i;:::-;;10330:161;;;;;;:::i;:::-;;:::i;:::-;;;2573:14:1;;2566:22;2548:41;;2536:2;2521:18;10330:161:0;2408:187:1;16632:128:0;;;;;;:::i;:::-;;:::i;9315:100::-;9395:12;;9315:100;;;9301:25:1;;;9289:2;9274:18;9315:100:0;9155:177:1;10973:424:0;;;;;;:::i;:::-;;:::i;4090:31::-;;4120:1;4090:31;;;;;9706:4:1;9694:17;;;9676:36;;9664:2;9649:18;4090:31:0;9534:184:1;4537:32:0;;4568:1;4537:32;;9165:85;9240:2;9165:85;;3880:42;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;9511:10:1;9499:23;;;9481:42;;9469:2;9454:18;3880:42:0;9337:192:1;11806:203:0;;;;;;:::i;:::-;;:::i;4277:32::-;;4308:1;4277:32;;16768:107;;;;;;:::i;:::-;;:::i;5521:192::-;;;;;;:::i;:::-;;:::i;3929:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9478:119;;;;;;:::i;:::-;-1:-1:-1;;;;;9571:18:0;9544:7;9571:18;;;:9;:18;;;;;;;9478:119;4212:32;;4243:1;4212:32;;7926:221;;;;;;:::i;:::-;;:::i;4031:30::-;;4060:1;4031:30;;8426:96;;;:::i;16883:125::-;;;;;;:::i;:::-;;:::i;7489:28::-;;;;;-1:-1:-1;;;;;7489:28:0;;;;;;-1:-1:-1;;;;;2364:32:1;;;2346:51;;2334:2;2319:18;7489:28:0;2200:203:1;12512:401:0;;;;;;:::i;:::-;;:::i;9810:167::-;;;;;;:::i;:::-;;:::i;4342:32::-;;4373:1;4342:32;;7444:38;;;;;-1:-1:-1;;;;;7444:38:0;;;4147:32;;4178:1;4147:32;;3984:38;;4021:1;3984:38;;4602:32;;4633:1;4602:32;;10040:143;;;;;;:::i;:::-;-1:-1:-1;;;;;10148:18:0;;;10121:7;10148:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10040:143;4472:32;;4503:1;4472:32;;8215:92;8261:13;8294:5;8287:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8215:92;:::o;6720:260::-;5183:10;5169:25;;;;4120:1;5169:25;;;;;;;;;:34;:25;:34;5161:78;;;;-1:-1:-1;;;5161:78:0;;;;;;;:::i;:::-;;;;;;;;;6816:9:::1;6806:6;:19;;;;6798:79;;;::::0;-1:-1:-1;;;6798:79:0;;6962:2:1;6798:79:0::1;::::0;::::1;6944:21:1::0;7001:2;6981:18;;;6974:30;7040:34;7020:18;;;7013:62;-1:-1:-1;;;7091:18:1;;;7084:45;7146:19;;6798:79:0::1;6760:411:1::0;6798:79:0::1;6890:16;::::0;::::1;:10;:16:::0;;;::::1;::::0;;;;;;;;:25;;-1:-1:-1;;6890:25:0::1;;::::0;::::1;::::0;;::::1;::::0;;;6933:39;;10278:36:1;;;10330:18;;;10323:51;6933:39:0::1;::::0;10251:18:1;6933:39:0::1;;;;;;;;6720:260:::0;;:::o;10330:161::-;10405:4;10422:37;10431:10;10443:7;10452:6;10422:8;:37::i;:::-;-1:-1:-1;10479:4:0;10330:161;;;;:::o;16632:128::-;5183:10;5169:25;;;;4120:1;5169:25;;;;;;;;;:34;:25;:34;5161:78;;;;-1:-1:-1;;;5161:78:0;;;;;;;:::i;:::-;16716:23:::1;:36:::0;;-1:-1:-1;;;;;;16716:36:0::1;-1:-1:-1::0;;;;;16716:36:0;;;::::1;::::0;;;::::1;::::0;;16632:128::o;10973:424::-;11071:4;11088:36;11098:6;11106:9;11117:6;11088:9;:36::i;:::-;-1:-1:-1;;;;;11164:19:0;;11137:24;11164:19;;;:11;:19;;;;;;;;11184:10;11164:31;;;;;;;;11214:26;;;;11206:79;;;;-1:-1:-1;;;11206:79:0;;6553:2:1;11206:79:0;;;6535:21:1;6592:2;6572:18;;;6565:30;6631:34;6611:18;;;6604:62;-1:-1:-1;;;6682:18:1;;;6675:38;6730:19;;11206:79:0;6351:404:1;11206:79:0;11308:55;11317:6;11325:10;11356:6;11337:16;:25;11308:8;:55::i;:::-;-1:-1:-1;11385:4:0;;10973:424;-1:-1:-1;;;;10973:424:0:o;11806:203::-;11912:10;11886:4;11933:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11933:32:0;;;;;;;;;;11886:4;;11903:76;;11924:7;;11933:45;;11968:10;;11933:45;:::i;:::-;11903:8;:76::i;16768:107::-;7691:13;;-1:-1:-1;;;;;7691:13:0;7677:10;:27;7669:74;;;;-1:-1:-1;;;7669:74:0;;;;;;;:::i;:::-;16850:17:::1;16856:2;16860:6;16850:5;:17::i;:::-;16768:107:::0;;:::o;5521:192::-;5183:10;5169:25;;;;4120:1;5169:25;;;;;;;;;:34;:25;:34;5161:78;;;;-1:-1:-1;;;5161:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5605:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;:30:::1;::::0;;::::1;:22:::0;::::1;:30;;5597:72;;;::::0;-1:-1:-1;;;5597:72:0;;4614:2:1;5597:72:0::1;::::0;::::1;4596:21:1::0;4653:2;4633:18;;;4626:30;4692:31;4672:18;;;4665:59;4741:18;;5597:72:0::1;4412:353:1::0;5597:72:0::1;5680:25;5691:4;5697:7;5680:10;:25::i;7926:221::-:0;5183:10;5169:25;;;;4120:1;5169:25;;;;;;;;;:34;:25;:34;5161:78;;;;-1:-1:-1;;;5161:78:0;;;;;;;:::i;:::-;8036:13:::1;::::0;-1:-1:-1;;;;;8016:33:0;;::::1;8036:13:::0;::::1;8016:33;;8008:88;;;::::0;-1:-1:-1;;;8008:88:0;;5332:2:1;8008:88:0::1;::::0;::::1;5314:21:1::0;5371:2;5351:18;;;5344:30;5410:34;5390:18;;;5383:62;-1:-1:-1;;;5461:18:1;;;5454:40;5511:19;;8008:88:0::1;5130:406:1::0;8008:88:0::1;8107:13;:32:::0;;-1:-1:-1;;;;;;8107:32:0::1;-1:-1:-1::0;;;;;8107:32:0;;;::::1;::::0;;;::::1;::::0;;7926:221::o;8426:96::-;8474:13;8507:7;8500:14;;;;;:::i;16883:125::-;7691:13;;-1:-1:-1;;;;;7691:13:0;7677:10;:27;7669:74;;;;-1:-1:-1;;;7669:74:0;;;;;;;:::i;:::-;16974:26:::1;16980:11;16993:6;16974:5;:26::i;12512:401::-:0;12653:10;12597:4;12641:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12641:32:0;;;;;;;;;;12692:35;;;;12684:85;;;;-1:-1:-1;;;12684:85:0;;8591:2:1;12684:85:0;;;8573:21:1;8630:2;8610:18;;;8603:30;8669:34;8649:18;;;8642:62;-1:-1:-1;;;8720:18:1;;;8713:35;8765:19;;12684:85:0;8389:401:1;12684:85:0;12805:65;12814:10;12826:7;12854:15;12835:16;:34;12805:8;:65::i;:::-;-1:-1:-1;12901:4:0;;12512:401;-1:-1:-1;;;12512:401:0:o;9810:167::-;9888:4;9905:40;9915:10;9927:9;9938:6;9905:9;:40::i;16157:338::-;-1:-1:-1;;;;;16251:19:0;;16243:68;;;;-1:-1:-1;;;16243:68:0;;8186:2:1;16243:68:0;;;8168:21:1;8225:2;8205:18;;;8198:30;8264:34;8244:18;;;8237:62;-1:-1:-1;;;8315:18:1;;;8308:34;8359:19;;16243:68:0;7984:400:1;16243:68:0;-1:-1:-1;;;;;16330:21:0;;16322:68;;;;-1:-1:-1;;;16322:68:0;;4211:2:1;16322:68:0;;;4193:21:1;4250:2;4230:18;;;4223:30;4289:34;4269:18;;;4262:62;-1:-1:-1;;;4340:18:1;;;4333:32;4382:19;;16322:68:0;4009:398:1;16322:68:0;-1:-1:-1;;;;;16403:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16455:32;;9301:25:1;;;16455:32:0;;9274:18:1;16455:32:0;;;;;;;;16157:338;;;:::o;13408:963::-;-1:-1:-1;;;;;13506:20:0;;13498:70;;;;-1:-1:-1;;;13498:70:0;;7780:2:1;13498:70:0;;;7762:21:1;7819:2;7799:18;;;7792:30;7858:34;7838:18;;;7831:62;-1:-1:-1;;;7909:18:1;;;7902:35;7954:19;;13498:70:0;7578:401:1;13498:70:0;-1:-1:-1;;;;;13587:23:0;;13579:71;;;;-1:-1:-1;;;13579:71:0;;3404:2:1;13579:71:0;;;3386:21:1;3443:2;3423:18;;;3416:30;3482:34;3462:18;;;3455:62;-1:-1:-1;;;3533:18:1;;;3526:33;3576:19;;13579:71:0;3202:399:1;13579:71:0;-1:-1:-1;;;;;13687:17:0;;13663:21;13687:17;;;:9;:17;;;;;;13723:23;;;;13715:74;;;;-1:-1:-1;;;13715:74:0;;5743:2:1;13715:74:0;;;5725:21:1;5782:2;5762:18;;;5755:30;5821:34;5801:18;;;5794:62;-1:-1:-1;;;5872:18:1;;;5865:36;5918:19;;13715:74:0;5541:402:1;13715:74:0;-1:-1:-1;;;;;13814:17:0;;;;;;:9;:17;;;;;;;;13834:22;;;13814:42;;13922:13;:21;;;;;;;;13911:33;;;;;;;;;13948:9;;13902:42;;13911:33;;13850:6;13902:42;:::i;:::-;13901:56;;;;:::i;:::-;13988:23;;-1:-1:-1;;;;;13988:23:0;13978:34;;;;:9;:34;;;;;:56;;13872:85;;-1:-1:-1;13872:85:0;;13978:34;;;:56;;13872:85;;13978:56;:::i;:::-;;;;-1:-1:-1;14112:27:0;;-1:-1:-1;14121:18:0;14112:6;:27;:::i;:::-;-1:-1:-1;;;;;14088:20:0;;;;;;:9;:20;;;;;:51;;:20;;;:51;;;;;:::i;:::-;;;;-1:-1:-1;;14238:43:0;;9301:25:1;;;14238:43:0;;9289:2:1;9274:18;14238:43:0;;;;;;;-1:-1:-1;;;;;14307:56:0;;;;;;;14335:27;14344:18;14335:6;:27;:::i;:::-;14307:56;;9301:25:1;;;9289:2;9274:18;14307:56:0;;;;;;;13487:884;;13408:963;;;:::o;14658:268::-;-1:-1:-1;;;;;14734:21:0;;14726:65;;;;-1:-1:-1;;;14726:65:0;;8997:2:1;14726:65:0;;;8979:21:1;9036:2;9016:18;;;9009:30;9075:33;9055:18;;;9048:61;9126:18;;14726:65:0;8795:355:1;14726:65:0;14820:6;14804:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14837:18:0;;;;;;:9;:18;;;;;:28;;14859:6;;14837:18;:28;;14859:6;;14837:28;:::i;:::-;;;;-1:-1:-1;;14881:37:0;;9301:25:1;;;-1:-1:-1;;;;;14881:37:0;;;14898:1;;14881:37;;9289:2:1;9274:18;14881:37:0;;;;;;;14658:268;;:::o;6406:159::-;-1:-1:-1;;;;;6474:22:0;;;;;;:13;:22;;;;;;;;;:29;;-1:-1:-1;;6474:29:0;;;;;;;;;;6519:38;;9921:36:1;;;10011:18;;;10004:43;;;;6546:10:0;10063:18:1;;;10056:43;6519:38:0;;9909:2:1;9894:18;6519:38:0;9723:382:1;15259:460:0;-1:-1:-1;;;;;15335:21:0;;15327:67;;;;-1:-1:-1;;;15327:67:0;;7378:2:1;15327:67:0;;;7360:21:1;7417:2;7397:18;;;7390:30;7456:34;7436:18;;;7429:62;-1:-1:-1;;;7507:18:1;;;7500:31;7548:19;;15327:67:0;7176:397:1;15327:67:0;-1:-1:-1;;;;;15432:18:0;;15407:22;15432:18;;;:9;:18;;;;;;15469:24;;;;15461:71;;;;-1:-1:-1;;;15461:71:0;;3808:2:1;15461:71:0;;;3790:21:1;3847:2;3827:18;;;3820:30;3886:34;3866:18;;;3859:62;-1:-1:-1;;;3937:18:1;;;3930:32;3979:19;;15461:71:0;3606:398:1;15461:71:0;-1:-1:-1;;;;;15568:18:0;;;;;;:9;:18;;;;;15589:23;;;15568:44;;15634:12;:22;;15606:6;;15568:18;15634:22;;15606:6;;15634:22;:::i;:::-;;;;-1:-1:-1;;15674:37:0;;9301:25:1;;;15700:1:0;;-1:-1:-1;;;;;15674:37:0;;;;;9289:2:1;9274:18;15674:37:0;9155:177:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:156::-;258:20;;318:4;307:16;;297:27;;287:55;;338:1;335;328:12;353:186;412:6;465:2;453:9;444:7;440:23;436:32;433:52;;;481:1;478;471:12;433:52;504:29;523:9;504:29;:::i;:::-;494:39;353:186;-1:-1:-1;;;353:186:1:o;544:260::-;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;712:29;731:9;712:29;:::i;:::-;702:39;;760:38;794:2;783:9;779:18;760:38;:::i;:::-;750:48;;544:260;;;;;:::o;809:328::-;886:6;894;902;955:2;943:9;934:7;930:23;926:32;923:52;;;971:1;968;961:12;923:52;994:29;1013:9;994:29;:::i;:::-;984:39;;1042:38;1076:2;1065:9;1061:18;1042:38;:::i;:::-;1032:48;;1127:2;1116:9;1112:18;1099:32;1089:42;;809:328;;;;;:::o;1142:254::-;1210:6;1218;1271:2;1259:9;1250:7;1246:23;1242:32;1239:52;;;1287:1;1284;1277:12;1239:52;1310:29;1329:9;1310:29;:::i;:::-;1300:39;1386:2;1371:18;;;;1358:32;;-1:-1:-1;;;1142:254:1:o;1401:182::-;1458:6;1511:2;1499:9;1490:7;1486:23;1482:32;1479:52;;;1527:1;1524;1517:12;1479:52;1550:27;1567:9;1550:27;:::i;1588:256::-;1654:6;1662;1715:2;1703:9;1694:7;1690:23;1686:32;1683:52;;;1731:1;1728;1721:12;1683:52;1754:27;1771:9;1754:27;:::i;1849:346::-;1914:6;1922;1975:2;1963:9;1954:7;1950:23;1946:32;1943:52;;;1991:1;1988;1981:12;1943:52;2014:27;2031:9;2014:27;:::i;:::-;2004:37;;2091:2;2080:9;2076:18;2063:32;2135:10;2128:5;2124:22;2117:5;2114:33;2104:61;;2161:1;2158;2151:12;2104:61;2184:5;2174:15;;;1849:346;;;;;:::o;2600:597::-;2712:4;2741:2;2770;2759:9;2752:21;2802:6;2796:13;2845:6;2840:2;2829:9;2825:18;2818:34;2870:1;2880:140;2894:6;2891:1;2888:13;2880:140;;;2989:14;;;2985:23;;2979:30;2955:17;;;2974:2;2951:26;2944:66;2909:10;;2880:140;;;3038:6;3035:1;3032:13;3029:91;;;3108:1;3103:2;3094:6;3083:9;3079:22;3075:31;3068:42;3029:91;-1:-1:-1;3181:2:1;3160:15;-1:-1:-1;;3156:29:1;3141:45;;;;3188:2;3137:54;;2600:597;-1:-1:-1;;;2600:597:1:o;4770:355::-;4972:2;4954:21;;;5011:2;4991:18;;;4984:30;5050:33;5045:2;5030:18;;5023:61;5116:2;5101:18;;4770:355::o;5948:398::-;6150:2;6132:21;;;6189:2;6169:18;;;6162:30;6228:34;6223:2;6208:18;;6201:62;-1:-1:-1;;;6294:2:1;6279:18;;6272:32;6336:3;6321:19;;5948:398::o;10385:128::-;10425:3;10456:1;10452:6;10449:1;10446:13;10443:39;;;10462:18;;:::i;:::-;-1:-1:-1;10498:9:1;;10385:128::o;10518:217::-;10558:1;10584;10574:132;;10628:10;10623:3;10619:20;10616:1;10609:31;10663:4;10660:1;10653:15;10691:4;10688:1;10681:15;10574:132;-1:-1:-1;10720:9:1;;10518:217::o;10740:168::-;10780:7;10846:1;10842;10838:6;10834:14;10831:1;10828:21;10823:1;10816:9;10809:17;10805:45;10802:71;;;10853:18;;:::i;:::-;-1:-1:-1;10893:9:1;;10740:168::o;10913:125::-;10953:4;10981:1;10978;10975:8;10972:34;;;10986:18;;:::i;:::-;-1:-1:-1;11023:9:1;;10913:125::o;11043:380::-;11122:1;11118:12;;;;11165;;;11186:61;;11240:4;11232:6;11228:17;11218:27;;11186:61;11293:2;11285:6;11282:14;11262:18;11259:38;11256:161;;;11339:10;11334:3;11330:20;11327:1;11320:31;11374:4;11371:1;11364:15;11402:4;11399:1;11392:15;11256:161;;11043:380;;;:::o;11428:127::-;11489:10;11484:3;11480:20;11477:1;11470:31;11520:4;11517:1;11510:15;11544:4;11541:1;11534:15

Swarm Source

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