ETH Price: $3,398.54 (+1.51%)

Token

MoonTrain (MTRAIN)
 

Overview

Max Total Supply

999,000,000 MTRAIN

Holders

235

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0xfrobo.eth
Balance
4,550,131.832894867191277215 MTRAIN

Value
$0.00
0xce29a04b0b577627a49b01b11cb6b1b05706894c
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:
MoonTrain

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-19
*/

// ███╗   ███╗ ██████╗  ██████╗ ███╗   ██╗████████╗██████╗  █████╗ ██╗███╗   ██╗
// ████╗ ████║██╔═══██╗██╔═══██╗████╗  ██║╚══██╔══╝██╔══██╗██╔══██╗██║████╗  ██║
// ██╔████╔██║██║   ██║██║   ██║██╔██╗ ██║   ██║   ██████╔╝███████║██║██╔██╗ ██║
// ██║╚██╔╝██║██║   ██║██║   ██║██║╚██╗██║   ██║   ██╔══██╗██╔══██║██║██║╚██╗██║
// ██║ ╚═╝ ██║╚██████╔╝╚██████╔╝██║ ╚████║   ██║   ██║  ██║██║  ██║██║██║ ╚████║
// ╚═╝     ╚═╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝

// Website: https://moontrain.vip
// Telegram: https://t.me/MoonTrainETH
// Twitter: https://twitter.com/MoonTrainETH
// Medium: https://medium.com/@MoonTrain
                                                                             

