ETH Price: $3,719.00 (+3.49%)

Token

ERC-20: NONO (NONO)
 

Overview

Max Total Supply

21,000,000 NONO

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 NONO

Value
$0.00
0x171e656419d223031c707e9db05fd94fb939bb7c
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:
Lottery

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 8 of 10: Lottery.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/*
    website: https://nono.finance
    telegram: https://t.me/NONOcoins
    twitter: https://x.com/NONOCoins
*/

import "./ERC20.sol";
import "./Ownable.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Router02.sol";
import "./TransferHelper.sol";

contract Lottery is ERC20, Ownable {
    IUniswapV2Router02 private uniswapV2Router;
    bool private inSwap = false;
    bool public isOpenTrading = false;
    uint256 public _roundMinBlock;
    uint256 public _roundMinAmount;

    uint256 public markTaxFeeAmount = 0;
    uint256 public buyTaxFeeAmount = 0;
    uint256 public sellTaxFeeAmount = 0;

    uint256 public _poolTax;
    uint256 public _marketingTax;
    address public poolAddress;
    address public _marketingAddress;
    uint256 public latestRoundNumber = 1;
    uint256 public lotteryRoundNumber = 0;
    mapping(address => bool) public _isExcludedFromFees;
    mapping(uint256 => RoundData) public roundList;
    mapping(uint256 => mapping(address => uint256)) public roundParticipatorTax;
    mapping(uint256 => mapping(address => uint256)) public roundParticipatorEth;
    mapping(uint256 => address[]) public roundParticipator;

    struct RoundData {
        uint256 startBlockNumber;
        uint256 endBlockNumber;
        uint256 roundNumber;
        uint256 buyTaxFeeAmount;
        uint256 buySumEthAmount;
        uint256 markTaxEthAmount;
        uint256 buyTaxEthAmount;
        uint256 sellTaxEthAmount;
        address winningAddress;
    }

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(
        string memory name,
        string memory symbol,
        uint256 liquidityAmount,
        uint256 roundMinBlock,
        uint256 roundMinAmount,
        uint256 poolTax,
        uint256 marketingTax,
        address marketingAddress,
        address routerAddress
    ) ERC20(name, symbol) {
        _mint(msg.sender, liquidityAmount);

        uniswapV2Router = IUniswapV2Router02(routerAddress);
        _roundMinBlock = roundMinBlock;
        _roundMinAmount = roundMinAmount;
        _poolTax = poolTax;
        _marketingTax = marketingTax;
        _marketingAddress = marketingAddress;
        // Create a pool
        poolAddress = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _isExcludedFromFees[_marketingAddress] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _approve(address(this), address(uniswapV2Router), ~uint256(0));
    }

    receive() external payable {}

    function withdrawETH() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function openTrading() external onlyOwner {
        require(!isOpenTrading, "Trading is already open");
        isOpenTrading = true;
    }

    function closeTrading() external onlyOwner {
        require(isOpenTrading, "Trading is not open");
        isOpenTrading = false;
    }

    function setSwapTax(uint256 poolTax, uint256 marketingTax) public onlyOwner {
        _poolTax = poolTax;
        _marketingTax = marketingTax;
    }

    function setLotteryConfig(uint256 roundMinBlock, uint256 roundMinAmount) public onlyOwner {
        _roundMinBlock = roundMinBlock;
        _roundMinAmount = roundMinAmount;
    }

    function setMarketingAddress(address marketingAddress) public onlyOwner {
        _marketingAddress = marketingAddress;
    }

    function excludeFromFees(address[] memory accounts, bool excluded) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }

    function getRoundParticipatorData(uint256 roundNumber) public view returns (address[] memory, uint256[] memory, uint256[] memory) {
        address[] memory participators = roundParticipator[roundNumber];
        uint256 participators_ = participators.length;
        uint256[] memory taxAmounts = new uint256[](participators_);
        uint256[] memory ethAmounts = new uint256[](participators_);
        for (uint256 i = 0; i < participators_; i++) {
            taxAmounts[i] = roundParticipatorTax[roundNumber][participators[i]];
            ethAmounts[i] = roundParticipatorEth[roundNumber][participators[i]];
        }
        return (participators, taxAmounts, ethAmounts);
    }

    function getRoundData(uint256 roundNumber) public view returns (RoundData memory) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        RoundData memory roundData_ = roundList[roundNumber];
        if (markTaxFeeAmount > 0) roundData_.markTaxEthAmount += uniswapV2Router.getAmountsOut(markTaxFeeAmount, path)[1];
        if (buyTaxFeeAmount > 0) roundData_.buyTaxEthAmount += uniswapV2Router.getAmountsOut(buyTaxFeeAmount, path)[1];
        if (sellTaxFeeAmount > 0) roundData_.sellTaxEthAmount += uniswapV2Router.getAmountsOut(sellTaxFeeAmount, path)[1];
        return roundData_;
    }

    function getRoundAllData(uint256 roundNumber) public view returns (RoundData memory, address[] memory, uint256[] memory, uint256[] memory) {
        RoundData memory roundData_ = getRoundData(roundNumber);
        (address[] memory participators, uint256[] memory taxAmounts, uint256[] memory ethAmounts) = getRoundParticipatorData(roundNumber);
        return (roundData_, participators, taxAmounts, ethAmounts);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 taxFeeAmount = 0;
        if (!(inSwap || _isExcludedFromFees[from] || _isExcludedFromFees[to])) {
            require(isOpenTrading, "Trading is not open");

            // Calculate tax amount
            taxFeeAmount = amount * (_poolTax + _marketingTax) / 1000;
            super._transfer(from, address(this), taxFeeAmount);

            // Record round data
            bool isBuy = from == poolAddress;
            address txOrigin = isBuy ? to : from;
            recordRoundData(isBuy, txOrigin, taxFeeAmount, amount);

            if (to == poolAddress) {
                // Update the ETH amount for the round tax
                uint256 sumTaxEthAmount = updateRoundTaxEthData();
                // Determine whether the lottery conditions are met
                if (block.number - roundList[latestRoundNumber].startBlockNumber > _roundMinBlock &&
                sumTaxEthAmount > _roundMinAmount && roundList[latestRoundNumber].buySumEthAmount > 0) {
                    // Lottery is conducted
                    lotteryRound();
                }
            }
        }
        super._transfer(from, to, min(amount - taxFeeAmount, balanceOf(from)));
    }

    function recordRoundData(bool isBuy, address txOrigin, uint256 taxFeeAmount, uint256 amount) private {
        uint256 poolTaxFeeAmount = taxFeeAmount * _poolTax / (_poolTax + _marketingTax);
        // Start a new round
        if (isBuy && roundList[latestRoundNumber].startBlockNumber == 0) {
            roundList[latestRoundNumber] = RoundData({
                startBlockNumber: block.number,
                endBlockNumber: 0,
                roundNumber: latestRoundNumber,
                buyTaxFeeAmount: 0,
                buySumEthAmount: 0,
                markTaxEthAmount: 0,
                buyTaxEthAmount: 0,
                sellTaxEthAmount: 0,
                winningAddress: address(0)
            });
        }
        // Record the tax amount
        markTaxFeeAmount += taxFeeAmount - poolTaxFeeAmount;
        if (isBuy) {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            uint256 buyEthAmount = uniswapV2Router.getAmountsIn(amount, path)[0];

            buyTaxFeeAmount += poolTaxFeeAmount;
            roundList[latestRoundNumber].buySumEthAmount += buyEthAmount;
            roundList[latestRoundNumber].buyTaxFeeAmount += taxFeeAmount;

            if (roundParticipatorTax[latestRoundNumber][txOrigin] == 0) {
                roundParticipator[latestRoundNumber].push(txOrigin);
            }
            roundParticipatorTax[latestRoundNumber][txOrigin] += taxFeeAmount;
            roundParticipatorEth[latestRoundNumber][txOrigin] += buyEthAmount;
        } else {
            sellTaxFeeAmount += poolTaxFeeAmount;
        }
    }

    function updateRoundTaxEthData() private returns (uint256) {
        uint256 sumTaxFeeAmount = min(markTaxFeeAmount + buyTaxFeeAmount + sellTaxFeeAmount, balanceOf(address(this)));

        uint256 oldEthAmount = address(this).balance;
        swapTokensForEth(sumTaxFeeAmount);
        uint256 swapEthAmount = address(this).balance - oldEthAmount;

        // Update the ETH amount for the round tax
        uint256 markTaxEthAmount = swapEthAmount * markTaxFeeAmount / sumTaxFeeAmount;
        uint256 buyTaxEthAmount = swapEthAmount * buyTaxFeeAmount / sumTaxFeeAmount;
        roundList[latestRoundNumber].markTaxEthAmount += swapEthAmount * markTaxFeeAmount / sumTaxFeeAmount;
        roundList[latestRoundNumber].buyTaxEthAmount += swapEthAmount * buyTaxFeeAmount / sumTaxFeeAmount;
        roundList[latestRoundNumber].sellTaxEthAmount += swapEthAmount - markTaxEthAmount - buyTaxEthAmount;

        // Reset round record data
        markTaxFeeAmount = 0;
        buyTaxFeeAmount = 0;
        sellTaxFeeAmount = 0;

        return roundList[latestRoundNumber].markTaxEthAmount + roundList[latestRoundNumber].buyTaxEthAmount + roundList[latestRoundNumber].sellTaxEthAmount;
    }

    function lotteryRound() private lockTheSwap {
        RoundData memory roundData_ = roundList[latestRoundNumber];

        // Get winning address
        address[] memory participators = roundParticipator[latestRoundNumber];
        uint256 participators_ = participators.length;
        address winningAddress = participators[0];
        // If the number of people in the lottery is greater than 1, a lottery is required
        if (participators_ > 1) {
            // Get a pseudorandom number
            uint256 pseudoRandom = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1), participators[participators_ - 1], participators_))) % roundData_.buySumEthAmount;
            // Disrupt the lottery winner
            for (uint256 p = 0; p < participators_; p++) {
                uint256 p_ = p + (pseudoRandom % (participators.length - p));
                (participators[p], participators[p_]) = (participators[p_], participators[p]);
            }
            // Start the lottery
            uint256 drawnAmount = 0;
            for (uint256 l = 0; l < participators_; l++) {
                drawnAmount += roundParticipatorEth[latestRoundNumber][participators[l]];
                if (pseudoRandom < drawnAmount) {
                    winningAddress = participators[l];
                    break;
                }
            }
        }
        // Update the winning address of the round
        roundList[latestRoundNumber].winningAddress = winningAddress;
        roundList[latestRoundNumber].endBlockNumber = block.number;

        // Transfer marketing amounts
        TransferHelper.safeTransferETH(_marketingAddress, roundData_.markTaxEthAmount);
        // Transfer winning amounts
        TransferHelper.safeTransferETH(winningAddress, roundData_.buyTaxEthAmount + roundData_.sellTaxEthAmount);

        // Update the round number
        lotteryRoundNumber = latestRoundNumber;
        latestRoundNumber += 1;
    }
}

File 1 of 10: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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

File 2 of 10: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
  function decimals() public view virtual override returns (uint8) {
    return 18;
  }

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

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

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

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

  /**
   * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
  function approve(address spender, uint256 amount) public virtual override returns (bool) {
    address owner = _msgSender();
    _approve(owner, spender, amount);
    return true;
  }

  /**
   * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
  function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
    address spender = _msgSender();
    _spendAllowance(from, spender, amount);
    _transfer(from, to, amount);
    return true;
  }

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

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

    return true;
  }

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

    _beforeTokenTransfer(from, to, amount);

    uint256 fromBalance = _balances[from];
    require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
      _balances[from] = fromBalance - amount;
    // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
    // decrementing then incrementing.
      _balances[to] += amount;
    }

    emit Transfer(from, to, amount);

    _afterTokenTransfer(from, to, amount);
  }

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

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

    _totalSupply += amount;
    unchecked {
    // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
      _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;
    // Overflow not possible: amount <= accountBalance <= totalSupply.
      _totalSupply -= amount;
    }

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

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

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

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

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

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

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

File 3 of 10: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
  event Transfer(address indexed from, address indexed to, uint256 value);

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

  /**
   * @dev Returns the amount of tokens in existence.
     */
  function totalSupply() external view returns (uint256);

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

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

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

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

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

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

