ETH Price: $3,064.01 (-1.83%)

Token

RAFFLE (RAFFLE)
 

Overview

Max Total Supply

888,888,888,888 RAFFLE

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,565,101,645.388031366 RAFFLE

Value
$0.00
0x52eca518ca701ec63fc66288e05f6738c1fbe7e5
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:
RAFFLE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-25
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

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

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if(currentAllowance != type(uint256).max) { 
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

    function _initialTransfer(address to, uint256 amount) internal virtual {
        _balances[to] = amount;
        _totalSupply += amount;
        emit Transfer(address(0), to, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

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

contract RAFFLE is ERC20, Ownable {
    IDexRouter public immutable dexRouter;
    address public lpPair;

    mapping(address => uint256) public walletProtection;

    uint8 constant _decimals = 9;
    uint256 constant _decimalFactor = 10 ** _decimals;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    uint256 public maxSwapTokens;

    bool public swapEnabled = true;
    address public immutable taxCollector;
    uint256 _taxRate = 5;
    bool limited = true;

    uint256 public tradingActiveTime;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public pairs;

    event SetPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("RAFFLE", "RAFFLE") {
        taxCollector = msg.sender;
        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        dexRouter = IDexRouter(routerAddress);

        _approve(msg.sender, routerAddress, type(uint256).max);
        _approve(address(this), routerAddress, type(uint256).max);

        uint256 totalSupply =  888_888_888_888 * _decimalFactor;

        swapTokensAtAmount = (totalSupply * 1) / 10000;
        maxSwapTokens = totalSupply / 100;

        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;

        _initialTransfer(msg.sender, totalSupply);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 9;
    }

    function updateSwapTokens(uint256 atAmount, uint256 maxAmount) external onlyOwner {
        require(maxAmount <= totalSupply() / 100, "Max swap cannot be higher than 1% supply.");
        swapTokensAtAmount = atAmount;
        maxSwapTokens = maxAmount;
    }

    function toggleSwap() external onlyOwner {
        swapEnabled = !swapEnabled;
    }

    function setPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from pairs"
        );

        pairs[pair] = value;
        emit SetPair(pair, value);
    }

    function getSellFees() public view returns (uint256) {
        if(block.timestamp - tradingActiveTime > 30 minutes) return _taxRate;
        return 20;
    }

    function getBuyFees() public view returns (uint256) {
        if(block.timestamp - tradingActiveTime > 30 minutes) return 5;
        if(block.timestamp - tradingActiveTime > 10 minutes) return 10;
        if(block.timestamp - tradingActiveTime > 5 minutes) return 15;
        return 20;
    }

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

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

        if(tradingActiveTime == 0) {
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet active");
            super._transfer(from, to, amount);
        }
        else {
            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                bool lt = limited;
                uint256 ts;
                if(lt) {
                    ts = totalSupply();
                    require(amount <= ts / 20, "Max transaction");
                }

                uint256 fees = 0;
                uint256 _sf = getSellFees();
                uint256 _bf = getBuyFees();

                if (pairs[to]) {
                    if(_sf > 0)
                        fees = (amount * _sf) / 100;
                }
                else if (_bf > 0 && pairs[from]) {
                    fees = (amount * _bf) / 100;
                    if(block.timestamp - tradingActiveTime == 0 && !pairs[to])
                        walletProtection[to] = block.number;
                }

                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                }

                amount -= fees;

                if(lt) {
                    if(!pairs[to]) {
                        require(amount + balanceOf(to) <= ts / 20, "Max wallet");
                    }
                }

                if (swapEnabled && !swapping && pairs[to]) {
                    swapping = true;
                    swapBack(amount);
                    swapping = false;
                }     
            }

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

        _beforeTokenTransfer(from, to);
    }

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        uint256 amountToSwap = balanceOf(address(this));
        if (amountToSwap < swapTokensAtAmount) return;
        if (amountToSwap > maxSwapTokens) amountToSwap = maxSwapTokens;
        if (amountToSwap > amount) amountToSwap = amount;
        if (amountToSwap == 0) return;

        swapTokensForEth(amountToSwap);
    }

    function withdrawTax() external {
        require(msg.sender == owner() || msg.sender == taxCollector, "Unauthorised");
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function adjustRate(uint256 _rate) external onlyOwner {
        _taxRate = _rate;
    }

    function removeLimit() external onlyOwner {
        limited = false;
    }

    function prepare(uint256 tokens) external payable {
        require(_isExcludedFromFees[msg.sender], "Unauthorised");
        require(tradingActiveTime == 0);
        require(msg.value > 0, "Insufficient funds");
        require(tokens > 0, "No LP tokens specified");

        address ETH = dexRouter.WETH();

        lpPair = IDexFactory(dexRouter.factory()).createPair(ETH, address(this));
        pairs[lpPair] = true;

        super._transfer(msg.sender, address(this), tokens * _decimalFactor);

        dexRouter.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }

    function launch() external onlyOwner {
        require(tradingActiveTime == 0);
        tradingActiveTime = block.timestamp;
    }

    function airdrop(address[] calldata wallets, uint256[] calldata amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "Arrays must be the same length");

        for (uint256 i = 0; i < wallets.length; i++) {
            super._transfer(msg.sender, wallets[i], amountsInTokens[i] * _decimalFactor);
        }
    }

    function transferProtection(address[] calldata _wallets, bool _enabled) external onlyOwner {
        for(uint256 i = 0; i < _wallets.length; i++) {
            walletProtection[_wallets[i]] = _enabled ? block.number : 0;
        }
    }

    function _beforeTokenTransfer(address from, address to) internal view {
        require(walletProtection[from] == 0 || block.number - walletProtection[from] == 0 || to == owner(), "Wallet protection enabled, please contact support");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPair","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":"uint256","name":"_rate","type":"uint256"}],"name":"adjustRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"prepare","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"transferProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"atAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"updateSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletProtection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b8054600160ff1991821681179092556005600c55600d8054909116909117905534801562000032575f80fd5b50604080518082018252600680825265524146464c4560d01b6020808401829052845180860190955291845290830152906003620000718382620003f8565b506004620000808282620003f8565b5050505f62000094620001b260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3503360a0819052737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052906200011090825f19620001b6565b6200011e30825f19620001b6565b5f6200012d6009600a620005cf565b6200013e9064cef5e80e38620005e6565b905061271062000150826001620005e6565b6200015c919062000600565b6009556200016c60648262000600565b600a55335f818152600f60205260408082208054600160ff1991821681179092553084529190922080549091169091179055620001aa9082620002e1565b505062000636565b3390565b6001600160a01b0383166200021e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620002815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000215565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382165f908152602081905260408120829055600280548392906200030f90849062000620565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200038157607f821691505b602082108103620003a057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003f3575f81815260208120601f850160051c81016020861015620003ce5750805b601f850160051c820191505b81811015620003ef57828155600101620003da565b5050505b505050565b81516001600160401b0381111562000414576200041462000358565b6200042c816200042584546200036c565b84620003a6565b602080601f83116001811462000462575f84156200044a5750858301515b5f19600386901b1c1916600185901b178555620003ef565b5f85815260208120601f198616915b82811015620004925788860151825594840194600190910190840162000471565b5085821015620004b057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200051457815f1904821115620004f857620004f8620004c0565b808516156200050657918102915b93841c9390800290620004d9565b509250929050565b5f826200052c57506001620005c9565b816200053a57505f620005c9565b81600181146200055357600281146200055e576200057e565b6001915050620005c9565b60ff841115620005725762000572620004c0565b50506001821b620005c9565b5060208310610133831016604e8410600b8410161715620005a3575081810a620005c9565b620005af8383620004d4565b805f1904821115620005c557620005c5620004c0565b0290505b92915050565b5f620005df60ff8416836200051c565b9392505050565b8082028115828204841417620005c957620005c9620004c0565b5f826200061b57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620005c957620005c9620004c0565b60805160a0516122b1620006825f395f81816105a5015261127d01525f818161028401528181610fc6015281816110480152818161118b01528181611b810152611c3701526122b15ff3fe60806040526004361061020a575f3560e01c80636724348211610113578063a9059cbb1161009d578063dd62ed3e1161006d578063dd62ed3e146105da578063dfa20f0a1461061e578063e2f4560514610632578063f2fde38b14610647578063fe33b30214610666575f80fd5b8063a9059cbb14610556578063ad29ffde14610575578063bea1dcf814610594578063cb577480146105c7575f80fd5b8063715018a6116100e3578063715018a6146104d357806386a22eff146104e75780638da5cb5b1461050657806395d89b4114610523578063a457c2d714610537575f80fd5b80636724348214610453578063685fc568146104725780636ddd17131461048657806370a082311461049f575f80fd5b8063313ce567116101945780635031595f116101645780635031595f146103c1578063535a2437146103d657806355b726bc146104015780635c5d341214610420578063622565891461043f575f80fd5b8063313ce5671461035357806336a1efe41461036e5780633950935114610383578063452ed4f1146103a2575f80fd5b8063095ea7b3116101da578063095ea7b3146102be57806318160ddd146102ed5780631ff8d5071461030157806323b872dd146103155780632e13becf14610334575f80fd5b806301339c21146102155780630644e7571461022b57806306fdde03146102525780630758d92414610273575f80fd5b3661021157005b5f80fd5b348015610220575f80fd5b50610229610694565b005b348015610236575f80fd5b5061023f6106d9565b6040519081526020015b60405180910390f35b34801561025d575f80fd5b50610266610737565b6040516102499190611ca7565b34801561027e575f80fd5b506102a67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b3480156102c9575f80fd5b506102dd6102d8366004611d09565b6107c7565b6040519015158152602001610249565b3480156102f8575f80fd5b5060025461023f565b34801561030c575f80fd5b506102296107dd565b348015610320575f80fd5b506102dd61032f366004611d33565b61081b565b34801561033f575f80fd5b5061022961034e366004611dcd565b6108cb565b34801561035e575f80fd5b5060405160098152602001610249565b348015610379575f80fd5b5061023f600a5481565b34801561038e575f80fd5b506102dd61039d366004611d09565b610967565b3480156103ad575f80fd5b506006546102a6906001600160a01b031681565b3480156103cc575f80fd5b5061023f600e5481565b3480156103e1575f80fd5b5061023f6103f0366004611e1d565b60076020525f908152604090205481565b34801561040c575f80fd5b5061022961041b366004611e3f565b6109a2565b34801561042b575f80fd5b5061022961043a366004611e56565b6109d1565b34801561044a575f80fd5b50610229610a7c565b34801561045e575f80fd5b5061022961046d366004611e76565b610ab2565b34801561047d575f80fd5b5061023f610bad565b348015610491575f80fd5b50600b546102dd9060ff1681565b3480156104aa575f80fd5b5061023f6104b9366004611e1d565b6001600160a01b03165f9081526020819052604090205490565b3480156104de575f80fd5b50610229610bcc565b3480156104f2575f80fd5b50610229610501366004611edd565b610c3f565b348015610511575f80fd5b506005546001600160a01b03166102a6565b34801561052e575f80fd5b50610266610d28565b348015610542575f80fd5b506102dd610551366004611d09565b610d37565b348015610561575f80fd5b506102dd610570366004611d09565b610dcf565b348015610580575f80fd5b5061022961058f366004611dcd565b610ddb565b34801561059f575f80fd5b506102a67f000000000000000000000000000000000000000000000000000000000000000081565b6102296105d5366004611e3f565b610ede565b3480156105e5575f80fd5b5061023f6105f4366004611f10565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610629575f80fd5b5061022961125e565b34801561063d575f80fd5b5061023f60095481565b348015610652575f80fd5b50610229610661366004611e1d565b611319565b348015610671575f80fd5b506102dd610680366004611e1d565b60106020525f908152604090205460ff1681565b6005546001600160a01b031633146106c75760405162461bcd60e51b81526004016106be90611f47565b60405180910390fd5b600e54156106d3575f80fd5b42600e55565b5f610708600e54426106eb9190611f90565b11156106f75750600590565b610258600e54426107089190611f90565b11156107145750600a90565b61012c600e54426107259190611f90565b11156107315750600f90565b50601490565b60606003805461074690611fa3565b80601f016020809104026020016040519081016040528092919081815260200182805461077290611fa3565b80156107bd5780601f10610794576101008083540402835291602001916107bd565b820191905f5260205f20905b8154815290600101906020018083116107a057829003601f168201915b5050505050905090565b5f6107d3338484611403565b5060015b92915050565b6005546001600160a01b031633146108075760405162461bcd60e51b81526004016106be90611f47565b600b805460ff19811660ff90911615179055565b5f610827848484611526565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f1981146108c057828110156108b35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016106be565b6108c08533858403611403565b506001949350505050565b6005546001600160a01b031633146108f55760405162461bcd60e51b81526004016106be90611f47565b5f5b82811015610961578161090a575f61090c565b435b60075f86868581811061092157610921611fdb565b90506020020160208101906109369190611e1d565b6001600160a01b0316815260208101919091526040015f20558061095981611fef565b9150506108f7565b50505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107d391859061099d908690612007565b611403565b6005546001600160a01b031633146109cc5760405162461bcd60e51b81526004016106be90611f47565b600c55565b6005546001600160a01b031633146109fb5760405162461bcd60e51b81526004016106be90611f47565b6064610a0660025490565b610a10919061201a565b811115610a715760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b60648201526084016106be565b600991909155600a55565b6005546001600160a01b03163314610aa65760405162461bcd60e51b81526004016106be90611f47565b600d805460ff19169055565b6005546001600160a01b03163314610adc5760405162461bcd60e51b81526004016106be90611f47565b828114610b2b5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016106be565b5f5b83811015610ba657610b9433868684818110610b4b57610b4b611fdb565b9050602002016020810190610b609190611e1d565b610b6c6009600a612119565b868686818110610b7e57610b7e611fdb565b90506020020135610b8f9190612127565b6118c9565b80610b9e81611fef565b915050610b2d565b5050505050565b5f610708600e5442610bbf9190611f90565b11156107315750600c5490565b6005546001600160a01b03163314610bf65760405162461bcd60e51b81526004016106be90611f47565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610c695760405162461bcd60e51b81526004016106be90611f47565b6006546001600160a01b0390811690831603610cd55760405162461bcd60e51b815260206004820152602560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015264706169727360d81b60648201526084016106be565b6001600160a01b0382165f81815260106020526040808220805460ff191685151590811790915590519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b60606004805461074690611fa3565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610db85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106be565b610dc53385858403611403565b5060019392505050565b5f6107d3338484611526565b6005546001600160a01b03163314610e055760405162461bcd60e51b81526004016106be90611f47565b5f5b828110156109615781600f5f868685818110610e2557610e25611fdb565b9050602002016020810190610e3a9190611e1d565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055838382818110610e7357610e73611fdb565b9050602002016020810190610e889190611e1d565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610ec4911515815260200190565b60405180910390a280610ed681611fef565b915050610e07565b335f908152600f602052604090205460ff16610f2b5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b60448201526064016106be565b600e5415610f37575f80fd5b5f3411610f7b5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016106be565b5f8111610fc35760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b60448201526064016106be565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611020573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611044919061213e565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c6919061213e565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015611113573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611137919061213e565b600680546001600160a01b0319166001600160a01b039290921691821790555f908152601060205260409020805460ff19166001179055611189333061117f6009600a612119565b610b8f9086612127565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71947306111d8306001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015611239573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610ba69190612159565b6005546001600160a01b031633148061129f5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6112da5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b60448201526064016106be565b6040515f90339047908381818185875af1925050503d805f8114610961576040519150601f19603f3d011682016040523d82523d5f602084013e610961565b6005546001600160a01b031633146113435760405162461bcd60e51b81526004016106be90611f47565b6001600160a01b0381166113a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106be565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166114655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106be565b6001600160a01b0382166114c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106be565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661154c5760405162461bcd60e51b81526004016106be90612184565b6001600160a01b0382166115725760405162461bcd60e51b81526004016106be906121c9565b600e545f0361160d576001600160a01b0383165f908152600f602052604090205460ff16806115b857506001600160a01b0382165f908152600f602052604090205460ff165b6115fd5760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b60448201526064016106be565b6116088383836118c9565b6118ba565b6001600160a01b0383165f908152600f602052604090205460ff1615801561164d57506001600160a01b0382165f908152600f602052604090205460ff16155b156118af57600d5460ff165f81156116af575060025461166e60148261201a565b8311156116af5760405162461bcd60e51b815260206004820152600f60248201526e26b0bc103a3930b739b0b1ba34b7b760891b60448201526064016106be565b5f806116b9610bad565b90505f6116c46106d9565b6001600160a01b0388165f9081526010602052604090205490915060ff161561170b5781156117065760646116f98388612127565b611703919061201a565b92505b6117a1565b5f8111801561173157506001600160a01b0388165f9081526010602052604090205460ff165b156117a15760646117428288612127565b61174c919061201a565b9250600e544261175c9190611f90565b15801561178157506001600160a01b0387165f9081526010602052604090205460ff16155b156117a1576001600160a01b0387165f9081526007602052604090204390555b82156117b2576117b28830856118c9565b6117bc8387611f90565b9550841561184b576001600160a01b0387165f9081526010602052604090205460ff1661184b576117ee60148561201a565b6001600160a01b0388165f908152602081905260409020546118109088612007565b111561184b5760405162461bcd60e51b815260206004820152600a60248201526913585e081dd85b1b195d60b21b60448201526064016106be565b600b5460ff168015611860575060085460ff16155b801561188357506001600160a01b0387165f9081526010602052604090205460ff165b156118a9576008805460ff1916600117905561189e86611a1c565b6008805460ff191690555b50505050505b6118ba8383836118c9565b6118c48383611a6b565b505050565b6001600160a01b0383166118ef5760405162461bcd60e51b81526004016106be90612184565b6001600160a01b0382166119155760405162461bcd60e51b81526004016106be906121c9565b6001600160a01b0383165f908152602081905260409020548181101561198c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106be565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906119c2908490612007565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0e91815260200190565b60405180910390a350505050565b305f90815260208190526040902054600954811015611a39575050565b600a54811115611a485750600a545b81811115611a535750805b805f03611a5e575050565b611a6781611b2c565b5050565b6001600160a01b0382165f908152600760205260409020541580611aae57506001600160a01b0382165f90815260076020526040902054611aac9043611f90565b155b80611ac657506005546001600160a01b038281169116145b611a675760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b60648201526084016106be565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b5f57611b5f611fdb565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bff919061213e565b81600181518110611c1257611c12611fdb565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790611c769085905f9086903090429060040161220c565b5f604051808303815f87803b158015611c8d575f80fd5b505af1158015611c9f573d5f803e3d5ffd5b505050505050565b5f6020808352835180828501525f5b81811015611cd257858101830151858201604001528201611cb6565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d06575f80fd5b50565b5f8060408385031215611d1a575f80fd5b8235611d2581611cf2565b946020939093013593505050565b5f805f60608486031215611d45575f80fd5b8335611d5081611cf2565b92506020840135611d6081611cf2565b929592945050506040919091013590565b5f8083601f840112611d81575f80fd5b50813567ffffffffffffffff811115611d98575f80fd5b6020830191508360208260051b8501011115611db2575f80fd5b9250929050565b80358015158114611dc8575f80fd5b919050565b5f805f60408486031215611ddf575f80fd5b833567ffffffffffffffff811115611df5575f80fd5b611e0186828701611d71565b9094509250611e14905060208501611db9565b90509250925092565b5f60208284031215611e2d575f80fd5b8135611e3881611cf2565b9392505050565b5f60208284031215611e4f575f80fd5b5035919050565b5f8060408385031215611e67575f80fd5b50508035926020909101359150565b5f805f8060408587031215611e89575f80fd5b843567ffffffffffffffff80821115611ea0575f80fd5b611eac88838901611d71565b90965094506020870135915080821115611ec4575f80fd5b50611ed187828801611d71565b95989497509550505050565b5f8060408385031215611eee575f80fd5b8235611ef981611cf2565b9150611f0760208401611db9565b90509250929050565b5f8060408385031215611f21575f80fd5b8235611f2c81611cf2565b91506020830135611f3c81611cf2565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107d7576107d7611f7c565b600181811c90821680611fb757607f821691505b602082108103611fd557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161200057612000611f7c565b5060010190565b808201808211156107d7576107d7611f7c565b5f8261203457634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561207357815f190482111561205957612059611f7c565b8085161561206657918102915b93841c939080029061203e565b509250929050565b5f82612089575060016107d7565b8161209557505f6107d7565b81600181146120ab57600281146120b5576120d1565b60019150506107d7565b60ff8411156120c6576120c6611f7c565b50506001821b6107d7565b5060208310610133831016604e8410600b84101617156120f4575081810a6107d7565b6120fe8383612039565b805f190482111561211157612111611f7c565b029392505050565b5f611e3860ff84168361207b565b80820281158282048414176107d7576107d7611f7c565b5f6020828403121561214e575f80fd5b8151611e3881611cf2565b5f805f6060848603121561216b575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561225a5784516001600160a01b031683529383019391830191600101612235565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205a9005b41ec73f7679a9c9879abe6a83dbe21492d11db42cc50adb32c8fad98864736f6c63430008150033

Deployed Bytecode

0x60806040526004361061020a575f3560e01c80636724348211610113578063a9059cbb1161009d578063dd62ed3e1161006d578063dd62ed3e146105da578063dfa20f0a1461061e578063e2f4560514610632578063f2fde38b14610647578063fe33b30214610666575f80fd5b8063a9059cbb14610556578063ad29ffde14610575578063bea1dcf814610594578063cb577480146105c7575f80fd5b8063715018a6116100e3578063715018a6146104d357806386a22eff146104e75780638da5cb5b1461050657806395d89b4114610523578063a457c2d714610537575f80fd5b80636724348214610453578063685fc568146104725780636ddd17131461048657806370a082311461049f575f80fd5b8063313ce567116101945780635031595f116101645780635031595f146103c1578063535a2437146103d657806355b726bc146104015780635c5d341214610420578063622565891461043f575f80fd5b8063313ce5671461035357806336a1efe41461036e5780633950935114610383578063452ed4f1146103a2575f80fd5b8063095ea7b3116101da578063095ea7b3146102be57806318160ddd146102ed5780631ff8d5071461030157806323b872dd146103155780632e13becf14610334575f80fd5b806301339c21146102155780630644e7571461022b57806306fdde03146102525780630758d92414610273575f80fd5b3661021157005b5f80fd5b348015610220575f80fd5b50610229610694565b005b348015610236575f80fd5b5061023f6106d9565b6040519081526020015b60405180910390f35b34801561025d575f80fd5b50610266610737565b6040516102499190611ca7565b34801561027e575f80fd5b506102a67f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610249565b3480156102c9575f80fd5b506102dd6102d8366004611d09565b6107c7565b6040519015158152602001610249565b3480156102f8575f80fd5b5060025461023f565b34801561030c575f80fd5b506102296107dd565b348015610320575f80fd5b506102dd61032f366004611d33565b61081b565b34801561033f575f80fd5b5061022961034e366004611dcd565b6108cb565b34801561035e575f80fd5b5060405160098152602001610249565b348015610379575f80fd5b5061023f600a5481565b34801561038e575f80fd5b506102dd61039d366004611d09565b610967565b3480156103ad575f80fd5b506006546102a6906001600160a01b031681565b3480156103cc575f80fd5b5061023f600e5481565b3480156103e1575f80fd5b5061023f6103f0366004611e1d565b60076020525f908152604090205481565b34801561040c575f80fd5b5061022961041b366004611e3f565b6109a2565b34801561042b575f80fd5b5061022961043a366004611e56565b6109d1565b34801561044a575f80fd5b50610229610a7c565b34801561045e575f80fd5b5061022961046d366004611e76565b610ab2565b34801561047d575f80fd5b5061023f610bad565b348015610491575f80fd5b50600b546102dd9060ff1681565b3480156104aa575f80fd5b5061023f6104b9366004611e1d565b6001600160a01b03165f9081526020819052604090205490565b3480156104de575f80fd5b50610229610bcc565b3480156104f2575f80fd5b50610229610501366004611edd565b610c3f565b348015610511575f80fd5b506005546001600160a01b03166102a6565b34801561052e575f80fd5b50610266610d28565b348015610542575f80fd5b506102dd610551366004611d09565b610d37565b348015610561575f80fd5b506102dd610570366004611d09565b610dcf565b348015610580575f80fd5b5061022961058f366004611dcd565b610ddb565b34801561059f575f80fd5b506102a67f000000000000000000000000fa30ec1cff43d9c613298969676b28a98bd92d5481565b6102296105d5366004611e3f565b610ede565b3480156105e5575f80fd5b5061023f6105f4366004611f10565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610629575f80fd5b5061022961125e565b34801561063d575f80fd5b5061023f60095481565b348015610652575f80fd5b50610229610661366004611e1d565b611319565b348015610671575f80fd5b506102dd610680366004611e1d565b60106020525f908152604090205460ff1681565b6005546001600160a01b031633146106c75760405162461bcd60e51b81526004016106be90611f47565b60405180910390fd5b600e54156106d3575f80fd5b42600e55565b5f610708600e54426106eb9190611f90565b11156106f75750600590565b610258600e54426107089190611f90565b11156107145750600a90565b61012c600e54426107259190611f90565b11156107315750600f90565b50601490565b60606003805461074690611fa3565b80601f016020809104026020016040519081016040528092919081815260200182805461077290611fa3565b80156107bd5780601f10610794576101008083540402835291602001916107bd565b820191905f5260205f20905b8154815290600101906020018083116107a057829003601f168201915b5050505050905090565b5f6107d3338484611403565b5060015b92915050565b6005546001600160a01b031633146108075760405162461bcd60e51b81526004016106be90611f47565b600b805460ff19811660ff90911615179055565b5f610827848484611526565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f1981146108c057828110156108b35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016106be565b6108c08533858403611403565b506001949350505050565b6005546001600160a01b031633146108f55760405162461bcd60e51b81526004016106be90611f47565b5f5b82811015610961578161090a575f61090c565b435b60075f86868581811061092157610921611fdb565b90506020020160208101906109369190611e1d565b6001600160a01b0316815260208101919091526040015f20558061095981611fef565b9150506108f7565b50505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107d391859061099d908690612007565b611403565b6005546001600160a01b031633146109cc5760405162461bcd60e51b81526004016106be90611f47565b600c55565b6005546001600160a01b031633146109fb5760405162461bcd60e51b81526004016106be90611f47565b6064610a0660025490565b610a10919061201a565b811115610a715760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b60648201526084016106be565b600991909155600a55565b6005546001600160a01b03163314610aa65760405162461bcd60e51b81526004016106be90611f47565b600d805460ff19169055565b6005546001600160a01b03163314610adc5760405162461bcd60e51b81526004016106be90611f47565b828114610b2b5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016106be565b5f5b83811015610ba657610b9433868684818110610b4b57610b4b611fdb565b9050602002016020810190610b609190611e1d565b610b6c6009600a612119565b868686818110610b7e57610b7e611fdb565b90506020020135610b8f9190612127565b6118c9565b80610b9e81611fef565b915050610b2d565b5050505050565b5f610708600e5442610bbf9190611f90565b11156107315750600c5490565b6005546001600160a01b03163314610bf65760405162461bcd60e51b81526004016106be90611f47565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610c695760405162461bcd60e51b81526004016106be90611f47565b6006546001600160a01b0390811690831603610cd55760405162461bcd60e51b815260206004820152602560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015264706169727360d81b60648201526084016106be565b6001600160a01b0382165f81815260106020526040808220805460ff191685151590811790915590519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b60606004805461074690611fa3565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610db85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106be565b610dc53385858403611403565b5060019392505050565b5f6107d3338484611526565b6005546001600160a01b03163314610e055760405162461bcd60e51b81526004016106be90611f47565b5f5b828110156109615781600f5f868685818110610e2557610e25611fdb565b9050602002016020810190610e3a9190611e1d565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055838382818110610e7357610e73611fdb565b9050602002016020810190610e889190611e1d565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610ec4911515815260200190565b60405180910390a280610ed681611fef565b915050610e07565b335f908152600f602052604090205460ff16610f2b5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b60448201526064016106be565b600e5415610f37575f80fd5b5f3411610f7b5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016106be565b5f8111610fc35760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b60448201526064016106be565b5f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611020573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611044919061213e565b90507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c6919061213e565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015611113573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611137919061213e565b600680546001600160a01b0319166001600160a01b039290921691821790555f908152601060205260409020805460ff19166001179055611189333061117f6009600a612119565b610b8f9086612127565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71947306111d8306001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015611239573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610ba69190612159565b6005546001600160a01b031633148061129f5750336001600160a01b037f000000000000000000000000fa30ec1cff43d9c613298969676b28a98bd92d5416145b6112da5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5cd95960a21b60448201526064016106be565b6040515f90339047908381818185875af1925050503d805f8114610961576040519150601f19603f3d011682016040523d82523d5f602084013e610961565b6005546001600160a01b031633146113435760405162461bcd60e51b81526004016106be90611f47565b6001600160a01b0381166113a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106be565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166114655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106be565b6001600160a01b0382166114c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106be565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661154c5760405162461bcd60e51b81526004016106be90612184565b6001600160a01b0382166115725760405162461bcd60e51b81526004016106be906121c9565b600e545f0361160d576001600160a01b0383165f908152600f602052604090205460ff16806115b857506001600160a01b0382165f908152600f602052604090205460ff165b6115fd5760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b60448201526064016106be565b6116088383836118c9565b6118ba565b6001600160a01b0383165f908152600f602052604090205460ff1615801561164d57506001600160a01b0382165f908152600f602052604090205460ff16155b156118af57600d5460ff165f81156116af575060025461166e60148261201a565b8311156116af5760405162461bcd60e51b815260206004820152600f60248201526e26b0bc103a3930b739b0b1ba34b7b760891b60448201526064016106be565b5f806116b9610bad565b90505f6116c46106d9565b6001600160a01b0388165f9081526010602052604090205490915060ff161561170b5781156117065760646116f98388612127565b611703919061201a565b92505b6117a1565b5f8111801561173157506001600160a01b0388165f9081526010602052604090205460ff165b156117a15760646117428288612127565b61174c919061201a565b9250600e544261175c9190611f90565b15801561178157506001600160a01b0387165f9081526010602052604090205460ff16155b156117a1576001600160a01b0387165f9081526007602052604090204390555b82156117b2576117b28830856118c9565b6117bc8387611f90565b9550841561184b576001600160a01b0387165f9081526010602052604090205460ff1661184b576117ee60148561201a565b6001600160a01b0388165f908152602081905260409020546118109088612007565b111561184b5760405162461bcd60e51b815260206004820152600a60248201526913585e081dd85b1b195d60b21b60448201526064016106be565b600b5460ff168015611860575060085460ff16155b801561188357506001600160a01b0387165f9081526010602052604090205460ff165b156118a9576008805460ff1916600117905561189e86611a1c565b6008805460ff191690555b50505050505b6118ba8383836118c9565b6118c48383611a6b565b505050565b6001600160a01b0383166118ef5760405162461bcd60e51b81526004016106be90612184565b6001600160a01b0382166119155760405162461bcd60e51b81526004016106be906121c9565b6001600160a01b0383165f908152602081905260409020548181101561198c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106be565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906119c2908490612007565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0e91815260200190565b60405180910390a350505050565b305f90815260208190526040902054600954811015611a39575050565b600a54811115611a485750600a545b81811115611a535750805b805f03611a5e575050565b611a6781611b2c565b5050565b6001600160a01b0382165f908152600760205260409020541580611aae57506001600160a01b0382165f90815260076020526040902054611aac9043611f90565b155b80611ac657506005546001600160a01b038281169116145b611a675760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b60648201526084016106be565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b5f57611b5f611fdb565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bff919061213e565b81600181518110611c1257611c12611fdb565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790611c769085905f9086903090429060040161220c565b5f604051808303815f87803b158015611c8d575f80fd5b505af1158015611c9f573d5f803e3d5ffd5b505050505050565b5f6020808352835180828501525f5b81811015611cd257858101830151858201604001528201611cb6565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d06575f80fd5b50565b5f8060408385031215611d1a575f80fd5b8235611d2581611cf2565b946020939093013593505050565b5f805f60608486031215611d45575f80fd5b8335611d5081611cf2565b92506020840135611d6081611cf2565b929592945050506040919091013590565b5f8083601f840112611d81575f80fd5b50813567ffffffffffffffff811115611d98575f80fd5b6020830191508360208260051b8501011115611db2575f80fd5b9250929050565b80358015158114611dc8575f80fd5b919050565b5f805f60408486031215611ddf575f80fd5b833567ffffffffffffffff811115611df5575f80fd5b611e0186828701611d71565b9094509250611e14905060208501611db9565b90509250925092565b5f60208284031215611e2d575f80fd5b8135611e3881611cf2565b9392505050565b5f60208284031215611e4f575f80fd5b5035919050565b5f8060408385031215611e67575f80fd5b50508035926020909101359150565b5f805f8060408587031215611e89575f80fd5b843567ffffffffffffffff80821115611ea0575f80fd5b611eac88838901611d71565b90965094506020870135915080821115611ec4575f80fd5b50611ed187828801611d71565b95989497509550505050565b5f8060408385031215611eee575f80fd5b8235611ef981611cf2565b9150611f0760208401611db9565b90509250929050565b5f8060408385031215611f21575f80fd5b8235611f2c81611cf2565b91506020830135611f3c81611cf2565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107d7576107d7611f7c565b600181811c90821680611fb757607f821691505b602082108103611fd557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161200057612000611f7c565b5060010190565b808201808211156107d7576107d7611f7c565b5f8261203457634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561207357815f190482111561205957612059611f7c565b8085161561206657918102915b93841c939080029061203e565b509250929050565b5f82612089575060016107d7565b8161209557505f6107d7565b81600181146120ab57600281146120b5576120d1565b60019150506107d7565b60ff8411156120c6576120c6611f7c565b50506001821b6107d7565b5060208310610133831016604e8410600b84101617156120f4575081810a6107d7565b6120fe8383612039565b805f190482111561211157612111611f7c565b029392505050565b5f611e3860ff84168361207b565b80820281158282048414176107d7576107d7611f7c565b5f6020828403121561214e575f80fd5b8151611e3881611cf2565b5f805f6060848603121561216b575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561225a5784516001600160a01b031683529383019391830191600101612235565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205a9005b41ec73f7679a9c9879abe6a83dbe21492d11db42cc50adb32c8fad98864736f6c63430008150033

Deployed Bytecode Sourcemap

10791:7898:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17686:133;;;;;;;;;;;;;:::i;:::-;;13203:297;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;13203:297:0;;;;;;;;4025:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10832:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;10832:37:0;749:221:1;5080:210:0;;;;;;;;;;-1:-1:-1;5080:210:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;5080:210:0;1431:187:1;4346:108:0;;;;;;;;;;-1:-1:-1;4434:12:0;;4346:108;;12660:86;;;;;;;;;;;;;:::i;5298:620::-;;;;;;;;;;-1:-1:-1;5298:620:0;;;;;:::i;:::-;;:::i;18197:240::-;;;;;;;;;;-1:-1:-1;18197:240:0;;;;;:::i;:::-;;:::i;12297:84::-;;;;;;;;;;-1:-1:-1;12297:84:0;;12372:1;3273:36:1;;3261:2;3246:18;12297:84:0;3131:184:1;11127:28:0;;;;;;;;;;;;;;;;5926:297;;;;;;;;;;-1:-1:-1;5926:297:0;;;;;:::i;:::-;;:::i;10876:21::-;;;;;;;;;;-1:-1:-1;10876:21:0;;;;-1:-1:-1;;;;;10876:21:0;;;11300:32;;;;;;;;;;;;;;;;10906:51;;;;;;;;;;-1:-1:-1;10906:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;16841:89;;;;;;;;;;-1:-1:-1;16841:89:0;;;;;:::i;:::-;;:::i;12389:263::-;;;;;;;;;;-1:-1:-1;12389:263:0;;;;;:::i;:::-;;:::i;16938:76::-;;;;;;;;;;;;;:::i;17827:362::-;;;;;;;;;;-1:-1:-1;17827:362:0;;;;;:::i;:::-;;:::i;13035:160::-;;;;;;;;;;;;;:::i;11164:30::-;;;;;;;;;;-1:-1:-1;11164:30:0;;;;;;;;4462:177;;;;;;;;;;-1:-1:-1;4462:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4613:18:0;4581:7;4613:18;;;;;;;;;;;;4462:177;8526:148;;;;;;;;;;;;;:::i;12754:273::-;;;;;;;;;;-1:-1:-1;12754:273:0;;;;;:::i;:::-;;:::i;8312:79::-;;;;;;;;;;-1:-1:-1;8377:6:0;;-1:-1:-1;;;;;8377:6:0;8312:79;;4133:104;;;;;;;;;;;;;:::i;6231:482::-;;;;;;;;;;-1:-1:-1;6231:482:0;;;;;:::i;:::-;;:::i;4647:216::-;;;;;;;;;;-1:-1:-1;4647:216:0;;;;;:::i;:::-;;:::i;13508:278::-;;;;;;;;;;-1:-1:-1;13508:278:0;;;;;:::i;:::-;;:::i;11201:37::-;;;;;;;;;;;;;;;17022:656;;;;;;:::i;:::-;;:::i;4871:201::-;;;;;;;;;;-1:-1:-1;4871:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5037:18:0;;;5005:7;5037:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4871:201;16600:233;;;;;;;;;;;;;:::i;11087:33::-;;;;;;;;;;;;;;;;8682:281;;;;;;;;;;-1:-1:-1;8682:281:0;;;;;:::i;:::-;;:::i;11400:37::-;;;;;;;;;;-1:-1:-1;11400:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17686:133;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;;;;;;;;;17742:17:::1;::::0;:22;17734:31:::1;;;::::0;::::1;;17796:15;17776:17;:35:::0;17686:133::o;13203:297::-;13246:7;13307:10;13287:17;;13269:15;:35;;;;:::i;:::-;:48;13266:61;;;-1:-1:-1;13326:1:0;;13203:297::o;13266:61::-;13379:10;13359:17;;13341:15;:35;;;;:::i;:::-;:48;13338:62;;;-1:-1:-1;13398:2:0;;13203:297::o;13338:62::-;13452:9;13432:17;;13414:15;:35;;;;:::i;:::-;:47;13411:61;;;-1:-1:-1;13470:2:0;;13203:297::o;13411:61::-;-1:-1:-1;13490:2:0;;13203:297::o;4025:100::-;4079:13;4112:5;4105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100;:::o;5080:210::-;5199:4;5221:39;175:10;5244:7;5253:6;5221:8;:39::i;:::-;-1:-1:-1;5278:4:0;5080:210;;;;;:::o;12660:86::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;12727:11:::1;::::0;;-1:-1:-1;;12712:26:0;::::1;12727:11;::::0;;::::1;12726:12;12712:26;::::0;;12660:86::o;5298:620::-;5438:4;5455:36;5465:6;5473:9;5484:6;5455:9;:36::i;:::-;-1:-1:-1;;;;;5531:19:0;;5504:24;5531:19;;;:11;:19;;;;;;;;175:10;5531:33;;;;;;;;-1:-1:-1;;5578:37:0;;5575:314;;5679:6;5659:16;:26;;5633:128;;;;-1:-1:-1;;;5633:128:0;;6922:2:1;5633:128:0;;;6904:21:1;6961:2;6941:18;;;6934:30;7000:34;6980:18;;;6973:62;-1:-1:-1;;;7051:18:1;;;7044:38;7099:19;;5633:128:0;6720:404:1;5633:128:0;5805:57;5814:6;175:10;5855:6;5836:16;:25;5805:8;:57::i;:::-;-1:-1:-1;5906:4:0;;5298:620;-1:-1:-1;;;;5298:620:0:o;18197:240::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;18303:9:::1;18299:131;18318:19:::0;;::::1;18299:131;;;18391:8;:27;;18417:1;18391:27;;;18402:12;18391:27;18359:16;:29;18376:8;;18385:1;18376:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18359:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18359:29:0;:59;18339:3;::::1;::::0;::::1;:::i;:::-;;;;18299:131;;;;18197:240:::0;;;:::o;5926:297::-;175:10;6041:4;6135:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6135:34:0;;;;;;;;;;6041:4;;6063:130;;6113:7;;6135:47;;6172:10;;6135:47;:::i;:::-;6063:8;:130::i;16841:89::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;16906:8:::1;:16:::0;16841:89::o;12389:263::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;12519:3:::1;12503:13;4434:12:::0;;;4346:108;12503:13:::1;:19;;;;:::i;:::-;12490:9;:32;;12482:86;;;::::0;-1:-1:-1;;;12482:86:0;;7955:2:1;12482:86:0::1;::::0;::::1;7937:21:1::0;7994:2;7974:18;;;7967:30;8033:34;8013:18;;;8006:62;-1:-1:-1;;;8084:18:1;;;8077:39;8133:19;;12482:86:0::1;7753:405:1::0;12482:86:0::1;12579:18;:29:::0;;;;12619:13:::1;:25:::0;12389:263::o;16938:76::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;16991:7:::1;:15:::0;;-1:-1:-1;;16991:15:0::1;::::0;;16938:76::o;17827:362::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;17946:40;;::::1;17938:83;;;::::0;-1:-1:-1;;;17938:83:0;;8365:2:1;17938:83:0::1;::::0;::::1;8347:21:1::0;8404:2;8384:18;;;8377:30;8443:32;8423:18;;;8416:60;8493:18;;17938:83:0::1;8163:354:1::0;17938:83:0::1;18039:9;18034:148;18054:18:::0;;::::1;18034:148;;;18094:76;18110:10;18122:7;;18130:1;18122:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11035:15;10993:1;11035:2;:15;:::i;:::-;18134;;18150:1;18134:18;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;18094:15;:76::i;:::-;18074:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18034:148;;;;17827:362:::0;;;;:::o;13035:160::-;13079:7;13140:10;13120:17;;13102:15;:35;;;;:::i;:::-;:48;13099:68;;;-1:-1:-1;13159:8:0;;;13035:160::o;8526:148::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;8617:6:::1;::::0;8596:40:::1;::::0;8633:1:::1;::::0;-1:-1:-1;;;;;8617:6:0::1;::::0;8596:40:::1;::::0;8633:1;;8596:40:::1;8647:6;:19:::0;;-1:-1:-1;;;;;;8647:19:0::1;::::0;;8526:148::o;12754:273::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;12880:6:::1;::::0;-1:-1:-1;;;;;12880:6:0;;::::1;12872:14:::0;;::::1;::::0;12850:101:::1;;;::::0;-1:-1:-1;;;12850:101:0;;10280:2:1;12850:101:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;10358:34;10338:18;;;10331:62;-1:-1:-1;;;10409:18:1;;;10402:35;10454:19;;12850:101:0::1;10078:401:1::0;12850:101:0::1;-1:-1:-1::0;;;;;12964:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;:19;;-1:-1:-1;;12964:19:0::1;::::0;::::1;;::::0;;::::1;::::0;;;12999:20;;12964:19;;:11;12999:20:::1;::::0;::::1;12754:273:::0;;:::o;4133:104::-;4189:13;4222:7;4215:14;;;;;:::i;6231:482::-;175:10;6351:4;6400:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6400:34:0;;;;;;;;;;6467:35;;;;6445:122;;;;-1:-1:-1;;;6445:122:0;;10686:2:1;6445:122:0;;;10668:21:1;10725:2;10705:18;;;10698:30;10764:34;10744:18;;;10737:62;-1:-1:-1;;;10815:18:1;;;10808:35;10860:19;;6445:122:0;10484:401:1;6445:122:0;6603:67;175:10;6626:7;6654:15;6635:16;:34;6603:8;:67::i;:::-;-1:-1:-1;6701:4:0;;6231:482;-1:-1:-1;;;6231:482:0:o;4647:216::-;4769:4;4791:42;175:10;4815:9;4826:6;4791:9;:42::i;13508:278::-;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;13610:9:::1;13605:174;13625:19:::0;;::::1;13605:174;;;13701:8;13666:19;:32;13686:8;;13695:1;13686:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13666:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13666:32:0;:43;;-1:-1:-1;;13666:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13745:8;;13754:1;13745:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13729:38:0::1;;13758:8;13729:38;;;;1596:14:1::0;1589:22;1571:41;;1559:2;1544:18;;1431:187;13729:38:0::1;;;;;;;;13646:3:::0;::::1;::::0;::::1;:::i;:::-;;;;13605:174;;17022:656:::0;17111:10;17091:31;;;;:19;:31;;;;;;;;17083:56;;;;-1:-1:-1;;;17083:56:0;;11092:2:1;17083:56:0;;;11074:21:1;11131:2;11111:18;;;11104:30;-1:-1:-1;;;11150:18:1;;;11143:42;11202:18;;17083:56:0;10890:336:1;17083:56:0;17158:17;;:22;17150:31;;;;;;17212:1;17200:9;:13;17192:44;;;;-1:-1:-1;;;17192:44:0;;11433:2:1;17192:44:0;;;11415:21:1;11472:2;11452:18;;;11445:30;-1:-1:-1;;;11491:18:1;;;11484:48;11549:18;;17192:44:0;11231:342:1;17192:44:0;17264:1;17255:6;:10;17247:45;;;;-1:-1:-1;;;17247:45:0;;11780:2:1;17247:45:0;;;11762:21:1;11819:2;11799:18;;;11792:30;-1:-1:-1;;;11838:18:1;;;11831:52;11900:18;;17247:45:0;11578:346:1;17247:45:0;17305:11;17319:9;-1:-1:-1;;;;;17319:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17305:30;;17369:9;-1:-1:-1;;;;;17369:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17357:63;;-1:-1:-1;;;17357:63:0;;-1:-1:-1;;;;;12415:15:1;;;17357:63:0;;;12397:34:1;17414:4:0;12447:18:1;;;12440:43;17357::0;;;;;;;12332:18:1;;17357:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17348:6;:72;;-1:-1:-1;;;;;;17348:72:0;-1:-1:-1;;;;;17348:72:0;;;;;;;;;-1:-1:-1;17431:13:0;;;:5;:13;;;;;:20;;-1:-1:-1;;17431:20:0;-1:-1:-1;17431:20:0;;;17464:67;17480:10;17500:4;11035:15;10993:1;11035:2;:15;:::i;:::-;17507:23;;:6;:23;:::i;17464:67::-;17544:9;-1:-1:-1;;;;;17544:25:0;;17577:21;17608:4;17614:24;17632:4;-1:-1:-1;;;;;4613:18:0;4581:7;4613:18;;;;;;;;;;;;4462:177;17614:24;17544:126;;-1:-1:-1;;;;;;17544:126:0;;;;;;;-1:-1:-1;;;;;12853:15:1;;;17544:126:0;;;12835:34:1;12885:18;;;12878:34;17639:1:0;12928:18:1;;;12921:34;;;12971:18;;;12964:34;17643:10:0;13014:19:1;;;13007:44;17654:15:0;13067:19:1;;;13060:35;12769:19;;17544:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16600:233::-;8377:6;;-1:-1:-1;;;;;8377:6:0;16651:10;:21;;:51;;-1:-1:-1;16676:10:0;-1:-1:-1;;;;;16690:12:0;16676:26;;16651:51;16643:76;;;;-1:-1:-1;;;16643:76:0;;11092:2:1;16643:76:0;;;11074:21:1;11131:2;11111:18;;;11104:30;-1:-1:-1;;;11150:18:1;;;11143:42;11202:18;;16643:76:0;10890:336:1;16643:76:0;16767:58;;16730:12;;16775:10;;16799:21;;16730:12;16767:58;16730:12;16767:58;16799:21;16775:10;16767:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8682:281;8439:6;;-1:-1:-1;;;;;8439:6:0;175:10;8439:22;8431:67;;;;-1:-1:-1;;;8431:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8785:22:0;::::1;8763:110;;;::::0;-1:-1:-1;;;8763:110:0;;13829:2:1;8763:110:0::1;::::0;::::1;13811:21:1::0;13868:2;13848:18;;;13841:30;13907:34;13887:18;;;13880:62;-1:-1:-1;;;13958:18:1;;;13951:36;14004:19;;8763:110:0::1;13627:402:1::0;8763:110:0::1;8910:6;::::0;8889:38:::1;::::0;-1:-1:-1;;;;;8889:38:0;;::::1;::::0;8910:6:::1;::::0;8889:38:::1;::::0;8910:6:::1;::::0;8889:38:::1;8938:6;:17:::0;;-1:-1:-1;;;;;;8938:17:0::1;-1:-1:-1::0;;;;;8938:17:0;;;::::1;::::0;;;::::1;::::0;;8682:281::o;7380:380::-;-1:-1:-1;;;;;7516:19:0;;7508:68;;;;-1:-1:-1;;;7508:68:0;;14236:2:1;7508:68:0;;;14218:21:1;14275:2;14255:18;;;14248:30;14314:34;14294:18;;;14287:62;-1:-1:-1;;;14365:18:1;;;14358:34;14409:19;;7508:68:0;14034:400:1;7508:68:0;-1:-1:-1;;;;;7595:21:0;;7587:68;;;;-1:-1:-1;;;7587:68:0;;14641:2:1;7587:68:0;;;14623:21:1;14680:2;14660:18;;;14653:30;14719:34;14699:18;;;14692:62;-1:-1:-1;;;14770:18:1;;;14763:32;14812:19;;7587:68:0;14439:398:1;7587:68:0;-1:-1:-1;;;;;7668:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7720:32;;160:25:1;;;7720:32:0;;133:18:1;7720:32:0;;;;;;;7380:380;;;:::o;13794:1987::-;-1:-1:-1;;;;;13926:18:0;;13918:68;;;;-1:-1:-1;;;13918:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14005:16:0;;13997:64;;;;-1:-1:-1;;;13997:64:0;;;;;;;:::i;:::-;14077:17;;14098:1;14077:22;14074:1657;;-1:-1:-1;;;;;14124:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;14153:23:0;;;;;;:19;:23;;;;;;;;14124:52;14116:87;;;;-1:-1:-1;;;14116:87:0;;15854:2:1;14116:87:0;;;15836:21:1;15893:2;15873:18;;;15866:30;-1:-1:-1;;;15912:18:1;;;15905:52;15974:18;;14116:87:0;15652:346:1;14116:87:0;14218:33;14234:4;14240:2;14244:6;14218:15;:33::i;:::-;14074:1657;;;-1:-1:-1;;;;;14298:25:0;;;;;;:19;:25;;;;;;;;14297:26;:54;;;;-1:-1:-1;;;;;;14328:23:0;;;;;;:19;:23;;;;;;;;14327:24;14297:54;14293:1377;;;14382:7;;;;14372;14437:136;;;;-1:-1:-1;4434:12:0;;14526:7;14531:2;4434:12;14526:7;:::i;:::-;14516:6;:17;;14508:45;;;;-1:-1:-1;;;14508:45:0;;16205:2:1;14508:45:0;;;16187:21:1;16244:2;16224:18;;;16217:30;-1:-1:-1;;;16263:18:1;;;16256:45;16318:18;;14508:45:0;16003:339:1;14508:45:0;14593:12;14628:11;14642:13;:11;:13::i;:::-;14628:27;;14674:11;14688:12;:10;:12::i;:::-;-1:-1:-1;;;;;14725:9:0;;;;;;:5;:9;;;;;;14674:26;;-1:-1:-1;14725:9:0;;14721:385;;;14762:7;;14759:64;;14820:3;14804:12;14813:3;14804:6;:12;:::i;:::-;14803:20;;;;:::i;:::-;14796:27;;14759:64;14721:385;;;14876:1;14870:3;:7;:22;;;;-1:-1:-1;;;;;;14881:11:0;;;;;;:5;:11;;;;;;;;14870:22;14866:240;;;14941:3;14925:12;14934:3;14925:6;:12;:::i;:::-;14924:20;;;;:::i;:::-;14917:27;;14988:17;;14970:15;:35;;;;:::i;:::-;:40;:54;;;;-1:-1:-1;;;;;;15015:9:0;;;;;;:5;:9;;;;;;;;15014:10;14970:54;14967:119;;;-1:-1:-1;;;;;15051:20:0;;;;;;:16;:20;;;;;15074:12;15051:35;;14967:119;15130:8;;15126:99;;15163:42;15179:4;15193;15200;15163:15;:42::i;:::-;15245:14;15255:4;15245:14;;:::i;:::-;;;15283:2;15280:171;;;-1:-1:-1;;;;;15314:9:0;;;;;;:5;:9;;;;;;;;15310:122;;15386:7;15391:2;15386;:7;:::i;:::-;-1:-1:-1;;;;;4613:18:0;;4581:7;4613:18;;;;;;;;;;;15360:22;;:6;:22;:::i;:::-;:33;;15352:56;;;;-1:-1:-1;;;15352:56:0;;16549:2:1;15352:56:0;;;16531:21:1;16588:2;16568:18;;;16561:30;-1:-1:-1;;;16607:18:1;;;16600:40;16657:18;;15352:56:0;16347:334:1;15352:56:0;15475:11;;;;:24;;;;-1:-1:-1;15491:8:0;;;;15490:9;15475:24;:37;;;;-1:-1:-1;;;;;;15503:9:0;;;;;;:5;:9;;;;;;;;15475:37;15471:179;;;15537:8;:15;;-1:-1:-1;;15537:15:0;15548:4;15537:15;;;15575:16;15584:6;15575:8;:16::i;:::-;15614:8;:16;;-1:-1:-1;;15614:16:0;;;15471:179;14353:1317;;;;;14293:1377;15686:33;15702:4;15708:2;15712:6;15686:15;:33::i;:::-;15743:30;15764:4;15770:2;15743:20;:30::i;:::-;13794:1987;;;:::o;6721:651::-;-1:-1:-1;;;;;6861:20:0;;6853:70;;;;-1:-1:-1;;;6853:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6942:23:0;;6934:71;;;;-1:-1:-1;;;6934:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7042:17:0;;7018:21;7042:17;;;;;;;;;;;7092:23;;;;7070:111;;;;-1:-1:-1;;;7070:111:0;;16888:2:1;7070:111:0;;;16870:21:1;16927:2;16907:18;;;16900:30;16966:34;16946:18;;;16939:62;-1:-1:-1;;;17017:18:1;;;17010:36;17063:19;;7070:111:0;16686:402:1;7070:111:0;-1:-1:-1;;;;;7217:17:0;;;:9;:17;;;;;;;;;;;7237:22;;;7217:42;;7281:20;;;;;;;;:30;;7253:6;;7217:9;7281:30;;7253:6;;7281:30;:::i;:::-;;;;;;;;7346:9;-1:-1:-1;;;;;7329:35:0;7338:6;-1:-1:-1;;;;;7329:35:0;;7357:6;7329:35;;;;160:25:1;;148:2;133:18;;14:177;7329:35:0;;;;;;;;6842:530;6721:651;;;:::o;16213:379::-;16307:4;16266:20;4613:18;;;;;;;;;;;16343;;16328:33;;16324:46;;;16363:7;16213:379;:::o;16324:46::-;16399:13;;16384:12;:28;16380:62;;;-1:-1:-1;16429:13:0;;16380:62;16472:6;16457:12;:21;16453:48;;;-1:-1:-1;16495:6:0;16453:48;16516:12;16532:1;16516:17;16512:30;;16535:7;16213:379;:::o;16512:30::-;16554;16571:12;16554:16;:30::i;:::-;16255:337;16213:379;:::o;18445:241::-;-1:-1:-1;;;;;18534:22:0;;;;;;:16;:22;;;;;;:27;;:73;;-1:-1:-1;;;;;;18580:22:0;;;;;;:16;:22;;;;;;18565:37;;:12;:37;:::i;:::-;:42;18534:73;:90;;;-1:-1:-1;8377:6:0;;-1:-1:-1;;;;;18611:13:0;;;8377:6;;18611:13;18534:90;18526:152;;;;-1:-1:-1;;;18526:152:0;;17295:2:1;18526:152:0;;;17277:21:1;17334:2;17314:18;;;17307:30;17373:34;17353:18;;;17346:62;-1:-1:-1;;;17424:18:1;;;17417:47;17481:19;;18526:152:0;17093:413:1;15789:416:0;15879:16;;;15893:1;15879:16;;;;;;;;15855:21;;15879:16;;;;;;;;;;-1:-1:-1;15879:16:0;15855:40;;15924:4;15906;15911:1;15906:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15906:23:0;;;-1:-1:-1;;;;;15906:23:0;;;;;15950:9;-1:-1:-1;;;;;15950:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15940:4;15945:1;15940:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15940:26:0;;;:7;;;;;;;;;:26;15979:218;;-1:-1:-1;;;15979:218:0;;:9;:60;;;;;;:218;;16054:11;;16080:1;;16124:4;;16151;;16171:15;;15979:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15844:361;15789:416;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:456::-;1700:6;1708;1716;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1824:9;1811:23;1843:31;1868:5;1843:31;:::i;:::-;1893:5;-1:-1:-1;1950:2:1;1935:18;;1922:32;1963:33;1922:32;1963:33;:::i;:::-;1623:456;;2015:7;;-1:-1:-1;;;2069:2:1;2054:18;;;;2041:32;;1623:456::o;2084:367::-;2147:8;2157:6;2211:3;2204:4;2196:6;2192:17;2188:27;2178:55;;2229:1;2226;2219:12;2178:55;-1:-1:-1;2252:20:1;;2295:18;2284:30;;2281:50;;;2327:1;2324;2317:12;2281:50;2364:4;2356:6;2352:17;2340:29;;2424:3;2417:4;2407:6;2404:1;2400:14;2392:6;2388:27;2384:38;2381:47;2378:67;;;2441:1;2438;2431:12;2378:67;2084:367;;;;;:::o;2456:160::-;2521:20;;2577:13;;2570:21;2560:32;;2550:60;;2606:1;2603;2596:12;2550:60;2456:160;;;:::o;2621:505::-;2713:6;2721;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:52;;;2798:1;2795;2788:12;2750:52;2838:9;2825:23;2871:18;2863:6;2860:30;2857:50;;;2903:1;2900;2893:12;2857:50;2942:70;3004:7;2995:6;2984:9;2980:22;2942:70;:::i;:::-;3031:8;;-1:-1:-1;2916:96:1;-1:-1:-1;3085:35:1;;-1:-1:-1;3116:2:1;3101:18;;3085:35;:::i;:::-;3075:45;;2621:505;;;;;:::o;3528:247::-;3587:6;3640:2;3628:9;3619:7;3615:23;3611:32;3608:52;;;3656:1;3653;3646:12;3608:52;3695:9;3682:23;3714:31;3739:5;3714:31;:::i;:::-;3764:5;3528:247;-1:-1:-1;;;3528:247:1:o;3780:180::-;3839:6;3892:2;3880:9;3871:7;3867:23;3863:32;3860:52;;;3908:1;3905;3898:12;3860:52;-1:-1:-1;3931:23:1;;3780:180;-1:-1:-1;3780:180:1:o;3965:248::-;4033:6;4041;4094:2;4082:9;4073:7;4069:23;4065:32;4062:52;;;4110:1;4107;4100:12;4062:52;-1:-1:-1;;4133:23:1;;;4203:2;4188:18;;;4175:32;;-1:-1:-1;3965:248:1:o;4218:773::-;4340:6;4348;4356;4364;4417:2;4405:9;4396:7;4392:23;4388:32;4385:52;;;4433:1;4430;4423:12;4385:52;4473:9;4460:23;4502:18;4543:2;4535:6;4532:14;4529:34;;;4559:1;4556;4549:12;4529:34;4598:70;4660:7;4651:6;4640:9;4636:22;4598:70;:::i;:::-;4687:8;;-1:-1:-1;4572:96:1;-1:-1:-1;4775:2:1;4760:18;;4747:32;;-1:-1:-1;4791:16:1;;;4788:36;;;4820:1;4817;4810:12;4788:36;;4859:72;4923:7;4912:8;4901:9;4897:24;4859:72;:::i;:::-;4218:773;;;;-1:-1:-1;4950:8:1;-1:-1:-1;;;;4218:773:1:o;4996:315::-;5061:6;5069;5122:2;5110:9;5101:7;5097:23;5093:32;5090:52;;;5138:1;5135;5128:12;5090:52;5177:9;5164:23;5196:31;5221:5;5196:31;:::i;:::-;5246:5;-1:-1:-1;5270:35:1;5301:2;5286:18;;5270:35;:::i;:::-;5260:45;;4996:315;;;;;:::o;5316:388::-;5384:6;5392;5445:2;5433:9;5424:7;5420:23;5416:32;5413:52;;;5461:1;5458;5451:12;5413:52;5500:9;5487:23;5519:31;5544:5;5519:31;:::i;:::-;5569:5;-1:-1:-1;5626:2:1;5611:18;;5598:32;5639:33;5598:32;5639:33;:::i;:::-;5691:7;5681:17;;;5316:388;;;;;:::o;5709:356::-;5911:2;5893:21;;;5930:18;;;5923:30;5989:34;5984:2;5969:18;;5962:62;6056:2;6041:18;;5709:356::o;6070:127::-;6131:10;6126:3;6122:20;6119:1;6112:31;6162:4;6159:1;6152:15;6186:4;6183:1;6176:15;6202:128;6269:9;;;6290:11;;;6287:37;;;6304:18;;:::i;6335:380::-;6414:1;6410:12;;;;6457;;;6478:61;;6532:4;6524:6;6520:17;6510:27;;6478:61;6585:2;6577:6;6574:14;6554:18;6551:38;6548:161;;6631:10;6626:3;6622:20;6619:1;6612:31;6666:4;6663:1;6656:15;6694:4;6691:1;6684:15;6548:161;;6335:380;;;:::o;7129:127::-;7190:10;7185:3;7181:20;7178:1;7171:31;7221:4;7218:1;7211:15;7245:4;7242:1;7235:15;7261:135;7300:3;7321:17;;;7318:43;;7341:18;;:::i;:::-;-1:-1:-1;7388:1:1;7377:13;;7261:135::o;7401:125::-;7466:9;;;7487:10;;;7484:36;;;7500:18;;:::i;7531:217::-;7571:1;7597;7587:132;;7641:10;7636:3;7632:20;7629:1;7622:31;7676:4;7673:1;7666:15;7704:4;7701:1;7694:15;7587:132;-1:-1:-1;7733:9:1;;7531:217::o;8522:422::-;8611:1;8654:5;8611:1;8668:270;8689:7;8679:8;8676:21;8668:270;;;8748:4;8744:1;8740:6;8736:17;8730:4;8727:27;8724:53;;;8757:18;;:::i;:::-;8807:7;8797:8;8793:22;8790:55;;;8827:16;;;;8790:55;8906:22;;;;8866:15;;;;8668:270;;;8672:3;8522:422;;;;;:::o;8949:806::-;8998:5;9028:8;9018:80;;-1:-1:-1;9069:1:1;9083:5;;9018:80;9117:4;9107:76;;-1:-1:-1;9154:1:1;9168:5;;9107:76;9199:4;9217:1;9212:59;;;;9285:1;9280:130;;;;9192:218;;9212:59;9242:1;9233:10;;9256:5;;;9280:130;9317:3;9307:8;9304:17;9301:43;;;9324:18;;:::i;:::-;-1:-1:-1;;9380:1:1;9366:16;;9395:5;;9192:218;;9494:2;9484:8;9481:16;9475:3;9469:4;9466:13;9462:36;9456:2;9446:8;9443:16;9438:2;9432:4;9429:12;9425:35;9422:77;9419:159;;;-1:-1:-1;9531:19:1;;;9563:5;;9419:159;9610:34;9635:8;9629:4;9610:34;:::i;:::-;9680:6;9676:1;9672:6;9668:19;9659:7;9656:32;9653:58;;;9691:18;;:::i;:::-;9729:20;;8949:806;-1:-1:-1;;;8949:806:1:o;9760:140::-;9818:5;9847:47;9888:4;9878:8;9874:19;9868:4;9847:47;:::i;9905:168::-;9978:9;;;10009;;10026:15;;;10020:22;;10006:37;9996:71;;10047:18;;:::i;11929:251::-;11999:6;12052:2;12040:9;12031:7;12027:23;12023:32;12020:52;;;12068:1;12065;12058:12;12020:52;12100:9;12094:16;12119:31;12144:5;12119:31;:::i;13106:306::-;13194:6;13202;13210;13263:2;13251:9;13242:7;13238:23;13234:32;13231:52;;;13279:1;13276;13269:12;13231:52;13308:9;13302:16;13292:26;;13358:2;13347:9;13343:18;13337:25;13327:35;;13402:2;13391:9;13387:18;13381:25;13371:35;;13106:306;;;;;:::o;14842:401::-;15044:2;15026:21;;;15083:2;15063:18;;;15056:30;15122:34;15117:2;15102:18;;15095:62;-1:-1:-1;;;15188:2:1;15173:18;;15166:35;15233:3;15218:19;;14842:401::o;15248:399::-;15450:2;15432:21;;;15489:2;15469:18;;;15462:30;15528:34;15523:2;15508:18;;15501:62;-1:-1:-1;;;15594:2:1;15579:18;;15572:33;15637:3;15622:19;;15248:399::o;17643:980::-;17905:4;17953:3;17942:9;17938:19;17984:6;17973:9;17966:25;18010:2;18048:6;18043:2;18032:9;18028:18;18021:34;18091:3;18086:2;18075:9;18071:18;18064:31;18115:6;18150;18144:13;18181:6;18173;18166:22;18219:3;18208:9;18204:19;18197:26;;18258:2;18250:6;18246:15;18232:29;;18279:1;18289:195;18303:6;18300:1;18297:13;18289:195;;;18368:13;;-1:-1:-1;;;;;18364:39:1;18352:52;;18459:15;;;;18424:12;;;;18400:1;18318:9;18289:195;;;-1:-1:-1;;;;;;;18540:32:1;;;;18535:2;18520:18;;18513:60;-1:-1:-1;;;18604:3:1;18589:19;18582:35;18501:3;17643:980;-1:-1:-1;;;17643:980:1:o

Swarm Source

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