// SPDX-License-Identifier: MIT
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;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IUniswapV2Pair {
    function token0() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

contract MoonTrain is ERC20, Ownable {
    using SafeMath for uint256;

    uint256 private constant _tTotal = 999000000 * 10**18;
    address private _uniswapV2Pair = 0x000000000000000000000000000000000000dEaD;
    uint256 public _tResC = _tTotal.mul(90).div(100);
    uint256 public _tResL = _tTotal.mul(92).div(100);
    uint256 public _tResTimestamp;
    bool private _startTrading;

    constructor() ERC20("MoonTrain", "MTRAIN") {
        _mint(msg.sender, _tTotal);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override virtual {
        if (from == _uniswapV2Pair || to == _uniswapV2Pair) {
            require(_startTrading, "Trading is not enabled");

            if (from == _uniswapV2Pair) {
                uint _tRes = getTokensReserves();

                if (_tRes < _tResC || _tResC == 0){
                    _tResC = _tResC.sub(amount.mul(80).div(100));
                }

                if (_tResL > _tRes || _tResL == 0) {
                    _tResL = _tRes;
                    _tResTimestamp = block.timestamp;
                }
            }

            if (to == _uniswapV2Pair) {
                require(getSwapPossibleForAddress(from) >= amount, "Sell is not possible");
            }
        }

        super._beforeTokenTransfer(from, to, amount);
    }

    function getTokensReserves() public view returns (uint256) {
        require(_uniswapV2Pair != 0x000000000000000000000000000000000000dEaD, "Pair not set");
        (uint256 _res0, uint256 _res1,) = IUniswapV2Pair(_uniswapV2Pair).getReserves();
        return IUniswapV2Pair(_uniswapV2Pair).token0() == address(this) ? _res0 : _res1;
    }

    function getEtherReserves() public view returns (uint256) {
        require(_uniswapV2Pair != 0x000000000000000000000000000000000000dEaD, "Pair not set");
        (uint256 _res0, uint256 _res1,) = IUniswapV2Pair(_uniswapV2Pair).getReserves();
        return IUniswapV2Pair(_uniswapV2Pair).token0() == address(this) ? _res1 : _res0;
    }

    function getSwapPossibleForAddress(address _address) public view returns (uint256) {
        uint256 _maxSwapAmount = _tResC.mul(2).div(100);
        uint256 _balance = balanceOf(_address);
        uint256 _tokensReserves = getTokensReserves();
        uint256 _etherReserves = getEtherReserves();
        uint256 _elapsedTime = block.timestamp - _tResTimestamp;

        if (_etherReserves > 1000 ether || _elapsedTime > 90 days){
            return _balance;
        } else if ( _tokensReserves.add(_maxSwapAmount) < _tResC && _balance >= _maxSwapAmount ){
            return _maxSwapAmount;
        } else if (_tokensReserves.add(_maxSwapAmount) < _tResC && _balance < _maxSwapAmount){
            return _balance;
        } else {
            return 0;
        } 
    }

    function setPair(address _pairAddress) public onlyOwner {
        _uniswapV2Pair = _pairAddress;
    }

    function startTrading() public onlyOwner {
        _startTrading = true;
    }
}

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":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":"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":"_tResC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tResL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tResTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"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":"getEtherReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getSwapPossibleForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensReserves","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pairAddress","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000088606462000074605a6b033a5a7a8401b34f47000000620001b360201b6200116a1790919060201c565b620001cb60201b620011801790919060201c565b600755620000cc6064620000b8605c6b033a5a7a8401b34f47000000620001b360201b6200116a1790919060201c565b620001cb60201b620011801790919060201c565b600855348015620000dc57600080fd5b506040518060400160405280600981526020017f4d6f6f6e547261696e00000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d545241494e000000000000000000000000000000000000000000000000000081525081600390816200015a919062000f91565b5080600490816200016c919062000f91565b5050506200018f62000183620001e360201b60201c565b620001eb60201b60201c565b620001ad336b033a5a7a8401b34f47000000620002b160201b60201c565b6200155a565b60008183620001c39190620010a7565b905092915050565b60008183620001db919062001121565b905092915050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031a90620011ba565b60405180910390fd5b62000337600083836200042960201b60201c565b80600260008282546200034b9190620011dc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a29190620011dc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000409919062001228565b60405180910390a36200042560008383620006fa60201b60201c565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620004d35750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15620006dd57600a60009054906101000a900460ff166200052b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005229062001295565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200062f57600062000593620006ff60201b60201c565b9050600754811080620005a857506000600754145b156200060557620005fe620005e76064620005d3605086620001b360201b6200116a1790919060201c565b620001cb60201b620011801790919060201c565b6007546200092960201b620011961790919060201c565b6007819055505b8060085411806200061857506000600854145b156200062d5780600881905550426009819055505b505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006dc578062000697846200094160201b60201c565b1015620006db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d29062001307565b60405180910390fd5b5b5b620006f583838362000a8860201b620011ac1760201c565b505050565b505050565b600061dead73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078d9062001379565b60405180910390fd5b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000807573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200082d91906200142c565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691503073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008fd9190620014ed565b73ffffffffffffffffffffffffffffffffffffffff161462000920578062000922565b815b9250505090565b600081836200093991906200151f565b905092915050565b6000806200097b6064620009676002600754620001b360201b6200116a1790919060201c565b620001cb60201b620011801790919060201c565b90506000620009908462000a8d60201b60201c565b90506000620009a4620006ff60201b60201c565b90506000620009b862000ad560201b60201c565b9050600060095442620009cc91906200151f565b9050683635c9adc5dea00000821180620009e857506276a70081115b15620009fc57839550505050505062000a83565b60075462000a19868562000cff60201b620011b11790919060201c565b10801562000a275750848410155b1562000a3b57849550505050505062000a83565b60075462000a58868562000cff60201b620011b11790919060201c565b10801562000a6557508484105b1562000a7957839550505050505062000a83565b6000955050505050505b919050565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061dead73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160362000b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b639062001379565b60405180910390fd5b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000bdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0391906200142c565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691503073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000cad573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cd39190620014ed565b73ffffffffffffffffffffffffffffffffffffffff161462000cf6578162000cf8565b805b9250505090565b6000818362000d0f9190620011dc565b905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d9957607f821691505b60208210810362000daf5762000dae62000d51565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dda565b62000e25868362000dda565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e7262000e6c62000e668462000e3d565b62000e47565b62000e3d565b9050919050565b6000819050919050565b62000e8e8362000e51565b62000ea662000e9d8262000e79565b84845462000de7565b825550505050565b600090565b62000ebd62000eae565b62000eca81848462000e83565b505050565b5b8181101562000ef25762000ee660008262000eb3565b60018101905062000ed0565b5050565b601f82111562000f415762000f0b8162000db5565b62000f168462000dca565b8101602085101562000f26578190505b62000f3e62000f358562000dca565b83018262000ecf565b50505b505050565b600082821c905092915050565b600062000f666000198460080262000f46565b1980831691505092915050565b600062000f81838362000f53565b9150826002028217905092915050565b62000f9c8262000d17565b67ffffffffffffffff81111562000fb85762000fb762000d22565b5b62000fc4825462000d80565b62000fd182828562000ef6565b600060209050601f83116001811462001009576000841562000ff4578287015190505b62001000858262000f73565b86555062001070565b601f198416620010198662000db5565b60005b8281101562001043578489015182556001820191506020850194506020810190506200101c565b868310156200106357848901516200105f601f89168262000f53565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010b48262000e3d565b9150620010c18362000e3d565b9250828202620010d18162000e3d565b91508282048414831517620010eb57620010ea62001078565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200112e8262000e3d565b91506200113b8362000e3d565b9250826200114e576200114d620010f2565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011a2601f8362001159565b9150620011af826200116a565b602082019050919050565b60006020820190508181036000830152620011d58162001193565b9050919050565b6000620011e98262000e3d565b9150620011f68362000e3d565b925082820190508082111562001211576200121062001078565b5b92915050565b620012228162000e3d565b82525050565b60006020820190506200123f600083018462001217565b92915050565b7f54726164696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b60006200127d60168362001159565b91506200128a8262001245565b602082019050919050565b60006020820190508181036000830152620012b0816200126e565b9050919050565b7f53656c6c206973206e6f7420706f737369626c65000000000000000000000000600082015250565b6000620012ef60148362001159565b9150620012fc82620012b7565b602082019050919050565b600060208201905081810360008301526200132281620012e0565b9050919050565b7f50616972206e6f74207365740000000000000000000000000000000000000000600082015250565b600062001361600c8362001159565b91506200136e8262001329565b602082019050919050565b60006020820190508181036000830152620013948162001352565b9050919050565b600080fd5b60006dffffffffffffffffffffffffffff82169050919050565b620013c581620013a0565b8114620013d157600080fd5b50565b600081519050620013e581620013ba565b92915050565b600063ffffffff82169050919050565b6200140681620013eb565b81146200141257600080fd5b50565b6000815190506200142681620013fb565b92915050565b6000806000606084860312156200144857620014476200139b565b5b60006200145886828701620013d4565b93505060206200146b86828701620013d4565b92505060406200147e8682870162001415565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620014b58262001488565b9050919050565b620014c781620014a8565b8114620014d357600080fd5b50565b600081519050620014e781620014bc565b92915050565b6000602082840312156200150657620015056200139b565b5b60006200151684828501620014d6565b91505092915050565b60006200152c8262000e3d565b9150620015398362000e3d565b925082820390508181111562001554576200155362001078565b5b92915050565b6125a5806200156a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a9059cbb1161007c578063a9059cbb14610369578063d2ef41ed14610399578063d7369603146103b7578063dd62ed3e146103d5578063f2fde38b14610405578063f35622cf1461042157610142565b8063715018a6146102d75780638187f516146102e15780638da5cb5b146102fd57806395d89b411461031b578063a457c2d71461033957610142565b8063293230b81161010a578063293230b814610201578063313ce5671461020b57806331452d4f1461022957806339509351146102595780635156ccac1461028957806370a08231146102a757610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b357806328e775a0146101e3575b600080fd5b61014f61043f565b60405161015c9190611a03565b60405180910390f35b61017f600480360381019061017a9190611abe565b6104d1565b60405161018c9190611b19565b60405180910390f35b61019d6104ef565b6040516101aa9190611b43565b60405180910390f35b6101cd60048036038101906101c89190611b5e565b6104f9565b6040516101da9190611b19565b60405180910390f35b6101eb6105f1565b6040516101f89190611b43565b60405180910390f35b6102096105f7565b005b610213610690565b6040516102209190611bcd565b60405180910390f35b610243600480360381019061023e9190611be8565b610699565b6040516102509190611b43565b60405180910390f35b610273600480360381019061026e9190611abe565b6107a1565b6040516102809190611b19565b60405180910390f35b61029161084d565b60405161029e9190611b43565b60405180910390f35b6102c160048036038101906102bc9190611be8565b610853565b6040516102ce9190611b43565b60405180910390f35b6102df61089b565b005b6102fb60048036038101906102f69190611be8565b610923565b005b6103056109e3565b6040516103129190611c24565b60405180910390f35b610323610a0d565b6040516103309190611a03565b60405180910390f35b610353600480360381019061034e9190611abe565b610a9f565b6040516103609190611b19565b60405180910390f35b610383600480360381019061037e9190611abe565b610b8a565b6040516103909190611b19565b60405180910390f35b6103a1610ba8565b6040516103ae9190611b43565b60405180910390f35b6103bf610dc7565b6040516103cc9190611b43565b60405180910390f35b6103ef60048036038101906103ea9190611c3f565b610dcd565b6040516103fc9190611b43565b60405180910390f35b61041f600480360381019061041a9190611be8565b610e54565b005b610429610f4b565b6040516104369190611b43565b60405180910390f35b60606003805461044e90611cae565b80601f016020809104026020016040519081016040528092919081815260200182805461047a90611cae565b80156104c75780601f1061049c576101008083540402835291602001916104c7565b820191906000526020600020905b8154815290600101906020018083116104aa57829003601f168201915b5050505050905090565b60006104e56104de6111c7565b84846111cf565b6001905092915050565b6000600254905090565b6000610506848484611398565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105516111c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c890611d51565b60405180910390fd5b6105e5856105dd6111c7565b8584036111cf565b60019150509392505050565b60085481565b6105ff6111c7565b73ffffffffffffffffffffffffffffffffffffffff1661061d6109e3565b73ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90611dbd565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b60006012905090565b6000806106c560646106b7600260075461116a90919063ffffffff16565b61118090919063ffffffff16565b905060006106d284610853565b905060006106de610f4b565b905060006106ea610ba8565b90506000600954426106fc9190611e0c565b9050683635c9adc5dea0000082118061071757506276a70081115b1561072957839550505050505061079c565b60075461073f86856111b190919063ffffffff16565b10801561074c5750848410155b1561075e57849550505050505061079c565b60075461077486856111b190919063ffffffff16565b10801561078057508484105b1561079257839550505050505061079c565b6000955050505050505b919050565b60006108436107ae6111c7565b8484600160006107bc6111c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461083e9190611e40565b6111cf565b6001905092915050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108a36111c7565b73ffffffffffffffffffffffffffffffffffffffff166108c16109e3565b73ffffffffffffffffffffffffffffffffffffffff1614610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90611dbd565b60405180910390fd5b6109216000611617565b565b61092b6111c7565b73ffffffffffffffffffffffffffffffffffffffff166109496109e3565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690611dbd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a1c90611cae565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890611cae565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050905090565b60008060016000610aae6111c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290611ee6565b60405180910390fd5b610b7f610b766111c7565b858584036111cf565b600191505092915050565b6000610b9e610b976111c7565b8484611398565b6001905092915050565b600061dead73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390611f52565b60405180910390fd5b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd09190611ff4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691503073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d919061205c565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe5781610dc0565b805b9250505090565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e5c6111c7565b73ffffffffffffffffffffffffffffffffffffffff16610e7a6109e3565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790611dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f36906120fb565b60405180910390fd5b610f4881611617565b50565b600061dead73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd690611f52565b60405180910390fd5b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190611ff4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691503073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611140919061205c565b73ffffffffffffffffffffffffffffffffffffffff16146111615780611163565b815b9250505090565b60008183611178919061211b565b905092915050565b6000818361118e919061218c565b905092915050565b600081836111a49190611e0c565b905092915050565b505050565b600081836111bf9190611e40565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112359061222f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a4906122c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161138b9190611b43565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612353565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906123e5565b60405180910390fd5b6114818383836116dd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90612477565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159a9190611e40565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115fe9190611b43565b60405180910390a361161184848461196e565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806117865750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561195e57600a60009054906101000a900460ff166117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906124e3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118bc576000611839610f4b565b905060075481108061184d57506000600754145b156118945761188d61187c606461186e60508661116a90919063ffffffff16565b61118090919063ffffffff16565b60075461119690919063ffffffff16565b6007819055505b8060085411806118a657506000600854145b156118ba5780600881905550426009819055505b505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195d578061191b84610699565b101561195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119539061254f565b60405180910390fd5b5b5b6119698383836111ac565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119ad578082015181840152602081019050611992565b60008484015250505050565b6000601f19601f8301169050919050565b60006119d582611973565b6119df818561197e565b93506119ef81856020860161198f565b6119f8816119b9565b840191505092915050565b60006020820190508181036000830152611a1d81846119ca565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a5582611a2a565b9050919050565b611a6581611a4a565b8114611a7057600080fd5b50565b600081359050611a8281611a5c565b92915050565b6000819050919050565b611a9b81611a88565b8114611aa657600080fd5b50565b600081359050611ab881611a92565b92915050565b60008060408385031215611ad557611ad4611a25565b5b6000611ae385828601611a73565b9250506020611af485828601611aa9565b9150509250929050565b60008115159050919050565b611b1381611afe565b82525050565b6000602082019050611b2e6000830184611b0a565b92915050565b611b3d81611a88565b82525050565b6000602082019050611b586000830184611b34565b92915050565b600080600060608486031215611b7757611b76611a25565b5b6000611b8586828701611a73565b9350506020611b9686828701611a73565b9250506040611ba786828701611aa9565b9150509250925092565b600060ff82169050919050565b611bc781611bb1565b82525050565b6000602082019050611be26000830184611bbe565b92915050565b600060208284031215611bfe57611bfd611a25565b5b6000611c0c84828501611a73565b91505092915050565b611c1e81611a4a565b82525050565b6000602082019050611c396000830184611c15565b92915050565b60008060408385031215611c5657611c55611a25565b5b6000611c6485828601611a73565b9250506020611c7585828601611a73565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611cc657607f821691505b602082108103611cd957611cd8611c7f565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611d3b60288361197e565b9150611d4682611cdf565b604082019050919050565b60006020820190508181036000830152611d6a81611d2e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611da760208361197e565b9150611db282611d71565b602082019050919050565b60006020820190508181036000830152611dd681611d9a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e1782611a88565b9150611e2283611a88565b9250828203905081811115611e3a57611e39611ddd565b5b92915050565b6000611e4b82611a88565b9150611e5683611a88565b9250828201905080821115611e6e57611e6d611ddd565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ed060258361197e565b9150611edb82611e74565b604082019050919050565b60006020820190508181036000830152611eff81611ec3565b9050919050565b7f50616972206e6f74207365740000000000000000000000000000000000000000600082015250565b6000611f3c600c8361197e565b9150611f4782611f06565b602082019050919050565b60006020820190508181036000830152611f6b81611f2f565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b611f9581611f72565b8114611fa057600080fd5b50565b600081519050611fb281611f8c565b92915050565b600063ffffffff82169050919050565b611fd181611fb8565b8114611fdc57600080fd5b50565b600081519050611fee81611fc8565b92915050565b60008060006060848603121561200d5761200c611a25565b5b600061201b86828701611fa3565b935050602061202c86828701611fa3565b925050604061203d86828701611fdf565b9150509250925092565b60008151905061205681611a5c565b92915050565b60006020828403121561207257612071611a25565b5b600061208084828501612047565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120e560268361197e565b91506120f082612089565b604082019050919050565b60006020820190508181036000830152612114816120d8565b9050919050565b600061212682611a88565b915061213183611a88565b925082820261213f81611a88565b9150828204841483151761215657612155611ddd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061219782611a88565b91506121a283611a88565b9250826121b2576121b161215d565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061221960248361197e565b9150612224826121bd565b604082019050919050565b600060208201905081810360008301526122488161220c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006122ab60228361197e565b91506122b68261224f565b604082019050919050565b600060208201905081810360008301526122da8161229e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061233d60258361197e565b9150612348826122e1565b604082019050919050565b6000602082019050818103600083015261236c81612330565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006123cf60238361197e565b91506123da82612373565b604082019050919050565b600060208201905081810360008301526123fe816123c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061246160268361197e565b915061246c82612405565b604082019050919050565b6000602082019050818103600083015261249081612454565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b60006124cd60168361197e565b91506124d882612497565b602082019050919050565b600060208201905081810360008301526124fc816124c0565b9050919050565b7f53656c6c206973206e6f7420706f737369626c65000000000000000000000000600082015250565b600061253960148361197e565b915061254482612503565b602082019050919050565b600060208201905081810360008301526125688161252c565b905091905056fea2646970667358221220da712ffbcf0b874f591c0a6ba02441c0388c5db799014aca4f2022a9253ff9e264736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a9059cbb1161007c578063a9059cbb14610369578063d2ef41ed14610399578063d7369603146103b7578063dd62ed3e146103d5578063f2fde38b14610405578063f35622cf1461042157610142565b8063715018a6146102d75780638187f516146102e15780638da5cb5b146102fd57806395d89b411461031b578063a457c2d71461033957610142565b8063293230b81161010a578063293230b814610201578063313ce5671461020b57806331452d4f1461022957806339509351146102595780635156ccac1461028957806370a08231146102a757610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b357806328e775a0146101e3575b600080fd5b61014f61043f565b60405161015c9190611a03565b60405180910390f35b61017f600480360381019061017a9190611abe565b6104d1565b60405161018c9190611b19565b60405180910390f35b61019d6104ef565b6040516101aa9190611b43565b60405180910390f35b6101cd60048036038101906101c89190611b5e565b6104f9565b6040516101da9190611b19565b60405180910390f35b6101eb6105f1565b6040516101f89190611b43565b60405180910390f35b6102096105f7565b005b610213610690565b6040516102209190611bcd565b60405180910390f35b610243600480360381019061023e9190611be8565b610699565b6040516102509190611b43565b60405180910390f35b610273600480360381019061026e9190611abe565b6107a1565b6040516102809190611b19565b60405180910390f35b61029161084d565b60405161029e9190611b43565b60405180910390f35b6102c160048036038101906102bc9190611be8565b610853565b6040516102ce9190611b43565b60405180910390f35b6102df61089b565b005b6102fb60048036038101906102f69190611be8565b610923565b005b6103056109e3565b6040516103129190611c24565b60405180910390f35b610323610a0d565b6040516103309190611a03565b60405180910390f35b610353600480360381019061034e9190611abe565b610a9f565b6040516103609190611b19565b60405180910390f35b610383600480360381019061037e9190611abe565b610b8a565b6040516103909190611b19565b60405180910390f35b6103a1610ba8565b6040516103ae9190611b43565b60405180910390f35b6103bf610dc7565b6040516103cc9190611b43565b60405180910390f35b6103ef60048036038101906103ea9190611c3f565b610dcd565b6040516103fc9190611b43565b60405180910390f35b61041f600480360381019061041a9190611be8565b610e54565b005b610429610f4b565b6040516104369190611b43565b60405180910390f35b60606003805461044e90611cae565b80601f016020809104026020016040519081016040528092919081815260200182805461047a90611cae565b80156104c75780601f1061049c576101008083540402835291602001916104c7565b820191906000526020600020905b8154815290600101906020018083116104aa57829003601f168201915b5050505050905090565b60006104e56104de6111c7565b84846111cf565b6001905092915050565b6000600254905090565b6000610506848484611398565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105516111c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156105d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c890611d51565b60405180910390fd5b6105e5856105dd6111c7565b8584036111cf565b60019150509392505050565b60085481565b6105ff6111c7565b73ffffffffffffffffffffffffffffffffffffffff1661061d6109e3565b73ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90611dbd565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b60006012905090565b6000806106c560646106b7600260075461116a90919063ffffffff16565b61118090919063ffffffff16565b905060006106d284610853565b905060006106de610f4b565b905060006106ea610ba8565b90506000600954426106fc9190611e0c565b9050683635c9adc5dea0000082118061071757506276a70081115b1561072957839550505050505061079c565b60075461073f86856111b190919063ffffffff16565b10801561074c5750848410155b1561075e57849550505050505061079c565b60075461077486856111b190919063ffffffff16565b10801561078057508484105b1561079257839550505050505061079c565b6000955050505050505b919050565b60006108436107ae6111c7565b8484600160006107bc6111c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461083e9190611e40565b6111cf565b6001905092915050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108a36111c7565b73ffffffffffffffffffffffffffffffffffffffff166108c16109e3565b73ffffffffffffffffffffffffffffffffffffffff1614610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90611dbd565b60405180910390fd5b6109216000611617565b565b61092b6111c7565b73ffffffffffffffffffffffffffffffffffffffff166109496109e3565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690611dbd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a1c90611cae565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890611cae565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050905090565b60008060016000610aae6111c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290611ee6565b60405180910390fd5b610b7f610b766111c7565b858584036111cf565b600191505092915050565b6000610b9e610b976111c7565b8484611398565b6001905092915050565b600061dead73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390611f52565b60405180910390fd5b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd09190611ff4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691503073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d919061205c565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe5781610dc0565b805b9250505090565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e5c6111c7565b73ffffffffffffffffffffffffffffffffffffffff16610e7a6109e3565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790611dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f36906120fb565b60405180910390fd5b610f4881611617565b50565b600061dead73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd690611f52565b60405180910390fd5b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190611ff4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691503073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611140919061205c565b73ffffffffffffffffffffffffffffffffffffffff16146111615780611163565b815b9250505090565b60008183611178919061211b565b905092915050565b6000818361118e919061218c565b905092915050565b600081836111a49190611e0c565b905092915050565b505050565b600081836111bf9190611e40565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112359061222f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a4906122c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161138b9190611b43565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612353565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906123e5565b60405180910390fd5b6114818383836116dd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90612477565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159a9190611e40565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115fe9190611b43565b60405180910390a361161184848461196e565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806117865750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561195e57600a60009054906101000a900460ff166117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906124e3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118bc576000611839610f4b565b905060075481108061184d57506000600754145b156118945761188d61187c606461186e60508661116a90919063ffffffff16565b61118090919063ffffffff16565b60075461119690919063ffffffff16565b6007819055505b8060085411806118a657506000600854145b156118ba5780600881905550426009819055505b505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195d578061191b84610699565b101561195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119539061254f565b60405180910390fd5b5b5b6119698383836111ac565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119ad578082015181840152602081019050611992565b60008484015250505050565b6000601f19601f8301169050919050565b60006119d582611973565b6119df818561197e565b93506119ef81856020860161198f565b6119f8816119b9565b840191505092915050565b60006020820190508181036000830152611a1d81846119ca565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a5582611a2a565b9050919050565b611a6581611a4a565b8114611a7057600080fd5b50565b600081359050611a8281611a5c565b92915050565b6000819050919050565b611a9b81611a88565b8114611aa657600080fd5b50565b600081359050611ab881611a92565b92915050565b60008060408385031215611ad557611ad4611a25565b5b6000611ae385828601611a73565b9250506020611af485828601611aa9565b9150509250929050565b60008115159050919050565b611b1381611afe565b82525050565b6000602082019050611b2e6000830184611b0a565b92915050565b611b3d81611a88565b82525050565b6000602082019050611b586000830184611b34565b92915050565b600080600060608486031215611b7757611b76611a25565b5b6000611b8586828701611a73565b9350506020611b9686828701611a73565b9250506040611ba786828701611aa9565b9150509250925092565b600060ff82169050919050565b611bc781611bb1565b82525050565b6000602082019050611be26000830184611bbe565b92915050565b600060208284031215611bfe57611bfd611a25565b5b6000611c0c84828501611a73565b91505092915050565b611c1e81611a4a565b82525050565b6000602082019050611c396000830184611c15565b92915050565b60008060408385031215611c5657611c55611a25565b5b6000611c6485828601611a73565b9250506020611c7585828601611a73565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611cc657607f821691505b602082108103611cd957611cd8611c7f565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611d3b60288361197e565b9150611d4682611cdf565b604082019050919050565b60006020820190508181036000830152611d6a81611d2e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611da760208361197e565b9150611db282611d71565b602082019050919050565b60006020820190508181036000830152611dd681611d9a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e1782611a88565b9150611e2283611a88565b9250828203905081811115611e3a57611e39611ddd565b5b92915050565b6000611e4b82611a88565b9150611e5683611a88565b9250828201905080821115611e6e57611e6d611ddd565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ed060258361197e565b9150611edb82611e74565b604082019050919050565b60006020820190508181036000830152611eff81611ec3565b9050919050565b7f50616972206e6f74207365740000000000000000000000000000000000000000600082015250565b6000611f3c600c8361197e565b9150611f4782611f06565b602082019050919050565b60006020820190508181036000830152611f6b81611f2f565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b611f9581611f72565b8114611fa057600080fd5b50565b600081519050611fb281611f8c565b92915050565b600063ffffffff82169050919050565b611fd181611fb8565b8114611fdc57600080fd5b50565b600081519050611fee81611fc8565b92915050565b60008060006060848603121561200d5761200c611a25565b5b600061201b86828701611fa3565b935050602061202c86828701611fa3565b925050604061203d86828701611fdf565b9150509250925092565b60008151905061205681611a5c565b92915050565b60006020828403121561207257612071611a25565b5b600061208084828501612047565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120e560268361197e565b91506120f082612089565b604082019050919050565b60006020820190508181036000830152612114816120d8565b9050919050565b600061212682611a88565b915061213183611a88565b925082820261213f81611a88565b9150828204841483151761215657612155611ddd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061219782611a88565b91506121a283611a88565b9250826121b2576121b161215d565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061221960248361197e565b9150612224826121bd565b604082019050919050565b600060208201905081810360008301526122488161220c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006122ab60228361197e565b91506122b68261224f565b604082019050919050565b600060208201905081810360008301526122da8161229e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061233d60258361197e565b9150612348826122e1565b604082019050919050565b6000602082019050818103600083015261236c81612330565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006123cf60238361197e565b91506123da82612373565b604082019050919050565b600060208201905081810360008301526123fe816123c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061246160268361197e565b915061246c82612405565b604082019050919050565b6000602082019050818103600083015261249081612454565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b60006124cd60168361197e565b91506124d882612497565b602082019050919050565b600060208201905081810360008301526124fc816124c0565b9050919050565b7f53656c6c206973206e6f7420706f737369626c65000000000000000000000000600082015250565b600061253960148361197e565b915061254482612503565b602082019050919050565b600060208201905081810360008301526125688161252c565b905091905056fea2646970667358221220da712ffbcf0b874f591c0a6ba02441c0388c5db799014aca4f2022a9253ff9e264736f6c63430008120033

Deployed Bytecode Sourcemap

26891:3067:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16582:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18749:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17702:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19400:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27167:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29875:80;;;:::i;:::-;;17544:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28966:789;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20301:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27222:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17873:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10494:103;;;:::i;:::-;;29763:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9843:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16801:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21019:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18213:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28617:341;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27112:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18451:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10752:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28267:342;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16582:100;16636:13;16669:5;16662:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16582:100;:::o;18749:169::-;18832:4;18849:39;18858:12;:10;:12::i;:::-;18872:7;18881:6;18849:8;:39::i;:::-;18906:4;18899:11;;18749:169;;;;:::o;17702:108::-;17763:7;17790:12;;17783:19;;17702:108;:::o;19400:492::-;19540:4;19557:36;19567:6;19575:9;19586:6;19557:9;:36::i;:::-;19606:24;19633:11;:19;19645:6;19633:19;;;;;;;;;;;;;;;:33;19653:12;:10;:12::i;:::-;19633:33;;;;;;;;;;;;;;;;19606:60;;19705:6;19685:16;:26;;19677:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19792:57;19801:6;19809:12;:10;:12::i;:::-;19842:6;19823:16;:25;19792:8;:57::i;:::-;19880:4;19873:11;;;19400:492;;;;;:::o;27167:48::-;;;;:::o;29875:80::-;10074:12;:10;:12::i;:::-;10063:23;;:7;:5;:7::i;:::-;:23;;;10055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29943:4:::1;29927:13;;:20;;;;;;;;;;;;;;;;;;29875:80::o:0;17544:93::-;17602:5;17627:2;17620:9;;17544:93;:::o;28966:789::-;29040:7;29060:22;29085;29103:3;29085:13;29096:1;29085:6;;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;29060:47;;29118:16;29137:19;29147:8;29137:9;:19::i;:::-;29118:38;;29167:23;29193:19;:17;:19::i;:::-;29167:45;;29223:22;29248:18;:16;:18::i;:::-;29223:43;;29277:20;29318:14;;29300:15;:32;;;;:::i;:::-;29277:55;;29366:10;29349:14;:27;:53;;;;29395:7;29380:12;:22;29349:53;29345:402;;;29425:8;29418:15;;;;;;;;;29345:402;29494:6;;29456:35;29476:14;29456:15;:19;;:35;;;;:::i;:::-;:44;:74;;;;;29516:14;29504:8;:26;;29456:74;29451:296;;;29554:14;29547:21;;;;;;;;;29451:296;29628:6;;29590:35;29610:14;29590:15;:19;;:35;;;;:::i;:::-;:44;:73;;;;;29649:14;29638:8;:25;29590:73;29586:161;;;29686:8;29679:15;;;;;;;;;29586:161;29734:1;29727:8;;;;;;;28966:789;;;;:::o;20301:215::-;20389:4;20406:80;20415:12;:10;:12::i;:::-;20429:7;20475:10;20438:11;:25;20450:12;:10;:12::i;:::-;20438:25;;;;;;;;;;;;;;;:34;20464:7;20438:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;20406:8;:80::i;:::-;20504:4;20497:11;;20301:215;;;;:::o;27222:29::-;;;;:::o;17873:127::-;17947:7;17974:9;:18;17984:7;17974:18;;;;;;;;;;;;;;;;17967:25;;17873:127;;;:::o;10494:103::-;10074:12;:10;:12::i;:::-;10063:23;;:7;:5;:7::i;:::-;:23;;;10055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10559:30:::1;10586:1;10559:18;:30::i;:::-;10494:103::o:0;29763:104::-;10074:12;:10;:12::i;:::-;10063:23;;:7;:5;:7::i;:::-;:23;;;10055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29847:12:::1;29830:14;;:29;;;;;;;;;;;;;;;;;;29763:104:::0;:::o;9843:87::-;9889:7;9916:6;;;;;;;;;;;9909:13;;9843:87;:::o;16801:104::-;16857:13;16890:7;16883:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16801:104;:::o;21019:413::-;21112:4;21129:24;21156:11;:25;21168:12;:10;:12::i;:::-;21156:25;;;;;;;;;;;;;;;:34;21182:7;21156:34;;;;;;;;;;;;;;;;21129:61;;21229:15;21209:16;:35;;21201:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21322:67;21331:12;:10;:12::i;:::-;21345:7;21373:15;21354:16;:34;21322:8;:67::i;:::-;21420:4;21413:11;;;21019:413;;;;:::o;18213:175::-;18299:4;18316:42;18326:12;:10;:12::i;:::-;18340:9;18351:6;18316:9;:42::i;:::-;18376:4;18369:11;;18213:175;;;;:::o;28617:341::-;28666:7;28712:42;28694:60;;:14;;;;;;;;;;;:60;;;28686:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28783:13;28798;28831:14;;;;;;;;;;;28816:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28782:78;;;;;;;;;28929:4;28878:56;;28893:14;;;;;;;;;;;28878:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;:72;;28945:5;28878:72;;;28937:5;28878:72;28871:79;;;;28617:341;:::o;27112:48::-;;;;:::o;18451:151::-;18540:7;18567:11;:18;18579:5;18567:18;;;;;;;;;;;;;;;:27;18586:7;18567:27;;;;;;;;;;;;;;;;18560:34;;18451:151;;;;:::o;10752:201::-;10074:12;:10;:12::i;:::-;10063:23;;:7;:5;:7::i;:::-;:23;;;10055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10861:1:::1;10841:22;;:8;:22;;::::0;10833:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10917:28;10936:8;10917:18;:28::i;:::-;10752:201:::0;:::o;28267:342::-;28317:7;28363:42;28345:60;;:14;;;;;;;;;;;:60;;;28337:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28434:13;28449;28482:14;;;;;;;;;;;28467:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28433:78;;;;;;;;;28580:4;28529:56;;28544:14;;;;;;;;;;;28529:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;:72;;28596:5;28529:72;;;28588:5;28529:72;28522:79;;;;28267:342;:::o;5599:98::-;5657:7;5688:1;5684;:5;;;;:::i;:::-;5677:12;;5599:98;;;;:::o;5998:::-;6056:7;6087:1;6083;:5;;;;:::i;:::-;6076:12;;5998:98;;;;:::o;5242:::-;5300:7;5331:1;5327;:5;;;;:::i;:::-;5320:12;;5242:98;;;;:::o;25683:125::-;;;;:::o;4861:98::-;4919:7;4950:1;4946;:5;;;;:::i;:::-;4939:12;;4861:98;;;;:::o;2094:::-;2147:7;2174:10;2167:17;;2094:98;:::o;24703:380::-;24856:1;24839:19;;:5;:19;;;24831:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24937:1;24918:21;;:7;:21;;;24910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25021:6;24991:11;:18;25003:5;24991:18;;;;;;;;;;;;;;;:27;25010:7;24991:27;;;;;;;;;;;;;;;:36;;;;25059:7;25043:32;;25052:5;25043:32;;;25068:6;25043:32;;;;;;:::i;:::-;;;;;;;;24703:380;;;:::o;21922:733::-;22080:1;22062:20;;:6;:20;;;22054:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22164:1;22143:23;;:9;:23;;;22135:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22219:47;22240:6;22248:9;22259:6;22219:20;:47::i;:::-;22279:21;22303:9;:17;22313:6;22303:17;;;;;;;;;;;;;;;;22279:41;;22356:6;22339:13;:23;;22331:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22477:6;22461:13;:22;22441:9;:17;22451:6;22441:17;;;;;;;;;;;;;;;:42;;;;22529:6;22505:9;:20;22515:9;22505:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;22570:9;22553:35;;22562:6;22553:35;;;22581:6;22553:35;;;;;;:::i;:::-;;;;;;;;22601:46;22621:6;22629:9;22640:6;22601:19;:46::i;:::-;22043:612;21922:733;;;:::o;11113:191::-;11187:16;11206:6;;;;;;;;;;;11187:25;;11232:8;11223:6;;:17;;;;;;;;;;;;;;;;;;11287:8;11256:40;;11277:8;11256:40;;;;;;;;;;;;11176:128;11113:191;:::o;27389:870::-;27510:14;;;;;;;;;;;27502:22;;:4;:22;;;:46;;;;27534:14;;;;;;;;;;;27528:20;;:2;:20;;;27502:46;27498:697;;;27573:13;;;;;;;;;;;27565:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27642:14;;;;;;;;;;;27634:22;;:4;:22;;;27630:403;;27677:10;27690:19;:17;:19::i;:::-;27677:32;;27742:6;;27734:5;:14;:29;;;;27762:1;27752:6;;:11;27734:29;27730:121;;;27796:35;27807:23;27826:3;27807:14;27818:2;27807:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;27796:6;;:10;;:35;;;;:::i;:::-;27787:6;:44;;;;27730:121;27884:5;27875:6;;:14;:29;;;;27903:1;27893:6;;:11;27875:29;27871:147;;;27938:5;27929:6;:14;;;;27983:15;27966:14;:32;;;;27871:147;27658:375;27630:403;28059:14;;;;;;;;;;;28053:20;;:2;:20;;;28049:135;;28137:6;28102:31;28128:4;28102:25;:31::i;:::-;:41;;28094:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28049:135;27498:697;28207:44;28234:4;28240:2;28244:6;28207:26;:44::i;:::-;27389:870;;;:::o;26412:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:474::-;5608:6;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;5540:474;;;;;:::o;6020:180::-;6068:77;6065:1;6058:88;6165:4;6162:1;6155:15;6189:4;6186:1;6179:15;6206:320;6250:6;6287:1;6281:4;6277:12;6267:22;;6334:1;6328:4;6324:12;6355:18;6345:81;;6411:4;6403:6;6399:17;6389:27;;6345:81;6473:2;6465:6;6462:14;6442:18;6439:38;6436:84;;6492:18;;:::i;:::-;6436:84;6257:269;6206:320;;;:::o;6532:227::-;6672:34;6668:1;6660:6;6656:14;6649:58;6741:10;6736:2;6728:6;6724:15;6717:35;6532:227;:::o;6765:366::-;6907:3;6928:67;6992:2;6987:3;6928:67;:::i;:::-;6921:74;;7004:93;7093:3;7004:93;:::i;:::-;7122:2;7117:3;7113:12;7106:19;;6765:366;;;:::o;7137:419::-;7303:4;7341:2;7330:9;7326:18;7318:26;;7390:9;7384:4;7380:20;7376:1;7365:9;7361:17;7354:47;7418:131;7544:4;7418:131;:::i;:::-;7410:139;;7137:419;;;:::o;7562:182::-;7702:34;7698:1;7690:6;7686:14;7679:58;7562:182;:::o;7750:366::-;7892:3;7913:67;7977:2;7972:3;7913:67;:::i;:::-;7906:74;;7989:93;8078:3;7989:93;:::i;:::-;8107:2;8102:3;8098:12;8091:19;;7750:366;;;:::o;8122:419::-;8288:4;8326:2;8315:9;8311:18;8303:26;;8375:9;8369:4;8365:20;8361:1;8350:9;8346:17;8339:47;8403:131;8529:4;8403:131;:::i;:::-;8395:139;;8122:419;;;:::o;8547:180::-;8595:77;8592:1;8585:88;8692:4;8689:1;8682:15;8716:4;8713:1;8706:15;8733:194;8773:4;8793:20;8811:1;8793:20;:::i;:::-;8788:25;;8827:20;8845:1;8827:20;:::i;:::-;8822:25;;8871:1;8868;8864:9;8856:17;;8895:1;8889:4;8886:11;8883:37;;;8900:18;;:::i;:::-;8883:37;8733:194;;;;:::o;8933:191::-;8973:3;8992:20;9010:1;8992:20;:::i;:::-;8987:25;;9026:20;9044:1;9026:20;:::i;:::-;9021:25;;9069:1;9066;9062:9;9055:16;;9090:3;9087:1;9084:10;9081:36;;;9097:18;;:::i;:::-;9081:36;8933:191;;;;:::o;9130:224::-;9270:34;9266:1;9258:6;9254:14;9247:58;9339:7;9334:2;9326:6;9322:15;9315:32;9130:224;:::o;9360:366::-;9502:3;9523:67;9587:2;9582:3;9523:67;:::i;:::-;9516:74;;9599:93;9688:3;9599:93;:::i;:::-;9717:2;9712:3;9708:12;9701:19;;9360:366;;;:::o;9732:419::-;9898:4;9936:2;9925:9;9921:18;9913:26;;9985:9;9979:4;9975:20;9971:1;9960:9;9956:17;9949:47;10013:131;10139:4;10013:131;:::i;:::-;10005:139;;9732:419;;;:::o;10157:162::-;10297:14;10293:1;10285:6;10281:14;10274:38;10157:162;:::o;10325:366::-;10467:3;10488:67;10552:2;10547:3;10488:67;:::i;:::-;10481:74;;10564:93;10653:3;10564:93;:::i;:::-;10682:2;10677:3;10673:12;10666:19;;10325:366;;;:::o;10697:419::-;10863:4;10901:2;10890:9;10886:18;10878:26;;10950:9;10944:4;10940:20;10936:1;10925:9;10921:17;10914:47;10978:131;11104:4;10978:131;:::i;:::-;10970:139;;10697:419;;;:::o;11122:114::-;11159:7;11199:30;11192:5;11188:42;11177:53;;11122:114;;;:::o;11242:122::-;11315:24;11333:5;11315:24;:::i;:::-;11308:5;11305:35;11295:63;;11354:1;11351;11344:12;11295:63;11242:122;:::o;11370:143::-;11427:5;11458:6;11452:13;11443:22;;11474:33;11501:5;11474:33;:::i;:::-;11370:143;;;;:::o;11519:93::-;11555:7;11595:10;11588:5;11584:22;11573:33;;11519:93;;;:::o;11618:120::-;11690:23;11707:5;11690:23;:::i;:::-;11683:5;11680:34;11670:62;;11728:1;11725;11718:12;11670:62;11618:120;:::o;11744:141::-;11800:5;11831:6;11825:13;11816:22;;11847:32;11873:5;11847:32;:::i;:::-;11744:141;;;;:::o;11891:661::-;11978:6;11986;11994;12043:2;12031:9;12022:7;12018:23;12014:32;12011:119;;;12049:79;;:::i;:::-;12011:119;12169:1;12194:64;12250:7;12241:6;12230:9;12226:22;12194:64;:::i;:::-;12184:74;;12140:128;12307:2;12333:64;12389:7;12380:6;12369:9;12365:22;12333:64;:::i;:::-;12323:74;;12278:129;12446:2;12472:63;12527:7;12518:6;12507:9;12503:22;12472:63;:::i;:::-;12462:73;;12417:128;11891:661;;;;;:::o;12558:143::-;12615:5;12646:6;12640:13;12631:22;;12662:33;12689:5;12662:33;:::i;:::-;12558:143;;;;:::o;12707:351::-;12777:6;12826:2;12814:9;12805:7;12801:23;12797:32;12794:119;;;12832:79;;:::i;:::-;12794:119;12952:1;12977:64;13033:7;13024:6;13013:9;13009:22;12977:64;:::i;:::-;12967:74;;12923:128;12707:351;;;;:::o;13064:225::-;13204:34;13200:1;13192:6;13188:14;13181:58;13273:8;13268:2;13260:6;13256:15;13249:33;13064:225;:::o;13295:366::-;13437:3;13458:67;13522:2;13517:3;13458:67;:::i;:::-;13451:74;;13534:93;13623:3;13534:93;:::i;:::-;13652:2;13647:3;13643:12;13636:19;;13295:366;;;:::o;13667:419::-;13833:4;13871:2;13860:9;13856:18;13848:26;;13920:9;13914:4;13910:20;13906:1;13895:9;13891:17;13884:47;13948:131;14074:4;13948:131;:::i;:::-;13940:139;;13667:419;;;:::o;14092:410::-;14132:7;14155:20;14173:1;14155:20;:::i;:::-;14150:25;;14189:20;14207:1;14189:20;:::i;:::-;14184:25;;14244:1;14241;14237:9;14266:30;14284:11;14266:30;:::i;:::-;14255:41;;14445:1;14436:7;14432:15;14429:1;14426:22;14406:1;14399:9;14379:83;14356:139;;14475:18;;:::i;:::-;14356:139;14140:362;14092:410;;;;:::o;14508:180::-;14556:77;14553:1;14546:88;14653:4;14650:1;14643:15;14677:4;14674:1;14667:15;14694:185;14734:1;14751:20;14769:1;14751:20;:::i;:::-;14746:25;;14785:20;14803:1;14785:20;:::i;:::-;14780:25;;14824:1;14814:35;;14829:18;;:::i;:::-;14814:35;14871:1;14868;14864:9;14859:14;;14694:185;;;;:::o;14885:223::-;15025:34;15021:1;15013:6;15009:14;15002:58;15094:6;15089:2;15081:6;15077:15;15070:31;14885:223;:::o;15114:366::-;15256:3;15277:67;15341:2;15336:3;15277:67;:::i;:::-;15270:74;;15353:93;15442:3;15353:93;:::i;:::-;15471:2;15466:3;15462:12;15455:19;;15114:366;;;:::o;15486:419::-;15652:4;15690:2;15679:9;15675:18;15667:26;;15739:9;15733:4;15729:20;15725:1;15714:9;15710:17;15703:47;15767:131;15893:4;15767:131;:::i;:::-;15759:139;;15486:419;;;:::o;15911:221::-;16051:34;16047:1;16039:6;16035:14;16028:58;16120:4;16115:2;16107:6;16103:15;16096:29;15911:221;:::o;16138:366::-;16280:3;16301:67;16365:2;16360:3;16301:67;:::i;:::-;16294:74;;16377:93;16466:3;16377:93;:::i;:::-;16495:2;16490:3;16486:12;16479:19;;16138:366;;;:::o;16510:419::-;16676:4;16714:2;16703:9;16699:18;16691:26;;16763:9;16757:4;16753:20;16749:1;16738:9;16734:17;16727:47;16791:131;16917:4;16791:131;:::i;:::-;16783:139;;16510:419;;;:::o;16935:224::-;17075:34;17071:1;17063:6;17059:14;17052:58;17144:7;17139:2;17131:6;17127:15;17120:32;16935:224;:::o;17165:366::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17165:366;;;:::o;17537:419::-;17703:4;17741:2;17730:9;17726:18;17718:26;;17790:9;17784:4;17780:20;17776:1;17765:9;17761:17;17754:47;17818:131;17944:4;17818:131;:::i;:::-;17810:139;;17537:419;;;:::o;17962:222::-;18102:34;18098:1;18090:6;18086:14;18079:58;18171:5;18166:2;18158:6;18154:15;18147:30;17962:222;:::o;18190:366::-;18332:3;18353:67;18417:2;18412:3;18353:67;:::i;:::-;18346:74;;18429:93;18518:3;18429:93;:::i;:::-;18547:2;18542:3;18538:12;18531:19;;18190:366;;;:::o;18562:419::-;18728:4;18766:2;18755:9;18751:18;18743:26;;18815:9;18809:4;18805:20;18801:1;18790:9;18786:17;18779:47;18843:131;18969:4;18843:131;:::i;:::-;18835:139;;18562:419;;;:::o;18987:225::-;19127:34;19123:1;19115:6;19111:14;19104:58;19196:8;19191:2;19183:6;19179:15;19172:33;18987:225;:::o;19218:366::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:419::-;19756:4;19794:2;19783:9;19779:18;19771:26;;19843:9;19837:4;19833:20;19829:1;19818:9;19814:17;19807:47;19871:131;19997:4;19871:131;:::i;:::-;19863:139;;19590:419;;;:::o;20015:172::-;20155:24;20151:1;20143:6;20139:14;20132:48;20015:172;:::o;20193:366::-;20335:3;20356:67;20420:2;20415:3;20356:67;:::i;:::-;20349:74;;20432:93;20521:3;20432:93;:::i;:::-;20550:2;20545:3;20541:12;20534:19;;20193:366;;;:::o;20565:419::-;20731:4;20769:2;20758:9;20754:18;20746:26;;20818:9;20812:4;20808:20;20804:1;20793:9;20789:17;20782:47;20846:131;20972:4;20846:131;:::i;:::-;20838:139;;20565:419;;;:::o;20990:170::-;21130:22;21126:1;21118:6;21114:14;21107:46;20990:170;:::o;21166:366::-;21308:3;21329:67;21393:2;21388:3;21329:67;:::i;:::-;21322:74;;21405:93;21494:3;21405:93;:::i;:::-;21523:2;21518:3;21514:12;21507:19;;21166:366;;;:::o;21538:419::-;21704:4;21742:2;21731:9;21727:18;21719:26;;21791:9;21785:4;21781:20;21777:1;21766:9;21762:17;21755:47;21819:131;21945:4;21819:131;:::i;:::-;21811:139;;21538:419;;;:::o

Swarm Source

ipfs://da712ffbcf0b874f591c0a6ba02441c0388c5db799014aca4f2022a9253ff9e2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.