pragma solidity ^0.8.0;

import "../IERC20.sol";

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

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

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

File 5 of 10: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IUniswapV2Factory {
  event PairCreated(address indexed token0, address indexed token1, address pair, uint);

  function feeTo() external view returns (address);
  function feeToSetter() external view returns (address);

  function getPair(address tokenA, address tokenB) external view returns (address pair);
  function allPairs(uint) external view returns (address pair);
  function allPairsLength() external view returns (uint);

  function createPair(address tokenA, address tokenB) external returns (address pair);

  function setFeeTo(address) external;
  function setFeeToSetter(address) external;
}

File 6 of 10: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
  function factory() external pure returns (address);
  function WETH() external pure returns (address);

  function addLiquidity(
    address tokenA,
    address tokenB,
    uint amountADesired,
    uint amountBDesired,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
  ) external returns (uint amountA, uint amountB, uint liquidity);
  function addLiquidityETH(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
  ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
  function removeLiquidity(
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
  ) external returns (uint amountA, uint amountB);
  function removeLiquidityETH(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
  ) external returns (uint amountToken, uint amountETH);
  function removeLiquidityWithPermit(
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline,
    bool approveMax, uint8 v, bytes32 r, bytes32 s
  ) external returns (uint amountA, uint amountB);
  function removeLiquidityETHWithPermit(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline,
    bool approveMax, uint8 v, bytes32 r, bytes32 s
  ) external returns (uint amountToken, uint amountETH);
  function swapExactTokensForTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external returns (uint[] memory amounts);
  function swapTokensForExactTokens(
    uint amountOut,
    uint amountInMax,
    address[] calldata path,
    address to,
    uint deadline
  ) external returns (uint[] memory amounts);
  function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
  external
  payable
  returns (uint[] memory amounts);
  function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
  external
  returns (uint[] memory amounts);
  function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
  external
  returns (uint[] memory amounts);
  function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
  external
  payable
  returns (uint[] memory amounts);

  function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
  function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
  function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
  function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
  function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 7 of 10: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
  function removeLiquidityETHSupportingFeeOnTransferTokens(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
  ) external returns (uint amountETH);
  function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline,
    bool approveMax, uint8 v, bytes32 r, bytes32 s
  ) external returns (uint amountETH);

  function swapExactTokensForTokensSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external;
  function swapExactETHForTokensSupportingFeeOnTransferTokens(
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external payable;
  function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external;
}

File 9 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

  /**
   * @dev Throws if the sender is not the owner.
     */
  function _checkOwner() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }

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

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
  function transferOwnership(address newOwner) public virtual onlyOwner {
    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);
  }
}

