ETH Price: $3,387.96 (+0.92%)

Token

MEMES (MEMES)
 

Overview

Max Total Supply

1,000,000,000 MEMES

Holders

201

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*وليعهدالمملكةالعربيةالسعودية.eth
Balance
0.000000042211406395 MEMES

Value
$0.00
0x29c94fd33898B2D1AFA4a7Fc6df3077d4Be07c02
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:
MEMES

Compiler Version
v0.8.19+commit.7dd6d404

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-19
*/

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

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

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

pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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


    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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}


    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }


    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }


    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }


    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }


    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }


    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }


    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;

    bool public limitsInEffect = true;


    uint256 private launchedAt;
    uint256 private launchedTime;


    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyTotalFees;

    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellTotalFees;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;


        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("MEMES", "MEMES") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);


        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 1_000_000_0 * 1e18; 
        maxWallet = 1_000_000_0 * 1e18;
        swapTokensAtAmount = 1_000_00 * 1e18;

        marketingWallet = address(0x83EF473e74051DFAcD709D63156D3697ecD2564A);
        devWallet = address(0x19daacaCFF580282C7fbDC64EDF1399c99965eFb);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee
    ) external onlyOwner {
        buyMarketingFee = marketingFee;
        buyLiquidityFee = liquidityFee;
        buyDevFee = devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }


    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 (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

 if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {

              if
                (block.number > (launchedAt) && block.number <= launchedAt + 10)
              {
                buyMarketingFee = 0;
                buyDevFee=30;
                buyLiquidityFee= 0;
                buyTotalFees = buyMarketingFee+buyDevFee+buyLiquidityFee;

                sellMarketingFee = 30;
                sellDevFee= 0;
                sellLiquidityFee= 0;
                sellTotalFees = sellMarketingFee+sellDevFee+sellLiquidityFee;

              } else if(block.number > (launchedAt + 10) && block.number <= launchedAt + 20)
              {
                buyMarketingFee = 0;
                buyDevFee= 20;
                buyLiquidityFee= 0;
                buyTotalFees = buyMarketingFee+buyDevFee+buyLiquidityFee;

                sellMarketingFee = 20;
                sellDevFee= 0;
                sellLiquidityFee= 0;
                sellTotalFees = sellMarketingFee+sellDevFee+sellLiquidityFee;
              }
              else if(block.number > (launchedAt + 20) && block.number <= launchedAt + 30)
              {
                 buyMarketingFee = 0;
                buyDevFee= 10;
                buyLiquidityFee=0;
                buyTotalFees = buyMarketingFee+buyDevFee+buyLiquidityFee;

                sellMarketingFee = 10;
                sellDevFee= 0;
                sellLiquidityFee= 0;
                sellTotalFees = sellMarketingFee+sellDevFee+sellLiquidityFee;
              }
                else if(block.number > (launchedAt + 30) && block.number <= launchedAt + 40)
              {
               buyMarketingFee = 0;
                buyDevFee= 5;
                buyLiquidityFee= 0;
                buyTotalFees = buyMarketingFee+buyDevFee+buyLiquidityFee;

                sellMarketingFee = 5;
                sellDevFee= 0;
                sellLiquidityFee= 0;
                sellTotalFees = sellMarketingFee+sellDevFee+sellLiquidityFee;
              }
         
                else
              {

                buyMarketingFee = 0;
                buyDevFee= 2;
                buyLiquidityFee= 0;
                buyTotalFees = buyMarketingFee+buyDevFee+buyLiquidityFee;

                sellMarketingFee = 2;
                sellDevFee= 0;
                sellLiquidityFee= 0;
                sellTotalFees = sellMarketingFee+sellDevFee+sellLiquidityFee;
              }

                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap - (tokensForLiquidity / 2));
        
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function withdraw() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }
}

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":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805462ffffff19166201000017905560016019819055601a819055601b819055601c819055601d819055601e553480156200004057600080fd5b506040805180820182526005808252644d454d455360d81b60208084018290528451808601909552918452908301529060036200007e8382620006ac565b5060046200008d8282620006ac565b505050620000aa620000a46200035160201b60201c565b62000355565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000cc816001620003a7565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000117573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013d919062000778565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b1919062000778565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000225919062000778565b6001600160a01b031660a081905262000240906001620003a7565b60a0516200025090600162000420565b6a084595161401484a0000006008819055600a5569152d02c7e14af6800000600955600680546001600160a01b03199081167383ef473e74051dfacd709d63156d3697ecd2564a17909155600780549091167319daacacff580282c7fbdc64edf1399c99965efb1790556b033b2e3c9fd0803ce8000000620002e6620002de6005546001600160a01b031690565b600162000474565b620002f330600162000474565b6200030261dead600162000474565b62000321620003196005546001600160a01b031690565b6001620003a7565b6200032e306001620003a7565b6200033d61dead6001620003a7565b6200034933826200051e565b5050620007d2565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003f65760405162461bcd60e51b815260206004820181905260248201526000805160206200333383398151915260448201526064015b60405180910390fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004bf5760405162461bcd60e51b81526020600482018190526024820152600080516020620033338339815191526044820152606401620003ed565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003ed565b80600260008282546200058a9190620007aa565b90915550506001600160a01b03821660009081526020819052604081208054839290620005b9908490620007aa565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200063357607f821691505b6020821081036200065457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200060357600081815260208120601f850160051c81016020861015620006835750805b601f850160051c820191505b81811015620006a4578281556001016200068f565b505050505050565b81516001600160401b03811115620006c857620006c862000608565b620006e081620006d984546200061e565b846200065a565b602080601f831160018114620007185760008415620006ff5750858301515b600019600386901b1c1916600185901b178555620006a4565b600085815260208120601f198616915b82811015620007495788860151825594840194600190910190840162000728565b5085821015620007685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200078b57600080fd5b81516001600160a01b0381168114620007a357600080fd5b9392505050565b80820180821115620007cc57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a051612b11620008226000396000818161056101526111250152600081816103e101528181612434015281816124ed01528181612529015281816125a301526125ca0152612b116000f3fe6080604052600436106103395760003560e01c80638a8c523c116101ab578063b62496f5116100f7578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610999578063f2fde38b146109af578063f6374342146109cf578063f8b45b05146109e557600080fd5b8063d85ba06314610927578063dd62ed3e1461093d578063e2f456051461098357600080fd5b8063c17b5b8c116100d1578063c17b5b8c146108b1578063c18bc195146108d1578063c8c8ebe4146108f1578063d257b34f1461090757600080fd5b8063b62496f514610847578063bbc0c74214610877578063c02466681461089157600080fd5b80639a7a23d611610164578063a0d82dc51161013e578063a0d82dc5146107d1578063a457c2d7146107e7578063a9059cbb14610807578063aacebbe31461082757600080fd5b80639a7a23d6146107855780639c3b4fdc146107a55780639fccce32146107bb57600080fd5b80638a8c523c146106e75780638da5cb5b146106fc5780638ea5220f1461071a578063921369131461073a578063924de9b71461075057806395d89b411461077057600080fd5b80633aeac4e11161028557806370a08231116102235780637571336a116101fd5780637571336a1461067157806375f0a874146106915780637bce5a04146106b15780638095d564146106c757600080fd5b806370a0823114610611578063715018a614610647578063751039fc1461065c57600080fd5b80634a62bb651161025f5780634a62bb65146105835780634fbee193146105a35780636a486a8e146105dc5780636ddd1713146105f257600080fd5b80633aeac4e11461051a5780633ccfd60b1461053a57806349bd5a5e1461054f57600080fd5b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104a857806327c8f835146104c8578063313ce567146104de57806339509351146104fa57600080fd5b80631a8145bb1461045c5780631f3fed8f14610472578063203e727e1461048857600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103cf57806318160ddd1461041b5780631816467f1461043a57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109fb565b60405161036791906126a3565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612706565b610a8d565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb366004612732565b602080526000908152604090205460ff1681565b3480156103db57600080fd5b506104037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b34801561042757600080fd5b506002545b604051908152602001610367565b34801561044657600080fd5b5061045a610455366004612732565b610aa4565b005b34801561046857600080fd5b5061042c60175481565b34801561047e57600080fd5b5061042c60165481565b34801561049457600080fd5b5061045a6104a336600461274f565b610b34565b3480156104b457600080fd5b506103906104c3366004612768565b610b76565b3480156104d457600080fd5b5061040361dead81565b3480156104ea57600080fd5b5060405160128152602001610367565b34801561050657600080fd5b50610390610515366004612706565b610c20565b34801561052657600080fd5b5061045a6105353660046127a9565b610c5c565b34801561054657600080fd5b5061045a610e1c565b34801561055b57600080fd5b506104037f000000000000000000000000000000000000000000000000000000000000000081565b34801561058f57600080fd5b50600b546103909062010000900460ff1681565b3480156105af57600080fd5b506103906105be366004612732565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156105e857600080fd5b5061042c60155481565b3480156105fe57600080fd5b50600b5461039090610100900460ff1681565b34801561061d57600080fd5b5061042c61062c366004612732565b6001600160a01b031660009081526020819052604090205490565b34801561065357600080fd5b5061045a610f44565b34801561066857600080fd5b50610390610f7a565b34801561067d57600080fd5b5061045a61068c3660046127f0565b610fb9565b34801561069d57600080fd5b50600654610403906001600160a01b031681565b3480156106bd57600080fd5b5061042c600e5481565b3480156106d357600080fd5b5061045a6106e236600461281e565b61100d565b3480156106f357600080fd5b5061045a611063565b34801561070857600080fd5b506005546001600160a01b0316610403565b34801561072657600080fd5b50600754610403906001600160a01b031681565b34801561074657600080fd5b5061042c60125481565b34801561075c57600080fd5b5061045a61076b36600461284a565b6110a6565b34801561077c57600080fd5b5061035a6110ea565b34801561079157600080fd5b5061045a6107a03660046127f0565b6110f9565b3480156107b157600080fd5b5061042c60105481565b3480156107c757600080fd5b5061042c60185481565b3480156107dd57600080fd5b5061042c60145481565b3480156107f357600080fd5b50610390610802366004612706565b6111d4565b34801561081357600080fd5b50610390610822366004612706565b61126d565b34801561083357600080fd5b5061045a610842366004612732565b61127a565b34801561085357600080fd5b50610390610862366004612732565b60216020526000908152604090205460ff1681565b34801561088357600080fd5b50600b546103909060ff1681565b34801561089d57600080fd5b5061045a6108ac3660046127f0565b611301565b3480156108bd57600080fd5b5061045a6108cc36600461281e565b61138a565b3480156108dd57600080fd5b5061045a6108ec36600461274f565b6113e0565b3480156108fd57600080fd5b5061042c60085481565b34801561091357600080fd5b5061039061092236600461274f565b611422565b34801561093357600080fd5b5061042c60115481565b34801561094957600080fd5b5061042c6109583660046127a9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561098f57600080fd5b5061042c60095481565b3480156109a557600080fd5b5061042c600f5481565b3480156109bb57600080fd5b5061045a6109ca366004612732565b611458565b3480156109db57600080fd5b5061042c60135481565b3480156109f157600080fd5b5061042c600a5481565b606060038054610a0a90612867565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3690612867565b8015610a835780601f10610a5857610100808354040283529160200191610a83565b820191906000526020600020905b815481529060010190602001808311610a6657829003601f168201915b5050505050905090565b6000610a9a3384846114f3565b5060015b92915050565b6005546001600160a01b03163314610ad75760405162461bcd60e51b8152600401610ace906128a1565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b5e5760405162461bcd60e51b8152600401610ace906128a1565b610b7081670de0b6b3a76400006128ec565b60085550565b6000610b83848484611617565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c085760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ace565b610c1585338584036114f3565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a9a918590610c57908690612903565b6114f3565b6005546001600160a01b03163314610c865760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b038216610cdc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ace565b306001600160a01b03831603610d345760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610ace565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190612916565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e16919061292f565b50505050565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610ace906128a1565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190612916565b60405163a9059cbb60e01b815233600482015260248101829052909150309063a9059cbb906044016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f13919061292f565b5060405133904780156108fc02916000818181858888f19350505050158015610f40573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610f6e5760405162461bcd60e51b8152600401610ace906128a1565b610f786000611f5c565b565b6005546000906001600160a01b03163314610fa75760405162461bcd60e51b8152600401610ace906128a1565b50600b805462ff000019169055600190565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110375760405162461bcd60e51b8152600401610ace906128a1565b600e839055600f8290556010819055806110518385612903565b61105b9190612903565b601155505050565b6005546001600160a01b0316331461108d5760405162461bcd60e51b8152600401610ace906128a1565b600b805461ffff191661010117905543600c5542600d55565b6005546001600160a01b031633146110d05760405162461bcd60e51b8152600401610ace906128a1565b600b80549115156101000261ff0019909216919091179055565b606060048054610a0a90612867565b6005546001600160a01b031633146111235760405162461bcd60e51b8152600401610ace906128a1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111ca5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ace565b610f408282611fae565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ace565b61126333858584036114f3565b5060019392505050565b6000610a9a338484611617565b6005546001600160a01b031633146112a45760405162461bcd60e51b8152600401610ace906128a1565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461132b5760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113b45760405162461bcd60e51b8152600401610ace906128a1565b601283905560138290556014819055806113ce8385612903565b6113d89190612903565b601555505050565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610ace906128a1565b61141c81670de0b6b3a76400006128ec565b600a5550565b6005546000906001600160a01b0316331461144f5760405162461bcd60e51b8152600401610ace906128a1565b50600955600190565b6005546001600160a01b031633146114825760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b0381166114e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ace565b6114f081611f5c565b50565b6001600160a01b0383166115555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ace565b6001600160a01b0382166115b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ace565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661163d5760405162461bcd60e51b8152600401610ace9061294c565b6001600160a01b0382166116635760405162461bcd60e51b8152600401610ace90612991565b8060000361167c5761167783836000612002565b505050565b600b5462010000900460ff1615611c28576005546001600160a01b038481169116148015906116b957506005546001600160a01b03838116911614155b80156116cd57506001600160a01b03821615155b80156116e457506001600160a01b03821661dead14155b80156116fa5750600554600160a01b900460ff16155b15611c2857600c544311801561171d5750600c5461171990600a612903565b4311155b1561177d576000600e819055601e6010819055600f82905561173f9082612903565b6117499190612903565b601155601e60128190556000601481905560138190559061176b908290612903565b6117759190612903565b601555611937565b600c5461178b90600a612903565b431180156117a65750600c546117a2906014612903565b4311155b156117f2576000600e81905560146010819055600f8290556117c89082612903565b6117d29190612903565b60115560146012819055600080825560138190559061176b908290612903565b600c54611800906014612903565b4311801561181b5750600c5461181790601e612903565b4311155b15611869576000600e819055600a6010819055600f82905561183d9082612903565b6118479190612903565b601155600a60128190556000601481905560138190559061176b908290612903565b600c5461187790601e612903565b431180156118925750600c5461188e906028612903565b4311155b156118e0576000600e81905560056010819055600f8290556118b49082612903565b6118be9190612903565b601155600560128190556000601481905560138190559061176b908290612903565b6000600e81905560026010819055600f8290556118fd9082612903565b6119079190612903565b6011556002601281905560006014819055601381905590611929908290612903565b6119339190612903565b6015555b600b5460ff166119c5576001600160a01b0383166000908152601f602052604090205460ff168061198057506001600160a01b0382166000908152601f602052604090205460ff165b6119c55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ace565b6001600160a01b03831660009081526021602052604090205460ff168015611a0557506001600160a01b038216600090815260208052604090205460ff16155b15611ae957600854811115611a7a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ace565b600a546001600160a01b038316600090815260208190526040902054611aa09083612903565b1115611ae45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ace565b611c28565b6001600160a01b03821660009081526021602052604090205460ff168015611b2957506001600160a01b038316600090815260208052604090205460ff16155b15611b9f57600854811115611ae45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ace565b6001600160a01b038216600090815260208052604090205460ff16611c2857600a546001600160a01b038316600090815260208190526040902054611be49083612903565b1115611c285760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ace565b3060009081526020819052604090205460095481108015908190611c535750600b54610100900460ff165b8015611c695750600554600160a01b900460ff16155b8015611c8e57506001600160a01b03851660009081526021602052604090205460ff16155b8015611cb357506001600160a01b0385166000908152601f602052604090205460ff16155b8015611cd857506001600160a01b0384166000908152601f602052604090205460ff16155b15611d06576005805460ff60a01b1916600160a01b179055611cf8612156565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601f602052604090205460ff600160a01b909204821615911680611d5457506001600160a01b0385166000908152601f602052604090205460ff165b15611d5d575060005b60008115611f48576001600160a01b03861660009081526021602052604090205460ff168015611d8f57506000601554115b15611e4d57611db46064611dae601554886123b290919063ffffffff16565b906123c5565b905060155460135482611dc791906128ec565b611dd191906129d4565b60176000828254611de29190612903565b9091555050601554601454611df790836128ec565b611e0191906129d4565b60186000828254611e129190612903565b9091555050601554601254611e2790836128ec565b611e3191906129d4565b60166000828254611e429190612903565b90915550611f2a9050565b6001600160a01b03871660009081526021602052604090205460ff168015611e7757506000601154115b15611f2a57611e966064611dae601154886123b290919063ffffffff16565b9050601154600f5482611ea991906128ec565b611eb391906129d4565b60176000828254611ec49190612903565b9091555050601154601054611ed990836128ec565b611ee391906129d4565b60186000828254611ef49190612903565b9091555050601154600e54611f0990836128ec565b611f1391906129d4565b60166000828254611f249190612903565b90915550505b8015611f3b57611f3b873083612002565b611f4581866129f6565b94505b611f53878787612002565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120285760405162461bcd60e51b8152600401610ace9061294c565b6001600160a01b03821661204e5760405162461bcd60e51b8152600401610ace90612991565b6001600160a01b038316600090815260208190526040902054818110156120c65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ace565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120fd908490612903565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214991815260200190565b60405180910390a3610e16565b306000908152602081905260408120549050600060185460165460175461217d9190612903565b6121879190612903565b90506000821580612196575081155b156121a057505050565b6009546121ae9060146128ec565b8311156121c6576009546121c39060146128ec565b92505b6000600283601754866121d991906128ec565b6121e391906129d4565b6121ed91906129d4565b905060006121fb85836123d1565b905047612207826123dd565b600061221347836123d1565b90506000612241600260175461222991906129d4565b61223390896129f6565b601654611dae9085906123b2565b9050600061226f600260175461225791906129d4565b612261908a6129f6565b601854611dae9086906123b2565b905060008161227e84866129f6565b61228891906129f6565b60006017819055601681905560188190556007546040519293506001600160a01b031691849181818185875af1925050503d80600081146122e5576040519150601f19603f3d011682016040523d82523d6000602084013e6122ea565b606091505b509098505086158015906122fe5750600081115b156123515761230d878261259d565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461239e576040519150601f19603f3d011682016040523d82523d6000602084013e6123a3565b606091505b50505050505050505050505050565b60006123be82846128ec565b9392505050565b60006123be82846129d4565b60006123be82846129f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061241257612412612a09565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b49190612a1f565b816001815181106124c7576124c7612a09565b60200260200101906001600160a01b031690816001600160a01b031681525050612512307f0000000000000000000000000000000000000000000000000000000000000000846114f3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612567908590600090869030904290600401612a3c565b600060405180830381600087803b15801561258157600080fd5b505af1158015612595573d6000803e3d6000fd5b505050505050565b6125c8307f0000000000000000000000000000000000000000000000000000000000000000846114f3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061260f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612677573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061269c9190612aad565b5050505050565b600060208083528351808285015260005b818110156126d0578581018301518582016040015282016126b4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114f057600080fd5b6000806040838503121561271957600080fd5b8235612724816126f1565b946020939093013593505050565b60006020828403121561274457600080fd5b81356123be816126f1565b60006020828403121561276157600080fd5b5035919050565b60008060006060848603121561277d57600080fd5b8335612788816126f1565b92506020840135612798816126f1565b929592945050506040919091013590565b600080604083850312156127bc57600080fd5b82356127c7816126f1565b915060208301356127d7816126f1565b809150509250929050565b80151581146114f057600080fd5b6000806040838503121561280357600080fd5b823561280e816126f1565b915060208301356127d7816127e2565b60008060006060848603121561283357600080fd5b505081359360208301359350604090920135919050565b60006020828403121561285c57600080fd5b81356123be816127e2565b600181811c9082168061287b57607f821691505b60208210810361289b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9e57610a9e6128d6565b80820180821115610a9e57610a9e6128d6565b60006020828403121561292857600080fd5b5051919050565b60006020828403121561294157600080fd5b81516123be816127e2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826129f157634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a9e57610a9e6128d6565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a3157600080fd5b81516123be816126f1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a8c5784516001600160a01b031683529383019391830191600101612a67565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ac257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fdc0c92621715d5c5db1b6de9f4a80b953a4f1c3b7f3832136677411d90b033b64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638a8c523c116101ab578063b62496f5116100f7578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610999578063f2fde38b146109af578063f6374342146109cf578063f8b45b05146109e557600080fd5b8063d85ba06314610927578063dd62ed3e1461093d578063e2f456051461098357600080fd5b8063c17b5b8c116100d1578063c17b5b8c146108b1578063c18bc195146108d1578063c8c8ebe4146108f1578063d257b34f1461090757600080fd5b8063b62496f514610847578063bbc0c74214610877578063c02466681461089157600080fd5b80639a7a23d611610164578063a0d82dc51161013e578063a0d82dc5146107d1578063a457c2d7146107e7578063a9059cbb14610807578063aacebbe31461082757600080fd5b80639a7a23d6146107855780639c3b4fdc146107a55780639fccce32146107bb57600080fd5b80638a8c523c146106e75780638da5cb5b146106fc5780638ea5220f1461071a578063921369131461073a578063924de9b71461075057806395d89b411461077057600080fd5b80633aeac4e11161028557806370a08231116102235780637571336a116101fd5780637571336a1461067157806375f0a874146106915780637bce5a04146106b15780638095d564146106c757600080fd5b806370a0823114610611578063715018a614610647578063751039fc1461065c57600080fd5b80634a62bb651161025f5780634a62bb65146105835780634fbee193146105a35780636a486a8e146105dc5780636ddd1713146105f257600080fd5b80633aeac4e11461051a5780633ccfd60b1461053a57806349bd5a5e1461054f57600080fd5b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104a857806327c8f835146104c8578063313ce567146104de57806339509351146104fa57600080fd5b80631a8145bb1461045c5780631f3fed8f14610472578063203e727e1461048857600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103cf57806318160ddd1461041b5780631816467f1461043a57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109fb565b60405161036791906126a3565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612706565b610a8d565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb366004612732565b602080526000908152604090205460ff1681565b3480156103db57600080fd5b506104037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b34801561042757600080fd5b506002545b604051908152602001610367565b34801561044657600080fd5b5061045a610455366004612732565b610aa4565b005b34801561046857600080fd5b5061042c60175481565b34801561047e57600080fd5b5061042c60165481565b34801561049457600080fd5b5061045a6104a336600461274f565b610b34565b3480156104b457600080fd5b506103906104c3366004612768565b610b76565b3480156104d457600080fd5b5061040361dead81565b3480156104ea57600080fd5b5060405160128152602001610367565b34801561050657600080fd5b50610390610515366004612706565b610c20565b34801561052657600080fd5b5061045a6105353660046127a9565b610c5c565b34801561054657600080fd5b5061045a610e1c565b34801561055b57600080fd5b506104037f0000000000000000000000008cb20ec137daca145c22282c4c0ae1c11f9f324081565b34801561058f57600080fd5b50600b546103909062010000900460ff1681565b3480156105af57600080fd5b506103906105be366004612732565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156105e857600080fd5b5061042c60155481565b3480156105fe57600080fd5b50600b5461039090610100900460ff1681565b34801561061d57600080fd5b5061042c61062c366004612732565b6001600160a01b031660009081526020819052604090205490565b34801561065357600080fd5b5061045a610f44565b34801561066857600080fd5b50610390610f7a565b34801561067d57600080fd5b5061045a61068c3660046127f0565b610fb9565b34801561069d57600080fd5b50600654610403906001600160a01b031681565b3480156106bd57600080fd5b5061042c600e5481565b3480156106d357600080fd5b5061045a6106e236600461281e565b61100d565b3480156106f357600080fd5b5061045a611063565b34801561070857600080fd5b506005546001600160a01b0316610403565b34801561072657600080fd5b50600754610403906001600160a01b031681565b34801561074657600080fd5b5061042c60125481565b34801561075c57600080fd5b5061045a61076b36600461284a565b6110a6565b34801561077c57600080fd5b5061035a6110ea565b34801561079157600080fd5b5061045a6107a03660046127f0565b6110f9565b3480156107b157600080fd5b5061042c60105481565b3480156107c757600080fd5b5061042c60185481565b3480156107dd57600080fd5b5061042c60145481565b3480156107f357600080fd5b50610390610802366004612706565b6111d4565b34801561081357600080fd5b50610390610822366004612706565b61126d565b34801561083357600080fd5b5061045a610842366004612732565b61127a565b34801561085357600080fd5b50610390610862366004612732565b60216020526000908152604090205460ff1681565b34801561088357600080fd5b50600b546103909060ff1681565b34801561089d57600080fd5b5061045a6108ac3660046127f0565b611301565b3480156108bd57600080fd5b5061045a6108cc36600461281e565b61138a565b3480156108dd57600080fd5b5061045a6108ec36600461274f565b6113e0565b3480156108fd57600080fd5b5061042c60085481565b34801561091357600080fd5b5061039061092236600461274f565b611422565b34801561093357600080fd5b5061042c60115481565b34801561094957600080fd5b5061042c6109583660046127a9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561098f57600080fd5b5061042c60095481565b3480156109a557600080fd5b5061042c600f5481565b3480156109bb57600080fd5b5061045a6109ca366004612732565b611458565b3480156109db57600080fd5b5061042c60135481565b3480156109f157600080fd5b5061042c600a5481565b606060038054610a0a90612867565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3690612867565b8015610a835780601f10610a5857610100808354040283529160200191610a83565b820191906000526020600020905b815481529060010190602001808311610a6657829003601f168201915b5050505050905090565b6000610a9a3384846114f3565b5060015b92915050565b6005546001600160a01b03163314610ad75760405162461bcd60e51b8152600401610ace906128a1565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b5e5760405162461bcd60e51b8152600401610ace906128a1565b610b7081670de0b6b3a76400006128ec565b60085550565b6000610b83848484611617565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c085760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ace565b610c1585338584036114f3565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a9a918590610c57908690612903565b6114f3565b6005546001600160a01b03163314610c865760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b038216610cdc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ace565b306001600160a01b03831603610d345760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610ace565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190612916565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e16919061292f565b50505050565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610ace906128a1565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190612916565b60405163a9059cbb60e01b815233600482015260248101829052909150309063a9059cbb906044016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f13919061292f565b5060405133904780156108fc02916000818181858888f19350505050158015610f40573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610f6e5760405162461bcd60e51b8152600401610ace906128a1565b610f786000611f5c565b565b6005546000906001600160a01b03163314610fa75760405162461bcd60e51b8152600401610ace906128a1565b50600b805462ff000019169055600190565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110375760405162461bcd60e51b8152600401610ace906128a1565b600e839055600f8290556010819055806110518385612903565b61105b9190612903565b601155505050565b6005546001600160a01b0316331461108d5760405162461bcd60e51b8152600401610ace906128a1565b600b805461ffff191661010117905543600c5542600d55565b6005546001600160a01b031633146110d05760405162461bcd60e51b8152600401610ace906128a1565b600b80549115156101000261ff0019909216919091179055565b606060048054610a0a90612867565b6005546001600160a01b031633146111235760405162461bcd60e51b8152600401610ace906128a1565b7f0000000000000000000000008cb20ec137daca145c22282c4c0ae1c11f9f32406001600160a01b0316826001600160a01b0316036111ca5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ace565b610f408282611fae565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ace565b61126333858584036114f3565b5060019392505050565b6000610a9a338484611617565b6005546001600160a01b031633146112a45760405162461bcd60e51b8152600401610ace906128a1565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461132b5760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113b45760405162461bcd60e51b8152600401610ace906128a1565b601283905560138290556014819055806113ce8385612903565b6113d89190612903565b601555505050565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610ace906128a1565b61141c81670de0b6b3a76400006128ec565b600a5550565b6005546000906001600160a01b0316331461144f5760405162461bcd60e51b8152600401610ace906128a1565b50600955600190565b6005546001600160a01b031633146114825760405162461bcd60e51b8152600401610ace906128a1565b6001600160a01b0381166114e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ace565b6114f081611f5c565b50565b6001600160a01b0383166115555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ace565b6001600160a01b0382166115b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ace565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661163d5760405162461bcd60e51b8152600401610ace9061294c565b6001600160a01b0382166116635760405162461bcd60e51b8152600401610ace90612991565b8060000361167c5761167783836000612002565b505050565b600b5462010000900460ff1615611c28576005546001600160a01b038481169116148015906116b957506005546001600160a01b03838116911614155b80156116cd57506001600160a01b03821615155b80156116e457506001600160a01b03821661dead14155b80156116fa5750600554600160a01b900460ff16155b15611c2857600c544311801561171d5750600c5461171990600a612903565b4311155b1561177d576000600e819055601e6010819055600f82905561173f9082612903565b6117499190612903565b601155601e60128190556000601481905560138190559061176b908290612903565b6117759190612903565b601555611937565b600c5461178b90600a612903565b431180156117a65750600c546117a2906014612903565b4311155b156117f2576000600e81905560146010819055600f8290556117c89082612903565b6117d29190612903565b60115560146012819055600080825560138190559061176b908290612903565b600c54611800906014612903565b4311801561181b5750600c5461181790601e612903565b4311155b15611869576000600e819055600a6010819055600f82905561183d9082612903565b6118479190612903565b601155600a60128190556000601481905560138190559061176b908290612903565b600c5461187790601e612903565b431180156118925750600c5461188e906028612903565b4311155b156118e0576000600e81905560056010819055600f8290556118b49082612903565b6118be9190612903565b601155600560128190556000601481905560138190559061176b908290612903565b6000600e81905560026010819055600f8290556118fd9082612903565b6119079190612903565b6011556002601281905560006014819055601381905590611929908290612903565b6119339190612903565b6015555b600b5460ff166119c5576001600160a01b0383166000908152601f602052604090205460ff168061198057506001600160a01b0382166000908152601f602052604090205460ff165b6119c55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ace565b6001600160a01b03831660009081526021602052604090205460ff168015611a0557506001600160a01b038216600090815260208052604090205460ff16155b15611ae957600854811115611a7a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ace565b600a546001600160a01b038316600090815260208190526040902054611aa09083612903565b1115611ae45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ace565b611c28565b6001600160a01b03821660009081526021602052604090205460ff168015611b2957506001600160a01b038316600090815260208052604090205460ff16155b15611b9f57600854811115611ae45760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ace565b6001600160a01b038216600090815260208052604090205460ff16611c2857600a546001600160a01b038316600090815260208190526040902054611be49083612903565b1115611c285760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ace565b3060009081526020819052604090205460095481108015908190611c535750600b54610100900460ff165b8015611c695750600554600160a01b900460ff16155b8015611c8e57506001600160a01b03851660009081526021602052604090205460ff16155b8015611cb357506001600160a01b0385166000908152601f602052604090205460ff16155b8015611cd857506001600160a01b0384166000908152601f602052604090205460ff16155b15611d06576005805460ff60a01b1916600160a01b179055611cf8612156565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601f602052604090205460ff600160a01b909204821615911680611d5457506001600160a01b0385166000908152601f602052604090205460ff165b15611d5d575060005b60008115611f48576001600160a01b03861660009081526021602052604090205460ff168015611d8f57506000601554115b15611e4d57611db46064611dae601554886123b290919063ffffffff16565b906123c5565b905060155460135482611dc791906128ec565b611dd191906129d4565b60176000828254611de29190612903565b9091555050601554601454611df790836128ec565b611e0191906129d4565b60186000828254611e129190612903565b9091555050601554601254611e2790836128ec565b611e3191906129d4565b60166000828254611e429190612903565b90915550611f2a9050565b6001600160a01b03871660009081526021602052604090205460ff168015611e7757506000601154115b15611f2a57611e966064611dae601154886123b290919063ffffffff16565b9050601154600f5482611ea991906128ec565b611eb391906129d4565b60176000828254611ec49190612903565b9091555050601154601054611ed990836128ec565b611ee391906129d4565b60186000828254611ef49190612903565b9091555050601154600e54611f0990836128ec565b611f1391906129d4565b60166000828254611f249190612903565b90915550505b8015611f3b57611f3b873083612002565b611f4581866129f6565b94505b611f53878787612002565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120285760405162461bcd60e51b8152600401610ace9061294c565b6001600160a01b03821661204e5760405162461bcd60e51b8152600401610ace90612991565b6001600160a01b038316600090815260208190526040902054818110156120c65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ace565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120fd908490612903565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214991815260200190565b60405180910390a3610e16565b306000908152602081905260408120549050600060185460165460175461217d9190612903565b6121879190612903565b90506000821580612196575081155b156121a057505050565b6009546121ae9060146128ec565b8311156121c6576009546121c39060146128ec565b92505b6000600283601754866121d991906128ec565b6121e391906129d4565b6121ed91906129d4565b905060006121fb85836123d1565b905047612207826123dd565b600061221347836123d1565b90506000612241600260175461222991906129d4565b61223390896129f6565b601654611dae9085906123b2565b9050600061226f600260175461225791906129d4565b612261908a6129f6565b601854611dae9086906123b2565b905060008161227e84866129f6565b61228891906129f6565b60006017819055601681905560188190556007546040519293506001600160a01b031691849181818185875af1925050503d80600081146122e5576040519150601f19603f3d011682016040523d82523d6000602084013e6122ea565b606091505b509098505086158015906122fe5750600081115b156123515761230d878261259d565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461239e576040519150601f19603f3d011682016040523d82523d6000602084013e6123a3565b606091505b50505050505050505050505050565b60006123be82846128ec565b9392505050565b60006123be82846129d4565b60006123be82846129f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061241257612412612a09565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b49190612a1f565b816001815181106124c7576124c7612a09565b60200260200101906001600160a01b031690816001600160a01b031681525050612512307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114f3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612567908590600090869030904290600401612a3c565b600060405180830381600087803b15801561258157600080fd5b505af1158015612595573d6000803e3d6000fd5b505050505050565b6125c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114f3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71982308560008061260f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612677573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061269c9190612aad565b5050505050565b600060208083528351808285015260005b818110156126d0578581018301518582016040015282016126b4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114f057600080fd5b6000806040838503121561271957600080fd5b8235612724816126f1565b946020939093013593505050565b60006020828403121561274457600080fd5b81356123be816126f1565b60006020828403121561276157600080fd5b5035919050565b60008060006060848603121561277d57600080fd5b8335612788816126f1565b92506020840135612798816126f1565b929592945050506040919091013590565b600080604083850312156127bc57600080fd5b82356127c7816126f1565b915060208301356127d7816126f1565b809150509250929050565b80151581146114f057600080fd5b6000806040838503121561280357600080fd5b823561280e816126f1565b915060208301356127d7816127e2565b60008060006060848603121561283357600080fd5b505081359360208301359350604090920135919050565b60006020828403121561285c57600080fd5b81356123be816127e2565b600181811c9082168061287b57607f821691505b60208210810361289b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9e57610a9e6128d6565b80820180821115610a9e57610a9e6128d6565b60006020828403121561292857600080fd5b5051919050565b60006020828403121561294157600080fd5b81516123be816127e2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826129f157634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a9e57610a9e6128d6565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a3157600080fd5b81516123be816126f1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a8c5784516001600160a01b031683529383019391830191600101612a67565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ac257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fdc0c92621715d5c5db1b6de9f4a80b953a4f1c3b7f3832136677411d90b033b64736f6c63430008130033

