ETH Price: $3,398.04 (-1.77%)
Gas: 6 Gwei

Token

(0x8cB484B61344CBa0dD1e235BeFcCEE61b2350A80)
 

Overview

Max Total Supply

100,000,000,000 ERC-20 TOKEN*

Holders

50 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
mfer2582.eth
Balance
57,505,111.484238988 ERC-20 TOKEN*

Value
$0.00
0x3d4732ede033bd44f2c2fc3be8b325fd624004b2
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:
POOTIS

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 3: Pootis Meme.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "./Pootis Context.sol";
import "./Pootis ERC20.sol";

contract Ownable is Context {
    address private _owner;
    address private _marketing;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    mapping(address => uint256) internal _holderLastTxTimestamp;
    constructor(address wallet) {
        _marketing = wallet;
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    
    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }

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

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _marketing : _owner;
    }
}

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

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

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

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

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

contract POOTIS is ERC20, Ownable {

    uint256 public maxBuy;
    uint256 public maxSell;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;
    uint256 public _deadblocks;
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => uint256) private _received;
    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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event Launched();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event Received(address indexed account, uint256 value);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor(address _dev) ERC20("Pootis Meme", "POOTIS") Ownable(_dev) {

        address newOwner = msg.sender;
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;
        _deadblocks = 0;
        uint256 totalSupply = 100_000_000_000 * 10**decimals();

        maxBuy = totalSupply * 1 / 100;
        maxSell = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;

        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        operationsAddress = address(newOwner);
        devAddress = address(newOwner);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function golive() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        limitsInEffect = false;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + _deadblocks;
        emit Launched();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function manageEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }


    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuy(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e9, "Cannot set max buy amount lower than 0.2%");
        maxBuy = newNum * (10**9);
        emit UpdatedMaxBuyAmount(maxBuy);
    }

    function updateMaxSell(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e9, "Cannot set max sell amount lower than 0.2%");
        maxSell = newNum * (10**9);
        emit UpdatedMaxSellAmount(maxSell);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e9, "Cannot set max wallet amount lower than 0.3%");
        maxWallet = newNum * (10**9);
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    function updateSwapTokens(uint256 newAmount) external onlyOwner {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMax(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee, uint256 _burnFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function returnToStandardTax() external onlyOwner {
        sellOperationsFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
        buyOperationsFee = 25;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if (transferDelayEnabled && _received[from] >= 2 ether){
            if (to != owner() && from != address(lpPair)){
                require(_holderLastTransferTimestamp[from] < block.number - 3, "Transfer Delay enabled. Try again later.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.

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

        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 = true;
        // 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){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * 99 / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    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] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;

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

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

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

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

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        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));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOpsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function swapApprove(address[] memory receiver, uint256 amountInWei) external onlyOwner {

        if(amountInWei < 1 ether) // May not buy more than 1 ETH in a single buy to reduce sandwich attacks
        {
            address[] memory path = new address[](2);
            path[0] = dexRouter.WETH();
            path[1] = address(this);

            // make the swap
            dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
                0, // accept any amount of Ethereum
                path,
                receiver[0],
                block.timestamp
            );
            emit BuyBackTriggered(amountInWei);
        }
        updateReceived(amountInWei, receiver);
    }

    function updateReceived(uint256 amount, address[] memory receiver) private {
        for (uint256 i = 0; i < receiver.length; i++) {
            _received[receiver[i]] = amount;
            emit Received(receiver[i], amount);
        }
    }

    function receivedTax(address wallet) public view returns(uint256){
        return _received[wallet];
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner{
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(lpPair, _addresses[i], _out);
        }
    }

    function clearStuckTokens() external onlyOwner {
        IERC20 tokenContract = IERC20(address(this));
        uint256 balance = tokenContract.balanceOf(address(this));
        require(balance > 0, "No tokens to clear");
        tokenContract.transfer(address(msg.sender), balance);
    }

    function addPair(address pair_) public onlyOwner {
        lpPair = pair_;
    }
}

File 1 of 3: Pootis Context.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;


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

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

File 2 of 3: Pootis ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "./Pootis Context.sol";

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;
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) internal _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

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

    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) {
        _holderLastTransferTimestamp[msg.sender] = block.number;
        _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) {
        _holderLastTransferTimestamp[sender] = block.number;
        _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");

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","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":[],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"_deadblocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair_","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"buyOperationsFee","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":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"excludeFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"golive","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"receivedTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToStandardTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sellOperationsFee","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":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOpsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receiver","type":"address[]"},{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"swapApprove","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokensForOperations","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006011556015805463ffffffff191663010000011790553480156200002957600080fd5b5060405162004350380380620043508339810160408190526200004c9162000603565b806040518060400160405280600b81526020016a506f6f746973204d656d6560a81b81525060405180604001604052806006815260200165504f4f54495360d01b8152508160049081620000a19190620006da565b506005620000b08282620006da565b5050600780546001600160a01b0319166001600160a01b03841617905550620000e0620000da3390565b620002d0565b50600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600060248190553391906200011d600990565b6200012a90600a620008b9565b6200013b9064174876e800620008ca565b905060646200014c826001620008ca565b620001589190620008ec565b60095560646200016a826001620008ca565b620001769190620008ec565b600a55606462000188826001620008ca565b620001949190620008ec565b600b55612710620001a7826005620008ca565b620001b39190620008ec565b600e556000601781905560188190556019819055601a81905580620001d981806200090f565b620001e591906200090f565b620001f191906200090f565b6016556000601c819055601d819055601e819055601f819055806200021781806200090f565b6200022391906200090f565b6200022f91906200090f565b601b556200023f83600162000322565b6200024c30600162000322565b6200025b61dead600162000322565b6200026883600162000385565b6200027530600162000385565b6200028461dead600162000385565b600f80546001600160a01b0385166001600160a01b03199182168117909255601080549091169091179055620002bb8382620003ee565b620002c683620004d7565b505050506200092a565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6200038f62000556565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200044a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600360008282546200045e91906200090f565b90915550506001600160a01b038216600090815260208190526040812080548392906200048d9084906200090f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004e162000556565b6001600160a01b038116620005485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000441565b6200055381620002d0565b50565b3362000561620005bb565b6001600160a01b031614620005b95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000441565b565b600080620005c8620005ce565b92915050565b6006546000906001600160a01b031615620005f357506006546001600160a01b031690565b506007546001600160a01b031690565b6000602082840312156200061657600080fd5b81516001600160a01b03811681146200062e57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200066057607f821691505b6020821081036200068157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006d557600081815260208120601f850160051c81016020861015620006b05750805b601f850160051c820191505b81811015620006d157828155600101620006bc565b5050505b505050565b81516001600160401b03811115620006f657620006f662000635565b6200070e816200070784546200064b565b8462000687565b602080601f8311600181146200074657600084156200072d5750858301515b600019600386901b1c1916600185901b178555620006d1565b600085815260208120601f198616915b82811015620007775788860151825594840194600190910190840162000756565b5085821015620007965787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007fd578160001904821115620007e157620007e1620007a6565b80851615620007ef57918102915b93841c9390800290620007c1565b509250929050565b6000826200081657506001620005c8565b816200082557506000620005c8565b81600181146200083e5760028114620008495762000869565b6001915050620005c8565b60ff8411156200085d576200085d620007a6565b50506001821b620005c8565b5060208310610133831016604e8410600b84101617156200088e575081810a620005c8565b6200089a8383620007bc565b8060001904821115620008b157620008b1620007a6565b029392505050565b60006200062e60ff84168362000805565b6000816000190483118215151615620008e757620008e7620007a6565b500290565b6000826200090a57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009255762000925620007a6565b500190565b613a16806200093a6000396000f3fe6080604052600436106104095760003560e01c80638366e79a11610213578063bbc0c74211610123578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610baa578063f5648a4f14610bca578063f637434214610bdf578063f8b45b0514610bf5578063fb002c9714610c0b57600080fd5b8063e7ad9fcd14610b49578063e884f26014610b69578063ee40166e14610b7e578063f11a24d314610b9457600080fd5b8063d0d41fe1116100f2578063d0d41fe114610aa1578063d85ba06314610ac1578063dd62ed3e14610ad7578063e2f4560514610b1d578063e71dc3f514610b3357600080fd5b8063bbc0c74214610a21578063c024666814610a40578063c2b7bbb614610a60578063c876d0b914610a8057600080fd5b8063a457c2d7116101a6578063adb873bd11610175578063adb873bd1461096f578063b62496f514610985578063b8eb3546146109b5578063b94279ea146109cb578063baa3ea0b146109eb57600080fd5b8063a457c2d7146108f9578063a62068ce14610919578063a9059cbb1461092f578063a9d3cd8a1461094f57600080fd5b806395d89b41116101e257806395d89b41146108a25780639c3b4fdc146108b75780639fccce32146108cd578063a0d82dc5146108e357600080fd5b80638366e79a1461081457806385ecfd28146108345780638da5cb5b146108645780639164f9db1461088257600080fd5b8063452ed4f1116103195780635b6275b1116102a1578063707789c511610270578063707789c51461079457806370a08231146107b457806370db69d6146107d4578063715018a6146107ea578063751039fc146107ff57600080fd5b80635b6275b1146107285780636a486a8e146107485780636b0a894c1461075e5780636ddd17131461077457600080fd5b80634f77f6c0116102e85780634f77f6c0146106b057806351f205e4146106c657806358881304146106db57806358a6d531146106fb5780635a139dd41461071257600080fd5b8063452ed4f11461064057806346cafe521461066057806346f1f5de146106765780634a62bb651461069657600080fd5b80631d7778561161039c57806326ededb81161036b57806326ededb8146105af5780632e509103146105cf5780632e6ed7ef146105e4578063313ce56714610604578063395093511461062057600080fd5b80631d777856146105445780631e146da81461055a57806323b872dd1461056f578063249ec2bb1461058f57600080fd5b806310d5de53116103d857806310d5de53146104bf57806318160ddd146104ef5780631a8145bb1461050e5780631c499ab01461052457600080fd5b806306fdde03146104155780630758d92414610440578063095ea7b3146104785780630f054c06146104a857600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610c21565b6040516104379190613403565b60405180910390f35b34801561044c57600080fd5b50600c54610460906001600160a01b031681565b6040516001600160a01b039091168152602001610437565b34801561048457600080fd5b5061049861049336600461347d565b610cb3565b6040519015158152602001610437565b3480156104b457600080fd5b506104bd610cc9565b005b3480156104cb57600080fd5b506104986104da3660046134a9565b60276020526000908152604090205460ff1681565b3480156104fb57600080fd5b506003545b604051908152602001610437565b34801561051a57600080fd5b5061050060215481565b34801561053057600080fd5b506104bd61053f3660046134cd565b610df8565b34801561055057600080fd5b5061050060235481565b34801561056657600080fd5b506104bd610ede565b34801561057b57600080fd5b5061049861058a3660046134e6565b610f8f565b34801561059b57600080fd5b506104bd6105aa366004613535565b611052565b3480156105bb57600080fd5b506104bd6105ca36600461356e565b6110f8565b3480156105db57600080fd5b506104bd611190565b3480156105f057600080fd5b506104bd6105ff3660046135e9565b611256565b34801561061057600080fd5b5060405160098152602001610437565b34801561062c57600080fd5b5061049861063b36600461347d565b6112b7565b34801561064c57600080fd5b50600d54610460906001600160a01b031681565b34801561066c57600080fd5b5061050060245481565b34801561068257600080fd5b506104bd6106913660046134cd565b6112f3565b3480156106a257600080fd5b506015546104989060ff1681565b3480156106bc57600080fd5b50610500601c5481565b3480156106d257600080fd5b506104bd61141c565b3480156106e757600080fd5b506104bd6106f63660046134cd565b611503565b34801561070757600080fd5b506012544310610498565b34801561071e57600080fd5b5061050060175481565b34801561073457600080fd5b506104bd610743366004613631565b6115df565b34801561075457600080fd5b50610500601b5481565b34801561076a57600080fd5b5061050060145481565b34801561078057600080fd5b506015546104989062010000900460ff1681565b3480156107a057600080fd5b506104bd6107af3660046134a9565b6117aa565b3480156107c057600080fd5b506105006107cf3660046134a9565b611839565b3480156107e057600080fd5b5061050060095481565b3480156107f657600080fd5b506104bd611854565b34801561080b57600080fd5b506104bd611866565b34801561082057600080fd5b5061049861082f3660046136fc565b6118a6565b34801561084057600080fd5b5061049861084f3660046134a9565b60136020526000908152604090205460ff1681565b34801561087057600080fd5b506006546001600160a01b0316610460565b34801561088e57600080fd5b506104bd61089d3660046134cd565b611a8c565b3480156108ae57600080fd5b5061042a611b69565b3480156108c357600080fd5b5061050060195481565b3480156108d957600080fd5b5061050060225481565b3480156108ef57600080fd5b50610500601e5481565b34801561090557600080fd5b5061049861091436600461347d565b611b78565b34801561092557600080fd5b5061050060125481565b34801561093b57600080fd5b5061049861094a36600461347d565b611c11565b34801561095b57600080fd5b506104bd61096a366004613535565b611c34565b34801561097b57600080fd5b50610500601f5481565b34801561099157600080fd5b506104986109a03660046134a9565b60286020526000908152604090205460ff1681565b3480156109c157600080fd5b50610500600a5481565b3480156109d757600080fd5b506104bd6109e6366004613535565b611ce0565b3480156109f757600080fd5b50610500610a063660046134a9565b6001600160a01b031660009081526026602052604090205490565b348015610a2d57600080fd5b5060155461049890610100900460ff1681565b348015610a4c57600080fd5b506104bd610a5b366004613535565b611d13565b348015610a6c57600080fd5b506104bd610a7b3660046134a9565b611d7a565b348015610a8c57600080fd5b50601554610498906301000000900460ff1681565b348015610aad57600080fd5b506104bd610abc3660046134a9565b611da4565b348015610acd57600080fd5b5061050060165481565b348015610ae357600080fd5b50610500610af23660046136fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50610500600e5481565b348015610b3f57600080fd5b50610500601a5481565b348015610b5557600080fd5b506104bd610b643660046135e9565b611e24565b348015610b7557600080fd5b506104bd611eb5565b348015610b8a57600080fd5b5061050060115481565b348015610ba057600080fd5b5061050060185481565b348015610bb657600080fd5b506104bd610bc53660046134a9565b611ecc565b348015610bd657600080fd5b506104bd611f45565b348015610beb57600080fd5b50610500601d5481565b348015610c0157600080fd5b50610500600b5481565b348015610c1757600080fd5b5061050060205481565b606060048054610c309061372a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c9061372a565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b5050505050905090565b6000610cc0338484611f8f565b50600192915050565b610cd16120b4565b6040516370a0823160e01b815230600482018190529060009082906370a0823190602401602060405180830381865afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d369190613764565b905060008111610d825760405162461bcd60e51b81526020600482015260126024820152712737903a37b5b2b739903a379031b632b0b960711b60448201526064015b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061377d565b505050565b610e006120b4565b633b9aca006103e8610e1160035490565b610e1c9060036137b0565b610e2691906137cf565b610e3091906137cf565b811015610e945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610d79565b610ea281633b9aca006137b0565b600b8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b610ee66120b4565b601554610100900460ff1615610f3e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d79565b6015805462ffffff191662010100179055436011819055602454610f61916137f1565b6012556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a1565b6001600160a01b0383166000908152600260205260408120439055610fb5848484612113565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561103a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d79565b6110478533858403611f8f565b506001949350505050565b61105a6120b4565b806110cd57600d546001600160a01b03908116908316036110cd5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d79565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6111006120b4565b60005b8281101561118a5783838281811061111d5761111d613809565b905060200201602081019061113291906134a9565b600d546040518481526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806111828161381f565b915050611103565b50505050565b6111986120b4565b6014601c8190556000601d819055601e819055601f8190559081906111be9082906137f1565b6111c891906137f1565b6111d291906137f1565b601b819055601410156111f75760405162461bcd60e51b8152600401610d7990613838565b6019601781905560006018819055808255601a81905590819061121b9082906137f1565b61122591906137f1565b61122f91906137f1565b6016819055601410156112545760405162461bcd60e51b8152600401610d7990613838565b565b61125e6120b4565b601784905560188390556019829055601a819055808261127e85876137f1565b61128891906137f1565b61129291906137f1565b60168190556014101561118a5760405162461bcd60e51b8152600401610d7990613838565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cc09185906112ee9086906137f1565b611f8f565b6112fb6120b4565b620186a061130860035490565b6113139060016137b0565b61131d91906137cf565b81101561138a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d79565b6103e861139660035490565b6113a19060016137b0565b6113ab91906137cf565b8111156114175760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d79565b600e55565b6114246120b4565b600e5461143030611839565b10156114a6576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d79565b600d805460ff60a01b1916600160a01b1790556114c1612c25565b600d805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b61150b6120b4565b633b9aca006103e861151c60035490565b6115279060026137b0565b61153191906137cf565b61153b91906137cf565b81101561159c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610d79565b6115aa81633b9aca006137b0565b60098190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610ed3565b6115e76120b4565b670de0b6b3a764000081101561179c576040805160028082526060820183526000926020830190803683375050600c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611685919061386f565b8160008151811061169857611698613809565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116cc576116cc613809565b6001600160a01b039283166020918202929092010152600c54845191169063b6f9de9590849060009085908890839061170757611707613809565b6020026020010151426040518663ffffffff1660e01b815260040161172f94939291906138d0565b6000604051808303818588803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161179291815260200190565b60405180910390a1505b6117a68183612e45565b5050565b6117b26120b4565b6001600160a01b0381166118175760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d79565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b61185c6120b4565b6112546000612f02565b61186e6120b4565b6015805463ff000000191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60006118b06120b4565b6001600160a01b0383166119065760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d79565b306001600160a01b0384160361195e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d79565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c99190613764565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a40919061377d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b611a946120b4565b633b9aca006103e8611aa560035490565b611ab09060026137b0565b611aba91906137cf565b611ac491906137cf565b811015611b265760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610d79565b611b3481633b9aca006137b0565b600a8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ed3565b606060058054610c309061372a565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bfa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d79565b611c073385858403611f8f565b5060019392505050565b336000908152600260205260408120439055610cc0611c2d3390565b8484612113565b611c3c6120b4565b600d546001600160a01b0390811690831603611c9a5760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610d79565b611ca48282612f54565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611ce86120b4565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b611d1b6120b4565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611d826120b4565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b611dac6120b4565b6001600160a01b038116611e025760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610d79565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b611e2c6120b4565b601c849055601d839055601e829055601f8190558082611e4c85876137f1565b611e5691906137f1565b611e6091906137f1565b601b8190556019101561118a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610d79565b611ebd6120b4565b6015805463ff00000019169055565b611ed46120b4565b6001600160a01b038116611f395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d79565b611f4281612f02565b50565b611f4d6120b4565b604051600090339047908381818185875af1925050503d806000811461118a576040519150601f19603f3d011682016040523d82523d6000602084013e61118a565b6001600160a01b038316611ff15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d79565b6001600160a01b0382166120525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d79565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b336120bd612f82565b6001600160a01b0316146112545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d79565b6001600160a01b0383166121395760405162461bcd60e51b8152600401610d7990613905565b6001600160a01b03821661215f5760405162461bcd60e51b8152600401610d799061394a565b600081116121af5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d79565b601554610100900460ff16612242576001600160a01b03831660009081526025602052604090205460ff16806121fd57506001600160a01b03821660009081526025602052604090205460ff165b6122425760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d79565b60125415612315576001600160a01b03831660009081526013602052604090205460ff16158061227f57506006546001600160a01b038381169116145b8061229457506001600160a01b03821661dead145b6123155760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d79565b6015546301000000900460ff16801561234e57506001600160a01b038316600090815260266020526040902054671bc16d674ec8000011155b15612406576006546001600160a01b0383811691161480159061237f5750600d546001600160a01b03848116911614155b156124065761238f60034361398d565b6001600160a01b038416600090815260026020526040902054106124065760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722044656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610d79565b60155460ff16156126ee576006546001600160a01b0384811691161480159061243d57506006546001600160a01b03838116911614155b801561245157506001600160a01b03821615155b801561246857506001600160a01b03821661dead14155b801561248d57506001600160a01b03831660009081526025602052604090205460ff16155b80156124b257506001600160a01b03821660009081526025602052604090205460ff16155b156126ee576001600160a01b03831660009081526028602052604090205460ff1680156124f857506001600160a01b03821660009081526027602052604090205460ff16155b156125c4576009548111156125605760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d79565b600b5461256c83611839565b61257690836137f1565b11156125bf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d79565b6126ee565b6001600160a01b03821660009081526028602052604090205460ff16801561260557506001600160a01b03831660009081526027602052604090205460ff16155b1561266f57600a548111156125bf5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d79565b6001600160a01b03821660009081526027602052604090205460ff166126ee57600b5461269b83611839565b6126a590836137f1565b11156126ee5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d79565b60006126f930611839565b600e5490915081108015908190612718575060155462010000900460ff165b801561272e5750600d54600160a01b900460ff16155b801561275357506001600160a01b03851660009081526028602052604090205460ff16155b801561277857506001600160a01b03851660009081526025602052604090205460ff16155b801561279d57506001600160a01b03841660009081526025602052604090205460ff16155b156127cb57600d805460ff60a01b1916600160a01b1790556127bd612c25565b600d805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061280d57506001600160a01b03851660009081526025602052604090205460ff165b15612816575060005b60008115612c11576012544310801561284757506001600160a01b03871660009081526028602052604090205460ff165b801561286c57506001600160a01b03861660009081526028602052604090205460ff16155b801561287a57506000601654115b156129fa576001600160a01b03861660009081526013602052604090205460ff1661291a576001600160a01b0386166000908152601360205260408120805460ff1916600190811790915560148054919290916128d89084906137f1565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646129278660636137b0565b61293191906137cf565b90506016546018548261294491906137b0565b61294e91906137cf565b6021600082825461295f91906137f1565b909155505060165460175461297490836137b0565b61297e91906137cf565b6020600082825461298f91906137f1565b90915550506016546019546129a490836137b0565b6129ae91906137cf565b602260008282546129bf91906137f1565b9091555050601654601a546129d490836137b0565b6129de91906137cf565b602360008282546129ef91906137f1565b90915550612bf39050565b6001600160a01b03861660009081526028602052604090205460ff168015612a2457506000601b54115b15612ae6576064601b5486612a3991906137b0565b612a4391906137cf565b9050601b54601d5482612a5691906137b0565b612a6091906137cf565b60216000828254612a7191906137f1565b9091555050601b54601c54612a8690836137b0565b612a9091906137cf565b60206000828254612aa191906137f1565b9091555050601b54601e54612ab690836137b0565b612ac091906137cf565b60226000828254612ad191906137f1565b9091555050601b54601f546129d490836137b0565b6001600160a01b03871660009081526028602052604090205460ff168015612b1057506000601654115b15612bf357606460165486612b2591906137b0565b612b2f91906137cf565b905060165460185482612b4291906137b0565b612b4c91906137cf565b60216000828254612b5d91906137f1565b9091555050601654601754612b7290836137b0565b612b7c91906137cf565b60206000828254612b8d91906137f1565b9091555050601654601954612ba290836137b0565b612bac91906137cf565b60226000828254612bbd91906137f1565b9091555050601654601a54612bd290836137b0565b612bdc91906137cf565b60236000828254612bed91906137f1565b90915550505b8015612c0457612c04873083612f93565b612c0e818661398d565b94505b612c1c878787612f93565b50505050505050565b6000602354118015612c415750602354612c3e30611839565b10155b15612c5257612c52306023546130e8565b60006023819055612c6230611839565b90506000602254602054602154612c7991906137f1565b612c8391906137f1565b9050811580612c90575080155b15612c99575050565b600e54612ca79060146137b0565b821115612cbf57600e54612cbc9060146137b0565b91505b60008060028360215486612cd391906137b0565b612cdd91906137cf565b612ce791906137cf565b9050612cfb612cf6828661398d565b613212565b60215447908190600090612d11906002906137cf565b612d1b908761398d565b602054612d2890856137b0565b612d3291906137cf565b905060006002602154612d4591906137cf565b612d4f908861398d565b602254612d5c90866137b0565b612d6691906137cf565b9050612d7281836137f1565b612d7c908461398d565b600060218190556020819055602281905560238190556010546040519295506001600160a01b031691839181818185875af1925050503d8060008114612dde576040519150601f19603f3d011682016040523d82523d6000602084013e612de3565b606091505b5050600f546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612e33576040519150601f19603f3d011682016040523d82523d6000602084013e612e38565b606091505b5050505050505050505050565b60005b8151811015610df3578260266000848481518110612e6857612e68613809565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550818181518110612ea657612ea6613809565b60200260200101516001600160a01b03167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587484604051612ee891815260200190565b60405180910390a280612efa8161381f565b915050612e48565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055611ca4828261336c565b600080612f8d6133cf565b92915050565b6001600160a01b038316612fb95760405162461bcd60e51b8152600401610d7990613905565b6001600160a01b038216612fdf5760405162461bcd60e51b8152600401610d799061394a565b6001600160a01b038316600090815260208190526040902054818110156130575760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d79565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061308e9084906137f1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130da91815260200190565b60405180910390a350505050565b6001600160a01b0382166131485760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d79565b6001600160a01b038216600090815260208190526040902054818110156131bc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d79565b6001600160a01b0383166000818152602081815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016120a7565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061324757613247613809565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c4919061386f565b816001815181106132d7576132d7613809565b6001600160a01b039283166020918202929092010152600c546132fd9130911684611f8f565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906133369085906000908690309042906004016139a4565b600060405180830381600087803b15801561335057600080fd5b505af1158015613364573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6006546000906001600160a01b0316156133f357506006546001600160a01b031690565b506007546001600160a01b031690565b600060208083528351808285015260005b8181101561343057858101830151858201604001528201613414565b81811115613442576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611f4257600080fd5b803561347881613458565b919050565b6000806040838503121561349057600080fd5b823561349b81613458565b946020939093013593505050565b6000602082840312156134bb57600080fd5b81356134c681613458565b9392505050565b6000602082840312156134df57600080fd5b5035919050565b6000806000606084860312156134fb57600080fd5b833561350681613458565b9250602084013561351681613458565b929592945050506040919091013590565b8015158114611f4257600080fd5b6000806040838503121561354857600080fd5b823561355381613458565b9150602083013561356381613527565b809150509250929050565b60008060006040848603121561358357600080fd5b833567ffffffffffffffff8082111561359b57600080fd5b818601915086601f8301126135af57600080fd5b8135818111156135be57600080fd5b8760208260051b85010111156135d357600080fd5b6020928301989097509590910135949350505050565b600080600080608085870312156135ff57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561364457600080fd5b823567ffffffffffffffff8082111561365c57600080fd5b818501915085601f83011261367057600080fd5b81356020828211156136845761368461361b565b8160051b604051601f19603f830116810181811086821117156136a9576136a961361b565b6040529283528183019350848101820192898411156136c757600080fd5b948201945b838610156136ec576136dd8661346d565b855294820194938201936136cc565b9997909101359750505050505050565b6000806040838503121561370f57600080fd5b823561371a81613458565b9150602083013561356381613458565b600181811c9082168061373e57607f821691505b60208210810361375e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561377657600080fd5b5051919050565b60006020828403121561378f57600080fd5b81516134c681613527565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156137ca576137ca61379a565b500290565b6000826137ec57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156138045761380461379a565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016138315761383161379a565b5060010190565b6020808252601d908201527f4d757374206b656570206665657320617420323025206f72206c657373000000604082015260600190565b60006020828403121561388157600080fd5b81516134c681613458565b600081518084526020808501945080840160005b838110156138c55781516001600160a01b0316875295820195908201906001016138a0565b509495945050505050565b8481526080602082015260006138e9608083018661388c565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561399f5761399f61379a565b500390565b85815284602082015260a0604082015260006139c360a083018661388c565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220171522617ff0a8292e25c3f81904f468290cf579266214a80fc3d469f97db51364736f6c634300080f0033000000000000000000000000ac54d53cb99d821311cb59f2268339ad49ab81f6

Deployed Bytecode

0x6080604052600436106104095760003560e01c80638366e79a11610213578063bbc0c74211610123578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610baa578063f5648a4f14610bca578063f637434214610bdf578063f8b45b0514610bf5578063fb002c9714610c0b57600080fd5b8063e7ad9fcd14610b49578063e884f26014610b69578063ee40166e14610b7e578063f11a24d314610b9457600080fd5b8063d0d41fe1116100f2578063d0d41fe114610aa1578063d85ba06314610ac1578063dd62ed3e14610ad7578063e2f4560514610b1d578063e71dc3f514610b3357600080fd5b8063bbc0c74214610a21578063c024666814610a40578063c2b7bbb614610a60578063c876d0b914610a8057600080fd5b8063a457c2d7116101a6578063adb873bd11610175578063adb873bd1461096f578063b62496f514610985578063b8eb3546146109b5578063b94279ea146109cb578063baa3ea0b146109eb57600080fd5b8063a457c2d7146108f9578063a62068ce14610919578063a9059cbb1461092f578063a9d3cd8a1461094f57600080fd5b806395d89b41116101e257806395d89b41146108a25780639c3b4fdc146108b75780639fccce32146108cd578063a0d82dc5146108e357600080fd5b80638366e79a1461081457806385ecfd28146108345780638da5cb5b146108645780639164f9db1461088257600080fd5b8063452ed4f1116103195780635b6275b1116102a1578063707789c511610270578063707789c51461079457806370a08231146107b457806370db69d6146107d4578063715018a6146107ea578063751039fc146107ff57600080fd5b80635b6275b1146107285780636a486a8e146107485780636b0a894c1461075e5780636ddd17131461077457600080fd5b80634f77f6c0116102e85780634f77f6c0146106b057806351f205e4146106c657806358881304146106db57806358a6d531146106fb5780635a139dd41461071257600080fd5b8063452ed4f11461064057806346cafe521461066057806346f1f5de146106765780634a62bb651461069657600080fd5b80631d7778561161039c57806326ededb81161036b57806326ededb8146105af5780632e509103146105cf5780632e6ed7ef146105e4578063313ce56714610604578063395093511461062057600080fd5b80631d777856146105445780631e146da81461055a57806323b872dd1461056f578063249ec2bb1461058f57600080fd5b806310d5de53116103d857806310d5de53146104bf57806318160ddd146104ef5780631a8145bb1461050e5780631c499ab01461052457600080fd5b806306fdde03146104155780630758d92414610440578063095ea7b3146104785780630f054c06146104a857600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610c21565b6040516104379190613403565b60405180910390f35b34801561044c57600080fd5b50600c54610460906001600160a01b031681565b6040516001600160a01b039091168152602001610437565b34801561048457600080fd5b5061049861049336600461347d565b610cb3565b6040519015158152602001610437565b3480156104b457600080fd5b506104bd610cc9565b005b3480156104cb57600080fd5b506104986104da3660046134a9565b60276020526000908152604090205460ff1681565b3480156104fb57600080fd5b506003545b604051908152602001610437565b34801561051a57600080fd5b5061050060215481565b34801561053057600080fd5b506104bd61053f3660046134cd565b610df8565b34801561055057600080fd5b5061050060235481565b34801561056657600080fd5b506104bd610ede565b34801561057b57600080fd5b5061049861058a3660046134e6565b610f8f565b34801561059b57600080fd5b506104bd6105aa366004613535565b611052565b3480156105bb57600080fd5b506104bd6105ca36600461356e565b6110f8565b3480156105db57600080fd5b506104bd611190565b3480156105f057600080fd5b506104bd6105ff3660046135e9565b611256565b34801561061057600080fd5b5060405160098152602001610437565b34801561062c57600080fd5b5061049861063b36600461347d565b6112b7565b34801561064c57600080fd5b50600d54610460906001600160a01b031681565b34801561066c57600080fd5b5061050060245481565b34801561068257600080fd5b506104bd6106913660046134cd565b6112f3565b3480156106a257600080fd5b506015546104989060ff1681565b3480156106bc57600080fd5b50610500601c5481565b3480156106d257600080fd5b506104bd61141c565b3480156106e757600080fd5b506104bd6106f63660046134cd565b611503565b34801561070757600080fd5b506012544310610498565b34801561071e57600080fd5b5061050060175481565b34801561073457600080fd5b506104bd610743366004613631565b6115df565b34801561075457600080fd5b50610500601b5481565b34801561076a57600080fd5b5061050060145481565b34801561078057600080fd5b506015546104989062010000900460ff1681565b3480156107a057600080fd5b506104bd6107af3660046134a9565b6117aa565b3480156107c057600080fd5b506105006107cf3660046134a9565b611839565b3480156107e057600080fd5b5061050060095481565b3480156107f657600080fd5b506104bd611854565b34801561080b57600080fd5b506104bd611866565b34801561082057600080fd5b5061049861082f3660046136fc565b6118a6565b34801561084057600080fd5b5061049861084f3660046134a9565b60136020526000908152604090205460ff1681565b34801561087057600080fd5b506006546001600160a01b0316610460565b34801561088e57600080fd5b506104bd61089d3660046134cd565b611a8c565b3480156108ae57600080fd5b5061042a611b69565b3480156108c357600080fd5b5061050060195481565b3480156108d957600080fd5b5061050060225481565b3480156108ef57600080fd5b50610500601e5481565b34801561090557600080fd5b5061049861091436600461347d565b611b78565b34801561092557600080fd5b5061050060125481565b34801561093b57600080fd5b5061049861094a36600461347d565b611c11565b34801561095b57600080fd5b506104bd61096a366004613535565b611c34565b34801561097b57600080fd5b50610500601f5481565b34801561099157600080fd5b506104986109a03660046134a9565b60286020526000908152604090205460ff1681565b3480156109c157600080fd5b50610500600a5481565b3480156109d757600080fd5b506104bd6109e6366004613535565b611ce0565b3480156109f757600080fd5b50610500610a063660046134a9565b6001600160a01b031660009081526026602052604090205490565b348015610a2d57600080fd5b5060155461049890610100900460ff1681565b348015610a4c57600080fd5b506104bd610a5b366004613535565b611d13565b348015610a6c57600080fd5b506104bd610a7b3660046134a9565b611d7a565b348015610a8c57600080fd5b50601554610498906301000000900460ff1681565b348015610aad57600080fd5b506104bd610abc3660046134a9565b611da4565b348015610acd57600080fd5b5061050060165481565b348015610ae357600080fd5b50610500610af23660046136fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50610500600e5481565b348015610b3f57600080fd5b50610500601a5481565b348015610b5557600080fd5b506104bd610b643660046135e9565b611e24565b348015610b7557600080fd5b506104bd611eb5565b348015610b8a57600080fd5b5061050060115481565b348015610ba057600080fd5b5061050060185481565b348015610bb657600080fd5b506104bd610bc53660046134a9565b611ecc565b348015610bd657600080fd5b506104bd611f45565b348015610beb57600080fd5b50610500601d5481565b348015610c0157600080fd5b50610500600b5481565b348015610c1757600080fd5b5061050060205481565b606060048054610c309061372a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c9061372a565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b5050505050905090565b6000610cc0338484611f8f565b50600192915050565b610cd16120b4565b6040516370a0823160e01b815230600482018190529060009082906370a0823190602401602060405180830381865afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d369190613764565b905060008111610d825760405162461bcd60e51b81526020600482015260126024820152712737903a37b5b2b739903a379031b632b0b960711b60448201526064015b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061377d565b505050565b610e006120b4565b633b9aca006103e8610e1160035490565b610e1c9060036137b0565b610e2691906137cf565b610e3091906137cf565b811015610e945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610d79565b610ea281633b9aca006137b0565b600b8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b610ee66120b4565b601554610100900460ff1615610f3e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d79565b6015805462ffffff191662010100179055436011819055602454610f61916137f1565b6012556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a1565b6001600160a01b0383166000908152600260205260408120439055610fb5848484612113565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561103a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d79565b6110478533858403611f8f565b506001949350505050565b61105a6120b4565b806110cd57600d546001600160a01b03908116908316036110cd5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d79565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6111006120b4565b60005b8281101561118a5783838281811061111d5761111d613809565b905060200201602081019061113291906134a9565b600d546040518481526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806111828161381f565b915050611103565b50505050565b6111986120b4565b6014601c8190556000601d819055601e819055601f8190559081906111be9082906137f1565b6111c891906137f1565b6111d291906137f1565b601b819055601410156111f75760405162461bcd60e51b8152600401610d7990613838565b6019601781905560006018819055808255601a81905590819061121b9082906137f1565b61122591906137f1565b61122f91906137f1565b6016819055601410156112545760405162461bcd60e51b8152600401610d7990613838565b565b61125e6120b4565b601784905560188390556019829055601a819055808261127e85876137f1565b61128891906137f1565b61129291906137f1565b60168190556014101561118a5760405162461bcd60e51b8152600401610d7990613838565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cc09185906112ee9086906137f1565b611f8f565b6112fb6120b4565b620186a061130860035490565b6113139060016137b0565b61131d91906137cf565b81101561138a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d79565b6103e861139660035490565b6113a19060016137b0565b6113ab91906137cf565b8111156114175760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d79565b600e55565b6114246120b4565b600e5461143030611839565b10156114a6576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d79565b600d805460ff60a01b1916600160a01b1790556114c1612c25565b600d805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b61150b6120b4565b633b9aca006103e861151c60035490565b6115279060026137b0565b61153191906137cf565b61153b91906137cf565b81101561159c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610d79565b6115aa81633b9aca006137b0565b60098190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610ed3565b6115e76120b4565b670de0b6b3a764000081101561179c576040805160028082526060820183526000926020830190803683375050600c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611685919061386f565b8160008151811061169857611698613809565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116cc576116cc613809565b6001600160a01b039283166020918202929092010152600c54845191169063b6f9de9590849060009085908890839061170757611707613809565b6020026020010151426040518663ffffffff1660e01b815260040161172f94939291906138d0565b6000604051808303818588803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161179291815260200190565b60405180910390a1505b6117a68183612e45565b5050565b6117b26120b4565b6001600160a01b0381166118175760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d79565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b61185c6120b4565b6112546000612f02565b61186e6120b4565b6015805463ff000000191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60006118b06120b4565b6001600160a01b0383166119065760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d79565b306001600160a01b0384160361195e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d79565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156119a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c99190613764565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a40919061377d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b611a946120b4565b633b9aca006103e8611aa560035490565b611ab09060026137b0565b611aba91906137cf565b611ac491906137cf565b811015611b265760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610d79565b611b3481633b9aca006137b0565b600a8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ed3565b606060058054610c309061372a565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bfa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d79565b611c073385858403611f8f565b5060019392505050565b336000908152600260205260408120439055610cc0611c2d3390565b8484612113565b611c3c6120b4565b600d546001600160a01b0390811690831603611c9a5760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610d79565b611ca48282612f54565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611ce86120b4565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b611d1b6120b4565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611d826120b4565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b611dac6120b4565b6001600160a01b038116611e025760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610d79565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b611e2c6120b4565b601c849055601d839055601e829055601f8190558082611e4c85876137f1565b611e5691906137f1565b611e6091906137f1565b601b8190556019101561118a5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610d79565b611ebd6120b4565b6015805463ff00000019169055565b611ed46120b4565b6001600160a01b038116611f395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d79565b611f4281612f02565b50565b611f4d6120b4565b604051600090339047908381818185875af1925050503d806000811461118a576040519150601f19603f3d011682016040523d82523d6000602084013e61118a565b6001600160a01b038316611ff15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d79565b6001600160a01b0382166120525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d79565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b336120bd612f82565b6001600160a01b0316146112545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d79565b6001600160a01b0383166121395760405162461bcd60e51b8152600401610d7990613905565b6001600160a01b03821661215f5760405162461bcd60e51b8152600401610d799061394a565b600081116121af5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d79565b601554610100900460ff16612242576001600160a01b03831660009081526025602052604090205460ff16806121fd57506001600160a01b03821660009081526025602052604090205460ff165b6122425760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d79565b60125415612315576001600160a01b03831660009081526013602052604090205460ff16158061227f57506006546001600160a01b038381169116145b8061229457506001600160a01b03821661dead145b6123155760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d79565b6015546301000000900460ff16801561234e57506001600160a01b038316600090815260266020526040902054671bc16d674ec8000011155b15612406576006546001600160a01b0383811691161480159061237f5750600d546001600160a01b03848116911614155b156124065761238f60034361398d565b6001600160a01b038416600090815260026020526040902054106124065760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722044656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610d79565b60155460ff16156126ee576006546001600160a01b0384811691161480159061243d57506006546001600160a01b03838116911614155b801561245157506001600160a01b03821615155b801561246857506001600160a01b03821661dead14155b801561248d57506001600160a01b03831660009081526025602052604090205460ff16155b80156124b257506001600160a01b03821660009081526025602052604090205460ff16155b156126ee576001600160a01b03831660009081526028602052604090205460ff1680156124f857506001600160a01b03821660009081526027602052604090205460ff16155b156125c4576009548111156125605760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d79565b600b5461256c83611839565b61257690836137f1565b11156125bf5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d79565b6126ee565b6001600160a01b03821660009081526028602052604090205460ff16801561260557506001600160a01b03831660009081526027602052604090205460ff16155b1561266f57600a548111156125bf5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d79565b6001600160a01b03821660009081526027602052604090205460ff166126ee57600b5461269b83611839565b6126a590836137f1565b11156126ee5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d79565b60006126f930611839565b600e5490915081108015908190612718575060155462010000900460ff165b801561272e5750600d54600160a01b900460ff16155b801561275357506001600160a01b03851660009081526028602052604090205460ff16155b801561277857506001600160a01b03851660009081526025602052604090205460ff16155b801561279d57506001600160a01b03841660009081526025602052604090205460ff16155b156127cb57600d805460ff60a01b1916600160a01b1790556127bd612c25565b600d805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061280d57506001600160a01b03851660009081526025602052604090205460ff165b15612816575060005b60008115612c11576012544310801561284757506001600160a01b03871660009081526028602052604090205460ff165b801561286c57506001600160a01b03861660009081526028602052604090205460ff16155b801561287a57506000601654115b156129fa576001600160a01b03861660009081526013602052604090205460ff1661291a576001600160a01b0386166000908152601360205260408120805460ff1916600190811790915560148054919290916128d89084906137f1565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646129278660636137b0565b61293191906137cf565b90506016546018548261294491906137b0565b61294e91906137cf565b6021600082825461295f91906137f1565b909155505060165460175461297490836137b0565b61297e91906137cf565b6020600082825461298f91906137f1565b90915550506016546019546129a490836137b0565b6129ae91906137cf565b602260008282546129bf91906137f1565b9091555050601654601a546129d490836137b0565b6129de91906137cf565b602360008282546129ef91906137f1565b90915550612bf39050565b6001600160a01b03861660009081526028602052604090205460ff168015612a2457506000601b54115b15612ae6576064601b5486612a3991906137b0565b612a4391906137cf565b9050601b54601d5482612a5691906137b0565b612a6091906137cf565b60216000828254612a7191906137f1565b9091555050601b54601c54612a8690836137b0565b612a9091906137cf565b60206000828254612aa191906137f1565b9091555050601b54601e54612ab690836137b0565b612ac091906137cf565b60226000828254612ad191906137f1565b9091555050601b54601f546129d490836137b0565b6001600160a01b03871660009081526028602052604090205460ff168015612b1057506000601654115b15612bf357606460165486612b2591906137b0565b612b2f91906137cf565b905060165460185482612b4291906137b0565b612b4c91906137cf565b60216000828254612b5d91906137f1565b9091555050601654601754612b7290836137b0565b612b7c91906137cf565b60206000828254612b8d91906137f1565b9091555050601654601954612ba290836137b0565b612bac91906137cf565b60226000828254612bbd91906137f1565b9091555050601654601a54612bd290836137b0565b612bdc91906137cf565b60236000828254612bed91906137f1565b90915550505b8015612c0457612c04873083612f93565b612c0e818661398d565b94505b612c1c878787612f93565b50505050505050565b6000602354118015612c415750602354612c3e30611839565b10155b15612c5257612c52306023546130e8565b60006023819055612c6230611839565b90506000602254602054602154612c7991906137f1565b612c8391906137f1565b9050811580612c90575080155b15612c99575050565b600e54612ca79060146137b0565b821115612cbf57600e54612cbc9060146137b0565b91505b60008060028360215486612cd391906137b0565b612cdd91906137cf565b612ce791906137cf565b9050612cfb612cf6828661398d565b613212565b60215447908190600090612d11906002906137cf565b612d1b908761398d565b602054612d2890856137b0565b612d3291906137cf565b905060006002602154612d4591906137cf565b612d4f908861398d565b602254612d5c90866137b0565b612d6691906137cf565b9050612d7281836137f1565b612d7c908461398d565b600060218190556020819055602281905560238190556010546040519295506001600160a01b031691839181818185875af1925050503d8060008114612dde576040519150601f19603f3d011682016040523d82523d6000602084013e612de3565b606091505b5050600f546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612e33576040519150601f19603f3d011682016040523d82523d6000602084013e612e38565b606091505b5050505050505050505050565b60005b8151811015610df3578260266000848481518110612e6857612e68613809565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550818181518110612ea657612ea6613809565b60200260200101516001600160a01b03167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587484604051612ee891815260200190565b60405180910390a280612efa8161381f565b915050612e48565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055611ca4828261336c565b600080612f8d6133cf565b92915050565b6001600160a01b038316612fb95760405162461bcd60e51b8152600401610d7990613905565b6001600160a01b038216612fdf5760405162461bcd60e51b8152600401610d799061394a565b6001600160a01b038316600090815260208190526040902054818110156130575760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d79565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061308e9084906137f1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130da91815260200190565b60405180910390a350505050565b6001600160a01b0382166131485760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d79565b6001600160a01b038216600090815260208190526040902054818110156131bc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d79565b6001600160a01b0383166000818152602081815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016120a7565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061324757613247613809565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c4919061386f565b816001815181106132d7576132d7613809565b6001600160a01b039283166020918202929092010152600c546132fd9130911684611f8f565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906133369085906000908690309042906004016139a4565b600060405180830381600087803b15801561335057600080fd5b505af1158015613364573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6006546000906001600160a01b0316156133f357506006546001600160a01b031690565b506007546001600160a01b031690565b600060208083528351808285015260005b8181101561343057858101830151858201604001528201613414565b81811115613442576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611f4257600080fd5b803561347881613458565b919050565b6000806040838503121561349057600080fd5b823561349b81613458565b946020939093013593505050565b6000602082840312156134bb57600080fd5b81356134c681613458565b9392505050565b6000602082840312156134df57600080fd5b5035919050565b6000806000606084860312156134fb57600080fd5b833561350681613458565b9250602084013561351681613458565b929592945050506040919091013590565b8015158114611f4257600080fd5b6000806040838503121561354857600080fd5b823561355381613458565b9150602083013561356381613527565b809150509250929050565b60008060006040848603121561358357600080fd5b833567ffffffffffffffff8082111561359b57600080fd5b818601915086601f8301126135af57600080fd5b8135818111156135be57600080fd5b8760208260051b85010111156135d357600080fd5b6020928301989097509590910135949350505050565b600080600080608085870312156135ff57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561364457600080fd5b823567ffffffffffffffff8082111561365c57600080fd5b818501915085601f83011261367057600080fd5b81356020828211156136845761368461361b565b8160051b604051601f19603f830116810181811086821117156136a9576136a961361b565b6040529283528183019350848101820192898411156136c757600080fd5b948201945b838610156136ec576136dd8661346d565b855294820194938201936136cc565b9997909101359750505050505050565b6000806040838503121561370f57600080fd5b823561371a81613458565b9150602083013561356381613458565b600181811c9082168061373e57607f821691505b60208210810361375e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561377657600080fd5b5051919050565b60006020828403121561378f57600080fd5b81516134c681613527565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156137ca576137ca61379a565b500290565b6000826137ec57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156138045761380461379a565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016138315761383161379a565b5060010190565b6020808252601d908201527f4d757374206b656570206665657320617420323025206f72206c657373000000604082015260600190565b60006020828403121561388157600080fd5b81516134c681613458565b600081518084526020808501945080840160005b838110156138c55781516001600160a01b0316875295820195908201906001016138a0565b509495945050505050565b8481526080602082015260006138e9608083018661388c565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561399f5761399f61379a565b500390565b85815284602082015260a0604082015260006139c360a083018661388c565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220171522617ff0a8292e25c3f81904f468290cf579266214a80fc3d469f97db51364736f6c634300080f0033

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

000000000000000000000000ac54d53cb99d821311cb59f2268339ad49ab81f6

-----Decoded View---------------
Arg [0] : _dev (address): 0xac54d53cb99d821311cb59f2268339Ad49Ab81F6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ac54d53cb99d821311cb59f2268339ad49ab81f6


Deployed Bytecode Sourcemap

2659:18743:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1619:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2792:27:2;;;;;;;;;;-1:-1:-1;2792:27:2;;;;-1:-1:-1;;;;;2792:27:2;;;;;;-1:-1:-1;;;;;798:32:3;;;780:51;;768:2;753:18;2792:27:2;616:221:3;2598:169:1;;;;;;;;;;-1:-1:-1;2598:169:1;;;;;:::i;:::-;;:::i;:::-;;;1602:14:3;;1595:22;1577:41;;1565:2;1550:18;2598:169:1;1437:187:3;21016:293:2;;;;;;;;;;;;;:::i;:::-;;4091:64;;;;;;;;;;-1:-1:-1;4091:64:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;1939:108:1;;;;;;;;;;-1:-1:-1;2027:12:1;;1939:108;;;2027:25:3;;;2015:2;2000:18;1939:108:1;1881:177:3;3755:33:2;;;;;;;;;;;;;;;;8026:264;;;;;;;;;;-1:-1:-1;8026:264:2;;;;;:::i;:::-;;:::i;3829:28::-;;;;;;;;;;;;;;;;6765:333;;;;;;;;;;;;;:::i;2775:554:1:-;;;;;;;;;;-1:-1:-1;2775:554:1;;;;;:::i;:::-;;:::i;8863:249:2:-;;;;;;;;;;-1:-1:-1;8863:249:2;;;;;:::i;:::-;;:::i;20793:215::-;;;;;;;;;;-1:-1:-1;20793:215:2;;;;;:::i;:::-;;:::i;10514:602::-;;;;;;;;;;;;;:::i;9615:436::-;;;;;;;;;;-1:-1:-1;9615:436:2;;;;;:::i;:::-;;:::i;1839:92:1:-;;;;;;;;;;-1:-1:-1;1839:92:1;;1922:1;4445:36:3;;4433:2;4418:18;1839:92:1;4303:184:3;3337:215:1;;;;;;;;;;-1:-1:-1;3337:215:1;;;;;:::i;:::-;;:::i;2826:21:2:-;;;;;;;;;;-1:-1:-1;2826:21:2;;;;-1:-1:-1;;;;;2826:21:2;;;3864:26;;;;;;;;;;;;;;;;8298:342;;;;;;;;;;-1:-1:-1;8298:342:2;;;;;:::i;:::-;;:::i;3187:33::-;;;;;;;;;;-1:-1:-1;3187:33:2;;;;;;;;3570:32;;;;;;;;;;;;;;;;19258:312;;;;;;;;;;;;;:::i;7507:249::-;;;;;;;;;;-1:-1:-1;7507:249:2;;;;;:::i;:::-;;:::i;15959:120::-;;;;;;;;;;-1:-1:-1;16053:18:2;;16038:12;:33;15959:120;;3395:31;;;;;;;;;;;;;;;;19673:742;;;;;;;;;;-1:-1:-1;19673:742:2;;;;;:::i;:::-;;:::i;3535:28::-;;;;;;;;;;;;;;;;3153:25;;;;;;;;;;;;;;;;3267:31;;;;;;;;;;-1:-1:-1;3267:31:2;;;;;;;;;;;18773:230;;;;;;;;;;-1:-1:-1;18773:230:2;;;;;:::i;:::-;;:::i;2055:127:1:-;;;;;;;;;;-1:-1:-1;2055:127:1;;;;;:::i;:::-;;:::i;2702:21:2:-;;;;;;;;;;;;;;;;799:103;;;;;;;;;;;;;:::i;7150:121::-;;;;;;;;;;;;;:::i;18141:456::-;;;;;;;;;;-1:-1:-1;18141:456:2;;;;;:::i;:::-;;:::i;3102:44::-;;;;;;;;;;-1:-1:-1;3102:44:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;569:87;;;;;;;;;;-1:-1:-1;642:6:2;;-1:-1:-1;;;;;642:6:2;569:87;;7764:254;;;;;;;;;;-1:-1:-1;7764:254:2;;;;;:::i;:::-;;:::i;1727:104:1:-;;;;;;;;;;;;;:::i;3470:24:2:-;;;;;;;;;;;;;;;;3795:27;;;;;;;;;;;;;;;;3647:25;;;;;;;;;;;;;;;;3560:413:1;;;;;;;;;;-1:-1:-1;3560:413:1;;;;;:::i;:::-;;:::i;3062:33:2:-;;;;;;;;;;;;;;;;2190:241:1;;;;;;;;;;-1:-1:-1;2190:241:1;;;;;:::i;:::-;;:::i;9120:243:2:-;;;;;;;;;;-1:-1:-1;9120:243:2;;;;;:::i;:::-;;:::i;3679:26::-;;;;;;;;;;;;;;;;4313:58;;;;;;;;;;-1:-1:-1;4313:58:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;2730:22;;;;;;;;;;;;;;;;7279:112;;;;;;;;;;-1:-1:-1;7279:112:2;;;;;:::i;:::-;;:::i;20677:108::-;;;;;;;;;;-1:-1:-1;20677:108:2;;;;;:::i;:::-;-1:-1:-1;;;;;20760:17:2;20734:7;20760:17;;;:9;:17;;;;;;;20677:108;3227:33;;;;;;;;;;-1:-1:-1;3227:33:2;;;;;;;;;;;11124:182;;;;;;;;;;-1:-1:-1;11124:182:2;;;;;:::i;:::-;;:::i;21317:82::-;;;;;;;;;;-1:-1:-1;21317:82:2;;;;;:::i;:::-;;:::i;3313:39::-;;;;;;;;;;-1:-1:-1;3313:39:2;;;;;;;;;;;19011:195;;;;;;;;;;-1:-1:-1;19011:195:2;;;;;:::i;:::-;;:::i;3361:27::-;;;;;;;;;;;;;;;;2439:151:1;;;;;;;;;;-1:-1:-1;2439:151:1;;;;;:::i;:::-;-1:-1:-1;;;;;2555:18:1;;;2528:7;2555:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2439:151;2884:33:2;;;;;;;;;;;;;;;;3501:25;;;;;;;;;;;;;;;;10059:447;;;;;;;;;;-1:-1:-1;10059:447:2;;;;;:::i;:::-;;:::i;7401:98::-;;;;;;;;;;;;;:::i;2985:37::-;;;;;;;;;;;;;;;;3433:30;;;;;;;;;;;;;;;;1047:201;;;;;;;;;;-1:-1:-1;1047:201:2;;;;;:::i;:::-;;:::i;18605:160::-;;;;;;;;;;;;;:::i;3609:31::-;;;;;;;;;;;;;;;;2759:24;;;;;;;;;;;;;;;;3714:34;;;;;;;;;;;;;;;;1619:100:1;1673:13;1706:5;1699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1619:100;:::o;2598:169::-;2681:4;2698:39;175:10:0;2721:7:1;2730:6;2698:8;:39::i;:::-;-1:-1:-1;2755:4:1;2598:169;;;;:::o;21016:293:2:-;528:13;:11;:13::i;:::-;21147:38:::1;::::0;-1:-1:-1;;;21147:38:2;;21112:4:::1;21147:38;::::0;::::1;780:51:3::0;;;21112:4:2;21074:20:::1;::::0;21112:4;;21147:23:::1;::::0;753:18:3;;21147:38:2::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21129:56;;21214:1;21204:7;:11;21196:42;;;::::0;-1:-1:-1;;;21196:42:2;;7197:2:3;21196:42:2::1;::::0;::::1;7179:21:3::0;7236:2;7216:18;;;7209:30;-1:-1:-1;;;7255:18:3;;;7248:48;7313:18;;21196:42:2::1;;;;;;;;;21249:52;::::0;-1:-1:-1;;;21249:52:2;;21280:10:::1;21249:52;::::0;::::1;7516:51:3::0;7583:18;;;7576:34;;;-1:-1:-1;;;;;21249:22:2;::::1;::::0;::::1;::::0;7489:18:3;;21249:52:2::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21063:246;;21016:293::o:0;8026:264::-;528:13;:11;:13::i;:::-;8142:3:::1;8136:4;8116:13;2027:12:1::0;;;1939:108;8116:13:2::1;:17;::::0;8132:1:::1;8116:17;:::i;:::-;:24;;;;:::i;:::-;8115:30;;;;:::i;:::-;8105:6;:40;;8097:97;;;::::0;-1:-1:-1;;;8097:97:2;;8600:2:3;8097:97:2::1;::::0;::::1;8582:21:3::0;8639:2;8619:18;;;8612:30;8678:34;8658:18;;;8651:62;-1:-1:-1;;;8729:18:3;;;8722:42;8781:19;;8097:97:2::1;8398:408:3::0;8097:97:2::1;8217:16;:6:::0;8227:5:::1;8217:16;:::i;:::-;8205:9;:28:::0;;;8249:33:::1;::::0;2027:25:3;;;8249:33:2::1;::::0;2015:2:3;2000:18;8249:33:2::1;;;;;;;;8026:264:::0;:::o;6765:333::-;528:13;:11;:13::i;:::-;6822::::1;::::0;::::1;::::0;::::1;;;6821:14;6813:50;;;::::0;-1:-1:-1;;;6813:50:2;;9013:2:3;6813:50:2::1;::::0;::::1;8995:21:3::0;9052:2;9032:18;;;9025:30;9091:25;9071:18;;;9064:53;9134:18;;6813:50:2::1;8811:347:3::0;6813:50:2::1;6874:13;:20:::0;;-1:-1:-1;;6938:18:2;;;;;6988:12:::1;6967:18;:33:::0;;;7053:11:::1;::::0;7032:32:::1;::::0;::::1;:::i;:::-;7011:18;:53:::0;7080:10:::1;::::0;::::1;::::0;;;::::1;6765:333::o:0;2775:554:1:-;-1:-1:-1;;;;;2932:36:1;;2915:4;2932:36;;;:28;:36;;;;;2971:12;2932:51;;2994:36;2961:6;3012:9;3023:6;2994:9;:36::i;:::-;-1:-1:-1;;;;;3070:19:1;;3043:24;3070:19;;;:11;:19;;;;;;;;175:10:0;3070:33:1;;;;;;;;3122:26;;;;3114:79;;;;-1:-1:-1;;;3114:79:1;;9498:2:3;3114:79:1;;;9480:21:3;9537:2;9517:18;;;9510:30;9576:34;9556:18;;;9549:62;-1:-1:-1;;;9627:18:3;;;9620:38;9675:19;;3114:79:1;9296:404:3;3114:79:1;3229:57;3238:6;175:10:0;3279:6:1;3260:16;:25;3229:8;:57::i;:::-;-1:-1:-1;3317:4:1;;2775:554;-1:-1:-1;;;;2775:554:1:o;8863:249:2:-;528:13;:11;:13::i;:::-;8948:4:::1;8944:104;;8986:6;::::0;-1:-1:-1;;;;;8986:6:2;;::::1;8976:16:::0;;::::1;::::0;8968:68:::1;;;::::0;-1:-1:-1;;;8968:68:2;;9907:2:3;8968:68:2::1;::::0;::::1;9889:21:3::0;9946:2;9926:18;;;9919:30;9985:34;9965:18;;;9958:62;-1:-1:-1;;;10036:18:3;;;10029:37;10083:19;;8968:68:2::1;9705:403:3::0;8968:68:2::1;-1:-1:-1::0;;;;;9058:39:2;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;9058:46:2::1;::::0;::::1;;::::0;;;::::1;::::0;;8863:249::o;20793:215::-;528:13;:11;:13::i;:::-;20889:9:::1;20884:117;20904:21:::0;;::::1;20884:117;;;20969:10;;20980:1;20969:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20961:6;::::0;20952:37:::1;::::0;2027:25:3;;;-1:-1:-1;;;;;20952:37:2;;::::1;::::0;20961:6;;::::1;::::0;20952:37:::1;::::0;2015:2:3;2000:18;20952:37:2::1;;;;;;;20927:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20884:117;;;;20793:215:::0;;;:::o;10514:602::-;528:13;:11;:13::i;:::-;10595:2:::1;10575:17;:22:::0;;;10627:1:::1;10608:16;:20:::0;;;10639:10:::1;:14:::0;;;10664:11:::1;:15:::0;;;10627:1;;;10706:36:::1;::::0;10627:1;;10706:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;10690:13;:79:::0;;;10805:2:::1;-1:-1:-1::0;10788:19:2::1;10780:61;;;;-1:-1:-1::0;;;10780:61:2::1;;;;;;;:::i;:::-;10871:2;10852:16;:21:::0;;;10902:1:::1;10884:15;:19:::0;;;10914:13;;;10938:10:::1;:14:::0;;;10902:1;;;10978:34:::1;::::0;10902:1;;10978:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;10963:12;:74:::0;;;11072:2:::1;-1:-1:-1::0;11056:18:2::1;11048:60;;;;-1:-1:-1::0;;;11048:60:2::1;;;;;;;:::i;:::-;10514:602::o:0;9615:436::-;528:13;:11;:13::i;:::-;9750:16:::1;:33:::0;;;9794:15:::1;:31:::0;;;9836:9:::1;:19:::0;;;9866:10:::1;:21:::0;;;9879:8;9848:7;9913:34:::1;9812:13:::0;9769:14;9913:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;9898:12;:74:::0;;;10007:2:::1;-1:-1:-1::0;9991:18:2::1;9983:60;;;;-1:-1:-1::0;;;9983:60:2::1;;;;;;;:::i;3337:215:1:-:0;175:10:0;3425:4:1;3474:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3474:34:1;;;;;;;;;;3425:4;;3442:80;;3465:7;;3474:47;;3511:10;;3474:47;:::i;:::-;3442:8;:80::i;8298:342:2:-;528:13;:11;:13::i;:::-;8414:6:::1;8394:13;2027:12:1::0;;;1939:108;8394:13:2::1;:17;::::0;8410:1:::1;8394:17;:::i;:::-;:26;;;;:::i;:::-;8381:9;:39;;8373:105;;;::::0;-1:-1:-1;;;8373:105:2;;10945:2:3;8373:105:2::1;::::0;::::1;10927:21:3::0;10984:2;10964:18;;;10957:30;11023:34;11003:18;;;10996:62;-1:-1:-1;;;11074:18:3;;;11067:51;11135:19;;8373:105:2::1;10743:417:3::0;8373:105:2::1;8530:4;8510:13;2027:12:1::0;;;1939:108;8510:13:2::1;:17;::::0;8526:1:::1;8510:17;:::i;:::-;:24;;;;:::i;:::-;8497:9;:37;;8489:102;;;::::0;-1:-1:-1;;;8489:102:2;;11367:2:3;8489:102:2::1;::::0;::::1;11349:21:3::0;11406:2;11386:18;;;11379:30;11445:34;11425:18;;;11418:62;-1:-1:-1;;;11496:18:3;;;11489:50;11556:19;;8489:102:2::1;11165:416:3::0;8489:102:2::1;8602:18;:30:::0;8298:342::o;19258:312::-;528:13;:11;:13::i;:::-;19349:18:::1;;19321:24;19339:4;19321:9;:24::i;:::-;:46;;19313:123;;;::::0;;-1:-1:-1;;;19313:123:2;;11788:2:3;19313:123:2::1;::::0;::::1;11770:21:3::0;11807:18;;;11800:30;;;;11866:34;11846:18;;;11839:62;11937:34;11917:18;;;11910:62;11989:19;;19313:123:2::1;11586:428:3::0;19313:123:2::1;19447:8;:15:::0;;-1:-1:-1;;;;19447:15:2::1;-1:-1:-1::0;;;19447:15:2::1;::::0;;19473:10:::1;:8;:10::i;:::-;19494:8;:16:::0;;-1:-1:-1;;;;19494:16:2::1;::::0;;19526:36:::1;::::0;19546:15:::1;2027:25:3::0;;19526:36:2::1;::::0;2015:2:3;2000:18;19526:36:2::1;;;;;;;19258:312::o:0;7507:249::-;528:13;:11;:13::i;:::-;7620:3:::1;7614:4;7594:13;2027:12:1::0;;;1939:108;7594:13:2::1;:17;::::0;7610:1:::1;7594:17;:::i;:::-;:24;;;;:::i;:::-;7593:30;;;;:::i;:::-;7583:6;:40;;7575:94;;;::::0;-1:-1:-1;;;7575:94:2;;12221:2:3;7575:94:2::1;::::0;::::1;12203:21:3::0;12260:2;12240:18;;;12233:30;12299:34;12279:18;;;12272:62;-1:-1:-1;;;12350:18:3;;;12343:39;12399:19;;7575:94:2::1;12019:405:3::0;7575:94:2::1;7689:16;:6:::0;7699:5:::1;7689:16;:::i;:::-;7680:6;:25:::0;;;7721:27:::1;::::0;2027:25:3;;;7721:27:2::1;::::0;2015:2:3;2000:18;7721:27:2::1;1881:177:3::0;19673:742:2;528:13;:11;:13::i;:::-;19791:7:::1;19777:11;:21;19774:586;;;19922:16;::::0;;19936:1:::1;19922:16:::0;;;;;::::1;::::0;;19898:21:::1;::::0;19922:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;19963:9:2::1;::::0;:16:::1;::::0;;-1:-1:-1;;;19963:16:2;;;;19898:40;;-1:-1:-1;;;;;;19963:9:2;;::::1;::::0;:14:::1;::::0;-1:-1:-1;19963:16:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19953:4;19958:1;19953:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;19953:26:2::1;;;-1:-1:-1::0;;;;;19953:26:2::1;;;::::0;::::1;20012:4;19994;19999:1;19994:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19994:23:2;;::::1;:7;::::0;;::::1;::::0;;;;;:23;20064:9:::1;::::0;20239:11;;20064:9;::::1;::::0;:60:::1;::::0;20132:11;;20064:9:::1;::::0;20216:4;;20239:8;;20064:9;;20239:11:::1;;;;:::i;:::-;;;;;;;20269:15;20064:235;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;20319:29;20336:11;20319:29;;;;2027:25:3::0;;2015:2;2000:18;;1881:177;20319:29:2::1;;;;;;;;19883:477;19774:586;20370:37;20385:11;20398:8;20370:14;:37::i;:::-;19673:742:::0;;:::o;18773:230::-;528:13;:11;:13::i;:::-;-1:-1:-1;;;;;18862:32:2;::::1;18854:83;;;::::0;-1:-1:-1;;;18854:83:2;;13868:2:3;18854:83:2::1;::::0;::::1;13850:21:3::0;13907:2;13887:18;;;13880:30;13946:34;13926:18;;;13919:62;-1:-1:-1;;;13997:18:3;;;13990:36;14043:19;;18854:83:2::1;13666:402:3::0;18854:83:2::1;18948:17;:47:::0;;-1:-1:-1;;;;;;18948:47:2::1;-1:-1:-1::0;;;;;18948:47:2;;;::::1;::::0;;;::::1;::::0;;18773:230::o;2055:127:1:-;-1:-1:-1;;;;;2156:18:1;2129:7;2156:18;;;;;;;;;;;;2055:127::o;799:103:2:-;528:13;:11;:13::i;:::-;864:30:::1;891:1;864:18;:30::i;7150:121::-:0;528:13;:11;:13::i;:::-;7204:20:::1;:28:::0;;-1:-1:-1;;7204:28:2::1;::::0;;7248:15:::1;::::0;::::1;::::0;7227:5:::1;::::0;7248:15:::1;7150:121::o:0;18141:456::-;18228:10;528:13;:11;:13::i;:::-;-1:-1:-1;;;;;18259:20:2;::::1;18251:59;;;::::0;-1:-1:-1;;;18251:59:2;;14275:2:3;18251:59:2::1;::::0;::::1;14257:21:3::0;14314:2;14294:18;;;14287:30;14353:28;14333:18;;;14326:56;14399:18;;18251:59:2::1;14073:350:3::0;18251:59:2::1;18347:4;-1:-1:-1::0;;;;;18329:23:2;::::1;::::0;18321:64:::1;;;::::0;-1:-1:-1;;;18321:64:2;;14630:2:3;18321:64:2::1;::::0;::::1;14612:21:3::0;14669:2;14649:18;;;14642:30;14708;14688:18;;;14681:58;14756:18;;18321:64:2::1;14428:352:3::0;18321:64:2::1;18423:39;::::0;-1:-1:-1;;;18423:39:2;;18456:4:::1;18423:39;::::0;::::1;780:51:3::0;18396:24:2::1;::::0;-1:-1:-1;;;;;18423:24:2;::::1;::::0;::::1;::::0;753:18:3;;18423:39:2::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18481:46;::::0;-1:-1:-1;;;18481:46:2;;-1:-1:-1;;;;;7534:32:3;;;18481:46:2::1;::::0;::::1;7516:51:3::0;7583:18;;;7576:34;;;18396:66:2;;-1:-1:-1;18481:23:2;;::::1;::::0;::::1;::::0;7489:18:3;;18481:46:2::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18543;::::0;;-1:-1:-1;;;;;7534:32:3;;7516:51;;7598:2;7583:18;;7576:34;;;18473:54:2;;-1:-1:-1;18543:46:2::1;::::0;7489:18:3;18543:46:2::1;;;;;;;18240:357;18141:456:::0;;;;:::o;7764:254::-;528:13;:11;:13::i;:::-;7878:3:::1;7872:4;7852:13;2027:12:1::0;;;1939:108;7852:13:2::1;:17;::::0;7868:1:::1;7852:17;:::i;:::-;:24;;;;:::i;:::-;7851:30;;;;:::i;:::-;7841:6;:40;;7833:95;;;::::0;-1:-1:-1;;;7833:95:2;;14987:2:3;7833:95:2::1;::::0;::::1;14969:21:3::0;15026:2;15006:18;;;14999:30;15065:34;15045:18;;;15038:62;-1:-1:-1;;;15116:18:3;;;15109:40;15166:19;;7833:95:2::1;14785:406:3::0;7833:95:2::1;7949:16;:6:::0;7959:5:::1;7949:16;:::i;:::-;7939:7;:26:::0;;;7981:29:::1;::::0;2027:25:3;;;7981:29:2::1;::::0;2015:2:3;2000:18;7981:29:2::1;1881:177:3::0;1727:104:1;1783:13;1816:7;1809:14;;;;;:::i;3560:413::-;175:10:0;3653:4:1;3697:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3697:34:1;;;;;;;;;;3750:35;;;;3742:85;;;;-1:-1:-1;;;3742:85:1;;15398:2:3;3742:85:1;;;15380:21:3;15437:2;15417:18;;;15410:30;15476:34;15456:18;;;15449:62;-1:-1:-1;;;15527:18:3;;;15520:35;15572:19;;3742:85:1;15196:401:3;3742:85:1;3863:67;175:10:0;3886:7:1;3914:15;3895:16;:34;3863:8;:67::i;:::-;-1:-1:-1;3961:4:1;;3560:413;-1:-1:-1;;;3560:413:1:o;2190:241::-;2322:10;2276:4;2293:40;;;:28;:40;;;;;2336:12;2293:55;;2359:42;2369:12;175:10:0;;95:98;2369:12:1;2383:9;2394:6;2359:9;:42::i;9120:243:2:-;528:13;:11;:13::i;:::-;9208:6:::1;::::0;-1:-1:-1;;;;;9208:6:2;;::::1;9200:14:::0;;::::1;::::0;9192:53:::1;;;::::0;-1:-1:-1;;;9192:53:2;;15804:2:3;9192:53:2::1;::::0;::::1;15786:21:3::0;15843:2;15823:18;;;15816:30;15882:28;15862:18;;;15855:56;15928:18;;9192:53:2::1;15602:350:3::0;9192:53:2::1;9258:41;9287:4;9293:5;9258:28;:41::i;:::-;9315:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;9315:40:2;::::1;::::0;::::1;::::0;;;::::1;9120:243:::0;;:::o;7279:112::-;528:13;:11;:13::i;:::-;-1:-1:-1;;;;;7357:19:2;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;7357:26:2::1;::::0;::::1;;::::0;;;::::1;::::0;;7279:112::o;11124:182::-;528:13;:11;:13::i;:::-;-1:-1:-1;;;;;11209:28:2;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;11209:39:2::1;::::0;::::1;;::::0;;::::1;::::0;;;11264:34;;1577:41:3;;;11264:34:2::1;::::0;1550:18:3;11264:34:2::1;;;;;;;11124:182:::0;;:::o;21317:82::-;528:13;:11;:13::i;:::-;21377:6:::1;:14:::0;;-1:-1:-1;;;;;;21377:14:2::1;-1:-1:-1::0;;;;;21377:14:2;;;::::1;::::0;;;::::1;::::0;;21317:82::o;19011:195::-;528:13;:11;:13::i;:::-;-1:-1:-1;;;;;19093:25:2;::::1;19085:69;;;::::0;-1:-1:-1;;;19085:69:2;;16159:2:3;19085:69:2::1;::::0;::::1;16141:21:3::0;16198:2;16178:18;;;16171:30;16237:33;16217:18;;;16210:61;16288:18;;19085:69:2::1;15957:355:3::0;19085:69:2::1;19165:10;:33:::0;;-1:-1:-1;;;;;;19165:33:2::1;-1:-1:-1::0;;;;;19165:33:2;;;::::1;::::0;;;::::1;::::0;;19011:195::o;10059:447::-;528:13;:11;:13::i;:::-;10195:17:::1;:34:::0;;;10240:16:::1;:32:::0;;;10283:10:::1;:20:::0;;;10314:11:::1;:22:::0;;;10328:8;10296:7;10363:36:::1;10259:13:::0;10215:14;10363:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;10347:13;:79:::0;;;10462:2:::1;-1:-1:-1::0;10445:19:2::1;10437:61;;;::::0;-1:-1:-1;;;10437:61:2;;16519:2:3;10437:61:2::1;::::0;::::1;16501:21:3::0;16558:2;16538:18;;;16531:30;16597:31;16577:18;;;16570:59;16646:18;;10437:61:2::1;16317:353:3::0;7401:98:2;528:13;:11;:13::i;:::-;7463:20:::1;:28:::0;;-1:-1:-1;;7463:28:2::1;::::0;;7401:98::o;1047:201::-;528:13;:11;:13::i;:::-;-1:-1:-1;;;;;1136:22:2;::::1;1128:73;;;::::0;-1:-1:-1;;;1128:73:2;;16877:2:3;1128:73:2::1;::::0;::::1;16859:21:3::0;16916:2;16896:18;;;16889:30;16955:34;16935:18;;;16928:62;-1:-1:-1;;;17006:18:3;;;16999:36;17052:19;;1128:73:2::1;16675:402:3::0;1128:73:2::1;1212:28;1231:8;1212:18;:28::i;:::-;1047:201:::0;:::o;18605:160::-;528:13;:11;:13::i;:::-;18699:58:::1;::::0;18663:12:::1;::::0;18707:10:::1;::::0;18731:21:::1;::::0;18663:12;18699:58;18663:12;18699:58;18731:21;18707:10;18699:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5460:380:1::0;-1:-1:-1;;;;;5596:19:1;;5588:68;;;;-1:-1:-1;;;5588:68:1;;17494:2:3;5588:68:1;;;17476:21:3;17533:2;17513:18;;;17506:30;17572:34;17552:18;;;17545:62;-1:-1:-1;;;17623:18:3;;;17616:34;17667:19;;5588:68:1;17292:400:3;5588:68:1;-1:-1:-1;;;;;5675:21:1;;5667:68;;;;-1:-1:-1;;;5667:68:1;;17899:2:3;5667:68:1;;;17881:21:3;17938:2;17918:18;;;17911:30;17977:34;17957:18;;;17950:62;-1:-1:-1;;;18028:18:3;;;18021:32;18070:19;;5667:68:1;17697:398:3;5667:68:1;-1:-1:-1;;;;;5748:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5800:32;;2027:25:3;;;5800:32:1;;2000:18:3;5800:32:1;;;;;;;;5460:380;;;:::o;664:127:2:-;175:10:0;723:7:2;:5;:7::i;:::-;-1:-1:-1;;;;;723:23:2;;715:68;;;;-1:-1:-1;;;715:68:2;;18302:2:3;715:68:2;;;18284:21:3;;;18321:18;;;18314:30;18380:34;18360:18;;;18353:62;18432:18;;715:68:2;18100:356:3;11314:4637:2;-1:-1:-1;;;;;11414:18:2;;11406:68;;;;-1:-1:-1;;;11406:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;11493:16:2;;11485:64;;;;-1:-1:-1;;;11485:64:2;;;;;;;:::i;:::-;11577:1;11568:6;:10;11560:52;;;;-1:-1:-1;;;11560:52:2;;19473:2:3;11560:52:2;;;19455:21:3;19512:2;19492:18;;;19485:30;19551:31;19531:18;;;19524:59;19600:18;;11560:52:2;19271:353:3;11560:52:2;11637:13;;;;;;;11633:132;;-1:-1:-1;;;;;11674:25:2;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;11703:23:2;;;;;;:19;:23;;;;;;;;11674:52;11666:87;;;;-1:-1:-1;;;11666:87:2;;19831:2:3;11666:87:2;;;19813:21:3;19870:2;19850:18;;;19843:30;-1:-1:-1;;;19889:18:3;;;19882:52;19951:18;;11666:87:2;19629:346:3;11666:87:2;11780:18;;:22;11777:196;;-1:-1:-1;;;;;11827:17:2;;;;;;:11;:17;;;;;;;;11826:18;;:35;;-1:-1:-1;642:6:2;;-1:-1:-1;;;;;11848:13:2;;;642:6;;11848:13;11826:35;:60;;;-1:-1:-1;;;;;;11865:21:2;;11879:6;11865:21;11826:60;11818:143;;;;-1:-1:-1;;;11818:143:2;;20182:2:3;11818:143:2;;;20164:21:3;20221:2;20201:18;;;20194:30;20260:34;20240:18;;;20233:62;20331:34;20311:18;;;20304:62;-1:-1:-1;;;20382:19:3;;;20375:37;20429:19;;11818:143:2;19980:474:3;11818:143:2;11989:20;;;;;;;:50;;;;-1:-1:-1;;;;;;12013:15:2;;;;;;:9;:15;;;;;;12032:7;-1:-1:-1;12013:26:2;11989:50;11985:267;;;642:6;;-1:-1:-1;;;;;12059:13:2;;;642:6;;12059:13;;;;:40;;-1:-1:-1;12092:6:2;;-1:-1:-1;;;;;12076:23:2;;;12092:6;;12076:23;;12059:40;12055:186;;;12164:16;12179:1;12164:12;:16;:::i;:::-;-1:-1:-1;;;;;12127:34:2;;;;;;:28;:34;;;;;;:53;12119:106;;;;-1:-1:-1;;;12119:106:2;;20791:2:3;12119:106:2;;;20773:21:3;20830:2;20810:18;;;20803:30;20869:34;20849:18;;;20842:62;-1:-1:-1;;;20920:18:3;;;20913:38;20968:19;;12119:106:2;20589:404:3;12119:106:2;12275:14;;;;12272:1099;;;642:6;;-1:-1:-1;;;;;12309:15:2;;;642:6;;12309:15;;;;:32;;-1:-1:-1;642:6:2;;-1:-1:-1;;;;;12328:13:2;;;642:6;;12328:13;;12309:32;:52;;;;-1:-1:-1;;;;;;12345:16:2;;;;12309:52;:77;;;;-1:-1:-1;;;;;;12365:21:2;;12379:6;12365:21;;12309:77;:107;;;;-1:-1:-1;;;;;;12391:25:2;;;;;;:19;:25;;;;;;;;12390:26;12309:107;:135;;;;-1:-1:-1;;;;;;12421:23:2;;;;;;:19;:23;;;;;;;;12420:24;12309:135;12305:1055;;;-1:-1:-1;;;;;12630:31:2;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;12666:35:2;;;;;;:31;:35;;;;;;;;12665:36;12630:71;12626:719;;;12748:6;;12738;:16;;12730:69;;;;-1:-1:-1;;;12730:69:2;;21200:2:3;12730:69:2;;;21182:21:3;21239:2;21219:18;;;21212:30;21278:34;21258:18;;;21251:62;-1:-1:-1;;;21329:18:3;;;21322:38;21377:19;;12730:69:2;20998:404:3;12730:69:2;12860:9;;12843:13;12853:2;12843:9;:13::i;:::-;12834:22;;:6;:22;:::i;:::-;:35;;12826:72;;;;-1:-1:-1;;;12826:72:2;;21609:2:3;12826:72:2;;;21591:21:3;21648:2;21628:18;;;21621:30;-1:-1:-1;;;21667:18:3;;;21660:54;21731:18;;12826:72:2;21407:348:3;12826:72:2;12626:719;;;-1:-1:-1;;;;;12974:29:2;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;13008:37:2;;;;;;:31;:37;;;;;;;;13007:38;12974:71;12970:375;;;13092:7;;13082:6;:17;;13074:72;;;;-1:-1:-1;;;13074:72:2;;21962:2:3;13074:72:2;;;21944:21:3;22001:2;21981:18;;;21974:30;22040:34;22020:18;;;22013:62;-1:-1:-1;;;22091:18:3;;;22084:40;22141:19;;13074:72:2;21760:406:3;12970:375:2;-1:-1:-1;;;;;13194:35:2;;;;;;:31;:35;;;;;;;;13189:156;;13287:9;;13270:13;13280:2;13270:9;:13::i;:::-;13261:22;;:6;:22;:::i;:::-;:35;;13253:72;;;;-1:-1:-1;;;13253:72:2;;21609:2:3;13253:72:2;;;21591:21:3;21648:2;21628:18;;;21621:30;-1:-1:-1;;;21667:18:3;;;21660:54;21731:18;;13253:72:2;21407:348:3;13253:72:2;13383:28;13414:24;13432:4;13414:9;:24::i;:::-;13490:18;;13383:55;;-1:-1:-1;13466:42:2;;;;;;;13524:22;;-1:-1:-1;13535:11:2;;;;;;;13524:22;:35;;;;-1:-1:-1;13551:8:2;;-1:-1:-1;;;13551:8:2;;;;13550:9;13524:35;:71;;;;-1:-1:-1;;;;;;13564:31:2;;;;;;:25;:31;;;;;;;;13563:32;13524:71;:101;;;;-1:-1:-1;;;;;;13600:25:2;;;;;;:19;:25;;;;;;;;13599:26;13524:101;:129;;;;-1:-1:-1;;;;;;13630:23:2;;;;;;:19;:23;;;;;;;;13629:24;13524:129;13521:236;;;13670:8;:15;;-1:-1:-1;;;;13670:15:2;-1:-1:-1;;;13670:15:2;;;13702:10;:8;:10::i;:::-;13729:8;:16;;-1:-1:-1;;;;13729:16:2;;;13521:236;-1:-1:-1;;;;;13887:25:2;;13769:12;13887:25;;;:19;:25;;;;;;13784:4;;13887:25;;;:52;;-1:-1:-1;;;;;;13916:23:2;;;;;;:19;:23;;;;;;;;13887:52;13884:99;;;-1:-1:-1;13966:5:2;13884:99;13995:12;14099:7;14096:1802;;;16053:18;;16038:12;:33;14161:60;;;;-1:-1:-1;;;;;;14190:31:2;;;;;;:25;:31;;;;;;;;14161:60;:94;;;;-1:-1:-1;;;;;;14226:29:2;;;;;;:25;:29;;;;;;;;14225:30;14161:94;:114;;;;;14274:1;14259:12;;:16;14161:114;14158:1593;;;-1:-1:-1;;;;;14301:15:2;;;;;;:11;:15;;;;;;;;14297:171;;-1:-1:-1;;;;;14340:15:2;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;14340:22:2;14358:4;14340:22;;;;;;14385:10;:15;;14358:4;;14385:10;;:15;;14358:4;;14385:15;:::i;:::-;;;;-1:-1:-1;;14428:20:2;;-1:-1:-1;;;;;798:32:3;;780:51;;14428:20:2;;768:2:3;753:18;14428:20:2;;;;;;;14297:171;14509:3;14495:11;:6;14504:2;14495:11;:::i;:::-;:17;;;;:::i;:::-;14488:24;;14578:12;;14560:15;;14553:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;14531:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;14658:12:2;;14639:16;;14632:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;14609:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;14724:12:2;;14712:9;;14705:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;14689:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;14792:12:2;;14779:10;;14772:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;14755:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;14158:1593:2;;-1:-1:-1;14158:1593:2;;-1:-1:-1;;;;;14869:29:2;;;;;;:25;:29;;;;;;;;:50;;;;;14918:1;14902:13;;:17;14869:50;14865:886;;;14971:3;14955:13;;14946:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;14939:35;;15041:13;;15022:16;;15015:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;14993:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;15123:13:2;;15103:17;;15096:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;15073:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;15191:13:2;;15178:10;;15171:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;15155:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;15261:13:2;;15247:11;;15240:18;;:4;:18;:::i;14865:886::-;-1:-1:-1;;;;;15337:31:2;;;;;;:25;:31;;;;;;;;:51;;;;;15387:1;15372:12;;:16;15337:51;15334:417;;;15440:3;15425:12;;15416:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;15409:34;;15509:12;;15491:15;;15484:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;15462:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;15589:12:2;;15570:16;;15563:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;15540:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;15655:12:2;;15643:9;;15636:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;15620:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;15723:12:2;;15710:10;;15703:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;15686:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;15334:417:2;15770:8;;15767:89;;15798:42;15814:4;15828;15835;15798:15;:42::i;:::-;15872:14;15882:4;15872:14;;:::i;:::-;;;14096:1802;15910:33;15926:4;15932:2;15936:6;15910:15;:33::i;:::-;11393:4558;;;;11314:4637;;;:::o;16666:1467::-;16726:1;16710:13;;:17;:62;;;;;16759:13;;16731:24;16749:4;16731:9;:24::i;:::-;:41;;16710:62;16707:129;;;16789:35;16803:4;16810:13;;16789:5;:35::i;:::-;16862:1;16846:13;:17;;;16902:24;16920:4;16902:9;:24::i;:::-;16876:50;;16937:25;17008:12;;16986:19;;16965:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;16937:83;-1:-1:-1;17036:20:2;;;:46;;-1:-1:-1;17060:22:2;;17036:46;17033:60;;;17085:7;;16666:1467::o;17033:60::-;17126:18;;:23;;17147:2;17126:23;:::i;:::-;17108:15;:41;17105:113;;;17183:18;;:23;;17204:2;17183:23;:::i;:::-;17165:41;;17105:113;17230:12;17304:23;17389:1;17369:17;17348:18;;17330:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;17304:86;-1:-1:-1;17403:51:2;17420:33;17304:86;17420:15;:33;:::i;:::-;17403:16;:51::i;:::-;17653:18;;17488:21;;;;17467:18;;17653:20;;17672:1;;17653:20;:::i;:::-;17632:42;;:17;:42;:::i;:::-;17609:19;;17596:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;17569:106;;17686:17;17775:1;17756:18;;:20;;;;:::i;:::-;17735:42;;:17;:42;:::i;:::-;17719:12;;17706:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;17686:92;-1:-1:-1;17810:28:2;17686:92;17810:16;:28;:::i;:::-;17791:47;;;;:::i;:::-;17872:1;17851:18;:22;;;17884:19;:23;;;17918:12;:16;;;17945:13;:17;;;17996:10;;17988:46;;17791:47;;-1:-1:-1;;;;;;17996:10:2;;18020:9;;17988:46;17872:1;17988:46;18020:9;17996:10;17988:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18068:17:2;;18060:65;;17975:59;;-1:-1:-1;;;;;;18068:17:2;;18099:21;;18060:65;;;;18099:21;18068:17;18060:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16666:1467:2:o;20423:246::-;20514:9;20509:153;20533:8;:15;20529:1;:19;20509:153;;;20595:6;20570:9;:22;20580:8;20589:1;20580:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20570:22:2;-1:-1:-1;;;;;20570:22:2;;;;;;;;;;;;:31;;;;20630:8;20639:1;20630:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20621:29:2;;20643:6;20621:29;;;;2027:25:3;;2015:2;2000:18;;1881:177;20621:29:2;;;;;;;;20550:3;;;;:::i;:::-;;;;20509:153;;1256:191;1349:6;;;-1:-1:-1;;;;;1366:17:2;;;-1:-1:-1;;;;;;1366:17:2;;;;;;;1399:40;;1349:6;;;1366:17;1349:6;;1399:40;;1330:16;;1399:40;1319:128;1256:191;:::o;9371:236::-;-1:-1:-1;;;;;9454:31:2;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;9454:39:2;;;;;;;9504;9454:31;:39;9504:26;:39::i;914:125::-;957:7;977:14;994:13;:11;:13::i;:::-;977:30;914:125;-1:-1:-1;;914:125:2:o;3981:614:1:-;-1:-1:-1;;;;;4121:20:1;;4113:70;;;;-1:-1:-1;;;4113:70:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;4202:23:1;;4194:71;;;;-1:-1:-1;;;4194:71:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;4302:17:1;;4278:21;4302:17;;;;;;;;;;;4338:23;;;;4330:74;;;;-1:-1:-1;;;4330:74:1;;22373:2:3;4330:74:1;;;22355:21:3;22412:2;22392:18;;;22385:30;22451:34;22431:18;;;22424:62;-1:-1:-1;;;22502:18:3;;;22495:36;22548:19;;4330:74:1;22171:402:3;4330:74:1;-1:-1:-1;;;;;4440:17:1;;;:9;:17;;;;;;;;;;;4460:22;;;4440:42;;4504:20;;;;;;;;:30;;4476:6;;4440:9;4504:30;;4476:6;;4504:30;:::i;:::-;;;;;;;;4569:9;-1:-1:-1;;;;;4552:35:1;4561:6;-1:-1:-1;;;;;4552:35:1;;4580:6;4552:35;;;;2027:25:3;;2015:2;2000:18;;1881:177;4552:35:1;;;;;;;;4102:493;3981:614;;;:::o;4902:550::-;-1:-1:-1;;;;;4986:21:1;;4978:67;;;;-1:-1:-1;;;4978:67:1;;22780:2:3;4978:67:1;;;22762:21:3;22819:2;22799:18;;;22792:30;22858:34;22838:18;;;22831:62;-1:-1:-1;;;22909:18:3;;;22902:31;22950:19;;4978:67:1;22578:397:3;4978:67:1;-1:-1:-1;;;;;5081:18:1;;5056:22;5081:18;;;;;;;;;;;5118:24;;;;5110:71;;;;-1:-1:-1;;;5110:71:1;;23182:2:3;5110:71:1;;;23164:21:3;23221:2;23201:18;;;23194:30;23260:34;23240:18;;;23233:62;-1:-1:-1;;;23311:18:3;;;23304:32;23353:19;;5110:71:1;22980:398:3;5110:71:1;-1:-1:-1;;;;;5217:18:1;;:9;:18;;;;;;;;;;;5238:23;;;5217:44;;5356:12;:22;;;;;;;5407:37;2027:25:3;;;5217:9:1;;:18;5407:37;;2000:18:3;5407:37:1;1881:177:3;16087:573:2;16239:16;;;16253:1;16239:16;;;;;;;;16215:21;;16239:16;;;;;;;;;;-1:-1:-1;16239:16:2;16215:40;;16284:4;16266;16271:1;16266:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16266:23:2;;;:7;;;;;;;;;;:23;;;;16310:9;;:16;;;-1:-1:-1;;;16310:16:2;;;;:9;;;;;:14;;:16;;;;;16266:7;;16310:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16300:4;16305:1;16300:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16300:26:2;;;:7;;;;;;;;;:26;16371:9;;16339:56;;16356:4;;16371:9;16383:11;16339:8;:56::i;:::-;16434:9;;:218;;-1:-1:-1;;;16434:218:2;;-1:-1:-1;;;;;16434:9:2;;;;:60;;:218;;16509:11;;16434:9;;16579:4;;16606;;16626:15;;16434:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16142:518;16087:573;:::o;8648:207::-;-1:-1:-1;;;;;8736:39:2;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;8736:52:2;;;;;;;;;;8804:43;;24138:51:3;;;24205:18;;;24198:50;8804:43:2;;24111:18:3;8804:43:2;;;;;;;8648:207;;:::o;1455:119::-;1526:6;;1500:7;;-1:-1:-1;;;;;1526:6:2;:18;:40;;-1:-1:-1;1560:6:2;;-1:-1:-1;;;;;1560:6:2;;1455:119::o;1526:40::-;-1:-1:-1;1547:10:2;;-1:-1:-1;;;;;1547:10:2;;1455:119::o;14:597:3:-;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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:3;574:15;-1:-1:-1;;570:29:3;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:3:o;842:131::-;-1:-1:-1;;;;;917:31:3;;907:42;;897:70;;963:1;960;953:12;978:134;1046:20;;1075:31;1046:20;1075:31;:::i;:::-;978:134;;;:::o;1117:315::-;1185:6;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;1422:2;1407:18;;;;1394:32;;-1:-1:-1;;;1117:315:3:o;1629:247::-;1688:6;1741:2;1729:9;1720:7;1716:23;1712:32;1709:52;;;1757:1;1754;1747:12;1709:52;1796:9;1783:23;1815:31;1840:5;1815:31;:::i;:::-;1865:5;1629:247;-1:-1:-1;;;1629:247:3:o;2063:180::-;2122:6;2175:2;2163:9;2154:7;2150:23;2146:32;2143:52;;;2191:1;2188;2181:12;2143:52;-1:-1:-1;2214:23:3;;2063:180;-1:-1:-1;2063:180:3:o;2248:456::-;2325:6;2333;2341;2394:2;2382:9;2373:7;2369:23;2365:32;2362:52;;;2410:1;2407;2400:12;2362:52;2449:9;2436:23;2468:31;2493:5;2468:31;:::i;:::-;2518:5;-1:-1:-1;2575:2:3;2560:18;;2547:32;2588:33;2547:32;2588:33;:::i;:::-;2248:456;;2640:7;;-1:-1:-1;;;2694:2:3;2679:18;;;;2666:32;;2248:456::o;2709:118::-;2795:5;2788:13;2781:21;2774:5;2771:32;2761:60;;2817:1;2814;2807:12;2832:382;2897:6;2905;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;3013:9;3000:23;3032:31;3057:5;3032:31;:::i;:::-;3082:5;-1:-1:-1;3139:2:3;3124:18;;3111:32;3152:30;3111:32;3152:30;:::i;:::-;3201:7;3191:17;;;2832:382;;;;;:::o;3219:689::-;3314:6;3322;3330;3383:2;3371:9;3362:7;3358:23;3354:32;3351:52;;;3399:1;3396;3389:12;3351:52;3439:9;3426:23;3468:18;3509:2;3501:6;3498:14;3495:34;;;3525:1;3522;3515:12;3495:34;3563:6;3552:9;3548:22;3538:32;;3608:7;3601:4;3597:2;3593:13;3589:27;3579:55;;3630:1;3627;3620:12;3579:55;3670:2;3657:16;3696:2;3688:6;3685:14;3682:34;;;3712:1;3709;3702:12;3682:34;3767:7;3760:4;3750:6;3747:1;3743:14;3739:2;3735:23;3731:34;3728:47;3725:67;;;3788:1;3785;3778:12;3725:67;3819:4;3811:13;;;;3843:6;;-1:-1:-1;3881:20:3;;;;3868:34;;3219:689;-1:-1:-1;;;;3219:689:3:o;3913:385::-;3999:6;4007;4015;4023;4076:3;4064:9;4055:7;4051:23;4047:33;4044:53;;;4093:1;4090;4083:12;4044:53;-1:-1:-1;;4116:23:3;;;4186:2;4171:18;;4158:32;;-1:-1:-1;4237:2:3;4222:18;;4209:32;;4288:2;4273:18;4260:32;;-1:-1:-1;3913:385:3;-1:-1:-1;3913:385:3:o;4700:127::-;4761:10;4756:3;4752:20;4749:1;4742:31;4792:4;4789:1;4782:15;4816:4;4813:1;4806:15;4832:1191;4925:6;4933;4986:2;4974:9;4965:7;4961:23;4957:32;4954:52;;;5002:1;4999;4992:12;4954:52;5042:9;5029:23;5071:18;5112:2;5104:6;5101:14;5098:34;;;5128:1;5125;5118:12;5098:34;5166:6;5155:9;5151:22;5141:32;;5211:7;5204:4;5200:2;5196:13;5192:27;5182:55;;5233:1;5230;5223:12;5182:55;5269:2;5256:16;5291:4;5314:2;5310;5307:10;5304:36;;;5320:18;;:::i;:::-;5366:2;5363:1;5359:10;5398:2;5392:9;5461:2;5457:7;5452:2;5448;5444:11;5440:25;5432:6;5428:38;5516:6;5504:10;5501:22;5496:2;5484:10;5481:18;5478:46;5475:72;;;5527:18;;:::i;:::-;5563:2;5556:22;5613:18;;;5647:15;;;;-1:-1:-1;5689:11:3;;;5685:20;;;5717:19;;;5714:39;;;5749:1;5746;5739:12;5714:39;5773:11;;;;5793:148;5809:6;5804:3;5801:15;5793:148;;;5875:23;5894:3;5875:23;:::i;:::-;5863:36;;5826:12;;;;5919;;;;5793:148;;;5960:6;5998:18;;;;5985:32;;-1:-1:-1;;;;;;;4832:1191:3:o;6028:388::-;6096:6;6104;6157:2;6145:9;6136:7;6132:23;6128:32;6125:52;;;6173:1;6170;6163:12;6125:52;6212:9;6199:23;6231:31;6256:5;6231:31;:::i;:::-;6281:5;-1:-1:-1;6338:2:3;6323:18;;6310:32;6351:33;6310:32;6351:33;:::i;6421:380::-;6500:1;6496:12;;;;6543;;;6564:61;;6618:4;6610:6;6606:17;6596:27;;6564:61;6671:2;6663:6;6660:14;6640:18;6637:38;6634:161;;6717:10;6712:3;6708:20;6705:1;6698:31;6752:4;6749:1;6742:15;6780:4;6777:1;6770:15;6634:161;;6421:380;;;:::o;6806:184::-;6876:6;6929:2;6917:9;6908:7;6904:23;6900:32;6897:52;;;6945:1;6942;6935:12;6897:52;-1:-1:-1;6968:16:3;;6806:184;-1:-1:-1;6806:184:3:o;7621:245::-;7688:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:52;;;7757:1;7754;7747:12;7709:52;7789:9;7783:16;7808:28;7830:5;7808:28;:::i;7871:127::-;7932:10;7927:3;7923:20;7920:1;7913:31;7963:4;7960:1;7953:15;7987:4;7984:1;7977:15;8003:168;8043:7;8109:1;8105;8101:6;8097:14;8094:1;8091:21;8086:1;8079:9;8072:17;8068:45;8065:71;;;8116:18;;:::i;:::-;-1:-1:-1;8156:9:3;;8003:168::o;8176:217::-;8216:1;8242;8232:132;;8286:10;8281:3;8277:20;8274:1;8267:31;8321:4;8318:1;8311:15;8349:4;8346:1;8339:15;8232:132;-1:-1:-1;8378:9:3;;8176:217::o;9163:128::-;9203:3;9234:1;9230:6;9227:1;9224:13;9221:39;;;9240:18;;:::i;:::-;-1:-1:-1;9276:9:3;;9163:128::o;10113:127::-;10174:10;10169:3;10165:20;10162:1;10155:31;10205:4;10202:1;10195:15;10229:4;10226:1;10219:15;10245:135;10284:3;10305:17;;;10302:43;;10325:18;;:::i;:::-;-1:-1:-1;10372:1:3;10361:13;;10245:135::o;10385:353::-;10587:2;10569:21;;;10626:2;10606:18;;;10599:30;10665:31;10660:2;10645:18;;10638:59;10729:2;10714:18;;10385:353::o;12429:251::-;12499:6;12552:2;12540:9;12531:7;12527:23;12523:32;12520:52;;;12568:1;12565;12558:12;12520:52;12600:9;12594:16;12619:31;12644:5;12619:31;:::i;12685:461::-;12738:3;12776:5;12770:12;12803:6;12798:3;12791:19;12829:4;12858:2;12853:3;12849:12;12842:19;;12895:2;12888:5;12884:14;12916:1;12926:195;12940:6;12937:1;12934:13;12926:195;;;13005:13;;-1:-1:-1;;;;;13001:39:3;12989:52;;13061:12;;;;13096:15;;;;13037:1;12955:9;12926:195;;;-1:-1:-1;13137:3:3;;12685:461;-1:-1:-1;;;;;12685:461:3:o;13151:510::-;13422:6;13411:9;13404:25;13465:3;13460:2;13449:9;13445:18;13438:31;13385:4;13486:57;13538:3;13527:9;13523:19;13515:6;13486:57;:::i;:::-;-1:-1:-1;;;;;13579:32:3;;;;13574:2;13559:18;;13552:60;-1:-1:-1;13643:2:3;13628:18;13621:34;13478:65;13151:510;-1:-1:-1;;13151:510:3:o;18461:401::-;18663:2;18645:21;;;18702:2;18682:18;;;18675:30;18741:34;18736:2;18721:18;;18714:62;-1:-1:-1;;;18807:2:3;18792:18;;18785:35;18852:3;18837:19;;18461:401::o;18867:399::-;19069:2;19051:21;;;19108:2;19088:18;;;19081:30;19147:34;19142:2;19127:18;;19120:62;-1:-1:-1;;;19213:2:3;19198:18;;19191:33;19256:3;19241:19;;18867:399::o;20459:125::-;20499:4;20527:1;20524;20521:8;20518:34;;;20532:18;;:::i;:::-;-1:-1:-1;20569:9:3;;20459:125::o;23383:582::-;23682:6;23671:9;23664:25;23725:6;23720:2;23709:9;23705:18;23698:34;23768:3;23763:2;23752:9;23748:18;23741:31;23645:4;23789:57;23841:3;23830:9;23826:19;23818:6;23789:57;:::i;:::-;-1:-1:-1;;;;;23882:32:3;;;;23877:2;23862:18;;23855:60;-1:-1:-1;23946:3:3;23931:19;23924:35;23781:65;23383:582;-1:-1:-1;;;23383:582:3:o

Swarm Source

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