File 10 of 10: TransferHelper.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
  function safeApprove(address token, address to, uint value) internal {
    // bytes4(keccak256(bytes('approve(address,uint256)')));
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
  }

  function safeTransfer(address token, address to, uint value) internal {
    // bytes4(keccak256(bytes('transfer(address,uint256)')));
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
  }

  function safeTransferFrom(address token, address from, address to, uint value) internal {
    // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
  }

  function safeTransferETH(address to, uint value) internal {
    (bool success,) = to.call{value:value}(new bytes(0));
    require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"liquidityAmount","type":"uint256"},{"internalType":"uint256","name":"roundMinBlock","type":"uint256"},{"internalType":"uint256","name":"roundMinAmount","type":"uint256"},{"internalType":"uint256","name":"poolTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"address","name":"marketingAddress","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_poolTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_roundMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_roundMinBlock","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":"buyTaxFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundNumber","type":"uint256"}],"name":"getRoundAllData","outputs":[{"components":[{"internalType":"uint256","name":"startBlockNumber","type":"uint256"},{"internalType":"uint256","name":"endBlockNumber","type":"uint256"},{"internalType":"uint256","name":"roundNumber","type":"uint256"},{"internalType":"uint256","name":"buyTaxFeeAmount","type":"uint256"},{"internalType":"uint256","name":"buySumEthAmount","type":"uint256"},{"internalType":"uint256","name":"markTaxEthAmount","type":"uint256"},{"internalType":"uint256","name":"buyTaxEthAmount","type":"uint256"},{"internalType":"uint256","name":"sellTaxEthAmount","type":"uint256"},{"internalType":"address","name":"winningAddress","type":"address"}],"internalType":"struct Lottery.RoundData","name":"","type":"tuple"},{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundNumber","type":"uint256"}],"name":"getRoundData","outputs":[{"components":[{"internalType":"uint256","name":"startBlockNumber","type":"uint256"},{"internalType":"uint256","name":"endBlockNumber","type":"uint256"},{"internalType":"uint256","name":"roundNumber","type":"uint256"},{"internalType":"uint256","name":"buyTaxFeeAmount","type":"uint256"},{"internalType":"uint256","name":"buySumEthAmount","type":"uint256"},{"internalType":"uint256","name":"markTaxEthAmount","type":"uint256"},{"internalType":"uint256","name":"buyTaxEthAmount","type":"uint256"},{"internalType":"uint256","name":"sellTaxEthAmount","type":"uint256"},{"internalType":"address","name":"winningAddress","type":"address"}],"internalType":"struct Lottery.RoundData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundNumber","type":"uint256"}],"name":"getRoundParticipatorData","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"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":"isOpenTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryRoundNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"markTaxFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roundList","outputs":[{"internalType":"uint256","name":"startBlockNumber","type":"uint256"},{"internalType":"uint256","name":"endBlockNumber","type":"uint256"},{"internalType":"uint256","name":"roundNumber","type":"uint256"},{"internalType":"uint256","name":"buyTaxFeeAmount","type":"uint256"},{"internalType":"uint256","name":"buySumEthAmount","type":"uint256"},{"internalType":"uint256","name":"markTaxEthAmount","type":"uint256"},{"internalType":"uint256","name":"buyTaxEthAmount","type":"uint256"},{"internalType":"uint256","name":"sellTaxEthAmount","type":"uint256"},{"internalType":"address","name":"winningAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"roundParticipator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"roundParticipatorEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"roundParticipatorTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundMinBlock","type":"uint256"},{"internalType":"uint256","name":"roundMinAmount","type":"uint256"}],"name":"setLotteryConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"name":"setSwapTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526006805461ffff60a01b191690555f6009819055600a819055600b819055600160105560115534801562000036575f80fd5b50604051620032b2380380620032b2833981016040819052620000599162000654565b8888600362000069838262000795565b50600462000078828262000795565b505050620000956200008f6200033160201b60201c565b62000335565b620000a1338862000386565b600680546001600160a01b038084166001600160a01b0319928316811790935560078990556008889055600c879055600d869055600f8054918616919092161790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200011d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000143919062000861565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c9919062000861565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000214573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023a919062000861565b600e80546001600160a01b0319166001600160a01b03928316179055600f54165f908152601260208190526040808320805460ff19908116600190811790925533855282852080548216831790553085529184208054909216811790915591620002ac6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409091015f908120805494151560ff1995861617905561dead905260129091527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f7805490921660011790915560065462000322913091165f196200044b565b505050505050505050620008aa565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620003e25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f828254620003f5919062000884565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620004af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620003d9565b6001600160a01b038216620005125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003d9565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200059b575f80fd5b81516001600160401b0380821115620005b857620005b862000577565b604051601f8301601f19908116603f01168101908282118183101715620005e357620005e362000577565b816040528381526020925086602085880101111562000600575f80fd5b5f91505b8382101562000623578582018301518183018401529082019062000604565b5f602085830101528094505050505092915050565b80516001600160a01b03811681146200064f575f80fd5b919050565b5f805f805f805f805f6101208a8c0312156200066e575f80fd5b89516001600160401b038082111562000685575f80fd5b620006938d838e016200058b565b9a5060208c0151915080821115620006a9575f80fd5b50620006b88c828d016200058b565b98505060408a0151965060608a0151955060808a0151945060a08a0151935060c08a01519250620006ec60e08b0162000638565b9150620006fd6101008b0162000638565b90509295985092959850929598565b600181811c908216806200072157607f821691505b6020821081036200074057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200057257805f5260205f20601f840160051c810160208510156200076d5750805b601f840160051c820191505b818110156200078e575f815560010162000779565b5050505050565b81516001600160401b03811115620007b157620007b162000577565b620007c981620007c284546200070c565b8462000746565b602080601f831160018114620007ff575f8415620007e75750858301515b5f19600386901b1c1916600185901b17855562000859565b5f85815260208120601f198616915b828110156200082f578886015182559484019460019091019084016200080e565b50858210156200084d57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000872575f80fd5b6200087d8262000638565b9392505050565b80820180821115620008a457634e487b7160e01b5f52601160045260245ffd5b92915050565b6129fa80620008b85f395ff3fe608060405260043610610241575f3560e01c8063886e722511610134578063c5fdaf68116100b3578063e086e5ec11610078578063e086e5ec14610740578063e0bf7fd114610754578063ea8522c414610782578063ef614f6914610797578063f2fde38b146107c6578063f5e3688f146107e5575f80fd5b8063c5fdaf68146106a3578063c9567bf9146106b8578063caac7934146106cc578063d7f5d38a146106eb578063dd62ed3e14610721575f80fd5b8063a457c2d7116100f9578063a457c2d714610612578063a9059cbb14610631578063ad29ffde14610650578063ba226fc41461066f578063bd2992f314610684575f80fd5b8063886e7225146105995780638da5cb5b146105ae578063906e9dd0146105cb57806395d89b41146105ea57806397a98955146105fe575f80fd5b80632a09060f116101c05780633950935111610185578063395093511461045957806345a8cceb146104785780635a57fee01461053257806370a0823114610551578063715018a614610585575f80fd5b80632a09060f146103c95780632d882863146103de5780632f3b44c1146103f3578063313ce5671461040857806337e0b62014610423575f80fd5b806318160ddd1161020657806318160ddd146103295780631a61f1b5146103475780632171f26c1461035c57806323b872dd1461037c57806324bf10d91461039b575f80fd5b806306fdde031461024c5780630720da5214610276578063095ea7b3146102a25780631755ff21146102d1578063178bc44014610308575f80fd5b3661024857005b5f80fd5b348015610257575f80fd5b506102606107fa565b60405161026d9190612359565b60405180910390f35b348015610281575f80fd5b5061029561029036600461238b565b61088a565b60405161026d9190612401565b3480156102ad575f80fd5b506102c16102bc366004612424565b610be7565b604051901515815260200161026d565b3480156102dc575f80fd5b50600e546102f0906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b348015610313575f80fd5b5061032761032236600461244e565b610c00565b005b348015610334575f80fd5b506002545b60405190815260200161026d565b348015610352575f80fd5b5061033960105481565b348015610367575f80fd5b506006546102c190600160a81b900460ff1681565b348015610387575f80fd5b506102c161039636600461246e565b610c13565b3480156103a6575f80fd5b506103ba6103b536600461238b565b610c36565b60405161026d9392919061251e565b3480156103d4575f80fd5b50610339600c5481565b3480156103e9575f80fd5b50610339600d5481565b3480156103fe575f80fd5b5061033960095481565b348015610413575f80fd5b506040516012815260200161026d565b34801561042e575f80fd5b5061033961043d366004612560565b601460209081525f928352604080842090915290825290205481565b348015610464575f80fd5b506102c1610473366004612424565b610e2c565b348015610483575f80fd5b506104e561049236600461238b565b60136020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460078801546008909801549697959694959394929391929091906001600160a01b031689565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e08301526001600160a01b03166101008201526101200161026d565b34801561053d575f80fd5b5061032761054c36600461244e565b610e4d565b34801561055c575f80fd5b5061033961056b36600461258e565b6001600160a01b03165f9081526020819052604090205490565b348015610590575f80fd5b50610327610e60565b3480156105a4575f80fd5b5061033960115481565b3480156105b9575f80fd5b506005546001600160a01b03166102f0565b3480156105d6575f80fd5b506103276105e536600461258e565b610e73565b3480156105f5575f80fd5b50610260610e9d565b348015610609575f80fd5b50610327610eac565b34801561061d575f80fd5b506102c161062c366004612424565b610f17565b34801561063c575f80fd5b506102c161064b366004612424565b610f91565b34801561065b575f80fd5b5061032761066a366004612625565b610f9e565b34801561067a575f80fd5b50610339600b5481565b34801561068f575f80fd5b506102f061069e36600461244e565b611005565b3480156106ae575f80fd5b5061033960085481565b3480156106c3575f80fd5b50610327611039565b3480156106d7575f80fd5b50600f546102f0906001600160a01b031681565b3480156106f6575f80fd5b50610339610705366004612560565b601560209081525f928352604080842090915290825290205481565b34801561072c575f80fd5b5061033961073b3660046126d1565b6110b0565b34801561074b575f80fd5b506103276110da565b34801561075f575f80fd5b506102c161076e36600461258e565b60126020525f908152604090205460ff1681565b34801561078d575f80fd5b50610339600a5481565b3480156107a2575f80fd5b506107b66107b136600461238b565b61111b565b60405161026d94939291906126fd565b3480156107d1575f80fd5b506103276107e036600461258e565b611153565b3480156107f0575f80fd5b5061033960075481565b60606003805461080990612753565b80601f016020809104026020016040519081016040528092919081815260200182805461083590612753565b80156108805780601f1061085757610100808354040283529160200191610880565b820191905f5260205f20905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b6108926122eb565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106108c5576108c561278b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561091c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610940919061279f565b816001815181106109535761095361278b565b6001600160a01b039283166020918202929092018101919091525f85815260138252604090819020815161012081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015490911661010082015260095415610a8a5760065460095460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91610a1a9186906004016127ba565b5f60405180830381865afa158015610a34573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a5b91908101906127da565b600181518110610a6d57610a6d61278b565b60200260200101518160a001818151610a86919061286f565b9052505b600a5415610b3557600654600a5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91610ac59186906004016127ba565b5f60405180830381865afa158015610adf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b0691908101906127da565b600181518110610b1857610b1861278b565b60200260200101518160c001818151610b31919061286f565b9052505b600b5415610be057600654600b5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91610b709186906004016127ba565b5f60405180830381865afa158015610b8a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bb191908101906127da565b600181518110610bc357610bc361278b565b60200260200101518160e001818151610bdc919061286f565b9052505b9392505050565b5f33610bf48185856111c9565b60019150505b92915050565b610c086112ec565b600c91909155600d55565b5f33610c20858285611346565b610c2b8585856113be565b506001949350505050565b60608060605f60165f8681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610c9f57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c81575b505050505090505f815190505f8167ffffffffffffffff811115610cc557610cc56125a9565b604051908082528060200260200182016040528015610cee578160200160208202803683370190505b5090505f8267ffffffffffffffff811115610d0b57610d0b6125a9565b604051908082528060200260200182016040528015610d34578160200160208202803683370190505b5090505f5b83811015610e1c5760145f8a81526020019081526020015f205f868381518110610d6557610d6561278b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054838281518110610d9f57610d9f61278b565b60200260200101818152505060155f8a81526020019081526020015f205f868381518110610dcf57610dcf61278b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054828281518110610e0957610e0961278b565b6020908102919091010152600101610d39565b5092979096509194509092505050565b5f33610bf4818585610e3e83836110b0565b610e48919061286f565b6111c9565b610e556112ec565b600791909155600855565b610e686112ec565b610e715f611625565b565b610e7b6112ec565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461080990612753565b610eb46112ec565b600654600160a81b900460ff16610f085760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b60448201526064015b60405180910390fd5b6006805460ff60a81b19169055565b5f3381610f2482866110b0565b905083811015610f845760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610eff565b610c2b82868684036111c9565b5f33610bf48185856113be565b610fa66112ec565b5f5b8251811015611000578160125f858481518110610fc757610fc761278b565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610fa8565b505050565b6016602052815f5260405f20818154811061101e575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6110416112ec565b600654600160a81b900460ff161561109b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610eff565b6006805460ff60a81b1916600160a81b179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6110e26112ec565b6005546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015611118573d5f803e3d5ffd5b50565b6111236122eb565b60608060605f6111328661088a565b90505f805f61114089610c36565b959b919a50985093965092945050505050565b61115b6112ec565b6001600160a01b0381166111c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610eff565b61111881611625565b6001600160a01b03831661122b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610eff565b6001600160a01b03821661128c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610eff565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610e715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eff565b5f61135184846110b0565b90505f1981146113b857818110156113ab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610eff565b6113b884848484036111c9565b50505050565b6001600160a01b0383166113e45760405162461bcd60e51b8152600401610eff90612882565b6001600160a01b03821661140a5760405162461bcd60e51b8152600401610eff906128c7565b5f811161146b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610eff565b6006545f90600160a01b900460ff168061149c57506001600160a01b0384165f9081526012602052604090205460ff165b806114be57506001600160a01b0383165f9081526012602052604090205460ff165b6115f157600654600160a81b900460ff166115115760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b6044820152606401610eff565b6103e8600d54600c54611524919061286f565b61152e908461290a565b6115389190612935565b9050611545843083611676565b600e546001600160a01b038581169116145f816115625785611564565b845b90506115728282858761179e565b600e546001600160a01b03908116908616036115ee575f611591611b90565b6007546010545f90815260136020526040902054919250906115b39043612948565b1180156115c1575060085481115b80156115df57506010545f9081526013602052604090206004015415155b156115ec576115ec611d24565b505b50505b6113b884846116206116038587612948565b6001600160a01b0389165f908152602081905260409020546120ba565b611676565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661169c5760405162461bcd60e51b8152600401610eff90612882565b6001600160a01b0382166116c25760405162461bcd60e51b8152600401610eff906128c7565b6001600160a01b0383165f90815260208190526040902054818110156117395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610eff565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113b8565b5f600d54600c546117af919061286f565b600c546117bc908561290a565b6117c69190612935565b90508480156117e357506010545f90815260136020526040902054155b156118985760408051610120810182524381525f6020808301828152601054848601818152606086018581526080870186815260a0880187815260c0890188815260e08a018981526101008b018a8152968a52601390985299909720975188559351600188015590516002870155516003860155905160048501559151600584015592516006830155915160078201559051600890910180546001600160a01b0319166001600160a01b039092169190911790555b6118a28184612948565b60095f8282546118b2919061286f565b90915550508415611b72576040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611924573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611948919061279f565b815f8151811061195a5761195a61278b565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061198e5761198e61278b565b6001600160a01b0392831660209182029290920101526006546040516307c0329d60e21b81525f929190911690631f00ca74906119d190879086906004016127ba565b5f60405180830381865afa1580156119eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a1291908101906127da565b5f81518110611a2357611a2361278b565b6020026020010151905082600a5f828254611a3e919061286f565b90915550506010545f9081526013602052604081206004018054839290611a6690849061286f565b90915550506010545f9081526013602052604081206003018054879290611a8e90849061286f565b90915550506010545f9081526014602090815260408083206001600160a01b038a1684529091528120549003611af8576010545f9081526016602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0388161790555b6010545f9081526014602090815260408083206001600160a01b038a16845290915281208054879290611b2c90849061286f565b90915550506010545f9081526015602090815260408083206001600160a01b038a16845290915281208054839290611b6590849061286f565b90915550611b8992505050565b80600b5f828254611b83919061286f565b90915550505b5050505050565b5f80611bc6600b54600a54600954611ba8919061286f565b611bb2919061286f565b305f908152602081905260409020546120ba565b905047611bd2826120cf565b5f611bdd8247612948565b90505f8360095483611bef919061290a565b611bf99190612935565b90505f84600a5484611c0b919061290a565b611c159190612935565b90508460095484611c26919061290a565b611c309190612935565b6010545f9081526013602052604081206005018054909190611c5390849061286f565b9091555050600a548590611c67908561290a565b611c719190612935565b6010545f9081526013602052604081206006018054909190611c9490849061286f565b90915550819050611ca58385612948565b611caf9190612948565b6010545f9081526013602052604081206007018054909190611cd290849061286f565b90915550505f6009819055600a819055600b8190556010548152601360205260409020600781015460068201546005909201549091611d109161286f565b611d1a919061286f565b9550505050505090565b6006805460ff60a01b1916600160a01b1781556010545f818152601360209081526040808320815161012081018352815481526001820154818501526002820154818401526003820154606082015260048201546080820152600582015460a08201529581015460c0870152600781015460e0870152600801546001600160a01b03166101008601529282526016815282822080548451818402810184019095528085529293929091830182828015611e0457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611de6575b505050505090505f815190505f825f81518110611e2357611e2361278b565b6020026020010151905060018211156120135760808401515f90611e48600143612948565b4085611e55600187612948565b81518110611e6557611e6561278b565b602002602001015185604051602001611ea39392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b604051602081830303815290604052805190602001205f1c611ec5919061295b565b90505f5b83811015611f77575f818651611edf9190612948565b611ee9908461295b565b611ef3908361286f565b9050858181518110611f0757611f0761278b565b6020026020010151868381518110611f2157611f2161278b565b6020026020010151878481518110611f3b57611f3b61278b565b60200260200101888481518110611f5457611f5461278b565b6001600160a01b0393841660209182029290920101529116905250600101611ec9565b505f805b8481101561200f5760155f60105481526020019081526020015f205f878381518110611fa957611fa961278b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205482611fdc919061286f565b91508183101561200757858181518110611ff857611ff861278b565b6020026020010151935061200f565b600101611f7b565b5050505b601080545f9081526013602052604080822060080180546001600160a01b0319166001600160a01b03868116919091179091559254825290204360019190910155600f5460a086015161206a929190911690612226565b612087818560e001518660c00151612082919061286f565b612226565b601054601181905550600160105f8282546120a2919061286f565b90915550506006805460ff60a01b1916905550505050565b5f8183106120c85781610be0565b5090919050565b6006805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106121155761211561278b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612190919061279f565b816001815181106121a3576121a361278b565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906121e89085905f9086903090429060040161296e565b5f604051808303815f87803b1580156121ff575f80fd5b505af1158015612211573d5f803e3d5ffd5b50506006805460ff60a01b1916905550505050565b604080515f808252602082019092526001600160a01b03841690839060405161224f91906129a9565b5f6040518083038185875af1925050503d805f8114612289576040519150601f19603f3d011682016040523d82523d5f602084013e61228e565b606091505b50509050806110005760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610eff565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681525090565b5f5b83811015612351578181015183820152602001612339565b50505f910152565b602081525f8251806020840152612377816040850160208701612337565b601f01601f19169190910160400192915050565b5f6020828403121561239b575f80fd5b5035919050565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100908101516001600160a01b0316910152565b6101208101610bfa82846123a2565b6001600160a01b0381168114611118575f80fd5b5f8060408385031215612435575f80fd5b823561244081612410565b946020939093013593505050565b5f806040838503121561245f575f80fd5b50508035926020909101359150565b5f805f60608486031215612480575f80fd5b833561248b81612410565b9250602084013561249b81612410565b929592945050506040919091013590565b5f815180845260208085019450602084015f5b838110156124e45781516001600160a01b0316875295820195908201906001016124bf565b509495945050505050565b5f815180845260208085019450602084015f5b838110156124e457815187529582019590820190600101612502565b606081525f61253060608301866124ac565b828103602084015261254281866124ef565b9050828103604084015261255681856124ef565b9695505050505050565b5f8060408385031215612571575f80fd5b82359150602083013561258381612410565b809150509250929050565b5f6020828403121561259e575f80fd5b8135610be081612410565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125e6576125e66125a9565b604052919050565b5f67ffffffffffffffff821115612607576126076125a9565b5060051b60200190565b80358015158114612620575f80fd5b919050565b5f8060408385031215612636575f80fd5b823567ffffffffffffffff81111561264c575f80fd5b8301601f8101851361265c575f80fd5b8035602061267161266c836125ee565b6125bd565b82815260059290921b8301810191818101908884111561268f575f80fd5b938201935b838510156126b65784356126a781612410565b82529382019390820190612694565b95506126c59050868201612611565b93505050509250929050565b5f80604083850312156126e2575f80fd5b82356126ed81612410565b9150602083013561258381612410565b5f61018061270b83886123a2565b8061012084015261271e818401876124ac565b905082810361014084015261273381866124ef565b905082810361016084015261274881856124ef565b979650505050505050565b600181811c9082168061276757607f821691505b60208210810361278557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156127af575f80fd5b8151610be081612410565b828152604060208201525f6127d260408301846124ac565b949350505050565b5f60208083850312156127eb575f80fd5b825167ffffffffffffffff811115612801575f80fd5b8301601f81018513612811575f80fd5b805161281f61266c826125ee565b81815260059190911b8201830190838101908783111561283d575f80fd5b928401925b8284101561274857835182529284019290840190612842565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bfa57610bfa61285b565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610bfa57610bfa61285b565b634e487b7160e01b5f52601260045260245ffd5b5f8261294357612943612921565b500490565b81810381811115610bfa57610bfa61285b565b5f8261296957612969612921565b500690565b85815284602082015260a060408201525f61298c60a08301866124ac565b6001600160a01b0394909416606083015250608001529392505050565b5f82516129ba818460208701612337565b919091019291505056fea2646970667358221220a74da672070866744818c0aa158f4f187bf8a8e5267057a133de12749ce1526664736f6c6343000816003300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000115eec47f6cf7e35000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000033abb797a887a37e4b282cd0f3862823f71efd350000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000044e4f4e4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e4f4e4f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610241575f3560e01c8063886e722511610134578063c5fdaf68116100b3578063e086e5ec11610078578063e086e5ec14610740578063e0bf7fd114610754578063ea8522c414610782578063ef614f6914610797578063f2fde38b146107c6578063f5e3688f146107e5575f80fd5b8063c5fdaf68146106a3578063c9567bf9146106b8578063caac7934146106cc578063d7f5d38a146106eb578063dd62ed3e14610721575f80fd5b8063a457c2d7116100f9578063a457c2d714610612578063a9059cbb14610631578063ad29ffde14610650578063ba226fc41461066f578063bd2992f314610684575f80fd5b8063886e7225146105995780638da5cb5b146105ae578063906e9dd0146105cb57806395d89b41146105ea57806397a98955146105fe575f80fd5b80632a09060f116101c05780633950935111610185578063395093511461045957806345a8cceb146104785780635a57fee01461053257806370a0823114610551578063715018a614610585575f80fd5b80632a09060f146103c95780632d882863146103de5780632f3b44c1146103f3578063313ce5671461040857806337e0b62014610423575f80fd5b806318160ddd1161020657806318160ddd146103295780631a61f1b5146103475780632171f26c1461035c57806323b872dd1461037c57806324bf10d91461039b575f80fd5b806306fdde031461024c5780630720da5214610276578063095ea7b3146102a25780631755ff21146102d1578063178bc44014610308575f80fd5b3661024857005b5f80fd5b348015610257575f80fd5b506102606107fa565b60405161026d9190612359565b60405180910390f35b348015610281575f80fd5b5061029561029036600461238b565b61088a565b60405161026d9190612401565b3480156102ad575f80fd5b506102c16102bc366004612424565b610be7565b604051901515815260200161026d565b3480156102dc575f80fd5b50600e546102f0906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b348015610313575f80fd5b5061032761032236600461244e565b610c00565b005b348015610334575f80fd5b506002545b60405190815260200161026d565b348015610352575f80fd5b5061033960105481565b348015610367575f80fd5b506006546102c190600160a81b900460ff1681565b348015610387575f80fd5b506102c161039636600461246e565b610c13565b3480156103a6575f80fd5b506103ba6103b536600461238b565b610c36565b60405161026d9392919061251e565b3480156103d4575f80fd5b50610339600c5481565b3480156103e9575f80fd5b50610339600d5481565b3480156103fe575f80fd5b5061033960095481565b348015610413575f80fd5b506040516012815260200161026d565b34801561042e575f80fd5b5061033961043d366004612560565b601460209081525f928352604080842090915290825290205481565b348015610464575f80fd5b506102c1610473366004612424565b610e2c565b348015610483575f80fd5b506104e561049236600461238b565b60136020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460078801546008909801549697959694959394929391929091906001600160a01b031689565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e08301526001600160a01b03166101008201526101200161026d565b34801561053d575f80fd5b5061032761054c36600461244e565b610e4d565b34801561055c575f80fd5b5061033961056b36600461258e565b6001600160a01b03165f9081526020819052604090205490565b348015610590575f80fd5b50610327610e60565b3480156105a4575f80fd5b5061033960115481565b3480156105b9575f80fd5b506005546001600160a01b03166102f0565b3480156105d6575f80fd5b506103276105e536600461258e565b610e73565b3480156105f5575f80fd5b50610260610e9d565b348015610609575f80fd5b50610327610eac565b34801561061d575f80fd5b506102c161062c366004612424565b610f17565b34801561063c575f80fd5b506102c161064b366004612424565b610f91565b34801561065b575f80fd5b5061032761066a366004612625565b610f9e565b34801561067a575f80fd5b50610339600b5481565b34801561068f575f80fd5b506102f061069e36600461244e565b611005565b3480156106ae575f80fd5b5061033960085481565b3480156106c3575f80fd5b50610327611039565b3480156106d7575f80fd5b50600f546102f0906001600160a01b031681565b3480156106f6575f80fd5b50610339610705366004612560565b601560209081525f928352604080842090915290825290205481565b34801561072c575f80fd5b5061033961073b3660046126d1565b6110b0565b34801561074b575f80fd5b506103276110da565b34801561075f575f80fd5b506102c161076e36600461258e565b60126020525f908152604090205460ff1681565b34801561078d575f80fd5b50610339600a5481565b3480156107a2575f80fd5b506107b66107b136600461238b565b61111b565b60405161026d94939291906126fd565b3480156107d1575f80fd5b506103276107e036600461258e565b611153565b3480156107f0575f80fd5b5061033960075481565b60606003805461080990612753565b80601f016020809104026020016040519081016040528092919081815260200182805461083590612753565b80156108805780601f1061085757610100808354040283529160200191610880565b820191905f5260205f20905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b6108926122eb565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106108c5576108c561278b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561091c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610940919061279f565b816001815181106109535761095361278b565b6001600160a01b039283166020918202929092018101919091525f85815260138252604090819020815161012081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015490911661010082015260095415610a8a5760065460095460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91610a1a9186906004016127ba565b5f60405180830381865afa158015610a34573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a5b91908101906127da565b600181518110610a6d57610a6d61278b565b60200260200101518160a001818151610a86919061286f565b9052505b600a5415610b3557600654600a5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91610ac59186906004016127ba565b5f60405180830381865afa158015610adf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b0691908101906127da565b600181518110610b1857610b1861278b565b60200260200101518160c001818151610b31919061286f565b9052505b600b5415610be057600654600b5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91610b709186906004016127ba565b5f60405180830381865afa158015610b8a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bb191908101906127da565b600181518110610bc357610bc361278b565b60200260200101518160e001818151610bdc919061286f565b9052505b9392505050565b5f33610bf48185856111c9565b60019150505b92915050565b610c086112ec565b600c91909155600d55565b5f33610c20858285611346565b610c2b8585856113be565b506001949350505050565b60608060605f60165f8681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610c9f57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c81575b505050505090505f815190505f8167ffffffffffffffff811115610cc557610cc56125a9565b604051908082528060200260200182016040528015610cee578160200160208202803683370190505b5090505f8267ffffffffffffffff811115610d0b57610d0b6125a9565b604051908082528060200260200182016040528015610d34578160200160208202803683370190505b5090505f5b83811015610e1c5760145f8a81526020019081526020015f205f868381518110610d6557610d6561278b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054838281518110610d9f57610d9f61278b565b60200260200101818152505060155f8a81526020019081526020015f205f868381518110610dcf57610dcf61278b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054828281518110610e0957610e0961278b565b6020908102919091010152600101610d39565b5092979096509194509092505050565b5f33610bf4818585610e3e83836110b0565b610e48919061286f565b6111c9565b610e556112ec565b600791909155600855565b610e686112ec565b610e715f611625565b565b610e7b6112ec565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461080990612753565b610eb46112ec565b600654600160a81b900460ff16610f085760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b60448201526064015b60405180910390fd5b6006805460ff60a81b19169055565b5f3381610f2482866110b0565b905083811015610f845760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610eff565b610c2b82868684036111c9565b5f33610bf48185856113be565b610fa66112ec565b5f5b8251811015611000578160125f858481518110610fc757610fc761278b565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610fa8565b505050565b6016602052815f5260405f20818154811061101e575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6110416112ec565b600654600160a81b900460ff161561109b5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610eff565b6006805460ff60a81b1916600160a81b179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6110e26112ec565b6005546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015611118573d5f803e3d5ffd5b50565b6111236122eb565b60608060605f6111328661088a565b90505f805f61114089610c36565b959b919a50985093965092945050505050565b61115b6112ec565b6001600160a01b0381166111c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610eff565b61111881611625565b6001600160a01b03831661122b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610eff565b6001600160a01b03821661128c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610eff565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610e715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610eff565b5f61135184846110b0565b90505f1981146113b857818110156113ab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610eff565b6113b884848484036111c9565b50505050565b6001600160a01b0383166113e45760405162461bcd60e51b8152600401610eff90612882565b6001600160a01b03821661140a5760405162461bcd60e51b8152600401610eff906128c7565b5f811161146b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610eff565b6006545f90600160a01b900460ff168061149c57506001600160a01b0384165f9081526012602052604090205460ff165b806114be57506001600160a01b0383165f9081526012602052604090205460ff165b6115f157600654600160a81b900460ff166115115760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b6044820152606401610eff565b6103e8600d54600c54611524919061286f565b61152e908461290a565b6115389190612935565b9050611545843083611676565b600e546001600160a01b038581169116145f816115625785611564565b845b90506115728282858761179e565b600e546001600160a01b03908116908616036115ee575f611591611b90565b6007546010545f90815260136020526040902054919250906115b39043612948565b1180156115c1575060085481115b80156115df57506010545f9081526013602052604090206004015415155b156115ec576115ec611d24565b505b50505b6113b884846116206116038587612948565b6001600160a01b0389165f908152602081905260409020546120ba565b611676565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661169c5760405162461bcd60e51b8152600401610eff90612882565b6001600160a01b0382166116c25760405162461bcd60e51b8152600401610eff906128c7565b6001600160a01b0383165f90815260208190526040902054818110156117395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610eff565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113b8565b5f600d54600c546117af919061286f565b600c546117bc908561290a565b6117c69190612935565b90508480156117e357506010545f90815260136020526040902054155b156118985760408051610120810182524381525f6020808301828152601054848601818152606086018581526080870186815260a0880187815260c0890188815260e08a018981526101008b018a8152968a52601390985299909720975188559351600188015590516002870155516003860155905160048501559151600584015592516006830155915160078201559051600890910180546001600160a01b0319166001600160a01b039092169190911790555b6118a28184612948565b60095f8282546118b2919061286f565b90915550508415611b72576040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611924573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611948919061279f565b815f8151811061195a5761195a61278b565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061198e5761198e61278b565b6001600160a01b0392831660209182029290920101526006546040516307c0329d60e21b81525f929190911690631f00ca74906119d190879086906004016127ba565b5f60405180830381865afa1580156119eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a1291908101906127da565b5f81518110611a2357611a2361278b565b6020026020010151905082600a5f828254611a3e919061286f565b90915550506010545f9081526013602052604081206004018054839290611a6690849061286f565b90915550506010545f9081526013602052604081206003018054879290611a8e90849061286f565b90915550506010545f9081526014602090815260408083206001600160a01b038a1684529091528120549003611af8576010545f9081526016602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0388161790555b6010545f9081526014602090815260408083206001600160a01b038a16845290915281208054879290611b2c90849061286f565b90915550506010545f9081526015602090815260408083206001600160a01b038a16845290915281208054839290611b6590849061286f565b90915550611b8992505050565b80600b5f828254611b83919061286f565b90915550505b5050505050565b5f80611bc6600b54600a54600954611ba8919061286f565b611bb2919061286f565b305f908152602081905260409020546120ba565b905047611bd2826120cf565b5f611bdd8247612948565b90505f8360095483611bef919061290a565b611bf99190612935565b90505f84600a5484611c0b919061290a565b611c159190612935565b90508460095484611c26919061290a565b611c309190612935565b6010545f9081526013602052604081206005018054909190611c5390849061286f565b9091555050600a548590611c67908561290a565b611c719190612935565b6010545f9081526013602052604081206006018054909190611c9490849061286f565b90915550819050611ca58385612948565b611caf9190612948565b6010545f9081526013602052604081206007018054909190611cd290849061286f565b90915550505f6009819055600a819055600b8190556010548152601360205260409020600781015460068201546005909201549091611d109161286f565b611d1a919061286f565b9550505050505090565b6006805460ff60a01b1916600160a01b1781556010545f818152601360209081526040808320815161012081018352815481526001820154818501526002820154818401526003820154606082015260048201546080820152600582015460a08201529581015460c0870152600781015460e0870152600801546001600160a01b03166101008601529282526016815282822080548451818402810184019095528085529293929091830182828015611e0457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611de6575b505050505090505f815190505f825f81518110611e2357611e2361278b565b6020026020010151905060018211156120135760808401515f90611e48600143612948565b4085611e55600187612948565b81518110611e6557611e6561278b565b602002602001015185604051602001611ea39392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b604051602081830303815290604052805190602001205f1c611ec5919061295b565b90505f5b83811015611f77575f818651611edf9190612948565b611ee9908461295b565b611ef3908361286f565b9050858181518110611f0757611f0761278b565b6020026020010151868381518110611f2157611f2161278b565b6020026020010151878481518110611f3b57611f3b61278b565b60200260200101888481518110611f5457611f5461278b565b6001600160a01b0393841660209182029290920101529116905250600101611ec9565b505f805b8481101561200f5760155f60105481526020019081526020015f205f878381518110611fa957611fa961278b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205482611fdc919061286f565b91508183101561200757858181518110611ff857611ff861278b565b6020026020010151935061200f565b600101611f7b565b5050505b601080545f9081526013602052604080822060080180546001600160a01b0319166001600160a01b03868116919091179091559254825290204360019190910155600f5460a086015161206a929190911690612226565b612087818560e001518660c00151612082919061286f565b612226565b601054601181905550600160105f8282546120a2919061286f565b90915550506006805460ff60a01b1916905550505050565b5f8183106120c85781610be0565b5090919050565b6006805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106121155761211561278b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612190919061279f565b816001815181106121a3576121a361278b565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906121e89085905f9086903090429060040161296e565b5f604051808303815f87803b1580156121ff575f80fd5b505af1158015612211573d5f803e3d5ffd5b50506006805460ff60a01b1916905550505050565b604080515f808252602082019092526001600160a01b03841690839060405161224f91906129a9565b5f6040518083038185875af1925050503d805f8114612289576040519150601f19603f3d011682016040523d82523d5f602084013e61228e565b606091505b50509050806110005760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610eff565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681525090565b5f5b83811015612351578181015183820152602001612339565b50505f910152565b602081525f8251806020840152612377816040850160208701612337565b601f01601f19169190910160400192915050565b5f6020828403121561239b575f80fd5b5035919050565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100908101516001600160a01b0316910152565b6101208101610bfa82846123a2565b6001600160a01b0381168114611118575f80fd5b5f8060408385031215612435575f80fd5b823561244081612410565b946020939093013593505050565b5f806040838503121561245f575f80fd5b50508035926020909101359150565b5f805f60608486031215612480575f80fd5b833561248b81612410565b9250602084013561249b81612410565b929592945050506040919091013590565b5f815180845260208085019450602084015f5b838110156124e45781516001600160a01b0316875295820195908201906001016124bf565b509495945050505050565b5f815180845260208085019450602084015f5b838110156124e457815187529582019590820190600101612502565b606081525f61253060608301866124ac565b828103602084015261254281866124ef565b9050828103604084015261255681856124ef565b9695505050505050565b5f8060408385031215612571575f80fd5b82359150602083013561258381612410565b809150509250929050565b5f6020828403121561259e575f80fd5b8135610be081612410565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125e6576125e66125a9565b604052919050565b5f67ffffffffffffffff821115612607576126076125a9565b5060051b60200190565b80358015158114612620575f80fd5b919050565b5f8060408385031215612636575f80fd5b823567ffffffffffffffff81111561264c575f80fd5b8301601f8101851361265c575f80fd5b8035602061267161266c836125ee565b6125bd565b82815260059290921b8301810191818101908884111561268f575f80fd5b938201935b838510156126b65784356126a781612410565b82529382019390820190612694565b95506126c59050868201612611565b93505050509250929050565b5f80604083850312156126e2575f80fd5b82356126ed81612410565b9150602083013561258381612410565b5f61018061270b83886123a2565b8061012084015261271e818401876124ac565b905082810361014084015261273381866124ef565b905082810361016084015261274881856124ef565b979650505050505050565b600181811c9082168061276757607f821691505b60208210810361278557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156127af575f80fd5b8151610be081612410565b828152604060208201525f6127d260408301846124ac565b949350505050565b5f60208083850312156127eb575f80fd5b825167ffffffffffffffff811115612801575f80fd5b8301601f81018513612811575f80fd5b805161281f61266c826125ee565b81815260059190911b8201830190838101908783111561283d575f80fd5b928401925b8284101561274857835182529284019290840190612842565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bfa57610bfa61285b565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610bfa57610bfa61285b565b634e487b7160e01b5f52601260045260245ffd5b5f8261294357612943612921565b500490565b81810381811115610bfa57610bfa61285b565b5f8261296957612969612921565b500690565b85815284602082015260a060408201525f61298c60a08301866124ac565b6001600160a01b0394909416606083015250608001529392505050565b5f82516129ba818460208701612337565b919091019291505056fea2646970667358221220a74da672070866744818c0aa158f4f187bf8a8e5267057a133de12749ce1526664736f6c63430008160033

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

00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000115eec47f6cf7e35000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000033abb797a887a37e4b282cd0f3862823f71efd350000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000044e4f4e4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e4f4e4f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): NONO
Arg [1] : symbol (string): NONO
Arg [2] : liquidityAmount (uint256): 21000000000000000000000000
Arg [3] : roundMinBlock (uint256): 12
Arg [4] : roundMinAmount (uint256): 1
Arg [5] : poolTax (uint256): 70
Arg [6] : marketingTax (uint256): 30
Arg [7] : marketingAddress (address): 0x33ABB797a887a37e4B282Cd0f3862823f71eFD35
Arg [8] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 000000000000000000000000000000000000000000115eec47f6cf7e35000000
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [6] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [7] : 00000000000000000000000033abb797a887a37e4b282cd0f3862823f71efd35
Arg [8] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [10] : 4e4f4e4f00000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 4e4f4e4f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

334:12487:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2105:92:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4725:680:7;;;;;;;;;;-1:-1:-1;4725:680:7;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4299:183:1:-;;;;;;;;;;-1:-1:-1;4299:183:1;;;;;:::i;:::-;;:::i;:::-;;;2328:14:10;;2321:22;2303:41;;2291:2;2276:18;4299:183:1;2163:187:10;766:26:7;;;;;;;;;;-1:-1:-1;766:26:7;;;;-1:-1:-1;;;;;766:26:7;;;;;;-1:-1:-1;;;;;2519:32:10;;;2501:51;;2489:2;2474:18;766:26:7;2355:203:10;3310:152:7;;;;;;;;;;-1:-1:-1;3310:152:7;;;;;:::i;:::-;;:::i;:::-;;3166:100:1;;;;;;;;;;-1:-1:-1;3249:12:1;;3166:100;;;2962:25:10;;;2950:2;2935:18;3166:100:1;2816:177:10;838:36:7;;;;;;;;;;;;;;;;459:33;;;;;;;;;;-1:-1:-1;459:33:7;;;;-1:-1:-1;;;459:33:7;;;;;;5038:238:1;;;;;;;;;;-1:-1:-1;5038:238:1;;;;;:::i;:::-;;:::i;4021:696:7:-;;;;;;;;;;-1:-1:-1;4021:696:7;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;701:23::-;;;;;;;;;;;;;;;;731:28;;;;;;;;;;;;;;;;574:35;;;;;;;;;;;;;;;;3027:85:1;;;;;;;;;;-1:-1:-1;3027:85:1;;3105:2;5189:36:10;;5177:2;5162:18;3027:85:1;5047:184:10;1036:75:7;;;;;;;;;;-1:-1:-1;1036:75:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5665:220:1;;;;;;;;;;-1:-1:-1;5665:220:1;;;;;:::i;:::-;;:::i;983:46:7:-;;;;;;;;;;-1:-1:-1;983:46:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;983:46:7;;;;;;;5927:25:10;;;5983:2;5968:18;;5961:34;;;;6011:18;;;6004:34;;;;6069:2;6054:18;;6047:34;;;;6112:3;6097:19;;6090:35;;;;6156:3;6141:19;;6134:35;6200:3;6185:19;;6178:35;6244:3;6229:19;;6222:35;-1:-1:-1;;;;;6294:32:10;6288:3;6273:19;;6266:61;5914:3;5899:19;983:46:7;5556:777:10;3470:182:7;;;;;;;;;;-1:-1:-1;3470:182:7;;;;;:::i;:::-;;:::i;3318:119:1:-;;;;;;;;;;-1:-1:-1;3318:119:1;;;;;:::i;:::-;-1:-1:-1;;;;;3414:18:1;3392:7;3414:18;;;;;;;;;;;;3318:119;1755:95:8;;;;;;;;;;;;;:::i;881:37:7:-;;;;;;;;;;;;;;;;1156:79:8;;;;;;;;;;-1:-1:-1;1224:6:8;;-1:-1:-1;;;;;1224:6:8;1156:79;;3660:127:7;;;;;;;;;;-1:-1:-1;3660:127:7;;;;;:::i;:::-;;:::i;2304:96:1:-;;;;;;;;;;;;;:::i;3163:139:7:-;;;;;;;;;;;;;:::i;6366:395:1:-;;;;;;;;;;-1:-1:-1;6366:395:1;;;;;:::i;:::-;;:::i;3627:175::-;;;;;;;;;;-1:-1:-1;3627:175:1;;;;;:::i;:::-;;:::i;3795:218:7:-;;;;;;;;;;-1:-1:-1;3795:218:7;;;;;:::i;:::-;;:::i;657:35::-;;;;;;;;;;;;;;;;1200:54;;;;;;;;;;-1:-1:-1;1200:54:7;;;;;:::i;:::-;;:::i;535:30::-;;;;;;;;;;;;;;;;3013:142;;;;;;;;;;;;;:::i;799:32::-;;;;;;;;;;-1:-1:-1;799:32:7;;;;-1:-1:-1;;;;;799:32:7;;;1118:75;;;;;;;;;;-1:-1:-1;1118:75:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3854:143:1;;;;;;;;;;-1:-1:-1;3854:143:1;;;;;:::i;:::-;;:::i;2898:107:7:-;;;;;;;;;;;;;:::i;925:51::-;;;;;;;;;;-1:-1:-1;925:51:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;616:34;;;;;;;;;;;;;;;;5413:423;;;;;;;;;;-1:-1:-1;5413:423:7;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;1993:188:8:-;;;;;;;;;;-1:-1:-1;1993:188:8;;;;;:::i;:::-;;:::i;499:29:7:-;;;;;;;;;;;;;;;;2105:92:1;2159:13;2187:5;2180:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2105:92;:::o;4725:680:7:-;4789:16;;:::i;:::-;4842;;;4856:1;4842:16;;;;;;;;4818:21;;4842:16;;;;;;;;;;-1:-1:-1;4842:16:7;4818:40;;4887:4;4869;4874:1;4869:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4869:23:7;;;:7;;;;;;;;;;:23;;;;4913:15;;:22;;;-1:-1:-1;;;4913:22:7;;;;:15;;;;;:20;;:22;;;;;4869:7;;4913:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4903:4;4908:1;4903:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4903:32:7;;;:7;;;;;;;;;;:32;;;;4948:27;4978:22;;;:9;:22;;;;;;;4948:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5015:16;;:20;5011:113;;5068:15;;5098:16;;5068:53;;-1:-1:-1;;;5068:53:7;;-1:-1:-1;;;;;5068:15:7;;;;:29;;:53;;5116:4;;5068:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5068:53:7;;;;;;;;;;;;:::i;:::-;5122:1;5068:56;;;;;;;;:::i;:::-;;;;;;;5037:10;:27;;:87;;;;;;;:::i;:::-;;;-1:-1:-1;5011:113:7;5139:15;;:19;5135:110;;5190:15;;5220;;5190:52;;-1:-1:-1;;;5190:52:7;;-1:-1:-1;;;;;5190:15:7;;;;:29;;:52;;5237:4;;5190:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5190:52:7;;;;;;;;;;;;:::i;:::-;5243:1;5190:55;;;;;;;;:::i;:::-;;;;;;;5160:10;:26;;:85;;;;;;;:::i;:::-;;;-1:-1:-1;5135:110:7;5260:16;;:20;5256:113;;5313:15;;5343:16;;5313:53;;-1:-1:-1;;;5313:53:7;;-1:-1:-1;;;;;5313:15:7;;;;:29;;:53;;5361:4;;5313:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5313:53:7;;;;;;;;;;;;:::i;:::-;5367:1;5313:56;;;;;;;;:::i;:::-;;;;;;;5282:10;:27;;:87;;;;;;;:::i;:::-;;;-1:-1:-1;5256:113:7;5387:10;4725:680;-1:-1:-1;;;4725:680:7:o;4299:183:1:-;4382:4;728:10:0;4428:32:1;728:10:0;4444:7:1;4453:6;4428:8;:32::i;:::-;4473:4;4466:11;;;4299:183;;;;;:::o;3310:152:7:-;1061:13:8;:11;:13::i;:::-;3397:8:7::1;:18:::0;;;;3426:13:::1;:28:::0;3310:152::o;5038:238:1:-;5135:4;728:10:0;5183:38:1;5199:4;728:10:0;5214:6:1;5183:15;:38::i;:::-;5227:27;5237:4;5243:2;5247:6;5227:9;:27::i;:::-;-1:-1:-1;5267:4:1;;5038:238;-1:-1:-1;;;;5038:238:1:o;4021:696:7:-;4097:16;4115;4133;4162:30;4195:17;:30;4213:11;4195:30;;;;;;;;;;;4162:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4162:63:7;;;;;;;;;;;;;;;;;;;;;;;4236:22;4261:13;:20;4236:45;;4292:27;4336:14;4322:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4322:29:7;;4292:59;;4362:27;4406:14;4392:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4392:29:7;;4362:59;;4437:9;4432:221;4456:14;4452:1;:18;4432:221;;;4508:20;:33;4529:11;4508:33;;;;;;;;;;;:51;4542:13;4556:1;4542:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4508:51:7;-1:-1:-1;;;;;4508:51:7;;;;;;;;;;;;;4492:10;4503:1;4492:13;;;;;;;;:::i;:::-;;;;;;:67;;;;;4590:20;:33;4611:11;4590:33;;;;;;;;;;;:51;4624:13;4638:1;4624:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4590:51:7;-1:-1:-1;;;;;4590:51:7;;;;;;;;;;;;;4574:10;4585:1;4574:13;;;;;;;;:::i;:::-;;;;;;;;;;:67;4472:3;;4432:221;;;-1:-1:-1;4671:13:7;;4686:10;;-1:-1:-1;4671:13:7;;-1:-1:-1;4021:696:7;;-1:-1:-1;;;4021:696:7:o;5665:220:1:-;5753:4;728:10:0;5799:64:1;728:10:0;5815:7:1;5852:10;5824:25;728:10:0;5815:7:1;5824:9;:25::i;:::-;:38;;;;:::i;:::-;5799:8;:64::i;3470:182:7:-;1061:13:8;:11;:13::i;:::-;3571:14:7::1;:30:::0;;;;3612:15:::1;:32:::0;3470:182::o;1755:95:8:-;1061:13;:11;:13::i;:::-;1815:30:::1;1842:1;1815:18;:30::i;:::-;1755:95::o:0;3660:127:7:-;1061:13:8;:11;:13::i;:::-;3743:17:7::1;:36:::0;;-1:-1:-1;;;;;;3743:36:7::1;-1:-1:-1::0;;;;;3743:36:7;;;::::1;::::0;;;::::1;::::0;;3660:127::o;2304:96:1:-;2360:13;2388:7;2381:14;;;;;:::i;3163:139:7:-;1061:13:8;:11;:13::i;:::-;3225::7::1;::::0;-1:-1:-1;;;3225:13:7;::::1;;;3217:45;;;::::0;-1:-1:-1;;;3217:45:7;;12094:2:10;3217:45:7::1;::::0;::::1;12076:21:10::0;12133:2;12113:18;;;12106:30;-1:-1:-1;;;12152:18:10;;;12145:49;12211:18;;3217:45:7::1;;;;;;;;;3273:13;:21:::0;;-1:-1:-1;;;;3273:21:7::1;::::0;;3163:139::o;6366:395:1:-;6459:4;728:10:0;6459:4:1;6532:25;728:10:0;6549:7:1;6532:9;:25::i;:::-;6505:52;;6591:15;6571:16;:35;;6563:85;;;;-1:-1:-1;;;6563:85:1;;12442:2:10;6563:85:1;;;12424:21:10;12481:2;12461:18;;;12454:30;12520:34;12500:18;;;12493:62;-1:-1:-1;;;12571:18:10;;;12564:35;12616:19;;6563:85:1;12240:401:10;6563:85:1;6672:60;6681:5;6688:7;6716:15;6697:16;:34;6672:8;:60::i;3627:175::-;3706:4;728:10:0;3752:28:1;728:10:0;3769:2:1;3773:6;3752:9;:28::i;3795:218:7:-;1061:13:8;:11;:13::i;:::-;3895:9:7::1;3890:116;3914:8;:15;3910:1;:19;3890:116;;;3986:8;3951:19;:32;3971:8;3980:1;3971:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3951:32:7::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;3951:32:7;:43;;-1:-1:-1;;3951:43:7::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;3931:3:7::1;3890:116;;;;3795:218:::0;;:::o;1200:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1200:54:7;;-1:-1:-1;1200:54:7;;-1:-1:-1;1200:54:7:o;3013:142::-;1061:13:8;:11;:13::i;:::-;3075::7::1;::::0;-1:-1:-1;;;3075:13:7;::::1;;;3074:14;3066:50;;;::::0;-1:-1:-1;;;3066:50:7;;12848:2:10;3066:50:7::1;::::0;::::1;12830:21:10::0;12887:2;12867:18;;;12860:30;12926:25;12906:18;;;12899:53;12969:18;;3066:50:7::1;12646:347:10::0;3066:50:7::1;3127:13;:20:::0;;-1:-1:-1;;;;3127:20:7::1;-1:-1:-1::0;;;3127:20:7::1;::::0;;3013:142::o;3854:143:1:-;-1:-1:-1;;;;;3965:18:1;;;3943:7;3965:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3854:143::o;2898:107:7:-;1061:13:8;:11;:13::i;:::-;1224:6;;2949:48:7::1;::::0;-1:-1:-1;;;;;1224:6:8;;;;2975:21:7::1;2949:48:::0;::::1;;;::::0;::::1;::::0;;;2975:21;1224:6:8;2949:48:7;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2898:107::o:0;5413:423::-;5480:16;;:::i;:::-;5498;5516;5534;5563:27;5593:25;5606:11;5593:12;:25::i;:::-;5563:55;;5630:30;5662:27;5691;5722:37;5747:11;5722:24;:37::i;:::-;5778:10;;5629:130;;-1:-1:-1;5629:130:7;-1:-1:-1;5778:10:7;;-1:-1:-1;5413:423:7;;-1:-1:-1;;;;;5413:423:7:o;1993:188:8:-;1061:13;:11;:13::i;:::-;-1:-1:-1;;;;;2077:22:8;::::1;2069:73;;;::::0;-1:-1:-1;;;2069:73:8;;13200:2:10;2069:73:8::1;::::0;::::1;13182:21:10::0;13239:2;13219:18;;;13212:30;13278:34;13258:18;;;13251:62;-1:-1:-1;;;13329:18:10;;;13322:36;13375:19;;2069:73:8::1;12998:402:10::0;2069:73:8::1;2148:28;2167:8;2148:18;:28::i;10030:322:1:-:0;-1:-1:-1;;;;;10127:19:1;;10119:68;;;;-1:-1:-1;;;10119:68:1;;13607:2:10;10119:68:1;;;13589:21:10;13646:2;13626:18;;;13619:30;13685:34;13665:18;;;13658:62;-1:-1:-1;;;13736:18:10;;;13729:34;13780:19;;10119:68:1;13405:400:10;10119:68:1;-1:-1:-1;;;;;10201:21:1;;10193:68;;;;-1:-1:-1;;;10193:68:1;;14012:2:10;10193:68:1;;;13994:21:10;14051:2;14031:18;;;14024:30;14090:34;14070:18;;;14063:62;-1:-1:-1;;;14141:18:10;;;14134:32;14183:19;;10193:68:1;13810:398:10;10193:68:1;-1:-1:-1;;;;;10268:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10315:32;;2962:25:10;;;10315:32:1;;2935:18:10;10315:32:1;;;;;;;10030:322;;;:::o;1302:124:8:-;1224:6;;-1:-1:-1;;;;;1224:6:8;728:10:0;1361:23:8;1353:68;;;;-1:-1:-1;;;1353:68:8;;14415:2:10;1353:68:8;;;14397:21:10;;;14434:18;;;14427:30;14493:34;14473:18;;;14466:62;14545:18;;1353:68:8;14213:356:10;10627:371:1;10723:24;10750:25;10760:5;10767:7;10750:9;:25::i;:::-;10723:52;;-1:-1:-1;;10785:16:1;:37;10781:213;;10860:6;10840:16;:26;;10832:68;;;;-1:-1:-1;;;10832:68:1;;14776:2:10;10832:68:1;;;14758:21:10;14815:2;14795:18;;;14788:30;14854:31;14834:18;;;14827:59;14903:18;;10832:68:1;14574:353:10;10832:68:1;10928:51;10937:5;10944:7;10972:6;10953:16;:25;10928:8;:51::i;:::-;10717:281;10627:371;;;:::o;6377:1527:7:-;-1:-1:-1;;;;;6475:18:7;;6467:68;;;;-1:-1:-1;;;6467:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;6554:16:7;;6546:64;;;;-1:-1:-1;;;6546:64:7;;;;;;;:::i;:::-;6638:1;6629:6;:10;6621:64;;;;-1:-1:-1;;;6621:64:7;;15944:2:10;6621:64:7;;;15926:21:10;15983:2;15963:18;;;15956:30;16022:34;16002:18;;;15995:62;-1:-1:-1;;;16073:18:10;;;16066:39;16122:19;;6621:64:7;15742:405:10;6621:64:7;6739:6;;6698:20;;-1:-1:-1;;;6739:6:7;;;;;:35;;-1:-1:-1;;;;;;6749:25:7;;;;;;:19;:25;;;;;;;;6739:35;:62;;;-1:-1:-1;;;;;;6778:23:7;;;;;;:19;:23;;;;;;;;6739:62;6733:1083;;6827:13;;-1:-1:-1;;;6827:13:7;;;;6819:45;;;;-1:-1:-1;;;6819:45:7;;12094:2:10;6819:45:7;;;12076:21:10;12133:2;12113:18;;;12106:30;-1:-1:-1;;;12152:18:10;;;12145:49;12211:18;;6819:45:7;11892:343:10;6819:45:7;6971:4;6954:13;;6943:8;;:24;;;;:::i;:::-;6933:35;;:6;:35;:::i;:::-;:42;;;;:::i;:::-;6918:57;;6990:50;7006:4;7020;7027:12;6990:15;:50::i;:::-;7112:11;;-1:-1:-1;;;;;7104:19:7;;;7112:11;;7104:19;7091:10;7104:19;7157:17;;7170:4;7157:17;;;7165:2;7157:17;7138:36;;7189:54;7205:5;7212:8;7222:12;7236:6;7189:15;:54::i;:::-;7270:11;;-1:-1:-1;;;;;7270:11:7;;;7264:17;;;;7260:545;;7362:23;7388;:21;:23::i;:::-;7566:14;;7528:17;;7518:28;;;;:9;:28;;;;;:45;7362:49;;-1:-1:-1;7566:14:7;7503:60;;:12;:60;:::i;:::-;:77;:131;;;;;7619:15;;7601;:33;7503:131;:183;;;;-1:-1:-1;7648:17:7;;7685:1;7638:28;;;:9;:28;;;;;:44;;;:48;;7503:183;7499:291;;;7756:14;:12;:14::i;:::-;7283:522;7260:545;6804:1012;;6733:1083;7826:70;7842:4;7848:2;7852:43;7856:21;7865:12;7856:6;:21;:::i;:::-;-1:-1:-1;;;;;3414:18:1;;3392:7;3414:18;;;;;;;;;;;7852:3:7;:43::i;:::-;7826:15;:70::i;2329:173:8:-;2417:6;;;-1:-1:-1;;;;;2429:17:8;;;-1:-1:-1;;;;;;2429:17:8;;;;;;;2457:40;;2417:6;;;2429:17;2417:6;;2457:40;;2398:16;;2457:40;2392:110;2329:173;:::o;7209:722:1:-;-1:-1:-1;;;;;7301:18:1;;7293:68;;;;-1:-1:-1;;;7293:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7375:16:1;;7367:64;;;;-1:-1:-1;;;7367:64:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7505:15:1;;7483:19;7505:15;;;;;;;;;;;7534:21;;;;7526:72;;;;-1:-1:-1;;;7526:72:1;;16917:2:10;7526:72:1;;;16899:21:10;16956:2;16936:18;;;16929:30;16995:34;16975:18;;;16968:62;-1:-1:-1;;;17046:18:10;;;17039:36;17092:19;;7526:72:1;16715:402:10;7526:72:1;-1:-1:-1;;;;;7622:15:1;;;:9;:15;;;;;;;;;;;7640:20;;;7622:38;;7815:13;;;;;;;;;;:23;;;;;;7856:26;;2962:25:10;;;7815:13:1;;7856:26;;2935:18:10;7856:26:1;;;;;;;7889:37;3795:218:7;7912:1699;8024:24;8089:13;;8078:8;;:24;;;;:::i;:::-;8066:8;;8051:23;;:12;:23;:::i;:::-;:52;;;;:::i;:::-;8024:79;;8148:5;:59;;;;-1:-1:-1;8167:17:7;;8157:28;;;;:9;:28;;;;;:45;:50;8148:59;8144:515;;;8255:392;;;;;;;;8302:12;8255:392;;-1:-1:-1;8255:392:7;;;;;;;8382:17;;8255:392;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8224:28;;;:9;:28;;;;;;;:423;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8224:423:7;-1:-1:-1;;;;;8224:423:7;;;;;;;;;8144:515;8723:31;8738:16;8723:12;:31;:::i;:::-;8703:16;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;8765:839:7;;;;8815:16;;;8829:1;8815:16;;;;;;;;8791:21;;8815:16;;;;;;;;-1:-1:-1;;8856:15:7;;:22;;;-1:-1:-1;;;8856:22:7;;;;8791:40;;-1:-1:-1;;;;;;8856:15:7;;;;:20;;-1:-1:-1;8856:22:7;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8846:4;8851:1;8846:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;8846:32:7;;;-1:-1:-1;;;;;8846:32:7;;;;;8911:4;8893;8898:1;8893:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8893:23:7;;;:7;;;;;;;;;:23;8954:15;;:42;;-1:-1:-1;;;8954:42:7;;8931:20;;8954:15;;;;;:28;;:42;;8983:6;;8991:4;;8954:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8954:42:7;;;;;;;;;;;;:::i;:::-;8997:1;8954:45;;;;;;;;:::i;:::-;;;;;;;8931:68;;9035:16;9016:15;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;9076:17:7;;9066:28;;;;:9;:28;;;;;:44;;:60;;9114:12;;9066:28;:60;;9114:12;;9066:60;:::i;:::-;;;;-1:-1:-1;;9151:17:7;;9141:28;;;;:9;:28;;;;;:44;;:60;;9189:12;;9141:28;:60;;9189:12;;9141:60;:::i;:::-;;;;-1:-1:-1;;9243:17:7;;9222:39;;;;:20;:39;;;;;;;;-1:-1:-1;;;;;9222:49:7;;;;;;;;;;:54;;9218:146;;9315:17;;9297:36;;;;:17;:36;;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9297:51:7;-1:-1:-1;;;;;9297:51:7;;;;;9218:146;9399:17;;9378:39;;;;:20;:39;;;;;;;;-1:-1:-1;;;;;9378:49:7;;;;;;;;;:65;;9431:12;;9378:39;:65;;9431:12;;9378:65;:::i;:::-;;;;-1:-1:-1;;9479:17:7;;9458:39;;;;:20;:39;;;;;;;;-1:-1:-1;;;;;9458:49:7;;;;;;;;;:65;;9511:12;;9458:39;:65;;9511:12;;9458:65;:::i;:::-;;;;-1:-1:-1;8765:839:7;;-1:-1:-1;;;8765:839:7;;9576:16;9556;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;8765:839:7;8013:1598;7912:1699;;;;:::o;9619:1206::-;9669:7;9689:23;9715:84;9756:16;;9738:15;;9719:16;;:34;;;;:::i;:::-;:53;;;;:::i;:::-;9792:4;3392:7:1;3414:18;;;;;;;;;;;7852:3:7;:43::i;9715:84::-;9689:110;-1:-1:-1;9835:21:7;9867:33;9689:110;9867:16;:33::i;:::-;9911:21;9935:36;9959:12;9935:21;:36;:::i;:::-;9911:60;;10036:24;10098:15;10079:16;;10063:13;:32;;;;:::i;:::-;:50;;;;:::i;:::-;10036:77;;10124:23;10184:15;10166;;10150:13;:31;;;;:::i;:::-;:49;;;;:::i;:::-;10124:75;;10294:15;10275:16;;10259:13;:32;;;;:::i;:::-;:50;;;;:::i;:::-;10220:17;;10210:28;;;;:9;:28;;;;;:45;;:99;;:45;;:28;:99;;;;;:::i;:::-;;;;-1:-1:-1;;10384:15:7;;10402;;10368:31;;:13;:31;:::i;:::-;:49;;;;:::i;:::-;10330:17;;10320:28;;;;:9;:28;;;;;:44;;:97;;:44;;:28;:97;;;;;:::i;:::-;;;;-1:-1:-1;10512:15:7;;-1:-1:-1;10477:32:7;10493:16;10477:13;:32;:::i;:::-;:50;;;;:::i;:::-;10438:17;;10428:28;;;;:9;:28;;;;;:45;;:99;;:45;;:28;:99;;;;;:::i;:::-;;;;-1:-1:-1;;10595:1:7;10576:16;:20;;;10607:15;:19;;;10637:16;:20;;;10782:17;;10772:28;;:9;:28;;;;;:45;;;;10725:44;;;;10677:45;;;;;10772;;10677:92;;;:::i;:::-;:140;;;;:::i;:::-;10670:147;;;;;;;9619:1206;:::o;10833:1985::-;1633:6;:13;;-1:-1:-1;;;;1633:13:7;-1:-1:-1;;;1633:13:7;;;10928:17:::1;::::0;1633:13;10918:28;;;:9:::1;:28;::::0;;;;;;;10888:58;;::::1;::::0;::::1;::::0;;;;;;1642:4;10888:58;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;-1:-1:-1;;;;;10888:58:7::1;1633:13:::0;10888:58;;;11024:36;;;:17:::1;:36:::0;;;;;10991:69;;;;;;::::1;::::0;;;;;;;;;;1633:13;;10991:69;11024:36;;10991:69;::::1;11024:36:::0;10991:69;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;10991:69:7::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;11071:22;11096:13;:20;11071:45;;11127:22;11152:13;11166:1;11152:16;;;;;;;;:::i;:::-;;;;;;;11127:41;;11292:1;11275:14;:18;11271:946;;;11494:26;::::0;::::1;::::0;11352:20:::1;::::0;11420:16:::1;11435:1;11420:12;:16;:::i;:::-;11410:27;11439:13:::0;11453:18:::1;11470:1;11453:14:::0;:18:::1;:::i;:::-;11439:33;;;;;;;;:::i;:::-;;;;;;;11474:14;11393:96;;;;;;;;;17307:19:10::0;;;17364:2;17360:15;;;;-1:-1:-1;;17356:53:10;17351:2;17342:12;;17335:75;17435:2;17426:12;;17419:28;17472:2;17463:12;;17122:359;11393:96:7::1;;;;;;;;;;;;;11383:107;;;;;;11375:116;;:145;;;;:::i;:::-;11352:168;;11583:9;11578:236;11602:14;11598:1;:18;11578:236;;;11642:10;11699:1;11676:13;:20;:24;;;;:::i;:::-;11660:41;::::0;:12;:41:::1;:::i;:::-;11655:47;::::0;:1;:47:::1;:::i;:::-;11642:60;;11762:13;11776:2;11762:17;;;;;;;;:::i;:::-;;;;;;;11781:13;11795:1;11781:16;;;;;;;;:::i;:::-;;;;;;;11722:13;11736:1;11722:16;;;;;;;;:::i;:::-;;;;;;11740:13;11754:2;11740:17;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11721:77:7;;::::1;11740:17;::::0;;::::1;::::0;;;;;11721:77;;::::1;::::0;;-1:-1:-1;11618:3:7::1;;11578:236;;;;11862:19;11905:9:::0;11900:306:::1;11924:14;11920:1;:18;11900:306;;;11979:20;:39;12000:17;;11979:39;;;;;;;;;;;:57;12019:13;12033:1;12019:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;11979:57:7::1;-1:-1:-1::0;;;;;11979:57:7::1;;;;;;;;;;;;;11964:72;;;;;:::i;:::-;;;12074:11;12059:12;:26;12055:136;;;12127:13;12141:1;12127:16;;;;;;;;:::i;:::-;;;;;;;12110:33;;12166:5;;12055:136;11940:3;;11900:306;;;;11295:922;;11271:946;12289:17;::::0;;12279:28:::1;::::0;;;:9:::1;:28;::::0;;;;;:43:::1;;:60:::0;;-1:-1:-1;;;;;;12279:60:7::1;-1:-1:-1::0;;;;;12279:60:7;;::::1;::::0;;;::::1;::::0;;;12360:17;;12350:28;;;;12396:12:::1;-1:-1:-1::0;12350:43:7;;;::::1;:58:::0;12491:17:::1;::::0;12510:27:::1;::::0;::::1;::::0;12460:78:::1;::::0;12491:17;;;::::1;::::0;12460:30:::1;:78::i;:::-;12586:104;12617:14;12662:10;:27;;;12633:10;:26;;;:56;;;;:::i;:::-;12586:30;:104::i;:::-;12760:17;;12739:18;:38;;;;12809:1;12788:17;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1669:6:7;:14;;-1:-1:-1;;;;1669:14:7;;;-1:-1:-1;;;;10833:1985:7:o;6264:105::-;6322:9;6352:1;6348;:5;:13;;6360:1;6348:13;;;-1:-1:-1;6356:1:7;;6344:17;-1:-1:-1;6264:105:7:o;5844:412::-;1633:6;:13;;-1:-1:-1;;;;1633:13:7;-1:-1:-1;;;1633:13:7;;;5946:16:::1;::::0;;5960:1:::1;5946:16:::0;;;;;::::1;::::0;;-1:-1:-1;;5946:16:7::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;5946:16:7::1;5922:40;;5991:4;5973;5978:1;5973:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5973:23:7;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;6017:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;6017:22:7;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;5973:7;;6017:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6007:4;6012:1;6007:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6007:32:7;;::::1;:7;::::0;;::::1;::::0;;;;;:32;6052:15:::1;::::0;:196:::1;::::0;-1:-1:-1;;;6052:196:7;;:15;::::1;::::0;:66:::1;::::0;:196:::1;::::0;6133:11;;6052:15:::1;::::0;6175:4;;6202::::1;::::0;6222:15:::1;::::0;6052:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1669:6:7;:14;;-1:-1:-1;;;;1669:14:7;;;-1:-1:-1;;;;5844:412:7:o;1275:182:9:-;1378:12;;;1340;1378;;;;;;;;;-1:-1:-1;;;;;1357:7:9;;;1371:5;;1357:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1339:52;;;1405:7;1397:55;;;;-1:-1:-1;;;1397:55:9;;18684:2:10;1397:55:9;;;18666:21:10;18723:2;18703:18;;;18696:30;18762:34;18742:18;;;18735:62;-1:-1:-1;;;18813:18:10;;;18806:33;18856:19;;1397:55:9;18482:399:10;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:10:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:10;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:10;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:10:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:10;;670:180;-1:-1:-1;670:180:10:o;855:589::-;930:12;;918:25;;992:4;981:16;;;975:23;959:14;;;952:47;1048:4;1037:16;;;1031:23;1015:14;;;1008:47;1104:4;1093:16;;;1087:23;1071:14;;;1064:47;1160:4;1149:16;;;1143:23;1127:14;;;1120:47;1216:4;1205:16;;;1199:23;1183:14;;;1176:47;1272:4;1261:16;;;1255:23;1239:14;;;1232:47;1328:4;1317:16;;;1311:23;1295:14;;;1288:47;1354:6;1400:14;;;1394:21;-1:-1:-1;;;;;1390:47:10;1376:12;;1369:69;855:589::o;1449:253::-;1637:3;1622:19;;1650:46;1626:9;1678:6;1650:46;:::i;1707:131::-;-1:-1:-1;;;;;1782:31:10;;1772:42;;1762:70;;1828:1;1825;1818:12;1843:315;1911:6;1919;1972:2;1960:9;1951:7;1947:23;1943:32;1940:52;;;1988:1;1985;1978:12;1940:52;2027:9;2014:23;2046:31;2071:5;2046:31;:::i;:::-;2096:5;2148:2;2133:18;;;;2120:32;;-1:-1:-1;;;1843:315:10:o;2563:248::-;2631:6;2639;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;-1:-1:-1;;2731:23:10;;;2801:2;2786:18;;;2773:32;;-1:-1:-1;2563:248:10:o;2998:456::-;3075:6;3083;3091;3144:2;3132:9;3123:7;3119:23;3115:32;3112:52;;;3160:1;3157;3150:12;3112:52;3199:9;3186:23;3218:31;3243:5;3218:31;:::i;:::-;3268:5;-1:-1:-1;3325:2:10;3310:18;;3297:32;3338:33;3297:32;3338:33;:::i;:::-;2998:456;;3390:7;;-1:-1:-1;;;3444:2:10;3429:18;;;;3416:32;;2998:456::o;3459:465::-;3512:3;3550:5;3544:12;3577:6;3572:3;3565:19;3603:4;3632;3627:3;3623:14;3616:21;;3671:4;3664:5;3660:16;3694:1;3704:195;3718:6;3715:1;3712:13;3704:195;;;3783:13;;-1:-1:-1;;;;;3779:39:10;3767:52;;3839:12;;;;3874:15;;;;3815:1;3733:9;3704:195;;;-1:-1:-1;3915:3:10;;3459:465;-1:-1:-1;;;;;3459:465:10:o;3929:439::-;3982:3;4020:5;4014:12;4047:6;4042:3;4035:19;4073:4;4102;4097:3;4093:14;4086:21;;4141:4;4134:5;4130:16;4164:1;4174:169;4188:6;4185:1;4182:13;4174:169;;;4249:13;;4237:26;;4283:12;;;;4318:15;;;;4210:1;4203:9;4174:169;;4373:669;4708:2;4697:9;4690:21;4671:4;4734:56;4786:2;4775:9;4771:18;4763:6;4734:56;:::i;:::-;4838:9;4830:6;4826:22;4821:2;4810:9;4806:18;4799:50;4872:44;4909:6;4901;4872:44;:::i;:::-;4858:58;;4964:9;4956:6;4952:22;4947:2;4936:9;4932:18;4925:50;4992:44;5029:6;5021;4992:44;:::i;:::-;4984:52;4373:669;-1:-1:-1;;;;;;4373:669:10:o;5236:315::-;5304:6;5312;5365:2;5353:9;5344:7;5340:23;5336:32;5333:52;;;5381:1;5378;5371:12;5333:52;5417:9;5404:23;5394:33;;5477:2;5466:9;5462:18;5449:32;5490:31;5515:5;5490:31;:::i;:::-;5540:5;5530:15;;;5236:315;;;;;:::o;6338:247::-;6397:6;6450:2;6438:9;6429:7;6425:23;6421:32;6418:52;;;6466:1;6463;6456:12;6418:52;6505:9;6492:23;6524:31;6549:5;6524:31;:::i;6590:127::-;6651:10;6646:3;6642:20;6639:1;6632:31;6682:4;6679:1;6672:15;6706:4;6703:1;6696:15;6722:275;6793:2;6787:9;6858:2;6839:13;;-1:-1:-1;;6835:27:10;6823:40;;6893:18;6878:34;;6914:22;;;6875:62;6872:88;;;6940:18;;:::i;:::-;6976:2;6969:22;6722:275;;-1:-1:-1;6722:275:10:o;7002:183::-;7062:4;7095:18;7087:6;7084:30;7081:56;;;7117:18;;:::i;:::-;-1:-1:-1;7162:1:10;7158:14;7174:4;7154:25;;7002:183::o;7190:160::-;7255:20;;7311:13;;7304:21;7294:32;;7284:60;;7340:1;7337;7330:12;7284:60;7190:160;;;:::o;7355:1036::-;7445:6;7453;7506:2;7494:9;7485:7;7481:23;7477:32;7474:52;;;7522:1;7519;7512:12;7474:52;7562:9;7549:23;7595:18;7587:6;7584:30;7581:50;;;7627:1;7624;7617:12;7581:50;7650:22;;7703:4;7695:13;;7691:27;-1:-1:-1;7681:55:10;;7732:1;7729;7722:12;7681:55;7768:2;7755:16;7790:4;7814:60;7830:43;7870:2;7830:43;:::i;:::-;7814:60;:::i;:::-;7908:15;;;7990:1;7986:10;;;;7978:19;;7974:28;;;7939:12;;;;8014:19;;;8011:39;;;8046:1;8043;8036:12;8011:39;8070:11;;;;8090:217;8106:6;8101:3;8098:15;8090:217;;;8186:3;8173:17;8203:31;8228:5;8203:31;:::i;:::-;8247:18;;8123:12;;;;8285;;;;8090:217;;;8326:5;-1:-1:-1;8350:35:10;;-1:-1:-1;8366:18:10;;;8350:35;:::i;:::-;8340:45;;;;;7355:1036;;;;;:::o;8396:388::-;8464:6;8472;8525:2;8513:9;8504:7;8500:23;8496:32;8493:52;;;8541:1;8538;8531:12;8493:52;8580:9;8567:23;8599:31;8624:5;8599:31;:::i;:::-;8649:5;-1:-1:-1;8706:2:10;8691:18;;8678:32;8719:33;8678:32;8719:33;:::i;8789:840::-;9169:4;9198:3;9210:46;9246:9;9238:6;9210:46;:::i;:::-;9293:2;9287:3;9276:9;9272:19;9265:31;9319:56;9371:2;9360:9;9356:18;9348:6;9319:56;:::i;:::-;9305:70;;9424:9;9416:6;9412:22;9406:3;9395:9;9391:19;9384:51;9458:44;9495:6;9487;9458:44;:::i;:::-;9444:58;;9551:9;9543:6;9539:22;9533:3;9522:9;9518:19;9511:51;9579:44;9616:6;9608;9579:44;:::i;:::-;9571:52;8789:840;-1:-1:-1;;;;;;;8789:840:10:o;9634:380::-;9713:1;9709:12;;;;9756;;;9777:61;;9831:4;9823:6;9819:17;9809:27;;9777:61;9884:2;9876:6;9873:14;9853:18;9850:38;9847:161;;9930:10;9925:3;9921:20;9918:1;9911:31;9965:4;9962:1;9955:15;9993:4;9990:1;9983:15;9847:161;;9634:380;;;:::o;10019:127::-;10080:10;10075:3;10071:20;10068:1;10061:31;10111:4;10108:1;10101:15;10135:4;10132:1;10125:15;10151:251;10221:6;10274:2;10262:9;10253:7;10249:23;10245:32;10242:52;;;10290:1;10287;10280:12;10242:52;10322:9;10316:16;10341:31;10366:5;10341:31;:::i;10407:332::-;10614:6;10603:9;10596:25;10657:2;10652;10641:9;10637:18;10630:30;10577:4;10677:56;10729:2;10718:9;10714:18;10706:6;10677:56;:::i;:::-;10669:64;10407:332;-1:-1:-1;;;;10407:332:10:o;10744:881::-;10839:6;10870:2;10913;10901:9;10892:7;10888:23;10884:32;10881:52;;;10929:1;10926;10919:12;10881:52;10962:9;10956:16;10995:18;10987:6;10984:30;10981:50;;;11027:1;11024;11017:12;10981:50;11050:22;;11103:4;11095:13;;11091:27;-1:-1:-1;11081:55:10;;11132:1;11129;11122:12;11081:55;11161:2;11155:9;11184:60;11200:43;11240:2;11200:43;:::i;11184:60::-;11278:15;;;11360:1;11356:10;;;;11348:19;;11344:28;;;11309:12;;;;11384:19;;;11381:39;;;11416:1;11413;11406:12;11381:39;11440:11;;;;11460:135;11476:6;11471:3;11468:15;11460:135;;;11542:10;;11530:23;;11493:12;;;;11573;;;;11460:135;;11630:127;11691:10;11686:3;11682:20;11679:1;11672:31;11722:4;11719:1;11712:15;11746:4;11743:1;11736:15;11762:125;11827:9;;;11848:10;;;11845:36;;;11861:18;;:::i;14932:401::-;15134:2;15116:21;;;15173:2;15153:18;;;15146:30;15212:34;15207:2;15192:18;;15185:62;-1:-1:-1;;;15278:2:10;15263:18;;15256:35;15323:3;15308:19;;14932:401::o;15338:399::-;15540:2;15522:21;;;15579:2;15559:18;;;15552:30;15618:34;15613:2;15598:18;;15591:62;-1:-1:-1;;;15684:2:10;15669:18;;15662:33;15727:3;15712:19;;15338:399::o;16152:168::-;16225:9;;;16256;;16273:15;;;16267:22;;16253:37;16243:71;;16294:18;;:::i;16325:127::-;16386:10;16381:3;16377:20;16374:1;16367:31;16417:4;16414:1;16407:15;16441:4;16438:1;16431:15;16457:120;16497:1;16523;16513:35;;16528:18;;:::i;:::-;-1:-1:-1;16562:9:10;;16457:120::o;16582:128::-;16649:9;;;16670:11;;;16667:37;;;16684:18;;:::i;17486:112::-;17518:1;17544;17534:35;;17549:18;;:::i;:::-;-1:-1:-1;17583:9:10;;17486:112::o;17603:582::-;17902:6;17891:9;17884:25;17945:6;17940:2;17929:9;17925:18;17918:34;17988:3;17983:2;17972:9;17968:18;17961:31;17865:4;18009:57;18061:3;18050:9;18046:19;18038:6;18009:57;:::i;:::-;-1:-1:-1;;;;;18102:32:10;;;;18097:2;18082:18;;18075:60;-1:-1:-1;18166:3:10;18151:19;18144:35;18001:65;17603:582;-1:-1:-1;;;17603:582:10:o;18190:287::-;18319:3;18357:6;18351:13;18373:66;18432:6;18427:3;18420:4;18412:6;18408:17;18373:66;:::i;:::-;18455:16;;;;;18190:287;-1:-1:-1;;18190:287:10:o

Swarm Source

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