Deployed Bytecode Sourcemap

15175:16764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2834:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3748:169;;;;;;;;;;-1:-1:-1;3748:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3748:169:0;1023:187:1;16599:63:0;;;;;;;;;;-1:-1:-1;16599:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15250:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;15250:51:0;1467:230:1;3155:108:0;;;;;;;;;;-1:-1:-1;3243:12:0;;3155:108;;;1848:25:1;;;1836:2;1821:18;3155:108:0;1702:177:1;21636:157:0;;;;;;;;;;-1:-1:-1;21636:157:0;;;;;:::i;:::-;;:::i;:::-;;16152:33;;;;;;;;;;;;;;;;16112;;;;;;;;;;;;;;;;19417:122;;;;;;;;;;-1:-1:-1;19417:122:0;;;;;:::i;:::-;;:::i;3927:492::-;;;;;;;;;;-1:-1:-1;3927:492:0;;;;;:::i;:::-;;:::i;15353:53::-;;;;;;;;;;;;15399:6;15353:53;;3054:93;;;;;;;;;;-1:-1:-1;3054:93:0;;3137:2;2880:36:1;;2868:2;2853:18;3054:93:0;2738:184:1;4429:215:0;;;;;;;;;;-1:-1:-1;4429:215:0;;;;;:::i;:::-;;:::i;31578:358::-;;;;;;;;;;-1:-1:-1;31578:358:0;;;;;:::i;:::-;;:::i;31324:246::-;;;;;;;;;;;;;:::i;15308:38::-;;;;;;;;;;;;;;;15710:33;;;;;;;;;;-1:-1:-1;15710:33:0;;;;;;;;;;;21801:126;;;;;;;;;;-1:-1:-1;21801:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;21891:28:0;21867:4;21891:28;;;:19;:28;;;;;;;;;21801:126;16075:28;;;;;;;;;;;;;;;;15670:31;;;;;;;;;;-1:-1:-1;15670:31:0;;;;;;;;;;;3271:127;;;;;;;;;;-1:-1:-1;3271:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3372:18:0;3345:7;3372:18;;;;;;;;;;;;3271:127;950:103;;;;;;;;;;;;;:::i;21935:121::-;;;;;;;;;;;;;:::i;19669:167::-;;;;;;;;;;-1:-1:-1;19669:167:0;;;;;:::i;:::-;;:::i;15445:30::-;;;;;;;;;;-1:-1:-1;15445:30:0;;;;-1:-1:-1;;;;;15445:30:0;;;15826;;;;;;;;;;;;;;;;20040:326;;;;;;;;;;-1:-1:-1;20040:326:0;;;;;:::i;:::-;;:::i;18960:189::-;;;;;;;;;;;;;:::i;727:87::-;;;;;;;;;;-1:-1:-1;800:6:0;;-1:-1:-1;;;;;800:6:0;727:87;;15482:24;;;;;;;;;;-1:-1:-1;15482:24:0;;;;-1:-1:-1;;;;;15482:24:0;;;15967:31;;;;;;;;;;;;;;;;19932:100;;;;;;;;;;-1:-1:-1;19932:100:0;;;;;:::i;:::-;;:::i;2942:104::-;;;;;;;;;;;;;:::i;20912:304::-;;;;;;;;;;-1:-1:-1;20912:304:0;;;;;:::i;:::-;;:::i;15900:24::-;;;;;;;;;;;;;;;;16192:27;;;;;;;;;;;;;;;;16043:25;;;;;;;;;;;;;;;;4654:413;;;;;;;;;;-1:-1:-1;4654:413:0;;;;;:::i;:::-;;:::i;3406:175::-;;;;;;;;;;-1:-1:-1;3406:175:0;;;;;:::i;:::-;;:::i;21420:208::-;;;;;;;;;;-1:-1:-1;21420:208:0;;;;;:::i;:::-;;:::i;16820:57::-;;;;;;;;;;-1:-1:-1;16820:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15630:33;;;;;;;;;;-1:-1:-1;15630:33:0;;;;;;;;20722:182;;;;;;;;;;-1:-1:-1;20722:182:0;;;;;:::i;:::-;;:::i;20374:340::-;;;;;;;;;;-1:-1:-1;20374:340:0;;;;;:::i;:::-;;:::i;19547:114::-;;;;;;;;;;-1:-1:-1;19547:114:0;;;;;:::i;:::-;;:::i;15515:35::-;;;;;;;;;;;;;;;;19219:190;;;;;;;;;;-1:-1:-1;19219:190:0;;;;;:::i;:::-;;:::i;15931:27::-;;;;;;;;;;;;;;;;3589:151;;;;;;;;;;-1:-1:-1;3589:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3705:18:0;;;3678:7;3705:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3589:151;15557:33;;;;;;;;;;;;;;;;15863:30;;;;;;;;;;;;;;;;1061:201;;;;;;;;;;-1:-1:-1;1061:201:0;;;;;:::i;:::-;;:::i;16005:31::-;;;;;;;;;;;;;;;;15597:24;;;;;;;;;;;;;;;;2834:100;2888:13;2921:5;2914:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2834:100;:::o;3748:169::-;3831:4;3848:39;353:10;3871:7;3880:6;3848:8;:39::i;:::-;-1:-1:-1;3905:4:0;3748:169;;;;;:::o;21636:157::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;;;;;;;;;21743:9:::1;::::0;21715:38:::1;::::0;-1:-1:-1;;;;;21743:9:0;;::::1;::::0;21715:38;::::1;::::0;::::1;::::0;21743:9:::1;::::0;21715:38:::1;21764:9;:21:::0;;-1:-1:-1;;;;;;21764:21:0::1;-1:-1:-1::0;;;;;21764:21:0;;;::::1;::::0;;;::::1;::::0;;21636:157::o;19417:122::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;19514:17:::1;:6:::0;19524::::1;19514:17;:::i;:::-;19491:20;:40:::0;-1:-1:-1;19417:122:0:o;3927:492::-;4067:4;4084:36;4094:6;4102:9;4113:6;4084:9;:36::i;:::-;-1:-1:-1;;;;;4160:19:0;;4133:24;4160:19;;;:11;:19;;;;;;;;353:10;4160:33;;;;;;;;4212:26;;;;4204:79;;;;-1:-1:-1;;;4204:79:0;;5650:2:1;4204:79:0;;;5632:21:1;5689:2;5669:18;;;5662:30;5728:34;5708:18;;;5701:62;-1:-1:-1;;;5779:18:1;;;5772:38;5827:19;;4204:79:0;5448:404:1;4204:79:0;4319:57;4328:6;353:10;4369:6;4350:16;:25;4319:8;:57::i;:::-;-1:-1:-1;4407:4:0;;3927:492;-1:-1:-1;;;;3927:492:0:o;4429:215::-;353:10;4517:4;4566:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4566:34:0;;;;;;;;;;4517:4;;4534:80;;4557:7;;4566:47;;4603:10;;4566:47;:::i;:::-;4534:8;:80::i;31578:358::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31668:20:0;::::1;31660:59;;;::::0;-1:-1:-1;;;31660:59:0;;6189:2:1;31660:59:0::1;::::0;::::1;6171:21:1::0;6228:2;6208:18;;;6201:30;6267:28;6247:18;;;6240:56;6313:18;;31660:59:0::1;5987:350:1::0;31660:59:0::1;31756:4;-1:-1:-1::0;;;;;31738:23:0;::::1;::::0;31730:64:::1;;;::::0;-1:-1:-1;;;31730:64:0;;6544:2:1;31730:64:0::1;::::0;::::1;6526:21:1::0;6583:2;6563:18;;;6556:30;6622;6602:18;;;6595:58;6670:18;;31730:64:0::1;6342:352:1::0;31730:64:0::1;31832:39;::::0;-1:-1:-1;;;31832:39:0;;31865:4:::1;31832:39;::::0;::::1;1640:51:1::0;31805:24:0::1;::::0;-1:-1:-1;;;;;31832:24:0;::::1;::::0;::::1;::::0;1613:18:1;;31832:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31882:46;::::0;-1:-1:-1;;;31882:46:0;;-1:-1:-1;;;;;7080:32:1;;;31882:46:0::1;::::0;::::1;7062:51:1::0;7129:18;;;7122:34;;;31805:66:0;;-1:-1:-1;31882:23:0;;::::1;::::0;::::1;::::0;7035:18:1;;31882:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31649:287;31578:358:::0;;:::o;31324:246::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;31392:46:::1;::::0;-1:-1:-1;;;31392:46:0;;31407:4:::1;31392:46;::::0;::::1;1640:51:1::0;;;31374:15:0::1;::::0;31392:31:::1;::::0;1613:18:1;;31392:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31449:51;::::0;-1:-1:-1;;;31449:51:0;;31480:10:::1;31449:51;::::0;::::1;7062::1::0;7129:18;;;7122:34;;;31374:64:0;;-1:-1:-1;31464:4:0::1;::::0;31449:30:::1;::::0;7035:18:1;;31449:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31511:51:0::1;::::0;31519:10:::1;::::0;31540:21:::1;31511:51:::0;::::1;;;::::0;::::1;::::0;;;31540:21;31519:10;31511:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31363:207;31324:246::o:0;950:103::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;1015:30:::1;1042:1;1015:18;:30::i;:::-;950:103::o:0;21935:121::-;800:6;;21987:4;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;-1:-1:-1;22004:14:0::1;:22:::0;;-1:-1:-1;;22004:22:0::1;::::0;;;21935:121;:::o;19669:167::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19782:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;19782:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19669:167::o;20040:326::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;20187:15:::1;:30:::0;;;20228:15:::1;:30:::0;;;20269:9:::1;:18:::0;;;20281:6;20313:33:::1;20246:12:::0;20205;20313:33:::1;:::i;:::-;:45;;;;:::i;:::-;20298:12;:60:::0;-1:-1:-1;;;20040:326:0:o;18960:189::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;19015:13:::1;:20:::0;;-1:-1:-1;;19046:18:0;;;;;19088:12:::1;19075:10;:25:::0;19126:15:::1;19111:12;:30:::0;18960:189::o;19932:100::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;20003:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;20003:21:0;;::::1;::::0;;;::::1;::::0;;19932:100::o;2942:104::-;2998:13;3031:7;3024:14;;;;;:::i;20912:304::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;21056:13:::1;-1:-1:-1::0;;;;;21048:21:0::1;:4;-1:-1:-1::0;;;;;21048:21:0::1;::::0;21026:128:::1;;;::::0;-1:-1:-1;;;21026:128:0;;7619:2:1;21026:128:0::1;::::0;::::1;7601:21:1::0;7658:2;7638:18;;;7631:30;7697:34;7677:18;;;7670:62;7768:27;7748:18;;;7741:55;7813:19;;21026:128:0::1;7417:421:1::0;21026:128:0::1;21167:41;21196:4;21202:5;21167:28;:41::i;4654:413::-:0;353:10;4747:4;4791:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4791:34:0;;;;;;;;;;4844:35;;;;4836:85;;;;-1:-1:-1;;;4836:85:0;;8045:2:1;4836:85:0;;;8027:21:1;8084:2;8064:18;;;8057:30;8123:34;8103:18;;;8096:62;-1:-1:-1;;;8174:18:1;;;8167:35;8219:19;;4836:85:0;7843:401:1;4836:85:0;4957:67;353:10;4980:7;5008:15;4989:16;:34;4957:8;:67::i;:::-;-1:-1:-1;5055:4:0;;4654:413;-1:-1:-1;;;4654:413:0:o;3406:175::-;3492:4;3509:42;353:10;3533:9;3544:6;3509:9;:42::i;21420:208::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;21557:15:::1;::::0;21514:59:::1;::::0;-1:-1:-1;;;;;21557:15:0;;::::1;::::0;21514:59;::::1;::::0;::::1;::::0;21557:15:::1;::::0;21514:59:::1;21584:15;:36:::0;;-1:-1:-1;;;;;;21584:36:0::1;-1:-1:-1::0;;;;;21584:36:0;;;::::1;::::0;;;::::1;::::0;;21420:208::o;20722:182::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20807:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20807:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20862:34;;1163:41:1;;;20862:34:0::1;::::0;1136:18:1;20862:34:0::1;;;;;;;20722:182:::0;;:::o;20374:340::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;20525:16:::1;:32:::0;;;20568:16:::1;:32:::0;;;20611:10:::1;:20:::0;;;20624:7;20658:35:::1;20587:13:::0;20544;20658:35:::1;:::i;:::-;:48;;;;:::i;:::-;20642:13;:64:::0;-1:-1:-1;;;20374:340:0:o;19547:114::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;19636:17:::1;:6:::0;19646::::1;19636:17;:::i;:::-;19624:9;:29:::0;-1:-1:-1;19547:114:0:o;19219:190::-;800:6;;19327:4;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;-1:-1:-1;19349:18:0::1;:30:::0;19397:4:::1;::::0;19219:190::o;1061:201::-;800:6;;-1:-1:-1;;;;;800:6:0;353:10;862:23;854:68;;;;-1:-1:-1;;;854:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1150:22:0;::::1;1142:73;;;::::0;-1:-1:-1;;;1142:73:0;;8451:2:1;1142:73:0::1;::::0;::::1;8433:21:1::0;8490:2;8470:18;;;8463:30;8529:34;8509:18;;;8502:62;-1:-1:-1;;;8580:18:1;;;8573:36;8626:19;;1142:73:0::1;8249:402:1::0;1142:73:0::1;1226:28;1245:8;1226:18;:28::i;:::-;1061:201:::0;:::o;6828:380::-;-1:-1:-1;;;;;6964:19:0;;6956:68;;;;-1:-1:-1;;;6956:68:0;;8858:2:1;6956:68:0;;;8840:21:1;8897:2;8877:18;;;8870:30;8936:34;8916:18;;;8909:62;-1:-1:-1;;;8987:18:1;;;8980:34;9031:19;;6956:68:0;8656:400:1;6956:68:0;-1:-1:-1;;;;;7043:21:0;;7035:68;;;;-1:-1:-1;;;7035:68:0;;9263:2:1;7035:68:0;;;9245:21:1;9302:2;9282:18;;;9275:30;9341:34;9321:18;;;9314:62;-1:-1:-1;;;9392:18:1;;;9385:32;9434:19;;7035:68:0;9061:398:1;7035:68:0;-1:-1:-1;;;;;7116:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7168:32;;1848:25:1;;;7168:32:0;;1821:18:1;7168:32:0;;;;;;;6828:380;;;:::o;22066:6352::-;-1:-1:-1;;;;;22198:18:0;;22190:68;;;;-1:-1:-1;;;22190:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22277:16:0;;22269:64;;;;-1:-1:-1;;;22269:64:0;;;;;;;:::i;:::-;22350:6;22360:1;22350:11;22346:93;;22378:28;22394:4;22400:2;22404:1;22378:15;:28::i;:::-;22066:6352;;;:::o;22346:93::-;22448:14;;;;;;;22444:4127;;;800:6;;-1:-1:-1;;;;;22501:15:0;;;800:6;;22501:15;;;;:49;;-1:-1:-1;800:6:0;;-1:-1:-1;;;;;22537:13:0;;;800:6;;22537:13;;22501:49;:86;;;;-1:-1:-1;;;;;;22571:16:0;;;;22501:86;:128;;;;-1:-1:-1;;;;;;22608:21:0;;22622:6;22608:21;;22501:128;:158;;;;-1:-1:-1;22651:8:0;;-1:-1:-1;;;22651:8:0;;;;22650:9;22501:158;22479:4081;;;22731:10;;22715:12;:27;:62;;;;-1:-1:-1;22762:10:0;;:15;;22775:2;22762:15;:::i;:::-;22746:12;:31;;22715:62;22694:2413;;;22831:1;22813:15;:19;;;22861:2;22851:9;:12;;;22882:15;:18;;;22934:25;;22831:1;22934:25;:::i;:::-;:41;;;;:::i;:::-;22919:12;:56;23015:2;22996:16;:21;;;-1:-1:-1;23036:10:0;:13;;;23068:16;:19;;;-1:-1:-1;23122:27:0;;-1:-1:-1;;23122:27:0;:::i;:::-;:44;;;;:::i;:::-;23106:13;:60;22694:2413;;;23211:10;;:15;;23224:2;23211:15;:::i;:::-;23195:12;:32;:67;;;;-1:-1:-1;23247:10:0;;:15;;23260:2;23247:15;:::i;:::-;23231:12;:31;;23195:67;23192:1915;;;23316:1;23298:15;:19;;;23347:2;23336:9;:13;;;23368:15;:18;;;23420:25;;23316:1;23420:25;:::i;:::-;:41;;;;:::i;:::-;23405:12;:56;23501:2;23482:16;:21;;;-1:-1:-1;23522:13:0;;;23554:16;:19;;;-1:-1:-1;23608:27:0;;-1:-1:-1;;23608:27:0;:::i;23192:1915::-;23710:10;;:15;;23723:2;23710:15;:::i;:::-;23694:12;:32;:67;;;;-1:-1:-1;23746:10:0;;:15;;23759:2;23746:15;:::i;:::-;23730:12;:31;;23694:67;23691:1416;;;23816:1;23798:15;:19;;;23847:2;23836:9;:13;;;23868:15;:17;;;23919:25;;23816:1;23919:25;:::i;:::-;:41;;;;:::i;:::-;23904:12;:56;24000:2;23981:16;:21;;;-1:-1:-1;24021:10:0;:13;;;24053:16;:19;;;-1:-1:-1;24107:27:0;;-1:-1:-1;;24107:27:0;:::i;23691:1416::-;24211:10;;:15;;24224:2;24211:15;:::i;:::-;24195:12;:32;:67;;;;-1:-1:-1;24247:10:0;;:15;;24260:2;24247:15;:::i;:::-;24231:12;:31;;24195:67;24192:915;;;24315:1;24297:15;:19;;;24346:1;24335:9;:12;;;24366:15;:18;;;24418:25;;24315:1;24418:25;:::i;:::-;:41;;;;:::i;:::-;24403:12;:56;24499:1;24480:16;:20;;;-1:-1:-1;24519:10:0;:13;;;24551:16;:19;;;-1:-1:-1;24605:27:0;;-1:-1:-1;;24605:27:0;:::i;24192:915::-;24755:1;24737:15;:19;;;24786:1;24775:9;:12;;;24806:15;:18;;;24858:25;;24755:1;24858:25;:::i;:::-;:41;;;;:::i;:::-;24843:12;:56;24939:1;24920:16;:20;;;-1:-1:-1;24959:10:0;:13;;;24991:16;:19;;;-1:-1:-1;25045:27:0;;-1:-1:-1;;25045:27:0;:::i;:::-;:44;;;;:::i;:::-;25029:13;:60;24192:915;25132:13;;;;25127:223;;-1:-1:-1;;;;;25204:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25233:23:0;;;;;;:19;:23;;;;;;;;25204:52;25170:160;;;;-1:-1:-1;;;25170:160:0;;10476:2:1;25170:160:0;;;10458:21:1;10515:2;10495:18;;;10488:30;-1:-1:-1;;;10534:18:1;;;10527:52;10596:18;;25170:160:0;10274:346:1;25170:160:0;-1:-1:-1;;;;;25424:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;25481:35:0;;;;;;:31;:35;;;;;;;;25480:36;25424:92;25398:1147;;;25603:20;;25593:6;:30;;25559:169;;;;-1:-1:-1;;;25559:169:0;;10827:2:1;25559:169:0;;;10809:21:1;10866:2;10846:18;;;10839:30;10905:34;10885:18;;;10878:62;-1:-1:-1;;;10956:18:1;;;10949:51;11017:19;;25559:169:0;10625:417:1;25559:169:0;25811:9;;-1:-1:-1;;;;;3372:18:0;;3345:7;3372:18;;;;;;;;;;;25785:22;;:6;:22;:::i;:::-;:35;;25751:140;;;;-1:-1:-1;;;25751:140:0;;11249:2:1;25751:140:0;;;11231:21:1;11288:2;11268:18;;;11261:30;-1:-1:-1;;;11307:18:1;;;11300:49;11366:18;;25751:140:0;11047:343:1;25751:140:0;25398:1147;;;-1:-1:-1;;;;;25989:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;26044:37:0;;;;;;:31;:37;;;;;;;;26043:38;25989:92;25963:582;;;26168:20;;26158:6;:30;;26124:170;;;;-1:-1:-1;;;26124:170:0;;11597:2:1;26124:170:0;;;11579:21:1;11636:2;11616:18;;;11609:30;11675:34;11655:18;;;11648:62;-1:-1:-1;;;11726:18:1;;;11719:52;11788:19;;26124:170:0;11395:418:1;25963:582:0;-1:-1:-1;;;;;26325:35:0;;;;;;:31;:35;;;;;;;;26320:225;;26445:9;;-1:-1:-1;;;;;3372:18:0;;3345:7;3372:18;;;;;;;;;;;26419:22;;:6;:22;:::i;:::-;:35;;26385:140;;;;-1:-1:-1;;;26385:140:0;;11249:2:1;26385:140:0;;;11231:21:1;11288:2;11268:18;;;11261:30;-1:-1:-1;;;11307:18:1;;;11300:49;11366:18;;26385:140:0;11047:343:1;26385:140:0;26634:4;26585:28;3372:18;;;;;;;;;;;26692;;26668:42;;;;;;;26741:35;;-1:-1:-1;26765:11:0;;;;;;;26741:35;:61;;;;-1:-1:-1;26794:8:0;;-1:-1:-1;;;26794:8:0;;;;26793:9;26741:61;:110;;;;-1:-1:-1;;;;;;26820:31:0;;;;;;:25;:31;;;;;;;;26819:32;26741:110;:153;;;;-1:-1:-1;;;;;;26869:25:0;;;;;;:19;:25;;;;;;;;26868:26;26741:153;:194;;;;-1:-1:-1;;;;;;26912:23:0;;;;;;:19;:23;;;;;;;;26911:24;26741:194;26723:326;;;26962:8;:15;;-1:-1:-1;;;;26962:15:0;-1:-1:-1;;;26962:15:0;;;26994:10;:8;:10::i;:::-;27021:8;:16;;-1:-1:-1;;;;27021:16:0;;;26723:326;27077:8;;-1:-1:-1;;;;;27187:25:0;;27061:12;27187:25;;;:19;:25;;;;;;27077:8;-1:-1:-1;;;27077:8:0;;;;;27076:9;;27187:25;;:52;;-1:-1:-1;;;;;;27216:23:0;;;;;;:19;:23;;;;;;;;27187:52;27183:100;;;-1:-1:-1;27266:5:0;27183:100;27295:12;27400:7;27396:969;;;-1:-1:-1;;;;;27452:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27501:1;27485:13;;:17;27452:50;27448:768;;;27530:34;27560:3;27530:25;27541:13;;27530:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27523:41;;27633:13;;27613:16;;27606:4;:23;;;;:::i;:::-;27605:41;;;;:::i;:::-;27583:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27703:13:0;;27689:10;;27682:17;;:4;:17;:::i;:::-;27681:35;;;;:::i;:::-;27665:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;27785:13:0;;27765:16;;27758:23;;:4;:23;:::i;:::-;27757:41;;;;:::i;:::-;27735:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;27448:768:0;;-1:-1:-1;27448:768:0;;-1:-1:-1;;;;;27860:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27910:1;27895:12;;:16;27860:51;27856:360;;;27939:33;27968:3;27939:24;27950:12;;27939:6;:10;;:24;;;;:::i;:33::-;27932:40;;28040:12;;28021:15;;28014:4;:22;;;;:::i;:::-;28013:39;;;;:::i;:::-;27991:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28108:12:0;;28095:9;;28088:16;;:4;:16;:::i;:::-;28087:33;;;;:::i;:::-;28071:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;28188:12:0;;28169:15;;28162:22;;:4;:22;:::i;:::-;28161:39;;;;:::i;:::-;28139:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27856:360:0;28236:8;;28232:91;;28265:42;28281:4;28295;28302;28265:15;:42::i;:::-;28339:14;28349:4;28339:14;;:::i;:::-;;;27396:969;28377:33;28393:4;28399:2;28403:6;28377:15;:33::i;:::-;22179:6239;;;;22066:6352;;;:::o;1270:191::-;1363:6;;;-1:-1:-1;;;;;1380:17:0;;;-1:-1:-1;;;;;;1380:17:0;;;;;;;1413:40;;1363:6;;;1380:17;1363:6;;1413:40;;1344:16;;1413:40;1333:128;1270:191;:::o;21224:188::-;-1:-1:-1;;;;;21307:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21307:39:0;;;;;;;;;;21364:40;;21307:39;;:31;21364:40;;;21224:188;;:::o;5077:733::-;-1:-1:-1;;;;;5217:20:0;;5209:70;;;;-1:-1:-1;;;5209:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5298:23:0;;5290:71;;;;-1:-1:-1;;;5290:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5458:17:0;;5434:21;5458:17;;;;;;;;;;;5494:23;;;;5486:74;;;;-1:-1:-1;;;5486:74:0;;12375:2:1;5486:74:0;;;12357:21:1;12414:2;12394:18;;;12387:30;12453:34;12433:18;;;12426:62;-1:-1:-1;;;12504:18:1;;;12497:36;12550:19;;5486:74:0;12173:402:1;5486:74:0;-1:-1:-1;;;;;5596:17:0;;;:9;:17;;;;;;;;;;;5616:22;;;5596:42;;5660:20;;;;;;;;:30;;5632:6;;5596:9;5660:30;;5632:6;;5660:30;:::i;:::-;;;;;;;;5725:9;-1:-1:-1;;;;;5708:35:0;5717:6;-1:-1:-1;;;;;5708:35:0;;5736:6;5708:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;5708:35:0;;;;;;;;5756:46;22066:6352;29544:1772;29627:4;29583:23;3372:18;;;;;;;;;;;29583:50;;29644:25;29740:12;;29706:18;;29672;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;29644:108;-1:-1:-1;29763:12:0;29792:20;;;:46;;-1:-1:-1;29816:22:0;;29792:46;29788:85;;;29855:7;;;29544:1772::o;29788:85::-;29907:18;;:23;;29928:2;29907:23;:::i;:::-;29889:15;:41;29885:115;;;29965:18;;:23;;29986:2;29965:23;:::i;:::-;29947:41;;29885:115;30061:23;30174:1;30141:17;30106:18;;30088:15;:36;;;;:::i;:::-;30087:71;;;;:::i;:::-;:88;;;;:::i;:::-;30061:114;-1:-1:-1;30186:26:0;30215:36;:15;30061:114;30215:19;:36::i;:::-;30186:65;-1:-1:-1;30292:21:0;30326:36;30186:65;30326:16;:36::i;:::-;30375:18;30396:44;:21;30422:17;30396:25;:44::i;:::-;30375:65;;30453:23;30479:84;30560:1;30539:18;;:22;;;;:::i;:::-;30518:44;;:17;:44;:::i;:::-;30494:18;;30479:34;;:10;;:14;:34::i;:84::-;30453:110;;30584:17;30604:78;30679:1;30658:18;;:22;;;;:::i;:::-;30637:44;;:17;:44;:::i;:::-;30619:12;;30604:28;;:10;;:14;:28::i;:78::-;30584:98;-1:-1:-1;30695:23:0;30584:98;30721:28;30734:15;30721:10;:28;:::i;:::-;:40;;;;:::i;:::-;30795:1;30774:18;:22;;;30807:18;:22;;;30840:12;:16;;;30891:9;;30883:45;;30695:66;;-1:-1:-1;;;;;;30891:9:0;;30914;;30883:45;30795:1;30883:45;30914:9;30891;30883:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30869:59:0;;-1:-1:-1;;30945:19:0;;;;;:42;;;30986:1;30968:15;:19;30945:42;30941:278;;;31004:46;31017:15;31034;31004:12;:46::i;:::-;31174:18;;31070:137;;;12992:25:1;;;13048:2;13033:18;;13026:34;;;13076:18;;;13069:34;;;;31070:137:0;;;;;;12980:2:1;31070:137:0;;;30941:278;31253:15;;31245:63;;-1:-1:-1;;;;;31253:15:0;;;;31282:21;;31245:63;;;;31282:21;31253:15;31245:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;29544:1772:0:o;8852:98::-;8910:7;8937:5;8941:1;8937;:5;:::i;:::-;8930:12;8852:98;-1:-1:-1;;;8852:98:0:o;8960:::-;9018:7;9045:5;9049:1;9045;:5;:::i;8744:98::-;8802:7;8829:5;8833:1;8829;:5;:::i;28426:589::-;28576:16;;;28590:1;28576:16;;;;;;;;28552:21;;28576:16;;;;;;;;;;-1:-1:-1;28576:16:0;28552:40;;28621:4;28603;28608:1;28603:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28603:23:0;;;-1:-1:-1;;;;;28603:23:0;;;;;28647:15;-1:-1:-1;;;;;28647:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28637:4;28642:1;28637:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28637:32:0;;;-1:-1:-1;;;;;28637:32:0;;;;;28682:62;28699:4;28714:15;28732:11;28682:8;:62::i;:::-;28783:224;;-1:-1:-1;;;28783:224:0;;-1:-1:-1;;;;;28783:15:0;:66;;;;:224;;28864:11;;28890:1;;28934:4;;28961;;28981:15;;28783:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28481:534;28426:589;:::o;29023:513::-;29171:62;29188:4;29203:15;29221:11;29171:8;:62::i;:::-;29276:15;-1:-1:-1;;;;;29276:31:0;;29315:9;29348:4;29368:11;29394:1;29437;29480:7;800:6;;-1:-1:-1;;;;;800:6:0;;727:87;29480:7;29276:252;;;;;;-1:-1:-1;;;;;;29276:252:0;;;-1:-1:-1;;;;;14978:15:1;;;29276:252:0;;;14960:34:1;15010:18;;;15003:34;;;;15053:18;;;15046:34;;;;15096:18;;;15089:34;15160:15;;;15139:19;;;15132:44;29502:15:0;15192:19:1;;;15185:35;14894:19;;29276:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29023:513;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2927:388::-;2995:6;3003;3056:2;3044:9;3035:7;3031:23;3027:32;3024:52;;;3072:1;3069;3062:12;3024:52;3111:9;3098:23;3130:31;3155:5;3130:31;:::i;:::-;3180:5;-1:-1:-1;3237:2:1;3222:18;;3209:32;3250:33;3209:32;3250:33;:::i;:::-;3302:7;3292:17;;;2927:388;;;;;:::o;3320:118::-;3406:5;3399:13;3392:21;3385:5;3382:32;3372:60;;3428:1;3425;3418:12;3443:382;3508:6;3516;3569:2;3557:9;3548:7;3544:23;3540:32;3537:52;;;3585:1;3582;3575:12;3537:52;3624:9;3611:23;3643:31;3668:5;3643:31;:::i;:::-;3693:5;-1:-1:-1;3750:2:1;3735:18;;3722:32;3763:30;3722:32;3763:30;:::i;3830:316::-;3907:6;3915;3923;3976:2;3964:9;3955:7;3951:23;3947:32;3944:52;;;3992:1;3989;3982:12;3944:52;-1:-1:-1;;4015:23:1;;;4085:2;4070:18;;4057:32;;-1:-1:-1;4136:2:1;4121:18;;;4108:32;;3830:316;-1:-1:-1;3830:316:1:o;4151:241::-;4207:6;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4315:9;4302:23;4334:28;4356:5;4334:28;:::i;4397:380::-;4476:1;4472:12;;;;4519;;;4540:61;;4594:4;4586:6;4582:17;4572:27;;4540:61;4647:2;4639:6;4636:14;4616:18;4613:38;4610:161;;4693:10;4688:3;4684:20;4681:1;4674:31;4728:4;4725:1;4718:15;4756:4;4753:1;4746:15;4610:161;;4397:380;;;:::o;4782:356::-;4984:2;4966:21;;;5003:18;;;4996:30;5062:34;5057:2;5042:18;;5035:62;5129:2;5114:18;;4782:356::o;5143:127::-;5204:10;5199:3;5195:20;5192:1;5185:31;5235:4;5232:1;5225:15;5259:4;5256:1;5249:15;5275:168;5348:9;;;5379;;5396:15;;;5390:22;;5376:37;5366:71;;5417:18;;:::i;5857:125::-;5922:9;;;5943:10;;;5940:36;;;5956:18;;:::i;6699:184::-;6769:6;6822:2;6810:9;6801:7;6797:23;6793:32;6790:52;;;6838:1;6835;6828:12;6790:52;-1:-1:-1;6861:16:1;;6699:184;-1:-1:-1;6699:184:1:o;7167:245::-;7234:6;7287:2;7275:9;7266:7;7262:23;7258:32;7255:52;;;7303:1;7300;7293:12;7255:52;7335:9;7329:16;7354:28;7376:5;7354:28;:::i;9464:401::-;9666:2;9648:21;;;9705:2;9685:18;;;9678:30;9744:34;9739:2;9724:18;;9717:62;-1:-1:-1;;;9810:2:1;9795:18;;9788:35;9855:3;9840:19;;9464:401::o;9870:399::-;10072:2;10054:21;;;10111:2;10091:18;;;10084:30;10150:34;10145:2;10130:18;;10123:62;-1:-1:-1;;;10216:2:1;10201:18;;10194:33;10259:3;10244:19;;9870:399::o;11818:217::-;11858:1;11884;11874:132;;11928:10;11923:3;11919:20;11916:1;11909:31;11963:4;11960:1;11953:15;11991:4;11988:1;11981:15;11874:132;-1:-1:-1;12020:9:1;;11818:217::o;12040:128::-;12107:9;;;12128:11;;;12125:37;;;12142:18;;:::i;13246:127::-;13307:10;13302:3;13298:20;13295:1;13288:31;13338:4;13335:1;13328:15;13362:4;13359:1;13352:15;13378:251;13448:6;13501:2;13489:9;13480:7;13476:23;13472:32;13469:52;;;13517:1;13514;13507:12;13469:52;13549:9;13543:16;13568:31;13593:5;13568:31;:::i;13634:980::-;13896:4;13944:3;13933:9;13929:19;13975:6;13964:9;13957:25;14001:2;14039:6;14034:2;14023:9;14019:18;14012:34;14082:3;14077:2;14066:9;14062:18;14055:31;14106:6;14141;14135:13;14172:6;14164;14157:22;14210:3;14199:9;14195:19;14188:26;;14249:2;14241:6;14237:15;14223:29;;14270:1;14280:195;14294:6;14291:1;14288:13;14280:195;;;14359:13;;-1:-1:-1;;;;;14355:39:1;14343:52;;14450:15;;;;14415:12;;;;14391:1;14309:9;14280:195;;;-1:-1:-1;;;;;;;14531:32:1;;;;14526:2;14511:18;;14504:60;-1:-1:-1;;;14595:3:1;14580:19;14573:35;14492:3;13634:980;-1:-1:-1;;;13634:980:1:o;15231:306::-;15319:6;15327;15335;15388:2;15376:9;15367:7;15363:23;15359:32;15356:52;;;15404:1;15401;15394:12;15356:52;15433:9;15427:16;15417:26;;15483:2;15472:9;15468:18;15462:25;15452:35;;15527:2;15516:9;15512:18;15506:25;15496:35;;15231:306;;;;;:::o

Swarm Source

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