ETH Price: $3,506.60 (+0.17%)
Gas: 5 Gwei

Token

*zz*OLANA (zOLANA)
 

Overview

Max Total Supply

489,000,000 zOLANA

Holders

8

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.661496660298790833 zOLANA

Value
$0.00
0x8abAA38Ed51D040dd0bCF3cCe44304d7d12e1Cbd
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The place Ethereum enjoyers call home.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
zOLANA

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-17
*/

//      https://www.zzolana.com
//      https://t.me/zzolana

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

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

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

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

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

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}


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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

    uint256 public percentForLPBurn = 25;
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(unicode"*zz*OLANA", unicode"zOLANA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        uint256 totalSupply = 489_000_000 * 1e18;

        maxTransactionAmount = 489_000_000 * 1e18;
        maxWallet = 489_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x19A2C5E50CBF4824122d74bA904Ee9cc1FD0bEF5);
        devWallet = address(0x19A2C5E50CBF4824122d74bA904Ee9cc1FD0bEF5);

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function UNLEASHzOLANA() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 5, "Must keep fees at 5% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 5, "Must keep fees at 5% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    event BoughtEarly(address indexed sniper);

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

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

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

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

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

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

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"UNLEASHzOLANA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600981526020017f2a7a7a2a4f4c414e4100000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f7a4f4c414e41000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000b0f565b5080600490805190602001906200014792919062000b0f565b5050506200016a6200015e620005cf60201b60201c565b620005d760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000c29565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c29565b6040518363ffffffff1660e01b8152600401620002e992919062000c6c565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c29565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069d60201b60201c565b6200038c60a05160016200078760201b60201c565b60006005905060008060006005905060008060006b01947dc71e0571e88900000090506b01947dc71e0571e8890000006008819055506b01947dc71e0571e889000000600a81905550612710600582620003e7919062000cd2565b620003f3919062000d62565b60098190555086601581905550856016819055508460178190555060175460165460155462000423919062000d9a565b6200042f919062000d9a565b6014819055508360198190555082601a8190555081601b81905550601b54601a546019546200045f919062000d9a565b6200046b919062000d9a565b6018819055507319a2c5e50cbf4824122d74ba904ee9cc1fd0bef5600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507319a2c5e50cbf4824122d74ba904ee9cc1fd0bef5600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053d6200052f6200082860201b60201c565b60016200085260201b60201c565b620005503060016200085260201b60201c565b6200056561dead60016200085260201b60201c565b62000587620005796200082860201b60201c565b60016200069d60201b60201c565b6200059a3060016200069d60201b60201c565b620005af61dead60016200069d60201b60201c565b620005c133826200098c60201b60201c565b505050505050505062000fb9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006ad620005cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006d36200082860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200072c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007239062000e58565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000862620005cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008886200082860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d89062000e58565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000980919062000e97565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f69062000f04565b60405180910390fd5b62000a136000838362000b0560201b60201c565b806002600082825462000a27919062000d9a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a7e919062000d9a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ae5919062000f37565b60405180910390a362000b016000838362000b0a60201b60201c565b5050565b505050565b505050565b82805462000b1d9062000f83565b90600052602060002090601f01602090048101928262000b41576000855562000b8d565b82601f1062000b5c57805160ff191683800117855562000b8d565b8280016001018555821562000b8d579182015b8281111562000b8c57825182559160200191906001019062000b6f565b5b50905062000b9c919062000ba0565b5090565b5b8082111562000bbb57600081600090555060010162000ba1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bf18262000bc4565b9050919050565b62000c038162000be4565b811462000c0f57600080fd5b50565b60008151905062000c238162000bf8565b92915050565b60006020828403121562000c425762000c4162000bbf565b5b600062000c528482850162000c12565b91505092915050565b62000c668162000be4565b82525050565b600060408201905062000c83600083018562000c5b565b62000c92602083018462000c5b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cdf8262000c99565b915062000cec8362000c99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d285762000d2762000ca3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d6f8262000c99565b915062000d7c8362000c99565b92508262000d8f5762000d8e62000d33565b5b828204905092915050565b600062000da78262000c99565b915062000db48362000c99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dec5762000deb62000ca3565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e4060208362000df7565b915062000e4d8262000e08565b602082019050919050565b6000602082019050818103600083015262000e738162000e31565b9050919050565b60008115159050919050565b62000e918162000e7a565b82525050565b600060208201905062000eae600083018462000e86565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eec601f8362000df7565b915062000ef98262000eb4565b602082019050919050565b6000602082019050818103600083015262000f1f8162000edd565b9050919050565b62000f318162000c99565b82525050565b600060208201905062000f4e600083018462000f26565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f9c57607f821691505b6020821081141562000fb35762000fb262000f54565b5b50919050565b60805160a051615542620010416000396000818161118d015281816118e2015281816121e101528181612298015281816122c50152818161290901528181613a0d01528181613ac60152613af3015260008181610ec0015281816128b101528181613c6901528181613d4a01528181613d7101528181613e0d0152613e3401526155426000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d33578063f637434214610d5c578063f8b45b0514610d87578063fe72b27a14610db25761038c565b8063dd62ed3e14610c75578063e2f4560514610cb2578063e884f26014610cdd578063f11a24d314610d085761038c565b8063c876d0b9116100dc578063c876d0b914610bb7578063c8c8ebe414610be2578063d257b34f14610c0d578063d85ba06314610c4a5761038c565b8063bbc0c74214610b3a578063c024666814610b65578063c17b5b8c14610b8e5761038c565b80639ec22c0e1161016f578063a457c2d711610149578063a457c2d714610a58578063a4c82a0014610a95578063a9059cbb14610ac0578063b62496f514610afd5761038c565b80639ec22c0e146109d75780639fccce3214610a02578063a0d82dc514610a2d5761038c565b8063924de9b7116101ab578063924de9b71461092f57806395d89b41146109585780639a7a23d6146109835780639c3b4fdc146109ac5761038c565b80638da5cb5b146108ae5780638ea5220f146108d957806392136913146109045761038c565b80633423437a116102b657806370a08231116102545780637571336a116102235780637571336a1461080657806375f0a8741461082f5780637bce5a041461085a5780638095d564146108855761038c565b806370a082311461075e578063715018a61461079b578063730c1888146107b2578063751039fc146107db5761038c565b80634a62bb65116102905780634a62bb65146106a05780634fbee193146106cb5780636a486a8e146107085780636ddd1713146107335761038c565b80633423437a14610621578063395093511461063857806349bd5a5e146106755761038c565b80631a8145bb1161032357806327c8f835116102fd57806327c8f835146105755780632c3e486c146105a05780632e82f1a0146105cb578063313ce567146105f65761038c565b80631a8145bb146104e25780631f3fed8f1461050d57806323b872dd146105385761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd14610461578063184c16c51461048c578063199ffc72146104b75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610def565b6040516103b39190613f7c565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614037565b610e81565b6040516103f09190614092565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906140ad565b610e9f565b60405161042d9190614092565b60405180910390f35b34801561044257600080fd5b5061044b610ebe565b6040516104589190614139565b60405180910390f35b34801561046d57600080fd5b50610476610ee2565b6040516104839190614163565b60405180910390f35b34801561049857600080fd5b506104a1610eec565b6040516104ae9190614163565b60405180910390f35b3480156104c357600080fd5b506104cc610ef2565b6040516104d99190614163565b60405180910390f35b3480156104ee57600080fd5b506104f7610ef8565b6040516105049190614163565b60405180910390f35b34801561051957600080fd5b50610522610efe565b60405161052f9190614163565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a919061417e565b610f04565b60405161056c9190614092565b60405180910390f35b34801561058157600080fd5b5061058a610ffc565b60405161059791906141e0565b60405180910390f35b3480156105ac57600080fd5b506105b5611002565b6040516105c29190614163565b60405180910390f35b3480156105d757600080fd5b506105e0611008565b6040516105ed9190614092565b60405180910390f35b34801561060257600080fd5b5061060b61101b565b6040516106189190614217565b60405180910390f35b34801561062d57600080fd5b50610636611024565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614037565b6110df565b60405161066c9190614092565b60405180910390f35b34801561068157600080fd5b5061068a61118b565b60405161069791906141e0565b60405180910390f35b3480156106ac57600080fd5b506106b56111af565b6040516106c29190614092565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed91906140ad565b6111c2565b6040516106ff9190614092565b60405180910390f35b34801561071457600080fd5b5061071d611218565b60405161072a9190614163565b60405180910390f35b34801561073f57600080fd5b5061074861121e565b6040516107559190614092565b60405180910390f35b34801561076a57600080fd5b50610785600480360381019061078091906140ad565b611231565b6040516107929190614163565b60405180910390f35b3480156107a757600080fd5b506107b0611279565b005b3480156107be57600080fd5b506107d960048036038101906107d4919061425e565b611301565b005b3480156107e757600080fd5b506107f0611441565b6040516107fd9190614092565b60405180910390f35b34801561081257600080fd5b5061082d600480360381019061082891906142b1565b6114e1565b005b34801561083b57600080fd5b506108446115b8565b60405161085191906141e0565b60405180910390f35b34801561086657600080fd5b5061086f6115de565b60405161087c9190614163565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a791906142f1565b6115e4565b005b3480156108ba57600080fd5b506108c36116e3565b6040516108d091906141e0565b60405180910390f35b3480156108e557600080fd5b506108ee61170d565b6040516108fb91906141e0565b60405180910390f35b34801561091057600080fd5b50610919611733565b6040516109269190614163565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614344565b611739565b005b34801561096457600080fd5b5061096d6117d2565b60405161097a9190613f7c565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a591906142b1565b611864565b005b3480156109b857600080fd5b506109c161197d565b6040516109ce9190614163565b60405180910390f35b3480156109e357600080fd5b506109ec611983565b6040516109f99190614163565b60405180910390f35b348015610a0e57600080fd5b50610a17611989565b604051610a249190614163565b60405180910390f35b348015610a3957600080fd5b50610a4261198f565b604051610a4f9190614163565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190614037565b611995565b604051610a8c9190614092565b60405180910390f35b348015610aa157600080fd5b50610aaa611a80565b604051610ab79190614163565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614037565b611a86565b604051610af49190614092565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f91906140ad565b611aa4565b604051610b319190614092565b60405180910390f35b348015610b4657600080fd5b50610b4f611ac4565b604051610b5c9190614092565b60405180910390f35b348015610b7157600080fd5b50610b8c6004803603810190610b8791906142b1565b611ad7565b005b348015610b9a57600080fd5b50610bb56004803603810190610bb091906142f1565b611bfc565b005b348015610bc357600080fd5b50610bcc611cfb565b604051610bd99190614092565b60405180910390f35b348015610bee57600080fd5b50610bf7611d0e565b604051610c049190614163565b60405180910390f35b348015610c1957600080fd5b50610c346004803603810190610c2f9190614371565b611d14565b604051610c419190614092565b60405180910390f35b348015610c5657600080fd5b50610c5f611e69565b604051610c6c9190614163565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c97919061439e565b611e6f565b604051610ca99190614163565b60405180910390f35b348015610cbe57600080fd5b50610cc7611ef6565b604051610cd49190614163565b60405180910390f35b348015610ce957600080fd5b50610cf2611efc565b604051610cff9190614092565b60405180910390f35b348015610d1457600080fd5b50610d1d611f9c565b604051610d2a9190614163565b60405180910390f35b348015610d3f57600080fd5b50610d5a6004803603810190610d5591906140ad565b611fa2565b005b348015610d6857600080fd5b50610d7161209a565b604051610d7e9190614163565b60405180910390f35b348015610d9357600080fd5b50610d9c6120a0565b604051610da99190614163565b60405180910390f35b348015610dbe57600080fd5b50610dd96004803603810190610dd49190614371565b6120a6565b604051610de69190614092565b60405180910390f35b606060038054610dfe9061440d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2a9061440d565b8015610e775780601f10610e4c57610100808354040283529160200191610e77565b820191906000526020600020905b815481529060010190602001808311610e5a57829003601f168201915b5050505050905090565b6000610e95610e8e61237e565b8484612386565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601d5481565b601c5481565b6000610f11848484612551565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5c61237e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906144b1565b60405180910390fd5b610ff085610fe861237e565b858403612386565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b61102c61237e565b73ffffffffffffffffffffffffffffffffffffffff1661104a6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110979061451d565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006111816110ec61237e565b8484600160006110fa61237e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461117c919061456c565b612386565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128161237e565b73ffffffffffffffffffffffffffffffffffffffff1661129f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec9061451d565b60405180910390fd5b6112ff60006132e9565b565b61130961237e565b73ffffffffffffffffffffffffffffffffffffffff166113276116e3565b73ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113749061451d565b60405180910390fd5b6102588310156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614634565b60405180910390fd5b6103e882111580156113d5575060008210155b611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b906146c6565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061144b61237e565b73ffffffffffffffffffffffffffffffffffffffff166114696116e3565b73ffffffffffffffffffffffffffffffffffffffff16146114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b69061451d565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6114e961237e565b73ffffffffffffffffffffffffffffffffffffffff166115076116e3565b73ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115549061451d565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6115ec61237e565b73ffffffffffffffffffffffffffffffffffffffff1661160a6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061451d565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611688919061456c565b611692919061456c565b601481905550600560145411156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614732565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b61174161237e565b73ffffffffffffffffffffffffffffffffffffffff1661175f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061451d565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546117e19061440d565b80601f016020809104026020016040519081016040528092919081815260200182805461180d9061440d565b801561185a5780601f1061182f5761010080835404028352916020019161185a565b820191906000526020600020905b81548152906001019060200180831161183d57829003601f168201915b5050505050905090565b61186c61237e565b73ffffffffffffffffffffffffffffffffffffffff1661188a6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d79061451d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906147c4565b60405180910390fd5b61197982826133af565b5050565b60175481565b60105481565b601e5481565b601b5481565b600080600160006119a461237e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890614856565b60405180910390fd5b611a75611a6c61237e565b85858403612386565b600191505092915050565b600e5481565b6000611a9a611a9361237e565b8484612551565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611adf61237e565b73ffffffffffffffffffffffffffffffffffffffff16611afd6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061451d565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bf09190614092565b60405180910390a25050565b611c0461237e565b73ffffffffffffffffffffffffffffffffffffffff16611c226116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f9061451d565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611ca0919061456c565b611caa919061456c565b60188190555060056018541115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614732565b60405180910390fd5b505050565b601360009054906101000a900460ff1681565b60085481565b6000611d1e61237e565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d899061451d565b60405180910390fd5b620186a06001611da0610ee2565b611daa9190614876565b611db491906148ff565b821015611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906149a2565b60405180910390fd5b6103e86005611e03610ee2565b611e0d9190614876565b611e1791906148ff565b821115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614a34565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f0661237e565b73ffffffffffffffffffffffffffffffffffffffff16611f246116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f719061451d565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611faa61237e565b73ffffffffffffffffffffffffffffffffffffffff16611fc86116e3565b73ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120159061451d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614ac6565b60405180910390fd5b612097816132e9565b50565b601a5481565b600a5481565b60006120b061237e565b73ffffffffffffffffffffffffffffffffffffffff166120ce6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b9061451d565b60405180910390fd5b600f54601054612134919061456c565b4211612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614b32565b60405180910390fd5b6103e88211156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614bc4565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161221c91906141e0565b602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614bf9565b9050600061228861271061227a868561345090919063ffffffff16565b61346690919063ffffffff16565b905060008111156122c1576122c07f000000000000000000000000000000000000000000000000000000000000000061dead8361347c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015612342573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90614c98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614d2a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125449190614163565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b890614dbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262890614e4e565b60405180910390fd5b600081141561264b576126468383600061347c565b6132e4565b601160009054906101000a900460ff1615612d0e576126686116e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d657506126a66116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612749575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127625750600560149054906101000a900460ff16155b15612d0d57601160019054906101000a900460ff1661285c57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061281c5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61285b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285290614eba565b60405180910390fd5b5b601360009054906101000a900460ff1615612a24576128796116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561290057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a235743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106129de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d590614f72565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ac75750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6e57600854811115612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890615004565b60405180910390fd5b600a54612b1d83611231565b82612b28919061456c565b1115612b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6090615070565b60405180910390fd5b612d0c565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c115750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6057600854811115612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5290615102565b60405180910390fd5b612d0b565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d0a57600a54612cbd83611231565b82612cc8919061456c565b1115612d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0090615070565b60405180910390fd5b5b5b5b5b5b6000612d1930611231565b905060006009548210159050808015612d3e5750601160029054906101000a900460ff165b8015612d575750600560149054906101000a900460ff16155b8015612dad5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e035750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e595750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9d576001600560146101000a81548160ff021916908315150217905550612e816136fd565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612f035750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f1b5750600c60009054906101000a900460ff165b8015612f365750600d54600e54612f32919061456c565b4210155b8015612f8c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9b57612f996139e4565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130515750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561305b57600090505b600081156132d457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130be57506000601854115b1561318b576130eb60646130dd6018548861345090919063ffffffff16565b61346690919063ffffffff16565b9050601854601a54826130fe9190614876565b61310891906148ff565b601d6000828254613119919061456c565b92505081905550601854601b54826131319190614876565b61313b91906148ff565b601e600082825461314c919061456c565b92505081905550601854601954826131649190614876565b61316e91906148ff565b601c600082825461317f919061456c565b925050819055506132b0565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131e657506000601454115b156132af5761321360646132056014548861345090919063ffffffff16565b61346690919063ffffffff16565b9050601454601654826132269190614876565b61323091906148ff565b601d6000828254613241919061456c565b92505081905550601454601754826132599190614876565b61326391906148ff565b601e6000828254613274919061456c565b925050819055506014546015548261328c9190614876565b61329691906148ff565b601c60008282546132a7919061456c565b925050819055505b5b60008111156132c5576132c487308361347c565b5b80856132d19190615122565b94505b6132df87878761347c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361345e9190614876565b905092915050565b6000818361347491906148ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e390614dbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561355c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355390614e4e565b60405180910390fd5b613567838383613baa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e4906151c8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613680919061456c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136e49190614163565b60405180910390a36136f7848484613baf565b50505050565b600061370830611231565b90506000601e54601c54601d5461371f919061456c565b613729919061456c565b905060008083148061373b5750600082145b15613748575050506139e2565b60146009546137579190614876565b83111561377057601460095461376d9190614876565b92505b6000600283601d54866137839190614876565b61378d91906148ff565b61379791906148ff565b905060006137ae8286613bb490919063ffffffff16565b905060004790506137be82613bca565b60006137d38247613bb490919063ffffffff16565b905060006137fe876137f0601c548561345090919063ffffffff16565b61346690919063ffffffff16565b905060006138298861381b601e548661345090919063ffffffff16565b61346690919063ffffffff16565b9050600081838561383a9190615122565b6138449190615122565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138a490615219565b60006040518083038185875af1925050503d80600081146138e1576040519150601f19603f3d011682016040523d82523d6000602084013e6138e6565b606091505b5050809850506000871180156138fc5750600081115b156139495761390b8782613e07565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516139409392919061522e565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398f90615219565b60006040518083038185875af1925050503d80600081146139cc576040519150601f19603f3d011682016040523d82523d6000602084013e6139d1565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613a4891906141e0565b602060405180830381865afa158015613a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a899190614bf9565b90506000613ab6612710613aa8600b548561345090919063ffffffff16565b61346690919063ffffffff16565b90506000811115613aef57613aee7f000000000000000000000000000000000000000000000000000000000000000061dead8361347c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b5c57600080fd5b505af1158015613b70573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613bc29190615122565b905092915050565b6000600267ffffffffffffffff811115613be757613be6615265565b5b604051908082528060200260200182016040528015613c155781602001602082028036833780820191505090505b5090503081600081518110613c2d57613c2c615294565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf691906152d8565b81600181518110613d0a57613d09615294565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d6f307f000000000000000000000000000000000000000000000000000000000000000084612386565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd19594939291906153fe565b600060405180830381600087803b158015613deb57600080fd5b505af1158015613dff573d6000803e3d6000fd5b505050505050565b613e32307f000000000000000000000000000000000000000000000000000000000000000084612386565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613e9996959493929190615458565b60606040518083038185885af1158015613eb7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613edc91906154b9565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f1d578082015181840152602081019050613f02565b83811115613f2c576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f4e82613ee3565b613f588185613eee565b9350613f68818560208601613eff565b613f7181613f32565b840191505092915050565b60006020820190508181036000830152613f968184613f43565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fce82613fa3565b9050919050565b613fde81613fc3565b8114613fe957600080fd5b50565b600081359050613ffb81613fd5565b92915050565b6000819050919050565b61401481614001565b811461401f57600080fd5b50565b6000813590506140318161400b565b92915050565b6000806040838503121561404e5761404d613f9e565b5b600061405c85828601613fec565b925050602061406d85828601614022565b9150509250929050565b60008115159050919050565b61408c81614077565b82525050565b60006020820190506140a76000830184614083565b92915050565b6000602082840312156140c3576140c2613f9e565b5b60006140d184828501613fec565b91505092915050565b6000819050919050565b60006140ff6140fa6140f584613fa3565b6140da565b613fa3565b9050919050565b6000614111826140e4565b9050919050565b600061412382614106565b9050919050565b61413381614118565b82525050565b600060208201905061414e600083018461412a565b92915050565b61415d81614001565b82525050565b60006020820190506141786000830184614154565b92915050565b60008060006060848603121561419757614196613f9e565b5b60006141a586828701613fec565b93505060206141b686828701613fec565b92505060406141c786828701614022565b9150509250925092565b6141da81613fc3565b82525050565b60006020820190506141f560008301846141d1565b92915050565b600060ff82169050919050565b614211816141fb565b82525050565b600060208201905061422c6000830184614208565b92915050565b61423b81614077565b811461424657600080fd5b50565b60008135905061425881614232565b92915050565b60008060006060848603121561427757614276613f9e565b5b600061428586828701614022565b935050602061429686828701614022565b92505060406142a786828701614249565b9150509250925092565b600080604083850312156142c8576142c7613f9e565b5b60006142d685828601613fec565b92505060206142e785828601614249565b9150509250929050565b60008060006060848603121561430a57614309613f9e565b5b600061431886828701614022565b935050602061432986828701614022565b925050604061433a86828701614022565b9150509250925092565b60006020828403121561435a57614359613f9e565b5b600061436884828501614249565b91505092915050565b60006020828403121561438757614386613f9e565b5b600061439584828501614022565b91505092915050565b600080604083850312156143b5576143b4613f9e565b5b60006143c385828601613fec565b92505060206143d485828601613fec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442557607f821691505b60208210811415614439576144386143de565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061449b602883613eee565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614507602083613eee565b9150614512826144d1565b602082019050919050565b60006020820190508181036000830152614536816144fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061457782614001565b915061458283614001565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b7576145b661453d565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061461e603383613eee565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006146b0603083613eee565b91506146bb82614654565b604082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b600061471c601c83613eee565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147ae603983613eee565b91506147b982614752565b604082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614840602583613eee565b915061484b826147e4565b604082019050919050565b6000602082019050818103600083015261486f81614833565b9050919050565b600061488182614001565b915061488c83614001565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148c5576148c461453d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061490a82614001565b915061491583614001565b925082614925576149246148d0565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061498c603583613eee565b915061499782614930565b604082019050919050565b600060208201905081810360008301526149bb8161497f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a1e603483613eee565b9150614a29826149c2565b604082019050919050565b60006020820190508181036000830152614a4d81614a11565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ab0602683613eee565b9150614abb82614a54565b604082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614b1c602083613eee565b9150614b2782614ae6565b602082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614bae602a83613eee565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b600081519050614bf38161400b565b92915050565b600060208284031215614c0f57614c0e613f9e565b5b6000614c1d84828501614be4565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c82602483613eee565b9150614c8d82614c26565b604082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d14602283613eee565b9150614d1f82614cb8565b604082019050919050565b60006020820190508181036000830152614d4381614d07565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614da6602583613eee565b9150614db182614d4a565b604082019050919050565b60006020820190508181036000830152614dd581614d99565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e38602383613eee565b9150614e4382614ddc565b604082019050919050565b60006020820190508181036000830152614e6781614e2b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ea4601683613eee565b9150614eaf82614e6e565b602082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f5c604983613eee565b9150614f6782614eda565b606082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fee603583613eee565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061505a601383613eee565b915061506582615024565b602082019050919050565b600060208201905081810360008301526150898161504d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150ec603683613eee565b91506150f782615090565b604082019050919050565b6000602082019050818103600083015261511b816150df565b9050919050565b600061512d82614001565b915061513883614001565b92508282101561514b5761514a61453d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006151b2602683613eee565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b600081905092915050565b50565b60006152036000836151e8565b915061520e826151f3565b600082019050919050565b6000615224826151f6565b9150819050919050565b60006060820190506152436000830186614154565b6152506020830185614154565b61525d6040830184614154565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152d281613fd5565b92915050565b6000602082840312156152ee576152ed613f9e565b5b60006152fc848285016152c3565b91505092915050565b6000819050919050565b600061532a61532561532084615305565b6140da565b614001565b9050919050565b61533a8161530f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61537581613fc3565b82525050565b6000615387838361536c565b60208301905092915050565b6000602082019050919050565b60006153ab82615340565b6153b5818561534b565b93506153c08361535c565b8060005b838110156153f15781516153d8888261537b565b97506153e383615393565b9250506001810190506153c4565b5085935050505092915050565b600060a0820190506154136000830188614154565b6154206020830187615331565b818103604083015261543281866153a0565b905061544160608301856141d1565b61544e6080830184614154565b9695505050505050565b600060c08201905061546d60008301896141d1565b61547a6020830188614154565b6154876040830187615331565b6154946060830186615331565b6154a160808301856141d1565b6154ae60a0830184614154565b979650505050505050565b6000806000606084860312156154d2576154d1613f9e565b5b60006154e086828701614be4565b93505060206154f186828701614be4565b925050604061550286828701614be4565b915050925092509256fea2646970667358221220d96c56839f96817cd3dd5a022240fe5746675364e53288457b9e270f5d068b7664736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d33578063f637434214610d5c578063f8b45b0514610d87578063fe72b27a14610db25761038c565b8063dd62ed3e14610c75578063e2f4560514610cb2578063e884f26014610cdd578063f11a24d314610d085761038c565b8063c876d0b9116100dc578063c876d0b914610bb7578063c8c8ebe414610be2578063d257b34f14610c0d578063d85ba06314610c4a5761038c565b8063bbc0c74214610b3a578063c024666814610b65578063c17b5b8c14610b8e5761038c565b80639ec22c0e1161016f578063a457c2d711610149578063a457c2d714610a58578063a4c82a0014610a95578063a9059cbb14610ac0578063b62496f514610afd5761038c565b80639ec22c0e146109d75780639fccce3214610a02578063a0d82dc514610a2d5761038c565b8063924de9b7116101ab578063924de9b71461092f57806395d89b41146109585780639a7a23d6146109835780639c3b4fdc146109ac5761038c565b80638da5cb5b146108ae5780638ea5220f146108d957806392136913146109045761038c565b80633423437a116102b657806370a08231116102545780637571336a116102235780637571336a1461080657806375f0a8741461082f5780637bce5a041461085a5780638095d564146108855761038c565b806370a082311461075e578063715018a61461079b578063730c1888146107b2578063751039fc146107db5761038c565b80634a62bb65116102905780634a62bb65146106a05780634fbee193146106cb5780636a486a8e146107085780636ddd1713146107335761038c565b80633423437a14610621578063395093511461063857806349bd5a5e146106755761038c565b80631a8145bb1161032357806327c8f835116102fd57806327c8f835146105755780632c3e486c146105a05780632e82f1a0146105cb578063313ce567146105f65761038c565b80631a8145bb146104e25780631f3fed8f1461050d57806323b872dd146105385761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd14610461578063184c16c51461048c578063199ffc72146104b75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610def565b6040516103b39190613f7c565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614037565b610e81565b6040516103f09190614092565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906140ad565b610e9f565b60405161042d9190614092565b60405180910390f35b34801561044257600080fd5b5061044b610ebe565b6040516104589190614139565b60405180910390f35b34801561046d57600080fd5b50610476610ee2565b6040516104839190614163565b60405180910390f35b34801561049857600080fd5b506104a1610eec565b6040516104ae9190614163565b60405180910390f35b3480156104c357600080fd5b506104cc610ef2565b6040516104d99190614163565b60405180910390f35b3480156104ee57600080fd5b506104f7610ef8565b6040516105049190614163565b60405180910390f35b34801561051957600080fd5b50610522610efe565b60405161052f9190614163565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a919061417e565b610f04565b60405161056c9190614092565b60405180910390f35b34801561058157600080fd5b5061058a610ffc565b60405161059791906141e0565b60405180910390f35b3480156105ac57600080fd5b506105b5611002565b6040516105c29190614163565b60405180910390f35b3480156105d757600080fd5b506105e0611008565b6040516105ed9190614092565b60405180910390f35b34801561060257600080fd5b5061060b61101b565b6040516106189190614217565b60405180910390f35b34801561062d57600080fd5b50610636611024565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614037565b6110df565b60405161066c9190614092565b60405180910390f35b34801561068157600080fd5b5061068a61118b565b60405161069791906141e0565b60405180910390f35b3480156106ac57600080fd5b506106b56111af565b6040516106c29190614092565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed91906140ad565b6111c2565b6040516106ff9190614092565b60405180910390f35b34801561071457600080fd5b5061071d611218565b60405161072a9190614163565b60405180910390f35b34801561073f57600080fd5b5061074861121e565b6040516107559190614092565b60405180910390f35b34801561076a57600080fd5b50610785600480360381019061078091906140ad565b611231565b6040516107929190614163565b60405180910390f35b3480156107a757600080fd5b506107b0611279565b005b3480156107be57600080fd5b506107d960048036038101906107d4919061425e565b611301565b005b3480156107e757600080fd5b506107f0611441565b6040516107fd9190614092565b60405180910390f35b34801561081257600080fd5b5061082d600480360381019061082891906142b1565b6114e1565b005b34801561083b57600080fd5b506108446115b8565b60405161085191906141e0565b60405180910390f35b34801561086657600080fd5b5061086f6115de565b60405161087c9190614163565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a791906142f1565b6115e4565b005b3480156108ba57600080fd5b506108c36116e3565b6040516108d091906141e0565b60405180910390f35b3480156108e557600080fd5b506108ee61170d565b6040516108fb91906141e0565b60405180910390f35b34801561091057600080fd5b50610919611733565b6040516109269190614163565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614344565b611739565b005b34801561096457600080fd5b5061096d6117d2565b60405161097a9190613f7c565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a591906142b1565b611864565b005b3480156109b857600080fd5b506109c161197d565b6040516109ce9190614163565b60405180910390f35b3480156109e357600080fd5b506109ec611983565b6040516109f99190614163565b60405180910390f35b348015610a0e57600080fd5b50610a17611989565b604051610a249190614163565b60405180910390f35b348015610a3957600080fd5b50610a4261198f565b604051610a4f9190614163565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190614037565b611995565b604051610a8c9190614092565b60405180910390f35b348015610aa157600080fd5b50610aaa611a80565b604051610ab79190614163565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614037565b611a86565b604051610af49190614092565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f91906140ad565b611aa4565b604051610b319190614092565b60405180910390f35b348015610b4657600080fd5b50610b4f611ac4565b604051610b5c9190614092565b60405180910390f35b348015610b7157600080fd5b50610b8c6004803603810190610b8791906142b1565b611ad7565b005b348015610b9a57600080fd5b50610bb56004803603810190610bb091906142f1565b611bfc565b005b348015610bc357600080fd5b50610bcc611cfb565b604051610bd99190614092565b60405180910390f35b348015610bee57600080fd5b50610bf7611d0e565b604051610c049190614163565b60405180910390f35b348015610c1957600080fd5b50610c346004803603810190610c2f9190614371565b611d14565b604051610c419190614092565b60405180910390f35b348015610c5657600080fd5b50610c5f611e69565b604051610c6c9190614163565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c97919061439e565b611e6f565b604051610ca99190614163565b60405180910390f35b348015610cbe57600080fd5b50610cc7611ef6565b604051610cd49190614163565b60405180910390f35b348015610ce957600080fd5b50610cf2611efc565b604051610cff9190614092565b60405180910390f35b348015610d1457600080fd5b50610d1d611f9c565b604051610d2a9190614163565b60405180910390f35b348015610d3f57600080fd5b50610d5a6004803603810190610d5591906140ad565b611fa2565b005b348015610d6857600080fd5b50610d7161209a565b604051610d7e9190614163565b60405180910390f35b348015610d9357600080fd5b50610d9c6120a0565b604051610da99190614163565b60405180910390f35b348015610dbe57600080fd5b50610dd96004803603810190610dd49190614371565b6120a6565b604051610de69190614092565b60405180910390f35b606060038054610dfe9061440d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2a9061440d565b8015610e775780601f10610e4c57610100808354040283529160200191610e77565b820191906000526020600020905b815481529060010190602001808311610e5a57829003601f168201915b5050505050905090565b6000610e95610e8e61237e565b8484612386565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601d5481565b601c5481565b6000610f11848484612551565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5c61237e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906144b1565b60405180910390fd5b610ff085610fe861237e565b858403612386565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b61102c61237e565b73ffffffffffffffffffffffffffffffffffffffff1661104a6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110979061451d565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006111816110ec61237e565b8484600160006110fa61237e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461117c919061456c565b612386565b6001905092915050565b7f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128161237e565b73ffffffffffffffffffffffffffffffffffffffff1661129f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec9061451d565b60405180910390fd5b6112ff60006132e9565b565b61130961237e565b73ffffffffffffffffffffffffffffffffffffffff166113276116e3565b73ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113749061451d565b60405180910390fd5b6102588310156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614634565b60405180910390fd5b6103e882111580156113d5575060008210155b611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b906146c6565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061144b61237e565b73ffffffffffffffffffffffffffffffffffffffff166114696116e3565b73ffffffffffffffffffffffffffffffffffffffff16146114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b69061451d565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6114e961237e565b73ffffffffffffffffffffffffffffffffffffffff166115076116e3565b73ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115549061451d565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6115ec61237e565b73ffffffffffffffffffffffffffffffffffffffff1661160a6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061451d565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611688919061456c565b611692919061456c565b601481905550600560145411156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614732565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b61174161237e565b73ffffffffffffffffffffffffffffffffffffffff1661175f6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061451d565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546117e19061440d565b80601f016020809104026020016040519081016040528092919081815260200182805461180d9061440d565b801561185a5780601f1061182f5761010080835404028352916020019161185a565b820191906000526020600020905b81548152906001019060200180831161183d57829003601f168201915b5050505050905090565b61186c61237e565b73ffffffffffffffffffffffffffffffffffffffff1661188a6116e3565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d79061451d565b60405180910390fd5b7f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906147c4565b60405180910390fd5b61197982826133af565b5050565b60175481565b60105481565b601e5481565b601b5481565b600080600160006119a461237e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890614856565b60405180910390fd5b611a75611a6c61237e565b85858403612386565b600191505092915050565b600e5481565b6000611a9a611a9361237e565b8484612551565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611adf61237e565b73ffffffffffffffffffffffffffffffffffffffff16611afd6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061451d565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bf09190614092565b60405180910390a25050565b611c0461237e565b73ffffffffffffffffffffffffffffffffffffffff16611c226116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f9061451d565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611ca0919061456c565b611caa919061456c565b60188190555060056018541115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614732565b60405180910390fd5b505050565b601360009054906101000a900460ff1681565b60085481565b6000611d1e61237e565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d899061451d565b60405180910390fd5b620186a06001611da0610ee2565b611daa9190614876565b611db491906148ff565b821015611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906149a2565b60405180910390fd5b6103e86005611e03610ee2565b611e0d9190614876565b611e1791906148ff565b821115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614a34565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f0661237e565b73ffffffffffffffffffffffffffffffffffffffff16611f246116e3565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f719061451d565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611faa61237e565b73ffffffffffffffffffffffffffffffffffffffff16611fc86116e3565b73ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120159061451d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614ac6565b60405180910390fd5b612097816132e9565b50565b601a5481565b600a5481565b60006120b061237e565b73ffffffffffffffffffffffffffffffffffffffff166120ce6116e3565b73ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b9061451d565b60405180910390fd5b600f54601054612134919061456c565b4211612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614b32565b60405180910390fd5b6103e88211156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614bc4565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e006040518263ffffffff1660e01b815260040161221c91906141e0565b602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614bf9565b9050600061228861271061227a868561345090919063ffffffff16565b61346690919063ffffffff16565b905060008111156122c1576122c07f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0061dead8361347c565b5b60007f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015612342573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90614c98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614d2a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125449190614163565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b890614dbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262890614e4e565b60405180910390fd5b600081141561264b576126468383600061347c565b6132e4565b601160009054906101000a900460ff1615612d0e576126686116e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d657506126a66116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612749575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127625750600560149054906101000a900460ff16155b15612d0d57601160019054906101000a900460ff1661285c57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061281c5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61285b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285290614eba565b60405180910390fd5b5b601360009054906101000a900460ff1615612a24576128796116e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561290057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295857507f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a235743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106129de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d590614f72565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ac75750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6e57600854811115612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890615004565b60405180910390fd5b600a54612b1d83611231565b82612b28919061456c565b1115612b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6090615070565b60405180910390fd5b612d0c565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c115750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6057600854811115612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5290615102565b60405180910390fd5b612d0b565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d0a57600a54612cbd83611231565b82612cc8919061456c565b1115612d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0090615070565b60405180910390fd5b5b5b5b5b5b6000612d1930611231565b905060006009548210159050808015612d3e5750601160029054906101000a900460ff165b8015612d575750600560149054906101000a900460ff16155b8015612dad5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e035750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e595750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9d576001600560146101000a81548160ff021916908315150217905550612e816136fd565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612f035750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f1b5750600c60009054906101000a900460ff165b8015612f365750600d54600e54612f32919061456c565b4210155b8015612f8c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9b57612f996139e4565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130515750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561305b57600090505b600081156132d457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130be57506000601854115b1561318b576130eb60646130dd6018548861345090919063ffffffff16565b61346690919063ffffffff16565b9050601854601a54826130fe9190614876565b61310891906148ff565b601d6000828254613119919061456c565b92505081905550601854601b54826131319190614876565b61313b91906148ff565b601e600082825461314c919061456c565b92505081905550601854601954826131649190614876565b61316e91906148ff565b601c600082825461317f919061456c565b925050819055506132b0565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131e657506000601454115b156132af5761321360646132056014548861345090919063ffffffff16565b61346690919063ffffffff16565b9050601454601654826132269190614876565b61323091906148ff565b601d6000828254613241919061456c565b92505081905550601454601754826132599190614876565b61326391906148ff565b601e6000828254613274919061456c565b925050819055506014546015548261328c9190614876565b61329691906148ff565b601c60008282546132a7919061456c565b925050819055505b5b60008111156132c5576132c487308361347c565b5b80856132d19190615122565b94505b6132df87878761347c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361345e9190614876565b905092915050565b6000818361347491906148ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e390614dbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561355c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355390614e4e565b60405180910390fd5b613567838383613baa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e4906151c8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613680919061456c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136e49190614163565b60405180910390a36136f7848484613baf565b50505050565b600061370830611231565b90506000601e54601c54601d5461371f919061456c565b613729919061456c565b905060008083148061373b5750600082145b15613748575050506139e2565b60146009546137579190614876565b83111561377057601460095461376d9190614876565b92505b6000600283601d54866137839190614876565b61378d91906148ff565b61379791906148ff565b905060006137ae8286613bb490919063ffffffff16565b905060004790506137be82613bca565b60006137d38247613bb490919063ffffffff16565b905060006137fe876137f0601c548561345090919063ffffffff16565b61346690919063ffffffff16565b905060006138298861381b601e548661345090919063ffffffff16565b61346690919063ffffffff16565b9050600081838561383a9190615122565b6138449190615122565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138a490615219565b60006040518083038185875af1925050503d80600081146138e1576040519150601f19603f3d011682016040523d82523d6000602084013e6138e6565b606091505b5050809850506000871180156138fc5750600081115b156139495761390b8782613e07565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516139409392919061522e565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398f90615219565b60006040518083038185875af1925050503d80600081146139cc576040519150601f19603f3d011682016040523d82523d6000602084013e6139d1565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e006040518263ffffffff1660e01b8152600401613a4891906141e0565b602060405180830381865afa158015613a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a899190614bf9565b90506000613ab6612710613aa8600b548561345090919063ffffffff16565b61346690919063ffffffff16565b90506000811115613aef57613aee7f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0061dead8361347c565b5b60007f0000000000000000000000001c004c02e5a2dac081378833c2e17954964f9e0090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b5c57600080fd5b505af1158015613b70573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613bc29190615122565b905092915050565b6000600267ffffffffffffffff811115613be757613be6615265565b5b604051908082528060200260200182016040528015613c155781602001602082028036833780820191505090505b5090503081600081518110613c2d57613c2c615294565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf691906152d8565b81600181518110613d0a57613d09615294565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d6f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612386565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd19594939291906153fe565b600060405180830381600087803b158015613deb57600080fd5b505af1158015613dff573d6000803e3d6000fd5b505050505050565b613e32307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612386565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613e9996959493929190615458565b60606040518083038185885af1158015613eb7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613edc91906154b9565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f1d578082015181840152602081019050613f02565b83811115613f2c576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f4e82613ee3565b613f588185613eee565b9350613f68818560208601613eff565b613f7181613f32565b840191505092915050565b60006020820190508181036000830152613f968184613f43565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fce82613fa3565b9050919050565b613fde81613fc3565b8114613fe957600080fd5b50565b600081359050613ffb81613fd5565b92915050565b6000819050919050565b61401481614001565b811461401f57600080fd5b50565b6000813590506140318161400b565b92915050565b6000806040838503121561404e5761404d613f9e565b5b600061405c85828601613fec565b925050602061406d85828601614022565b9150509250929050565b60008115159050919050565b61408c81614077565b82525050565b60006020820190506140a76000830184614083565b92915050565b6000602082840312156140c3576140c2613f9e565b5b60006140d184828501613fec565b91505092915050565b6000819050919050565b60006140ff6140fa6140f584613fa3565b6140da565b613fa3565b9050919050565b6000614111826140e4565b9050919050565b600061412382614106565b9050919050565b61413381614118565b82525050565b600060208201905061414e600083018461412a565b92915050565b61415d81614001565b82525050565b60006020820190506141786000830184614154565b92915050565b60008060006060848603121561419757614196613f9e565b5b60006141a586828701613fec565b93505060206141b686828701613fec565b92505060406141c786828701614022565b9150509250925092565b6141da81613fc3565b82525050565b60006020820190506141f560008301846141d1565b92915050565b600060ff82169050919050565b614211816141fb565b82525050565b600060208201905061422c6000830184614208565b92915050565b61423b81614077565b811461424657600080fd5b50565b60008135905061425881614232565b92915050565b60008060006060848603121561427757614276613f9e565b5b600061428586828701614022565b935050602061429686828701614022565b92505060406142a786828701614249565b9150509250925092565b600080604083850312156142c8576142c7613f9e565b5b60006142d685828601613fec565b92505060206142e785828601614249565b9150509250929050565b60008060006060848603121561430a57614309613f9e565b5b600061431886828701614022565b935050602061432986828701614022565b925050604061433a86828701614022565b9150509250925092565b60006020828403121561435a57614359613f9e565b5b600061436884828501614249565b91505092915050565b60006020828403121561438757614386613f9e565b5b600061439584828501614022565b91505092915050565b600080604083850312156143b5576143b4613f9e565b5b60006143c385828601613fec565b92505060206143d485828601613fec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442557607f821691505b60208210811415614439576144386143de565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061449b602883613eee565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614507602083613eee565b9150614512826144d1565b602082019050919050565b60006020820190508181036000830152614536816144fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061457782614001565b915061458283614001565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b7576145b661453d565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061461e603383613eee565b9150614629826145c2565b604082019050919050565b6000602082019050818103600083015261464d81614611565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006146b0603083613eee565b91506146bb82614654565b604082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b600061471c601c83613eee565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147ae603983613eee565b91506147b982614752565b604082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614840602583613eee565b915061484b826147e4565b604082019050919050565b6000602082019050818103600083015261486f81614833565b9050919050565b600061488182614001565b915061488c83614001565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148c5576148c461453d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061490a82614001565b915061491583614001565b925082614925576149246148d0565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061498c603583613eee565b915061499782614930565b604082019050919050565b600060208201905081810360008301526149bb8161497f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a1e603483613eee565b9150614a29826149c2565b604082019050919050565b60006020820190508181036000830152614a4d81614a11565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ab0602683613eee565b9150614abb82614a54565b604082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614b1c602083613eee565b9150614b2782614ae6565b602082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614bae602a83613eee565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b600081519050614bf38161400b565b92915050565b600060208284031215614c0f57614c0e613f9e565b5b6000614c1d84828501614be4565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c82602483613eee565b9150614c8d82614c26565b604082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d14602283613eee565b9150614d1f82614cb8565b604082019050919050565b60006020820190508181036000830152614d4381614d07565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614da6602583613eee565b9150614db182614d4a565b604082019050919050565b60006020820190508181036000830152614dd581614d99565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e38602383613eee565b9150614e4382614ddc565b604082019050919050565b60006020820190508181036000830152614e6781614e2b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ea4601683613eee565b9150614eaf82614e6e565b602082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f5c604983613eee565b9150614f6782614eda565b606082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614fee603583613eee565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061505a601383613eee565b915061506582615024565b602082019050919050565b600060208201905081810360008301526150898161504d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150ec603683613eee565b91506150f782615090565b604082019050919050565b6000602082019050818103600083015261511b816150df565b9050919050565b600061512d82614001565b915061513883614001565b92508282101561514b5761514a61453d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006151b2602683613eee565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b600081905092915050565b50565b60006152036000836151e8565b915061520e826151f3565b600082019050919050565b6000615224826151f6565b9150819050919050565b60006060820190506152436000830186614154565b6152506020830185614154565b61525d6040830184614154565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152d281613fd5565b92915050565b6000602082840312156152ee576152ed613f9e565b5b60006152fc848285016152c3565b91505092915050565b6000819050919050565b600061532a61532561532084615305565b6140da565b614001565b9050919050565b61533a8161530f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61537581613fc3565b82525050565b6000615387838361536c565b60208301905092915050565b6000602082019050919050565b60006153ab82615340565b6153b5818561534b565b93506153c08361535c565b8060005b838110156153f15781516153d8888261537b565b97506153e383615393565b9250506001810190506153c4565b5085935050505092915050565b600060a0820190506154136000830188614154565b6154206020830187615331565b818103604083015261543281866153a0565b905061544160608301856141d1565b61544e6080830184614154565b9695505050505050565b600060c08201905061546d60008301896141d1565b61547a6020830188614154565b6154876040830187615331565b6154946060830186615331565b6154a160808301856141d1565b6154ae60a0830184614154565b979650505050505050565b6000806000606084860312156154d2576154d1613f9e565b5b60006154e086828701614be4565b93505060206154f186828701614be4565b925050604061550286828701614be4565b915050925092509256fea2646970667358221220d96c56839f96817cd3dd5a022240fe5746675364e53288457b9e270f5d068b7664736f6c634300080a0033

Deployed Bytecode Sourcemap

14964:16277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2713:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3613:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16386:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15040:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3028:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15592:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15420:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16251:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16211;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3788:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15143:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15502:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15463:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2929:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19185:155;;;;;;;;;;;;;:::i;:::-;;4286:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15098:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15690:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21925:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16068:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15770:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3142:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;863:103;;;;;;;;;;;;;:::i;:::-;;29299:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19346:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20117:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15235:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15963;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20400:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;644:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15272:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16103:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20292:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2819:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21417:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16037:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16291:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16179:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4507:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15554:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3275:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16456:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15730:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21227:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20809:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15881:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15305:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19614:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15929:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3456:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15347:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19473:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16000:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;972:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16141:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15387:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:818;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2713:100;2767:13;2800:5;2793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2713:100;:::o;3613:169::-;3696:4;3713:39;3722:12;:10;:12::i;:::-;3736:7;3745:6;3713:8;:39::i;:::-;3770:4;3763:11;;3613:169;;;;:::o;16386:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15040:51::-;;;:::o;3028:108::-;3089:7;3116:12;;3109:19;;3028:108;:::o;15592:47::-;;;;:::o;15420:36::-;;;;:::o;16251:33::-;;;;:::o;16211:::-;;;;:::o;3788:492::-;3928:4;3945:36;3955:6;3963:9;3974:6;3945:9;:36::i;:::-;3994:24;4021:11;:19;4033:6;4021:19;;;;;;;;;;;;;;;:33;4041:12;:10;:12::i;:::-;4021:33;;;;;;;;;;;;;;;;3994:60;;4093:6;4073:16;:26;;4065:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4180:57;4189:6;4197:12;:10;:12::i;:::-;4230:6;4211:16;:25;4180:8;:57::i;:::-;4268:4;4261:11;;;3788:492;;;;;:::o;15143:53::-;15189:6;15143:53;:::o;15502:45::-;;;;:::o;15463:32::-;;;;;;;;;;;;;:::o;2929:93::-;2987:5;3012:2;3005:9;;2929:93;:::o;19185:155::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19256:4:::1;19240:13;;:20;;;;;;;;;;;;;;;;;;19285:4;19271:11;;:18;;;;;;;;;;;;;;;;;;19317:15;19300:14;:32;;;;19185:155::o:0;4286:215::-;4374:4;4391:80;4400:12;:10;:12::i;:::-;4414:7;4460:10;4423:11;:25;4435:12;:10;:12::i;:::-;4423:25;;;;;;;;;;;;;;;:34;4449:7;4423:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4391:8;:80::i;:::-;4489:4;4482:11;;4286:215;;;;:::o;15098:38::-;;;:::o;15690:33::-;;;;;;;;;;;;;:::o;21925:126::-;21991:4;22015:19;:28;22035:7;22015:28;;;;;;;;;;;;;;;;;;;;;;;;;22008:35;;21925:126;;;:::o;16068:28::-;;;;:::o;15770:31::-;;;;;;;;;;;;;:::o;3142:127::-;3216:7;3243:9;:18;3253:7;3243:18;;;;;;;;;;;;;;;;3236:25;;3142:127;;;:::o;863:103::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;928:30:::1;955:1;928:18;:30::i;:::-;863:103::o:0;29299:555::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:3:::1;29478:19;:26;;29456:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;29628:4;29616:8;:16;;:33;;;;;29648:1;29636:8;:13;;29616:33;29594:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;29754:19;29736:15;:37;;;;29803:8;29784:16;:27;;;;29838:8;29822:13;;:24;;;;;;;;;;;;;;;;;;29299:555:::0;;;:::o;19346:121::-;19398:4;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19432:5:::1;19415:14;;:22;;;;;;;;;;;;;;;;;;19455:4;19448:11;;19346:121:::0;:::o;20117:167::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20272:4:::1;20230:31;:39;20262:6;20230:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20117:167:::0;;:::o;15235:30::-;;;;;;;;;;;;;:::o;15963:::-;;;;:::o;20400:401::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20568:13:::1;20550:15;:31;;;;20610:13;20592:15;:31;;;;20646:7;20634:9;:19;;;;20715:9;;20697:15;;20679;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;20664:12;:60;;;;20759:1;20743:12;;:17;;20735:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20400:401:::0;;;:::o;644:87::-;690:7;717:6;;;;;;;;;;;710:13;;644:87;:::o;15272:24::-;;;;;;;;;;;;;:::o;16103:31::-;;;;:::o;20292:100::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20377:7:::1;20363:11;;:21;;;;;;;;;;;;;;;;;;20292:100:::0;:::o;2819:104::-;2875:13;2908:7;2901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:104;:::o;21417:304::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21561:13:::1;21553:21;;:4;:21;;;;21531:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;21672:41;21701:4;21707:5;21672:28;:41::i;:::-;21417:304:::0;;:::o;16037:24::-;;;;:::o;15646:35::-;;;;:::o;16291:27::-;;;;:::o;16179:25::-;;;;:::o;4507:413::-;4600:4;4617:24;4644:11;:25;4656:12;:10;:12::i;:::-;4644:25;;;;;;;;;;;;;;;:34;4670:7;4644:34;;;;;;;;;;;;;;;;4617:61;;4717:15;4697:16;:35;;4689:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4810:67;4819:12;:10;:12::i;:::-;4833:7;4861:15;4842:16;:34;4810:8;:67::i;:::-;4908:4;4901:11;;;4507:413;;;;:::o;15554:29::-;;;;:::o;3275:175::-;3361:4;3378:42;3388:12;:10;:12::i;:::-;3402:9;3413:6;3378:9;:42::i;:::-;3438:4;3431:11;;3275:175;;;;:::o;16456:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15730:33::-;;;;;;;;;;;;;:::o;21227:182::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21343:8:::1;21312:19;:28;21332:7;21312:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21383:7;21367:34;;;21392:8;21367:34;;;;;;:::i;:::-;;;;;;;;21227:182:::0;;:::o;20809:410::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20979:13:::1;20960:16;:32;;;;21022:13;21003:16;:32;;;;21059:7;21046:10;:20;;;;21131:10;;21112:16;;21093;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;21077:13;:64;;;;21177:1;21160:13;;:18;;21152:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20809:410:::0;;;:::o;15881:39::-;;;;;;;;;;;;;:::o;15305:35::-;;;;:::o;19614:497::-;19722:4;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19801:6:::1;19796:1;19780:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19779:28;;;;:::i;:::-;19766:9;:41;;19744:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19956:4;19951:1;19935:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19934:26;;;;:::i;:::-;19921:9;:39;;19899:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20072:9;20051:18;:30;;;;20099:4;20092:11;;19614:497:::0;;;:::o;15929:27::-;;;;:::o;3456:151::-;3545:7;3572:11;:18;3584:5;3572:18;;;;;;;;;;;;;;;:27;3591:7;3572:27;;;;;;;;;;;;;;;;3565:34;;3456:151;;;;:::o;15347:33::-;;;;:::o;19473:135::-;19533:4;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19573:5:::1;19550:20;;:28;;;;;;;;;;;;;;;;;;19596:4;19589:11;;19473:135:::0;:::o;16000:30::-;;;;:::o;972:201::-;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1081:1:::1;1061:22;;:8;:22;;;;1053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1137:28;1156:8;1137:18;:28::i;:::-;972:201:::0;:::o;16141:31::-;;;;:::o;15387:24::-;;;;:::o;30420:818::-;30531:4;788:12;:10;:12::i;:::-;777:23;;:7;:5;:7::i;:::-;:23;;;769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30616:19:::1;;30593:20;;:42;;;;:::i;:::-;30575:15;:60;30553:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30725:4;30714:7;:15;;30706:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30810:15;30787:20;:38;;;;30836:28;30867:4;:14;;;30882:13;30867:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30836:60;;30907:20;30930:44;30968:5;30930:33;30955:7;30930:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;30907:67;;31004:1;30989:12;:16;30985:110;;;31022:61;31038:13;31061:6;31070:12;31022:15;:61::i;:::-;30985:110;31105:19;31142:13;31105:51;;31167:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31194:14;;;;;;;;;;31226:4;31219:11;;;;;30420:818:::0;;;:::o;194:98::-;247:7;274:10;267:17;;194:98;:::o;6667:380::-;6820:1;6803:19;;:5;:19;;;;6795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6901:1;6882:21;;:7;:21;;;;6874:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6985:6;6955:11;:18;6967:5;6955:18;;;;;;;;;;;;;;;:27;6974:7;6955:27;;;;;;;;;;;;;;;:36;;;;7023:7;7007:32;;7016:5;7007:32;;;7032:6;7007:32;;;;;;:::i;:::-;;;;;;;;6667:380;;;:::o;22109:4614::-;22257:1;22241:18;;:4;:18;;;;22233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22334:1;22320:16;;:2;:16;;;;22312:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22403:1;22393:6;:11;22389:93;;;22421:28;22437:4;22443:2;22447:1;22421:15;:28::i;:::-;22464:7;;22389:93;22498:14;;;;;;;;;;;22494:2296;;;22559:7;:5;:7::i;:::-;22551:15;;:4;:15;;;;:49;;;;;22593:7;:5;:7::i;:::-;22587:13;;:2;:13;;;;22551:49;:86;;;;;22635:1;22621:16;;:2;:16;;;;22551:86;:128;;;;;22672:6;22658:21;;:2;:21;;;;22551:128;:158;;;;;22701:8;;;;;;;;;;;22700:9;22551:158;22529:2250;;;22749:13;;;;;;;;;;;22744:223;;22821:19;:25;22841:4;22821:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22850:19;:23;22870:2;22850:23;;;;;;;;;;;;;;;;;;;;;;;;;22821:52;22787:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22744:223;22991:20;;;;;;;;;;;22987:641;;;23072:7;:5;:7::i;:::-;23066:13;;:2;:13;;;;:72;;;;;23122:15;23108:30;;:2;:30;;;;23066:72;:129;;;;;23181:13;23167:28;;:2;:28;;;;23066:129;23036:573;;;23359:12;23284:28;:39;23313:9;23284:39;;;;;;;;;;;;;;;;:87;23246:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;23573:12;23531:28;:39;23560:9;23531:39;;;;;;;;;;;;;;;:54;;;;23036:573;22987:641;23672:25;:31;23698:4;23672:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23729:31;:35;23761:2;23729:35;;;;;;;;;;;;;;;;;;;;;;;;;23728:36;23672:92;23646:1118;;;23851:20;;23841:6;:30;;23807:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24059:9;;24042:13;24052:2;24042:9;:13::i;:::-;24033:6;:22;;;;:::i;:::-;:35;;23999:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23646:1118;;;24208:25;:29;24234:2;24208:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24263:31;:37;24295:4;24263:37;;;;;;;;;;;;;;;;;;;;;;;;;24262:38;24208:92;24182:582;;;24387:20;;24377:6;:30;;24343:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24182:582;;;24544:31;:35;24576:2;24544:35;;;;;;;;;;;;;;;;;;;;;;;;;24539:225;;24664:9;;24647:13;24657:2;24647:9;:13::i;:::-;24638:6;:22;;;;:::i;:::-;:35;;24604:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24539:225;24182:582;23646:1118;22529:2250;22494:2296;24802:28;24833:24;24851:4;24833:9;:24::i;:::-;24802:55;;24870:12;24909:18;;24885:20;:42;;24870:57;;24958:7;:35;;;;;24982:11;;;;;;;;;;;24958:35;:61;;;;;25011:8;;;;;;;;;;;25010:9;24958:61;:110;;;;;25037:25;:31;25063:4;25037:31;;;;;;;;;;;;;;;;;;;;;;;;;25036:32;24958:110;:153;;;;;25086:19;:25;25106:4;25086:25;;;;;;;;;;;;;;;;;;;;;;;;;25085:26;24958:153;:194;;;;;25129:19;:23;25149:2;25129:23;;;;;;;;;;;;;;;;;;;;;;;;;25128:24;24958:194;24940:326;;;25190:4;25179:8;;:15;;;;;;;;;;;;;;;;;;25211:10;:8;:10::i;:::-;25249:5;25238:8;;:16;;;;;;;;;;;;;;;;;;24940:326;25297:8;;;;;;;;;;;25296:9;:55;;;;;25322:25;:29;25348:2;25322:29;;;;;;;;;;;;;;;;;;;;;;;;;25296:55;:85;;;;;25368:13;;;;;;;;;;;25296:85;:153;;;;;25434:15;;25417:14;;:32;;;;:::i;:::-;25398:15;:51;;25296:153;:196;;;;;25467:19;:25;25487:4;25467:25;;;;;;;;;;;;;;;;;;;;;;;;;25466:26;25296:196;25278:282;;;25519:29;:27;:29::i;:::-;;25278:282;25572:12;25588:8;;;;;;;;;;;25587:9;25572:24;;25613:19;:25;25633:4;25613:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25642:19;:23;25662:2;25642:23;;;;;;;;;;;;;;;;;;;;;;;;;25613:52;25609:100;;;25692:5;25682:15;;25609:100;25721:12;25752:7;25748:922;;;25780:25;:29;25806:2;25780:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25829:1;25813:13;;:17;25780:50;25776:745;;;25858:34;25888:3;25858:25;25869:13;;25858:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25851:41;;25961:13;;25941:16;;25934:4;:23;;;;:::i;:::-;25933:41;;;;:::i;:::-;25911:18;;:63;;;;;;;:::i;:::-;;;;;;;;26031:13;;26017:10;;26010:4;:17;;;;:::i;:::-;26009:35;;;;:::i;:::-;25993:12;;:51;;;;;;;:::i;:::-;;;;;;;;26113:13;;26093:16;;26086:4;:23;;;;:::i;:::-;26085:41;;;;:::i;:::-;26063:18;;:63;;;;;;;:::i;:::-;;;;;;;;25776:745;;;26165:25;:31;26191:4;26165:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26215:1;26200:12;;:16;26165:51;26161:360;;;26244:33;26273:3;26244:24;26255:12;;26244:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26237:40;;26345:12;;26326:15;;26319:4;:22;;;;:::i;:::-;26318:39;;;;:::i;:::-;26296:18;;:61;;;;;;;:::i;:::-;;;;;;;;26413:12;;26400:9;;26393:4;:16;;;;:::i;:::-;26392:33;;;;:::i;:::-;26376:12;;:49;;;;;;;:::i;:::-;;;;;;;;26493:12;;26474:15;;26467:4;:22;;;;:::i;:::-;26466:39;;;;:::i;:::-;26444:18;;:61;;;;;;;:::i;:::-;;;;;;;;26161:360;25776:745;26548:1;26541:4;:8;26537:91;;;26570:42;26586:4;26600;26607;26570:15;:42::i;:::-;26537:91;26654:4;26644:14;;;;;:::i;:::-;;;25748:922;26682:33;26698:4;26704:2;26708:6;26682:15;:33::i;:::-;22222:4501;;;;22109:4614;;;;:::o;1179:191::-;1253:16;1272:6;;;;;;;;;;;1253:25;;1298:8;1289:6;;:17;;;;;;;;;;;;;;;;;;1353:8;1322:40;;1343:8;1322:40;;;;;;;;;;;;1242:128;1179:191;:::o;21729:188::-;21846:5;21812:25;:31;21838:4;21812:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21903:5;21869:40;;21897:4;21869:40;;;;;;;;;;;;21729:188;;:::o;8655:98::-;8713:7;8744:1;8740;:5;;;;:::i;:::-;8733:12;;8655:98;;;;:::o;8759:::-;8817:7;8848:1;8844;:5;;;;:::i;:::-;8837:12;;8759:98;;;;:::o;4926:733::-;5084:1;5066:20;;:6;:20;;;;5058:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5168:1;5147:23;;:9;:23;;;;5139:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5223:47;5244:6;5252:9;5263:6;5223:20;:47::i;:::-;5283:21;5307:9;:17;5317:6;5307:17;;;;;;;;;;;;;;;;5283:41;;5360:6;5343:13;:23;;5335:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5481:6;5465:13;:22;5445:9;:17;5455:6;5445:17;;;;;;;;;;;;;;;:42;;;;5533:6;5509:9;:20;5519:9;5509:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5574:9;5557:35;;5566:6;5557:35;;;5585:6;5557:35;;;;;;:::i;:::-;;;;;;;;5605:46;5625:6;5633:9;5644:6;5605:19;:46::i;:::-;5047:612;4926:733;;;:::o;27586:1705::-;27625:23;27651:24;27669:4;27651:9;:24::i;:::-;27625:50;;27686:25;27782:12;;27748:18;;27714;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;27686:108;;27805:12;27853:1;27834:15;:20;:46;;;;27879:1;27858:17;:22;27834:46;27830:85;;;27897:7;;;;;27830:85;27970:2;27949:18;;:23;;;;:::i;:::-;27931:15;:41;27927:115;;;28028:2;28007:18;;:23;;;;:::i;:::-;27989:41;;27927:115;28052:23;28165:1;28132:17;28097:18;;28079:15;:36;;;;:::i;:::-;28078:71;;;;:::i;:::-;:88;;;;:::i;:::-;28052:114;;28177:26;28206:36;28226:15;28206;:19;;:36;;;;:::i;:::-;28177:65;;28255:25;28283:21;28255:49;;28317:36;28334:18;28317:16;:36::i;:::-;28366:18;28387:44;28413:17;28387:21;:25;;:44;;;;:::i;:::-;28366:65;;28444:23;28470:81;28523:17;28470:34;28485:18;;28470:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;28444:107;;28562:17;28582:51;28615:17;28582:28;28597:12;;28582:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28562:71;;28646:23;28703:9;28685:15;28672:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;28646:66;;28746:1;28725:18;:22;;;;28779:1;28758:18;:22;;;;28806:1;28791:12;:16;;;;28842:9;;;;;;;;;;;28834:23;;28865:9;28834:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28820:59;;;;;28914:1;28896:15;:19;:42;;;;;28937:1;28919:15;:19;28896:42;28892:278;;;28955:46;28968:15;28985;28955:12;:46::i;:::-;29021:137;29054:18;29091:15;29125:18;;29021:137;;;;;;;;:::i;:::-;;;;;;;;28892:278;29204:15;;;;;;;;;;;29196:29;;29247:21;29196:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29182:101;;;;;27614:1677;;;;;;;;;;27586:1705;:::o;29862:550::-;29919:4;29953:15;29936:14;:32;;;;29979:28;30010:4;:14;;;30025:13;30010:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29979:60;;30050:20;30073:77;30134:5;30073:42;30098:16;;30073:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;30050:100;;30180:1;30165:12;:16;30161:110;;;30198:61;30214:13;30237:6;30246:12;30198:15;:61::i;:::-;30161:110;30281:19;30318:13;30281:51;;30343:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30370:12;;;;;;;;;;30400:4;30393:11;;;;;29862:550;:::o;7053:125::-;;;;:::o;7184:124::-;;;;:::o;8549:98::-;8607:7;8638:1;8634;:5;;;;:::i;:::-;8627:12;;8549:98;;;;:::o;26731:475::-;26797:21;26835:1;26821:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26797:40;;26866:4;26848;26853:1;26848:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26892:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26882:4;26887:1;26882:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26927:62;26944:4;26959:15;26977:11;26927:8;:62::i;:::-;27002:15;:66;;;27083:11;27109:1;27125:4;27152;27172:15;27002:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26786:420;26731:475;:::o;27214:364::-;27295:62;27312:4;27327:15;27345:11;27295:8;:62::i;:::-;27368:15;:31;;;27407:9;27440:4;27460:11;27486:1;27502;15189:6;27544:15;27368:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27214:364;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:613::-;6901:6;6909;6917;6966:2;6954:9;6945:7;6941:23;6937:32;6934:119;;;6972:79;;:::i;:::-;6934:119;7092:1;7117:53;7162:7;7153:6;7142:9;7138:22;7117:53;:::i;:::-;7107:63;;7063:117;7219:2;7245:53;7290:7;7281:6;7270:9;7266:22;7245:53;:::i;:::-;7235:63;;7190:118;7347:2;7373:50;7415:7;7406:6;7395:9;7391:22;7373:50;:::i;:::-;7363:60;;7318:115;6827:613;;;;;:::o;7446:468::-;7511:6;7519;7568:2;7556:9;7547:7;7543:23;7539:32;7536:119;;;7574:79;;:::i;:::-;7536:119;7694:1;7719:53;7764:7;7755:6;7744:9;7740:22;7719:53;:::i;:::-;7709:63;;7665:117;7821:2;7847:50;7889:7;7880:6;7869:9;7865:22;7847:50;:::i;:::-;7837:60;;7792:115;7446:468;;;;;:::o;7920:619::-;7997:6;8005;8013;8062:2;8050:9;8041:7;8037:23;8033:32;8030:119;;;8068:79;;:::i;:::-;8030:119;8188:1;8213:53;8258:7;8249:6;8238:9;8234:22;8213:53;:::i;:::-;8203:63;;8159:117;8315:2;8341:53;8386:7;8377:6;8366:9;8362:22;8341:53;:::i;:::-;8331:63;;8286:118;8443:2;8469:53;8514:7;8505:6;8494:9;8490:22;8469:53;:::i;:::-;8459:63;;8414:118;7920:619;;;;;:::o;8545:323::-;8601:6;8650:2;8638:9;8629:7;8625:23;8621:32;8618:119;;;8656:79;;:::i;:::-;8618:119;8776:1;8801:50;8843:7;8834:6;8823:9;8819:22;8801:50;:::i;:::-;8791:60;;8747:114;8545:323;;;;:::o;8874:329::-;8933:6;8982:2;8970:9;8961:7;8957:23;8953:32;8950:119;;;8988:79;;:::i;:::-;8950:119;9108:1;9133:53;9178:7;9169:6;9158:9;9154:22;9133:53;:::i;:::-;9123:63;;9079:117;8874:329;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:227::-;10341:34;10337:1;10329:6;10325:14;10318:58;10410:10;10405:2;10397:6;10393:15;10386:35;10201:227;:::o;10434:366::-;10576:3;10597:67;10661:2;10656:3;10597:67;:::i;:::-;10590:74;;10673:93;10762:3;10673:93;:::i;:::-;10791:2;10786:3;10782:12;10775:19;;10434:366;;;:::o;10806:419::-;10972:4;11010:2;10999:9;10995:18;10987:26;;11059:9;11053:4;11049:20;11045:1;11034:9;11030:17;11023:47;11087:131;11213:4;11087:131;:::i;:::-;11079:139;;10806:419;;;:::o;11231:182::-;11371:34;11367:1;11359:6;11355:14;11348:58;11231:182;:::o;11419:366::-;11561:3;11582:67;11646:2;11641:3;11582:67;:::i;:::-;11575:74;;11658:93;11747:3;11658:93;:::i;:::-;11776:2;11771:3;11767:12;11760:19;;11419:366;;;:::o;11791:419::-;11957:4;11995:2;11984:9;11980:18;11972:26;;12044:9;12038:4;12034:20;12030:1;12019:9;12015:17;12008:47;12072:131;12198:4;12072:131;:::i;:::-;12064:139;;11791:419;;;:::o;12216:180::-;12264:77;12261:1;12254:88;12361:4;12358:1;12351:15;12385:4;12382:1;12375:15;12402:305;12442:3;12461:20;12479:1;12461:20;:::i;:::-;12456:25;;12495:20;12513:1;12495:20;:::i;:::-;12490:25;;12649:1;12581:66;12577:74;12574:1;12571:81;12568:107;;;12655:18;;:::i;:::-;12568:107;12699:1;12696;12692:9;12685:16;;12402:305;;;;:::o;12713:238::-;12853:34;12849:1;12841:6;12837:14;12830:58;12922:21;12917:2;12909:6;12905:15;12898:46;12713:238;:::o;12957:366::-;13099:3;13120:67;13184:2;13179:3;13120:67;:::i;:::-;13113:74;;13196:93;13285:3;13196:93;:::i;:::-;13314:2;13309:3;13305:12;13298:19;;12957:366;;;:::o;13329:419::-;13495:4;13533:2;13522:9;13518:18;13510:26;;13582:9;13576:4;13572:20;13568:1;13557:9;13553:17;13546:47;13610:131;13736:4;13610:131;:::i;:::-;13602:139;;13329:419;;;:::o;13754:235::-;13894:34;13890:1;13882:6;13878:14;13871:58;13963:18;13958:2;13950:6;13946:15;13939:43;13754:235;:::o;13995:366::-;14137:3;14158:67;14222:2;14217:3;14158:67;:::i;:::-;14151:74;;14234:93;14323:3;14234:93;:::i;:::-;14352:2;14347:3;14343:12;14336:19;;13995:366;;;:::o;14367:419::-;14533:4;14571:2;14560:9;14556:18;14548:26;;14620:9;14614:4;14610:20;14606:1;14595:9;14591:17;14584:47;14648:131;14774:4;14648:131;:::i;:::-;14640:139;;14367:419;;;:::o;14792:178::-;14932:30;14928:1;14920:6;14916:14;14909:54;14792:178;:::o;14976:366::-;15118:3;15139:67;15203:2;15198:3;15139:67;:::i;:::-;15132:74;;15215:93;15304:3;15215:93;:::i;:::-;15333:2;15328:3;15324:12;15317:19;;14976:366;;;:::o;15348:419::-;15514:4;15552:2;15541:9;15537:18;15529:26;;15601:9;15595:4;15591:20;15587:1;15576:9;15572:17;15565:47;15629:131;15755:4;15629:131;:::i;:::-;15621:139;;15348:419;;;:::o;15773:244::-;15913:34;15909:1;15901:6;15897:14;15890:58;15982:27;15977:2;15969:6;15965:15;15958:52;15773:244;:::o;16023:366::-;16165:3;16186:67;16250:2;16245:3;16186:67;:::i;:::-;16179:74;;16262:93;16351:3;16262:93;:::i;:::-;16380:2;16375:3;16371:12;16364:19;;16023:366;;;:::o;16395:419::-;16561:4;16599:2;16588:9;16584:18;16576:26;;16648:9;16642:4;16638:20;16634:1;16623:9;16619:17;16612:47;16676:131;16802:4;16676:131;:::i;:::-;16668:139;;16395:419;;;:::o;16820:224::-;16960:34;16956:1;16948:6;16944:14;16937:58;17029:7;17024:2;17016:6;17012:15;17005:32;16820:224;:::o;17050:366::-;17192:3;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17050:366;;;:::o;17422:419::-;17588:4;17626:2;17615:9;17611:18;17603:26;;17675:9;17669:4;17665:20;17661:1;17650:9;17646:17;17639:47;17703:131;17829:4;17703:131;:::i;:::-;17695:139;;17422:419;;;:::o;17847:348::-;17887:7;17910:20;17928:1;17910:20;:::i;:::-;17905:25;;17944:20;17962:1;17944:20;:::i;:::-;17939:25;;18132:1;18064:66;18060:74;18057:1;18054:81;18049:1;18042:9;18035:17;18031:105;18028:131;;;18139:18;;:::i;:::-;18028:131;18187:1;18184;18180:9;18169:20;;17847:348;;;;:::o;18201:180::-;18249:77;18246:1;18239:88;18346:4;18343:1;18336:15;18370:4;18367:1;18360:15;18387:185;18427:1;18444:20;18462:1;18444:20;:::i;:::-;18439:25;;18478:20;18496:1;18478:20;:::i;:::-;18473:25;;18517:1;18507:35;;18522:18;;:::i;:::-;18507:35;18564:1;18561;18557:9;18552:14;;18387:185;;;;:::o;18578:240::-;18718:34;18714:1;18706:6;18702:14;18695:58;18787:23;18782:2;18774:6;18770:15;18763:48;18578:240;:::o;18824:366::-;18966:3;18987:67;19051:2;19046:3;18987:67;:::i;:::-;18980:74;;19063:93;19152:3;19063:93;:::i;:::-;19181:2;19176:3;19172:12;19165:19;;18824:366;;;:::o;19196:419::-;19362:4;19400:2;19389:9;19385:18;19377:26;;19449:9;19443:4;19439:20;19435:1;19424:9;19420:17;19413:47;19477:131;19603:4;19477:131;:::i;:::-;19469:139;;19196:419;;;:::o;19621:239::-;19761:34;19757:1;19749:6;19745:14;19738:58;19830:22;19825:2;19817:6;19813:15;19806:47;19621:239;:::o;19866:366::-;20008:3;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20105:93;20194:3;20105:93;:::i;:::-;20223:2;20218:3;20214:12;20207:19;;19866:366;;;:::o;20238:419::-;20404:4;20442:2;20431:9;20427:18;20419:26;;20491:9;20485:4;20481:20;20477:1;20466:9;20462:17;20455:47;20519:131;20645:4;20519:131;:::i;:::-;20511:139;;20238:419;;;:::o;20663:225::-;20803:34;20799:1;20791:6;20787:14;20780:58;20872:8;20867:2;20859:6;20855:15;20848:33;20663:225;:::o;20894:366::-;21036:3;21057:67;21121:2;21116:3;21057:67;:::i;:::-;21050:74;;21133:93;21222:3;21133:93;:::i;:::-;21251:2;21246:3;21242:12;21235:19;;20894:366;;;:::o;21266:419::-;21432:4;21470:2;21459:9;21455:18;21447:26;;21519:9;21513:4;21509:20;21505:1;21494:9;21490:17;21483:47;21547:131;21673:4;21547:131;:::i;:::-;21539:139;;21266:419;;;:::o;21691:182::-;21831:34;21827:1;21819:6;21815:14;21808:58;21691:182;:::o;21879:366::-;22021:3;22042:67;22106:2;22101:3;22042:67;:::i;:::-;22035:74;;22118:93;22207:3;22118:93;:::i;:::-;22236:2;22231:3;22227:12;22220:19;;21879:366;;;:::o;22251:419::-;22417:4;22455:2;22444:9;22440:18;22432:26;;22504:9;22498:4;22494:20;22490:1;22479:9;22475:17;22468:47;22532:131;22658:4;22532:131;:::i;:::-;22524:139;;22251:419;;;:::o;22676:229::-;22816:34;22812:1;22804:6;22800:14;22793:58;22885:12;22880:2;22872:6;22868:15;22861:37;22676:229;:::o;22911:366::-;23053:3;23074:67;23138:2;23133:3;23074:67;:::i;:::-;23067:74;;23150:93;23239:3;23150:93;:::i;:::-;23268:2;23263:3;23259:12;23252:19;;22911:366;;;:::o;23283:419::-;23449:4;23487:2;23476:9;23472:18;23464:26;;23536:9;23530:4;23526:20;23522:1;23511:9;23507:17;23500:47;23564:131;23690:4;23564:131;:::i;:::-;23556:139;;23283:419;;;:::o;23708:143::-;23765:5;23796:6;23790:13;23781:22;;23812:33;23839:5;23812:33;:::i;:::-;23708:143;;;;:::o;23857:351::-;23927:6;23976:2;23964:9;23955:7;23951:23;23947:32;23944:119;;;23982:79;;:::i;:::-;23944:119;24102:1;24127:64;24183:7;24174:6;24163:9;24159:22;24127:64;:::i;:::-;24117:74;;24073:128;23857:351;;;;:::o;24214:223::-;24354:34;24350:1;24342:6;24338:14;24331:58;24423:6;24418:2;24410:6;24406:15;24399:31;24214:223;:::o;24443:366::-;24585:3;24606:67;24670:2;24665:3;24606:67;:::i;:::-;24599:74;;24682:93;24771:3;24682:93;:::i;:::-;24800:2;24795:3;24791:12;24784:19;;24443:366;;;:::o;24815:419::-;24981:4;25019:2;25008:9;25004:18;24996:26;;25068:9;25062:4;25058:20;25054:1;25043:9;25039:17;25032:47;25096:131;25222:4;25096:131;:::i;:::-;25088:139;;24815:419;;;:::o;25240:221::-;25380:34;25376:1;25368:6;25364:14;25357:58;25449:4;25444:2;25436:6;25432:15;25425:29;25240:221;:::o;25467:366::-;25609:3;25630:67;25694:2;25689:3;25630:67;:::i;:::-;25623:74;;25706:93;25795:3;25706:93;:::i;:::-;25824:2;25819:3;25815:12;25808:19;;25467:366;;;:::o;25839:419::-;26005:4;26043:2;26032:9;26028:18;26020:26;;26092:9;26086:4;26082:20;26078:1;26067:9;26063:17;26056:47;26120:131;26246:4;26120:131;:::i;:::-;26112:139;;25839:419;;;:::o;26264:224::-;26404:34;26400:1;26392:6;26388:14;26381:58;26473:7;26468:2;26460:6;26456:15;26449:32;26264:224;:::o;26494:366::-;26636:3;26657:67;26721:2;26716:3;26657:67;:::i;:::-;26650:74;;26733:93;26822:3;26733:93;:::i;:::-;26851:2;26846:3;26842:12;26835:19;;26494:366;;;:::o;26866:419::-;27032:4;27070:2;27059:9;27055:18;27047:26;;27119:9;27113:4;27109:20;27105:1;27094:9;27090:17;27083:47;27147:131;27273:4;27147:131;:::i;:::-;27139:139;;26866:419;;;:::o;27291:222::-;27431:34;27427:1;27419:6;27415:14;27408:58;27500:5;27495:2;27487:6;27483:15;27476:30;27291:222;:::o;27519:366::-;27661:3;27682:67;27746:2;27741:3;27682:67;:::i;:::-;27675:74;;27758:93;27847:3;27758:93;:::i;:::-;27876:2;27871:3;27867:12;27860:19;;27519:366;;;:::o;27891:419::-;28057:4;28095:2;28084:9;28080:18;28072:26;;28144:9;28138:4;28134:20;28130:1;28119:9;28115:17;28108:47;28172:131;28298:4;28172:131;:::i;:::-;28164:139;;27891:419;;;:::o;28316:172::-;28456:24;28452:1;28444:6;28440:14;28433:48;28316:172;:::o;28494:366::-;28636:3;28657:67;28721:2;28716:3;28657:67;:::i;:::-;28650:74;;28733:93;28822:3;28733:93;:::i;:::-;28851:2;28846:3;28842:12;28835:19;;28494:366;;;:::o;28866:419::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:297::-;29431:34;29427:1;29419:6;29415:14;29408:58;29500:34;29495:2;29487:6;29483:15;29476:59;29569:11;29564:2;29556:6;29552:15;29545:36;29291:297;:::o;29594:366::-;29736:3;29757:67;29821:2;29816:3;29757:67;:::i;:::-;29750:74;;29833:93;29922:3;29833:93;:::i;:::-;29951:2;29946:3;29942:12;29935:19;;29594:366;;;:::o;29966:419::-;30132:4;30170:2;30159:9;30155:18;30147:26;;30219:9;30213:4;30209:20;30205:1;30194:9;30190:17;30183:47;30247:131;30373:4;30247:131;:::i;:::-;30239:139;;29966:419;;;:::o;30391:240::-;30531:34;30527:1;30519:6;30515:14;30508:58;30600:23;30595:2;30587:6;30583:15;30576:48;30391:240;:::o;30637:366::-;30779:3;30800:67;30864:2;30859:3;30800:67;:::i;:::-;30793:74;;30876:93;30965:3;30876:93;:::i;:::-;30994:2;30989:3;30985:12;30978:19;;30637:366;;;:::o;31009:419::-;31175:4;31213:2;31202:9;31198:18;31190:26;;31262:9;31256:4;31252:20;31248:1;31237:9;31233:17;31226:47;31290:131;31416:4;31290:131;:::i;:::-;31282:139;;31009:419;;;:::o;31434:169::-;31574:21;31570:1;31562:6;31558:14;31551:45;31434:169;:::o;31609:366::-;31751:3;31772:67;31836:2;31831:3;31772:67;:::i;:::-;31765:74;;31848:93;31937:3;31848:93;:::i;:::-;31966:2;31961:3;31957:12;31950:19;;31609:366;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;31981:419;;;:::o;32406:241::-;32546:34;32542:1;32534:6;32530:14;32523:58;32615:24;32610:2;32602:6;32598:15;32591:49;32406:241;:::o;32653:366::-;32795:3;32816:67;32880:2;32875:3;32816:67;:::i;:::-;32809:74;;32892:93;32981:3;32892:93;:::i;:::-;33010:2;33005:3;33001:12;32994:19;;32653:366;;;:::o;33025:419::-;33191:4;33229:2;33218:9;33214:18;33206:26;;33278:9;33272:4;33268:20;33264:1;33253:9;33249:17;33242:47;33306:131;33432:4;33306:131;:::i;:::-;33298:139;;33025:419;;;:::o;33450:191::-;33490:4;33510:20;33528:1;33510:20;:::i;:::-;33505:25;;33544:20;33562:1;33544:20;:::i;:::-;33539:25;;33583:1;33580;33577:8;33574:34;;;33588:18;;:::i;:::-;33574:34;33633:1;33630;33626:9;33618:17;;33450:191;;;;:::o;33647:225::-;33787:34;33783:1;33775:6;33771:14;33764:58;33856:8;33851:2;33843:6;33839:15;33832:33;33647:225;:::o;33878:366::-;34020:3;34041:67;34105:2;34100:3;34041:67;:::i;:::-;34034:74;;34117:93;34206:3;34117:93;:::i;:::-;34235:2;34230:3;34226:12;34219:19;;33878:366;;;:::o;34250:419::-;34416:4;34454:2;34443:9;34439:18;34431:26;;34503:9;34497:4;34493:20;34489:1;34478:9;34474:17;34467:47;34531:131;34657:4;34531:131;:::i;:::-;34523:139;;34250:419;;;:::o;34675:147::-;34776:11;34813:3;34798:18;;34675:147;;;;:::o;34828:114::-;;:::o;34948:398::-;35107:3;35128:83;35209:1;35204:3;35128:83;:::i;:::-;35121:90;;35220:93;35309:3;35220:93;:::i;:::-;35338:1;35333:3;35329:11;35322:18;;34948:398;;;:::o;35352:379::-;35536:3;35558:147;35701:3;35558:147;:::i;:::-;35551:154;;35722:3;35715:10;;35352:379;;;:::o;35737:442::-;35886:4;35924:2;35913:9;35909:18;35901:26;;35937:71;36005:1;35994:9;35990:17;35981:6;35937:71;:::i;:::-;36018:72;36086:2;36075:9;36071:18;36062:6;36018:72;:::i;:::-;36100;36168:2;36157:9;36153:18;36144:6;36100:72;:::i;:::-;35737:442;;;;;;:::o;36185:180::-;36233:77;36230:1;36223:88;36330:4;36327:1;36320:15;36354:4;36351:1;36344:15;36371:180;36419:77;36416:1;36409:88;36516:4;36513:1;36506:15;36540:4;36537:1;36530:15;36557:143;36614:5;36645:6;36639:13;36630:22;;36661:33;36688:5;36661:33;:::i;:::-;36557:143;;;;:::o;36706:351::-;36776:6;36825:2;36813:9;36804:7;36800:23;36796:32;36793:119;;;36831:79;;:::i;:::-;36793:119;36951:1;36976:64;37032:7;37023:6;37012:9;37008:22;36976:64;:::i;:::-;36966:74;;36922:128;36706:351;;;;:::o;37063:85::-;37108:7;37137:5;37126:16;;37063:85;;;:::o;37154:158::-;37212:9;37245:61;37263:42;37272:32;37298:5;37272:32;:::i;:::-;37263:42;:::i;:::-;37245:61;:::i;:::-;37232:74;;37154:158;;;:::o;37318:147::-;37413:45;37452:5;37413:45;:::i;:::-;37408:3;37401:58;37318:147;;:::o;37471:114::-;37538:6;37572:5;37566:12;37556:22;;37471:114;;;:::o;37591:184::-;37690:11;37724:6;37719:3;37712:19;37764:4;37759:3;37755:14;37740:29;;37591:184;;;;:::o;37781:132::-;37848:4;37871:3;37863:11;;37901:4;37896:3;37892:14;37884:22;;37781:132;;;:::o;37919:108::-;37996:24;38014:5;37996:24;:::i;:::-;37991:3;37984:37;37919:108;;:::o;38033:179::-;38102:10;38123:46;38165:3;38157:6;38123:46;:::i;:::-;38201:4;38196:3;38192:14;38178:28;;38033:179;;;;:::o;38218:113::-;38288:4;38320;38315:3;38311:14;38303:22;;38218:113;;;:::o;38367:732::-;38486:3;38515:54;38563:5;38515:54;:::i;:::-;38585:86;38664:6;38659:3;38585:86;:::i;:::-;38578:93;;38695:56;38745:5;38695:56;:::i;:::-;38774:7;38805:1;38790:284;38815:6;38812:1;38809:13;38790:284;;;38891:6;38885:13;38918:63;38977:3;38962:13;38918:63;:::i;:::-;38911:70;;39004:60;39057:6;39004:60;:::i;:::-;38994:70;;38850:224;38837:1;38834;38830:9;38825:14;;38790:284;;;38794:14;39090:3;39083:10;;38491:608;;;38367:732;;;;:::o;39105:831::-;39368:4;39406:3;39395:9;39391:19;39383:27;;39420:71;39488:1;39477:9;39473:17;39464:6;39420:71;:::i;:::-;39501:80;39577:2;39566:9;39562:18;39553:6;39501:80;:::i;:::-;39628:9;39622:4;39618:20;39613:2;39602:9;39598:18;39591:48;39656:108;39759:4;39750:6;39656:108;:::i;:::-;39648:116;;39774:72;39842:2;39831:9;39827:18;39818:6;39774:72;:::i;:::-;39856:73;39924:3;39913:9;39909:19;39900:6;39856:73;:::i;:::-;39105:831;;;;;;;;:::o;39942:807::-;40191:4;40229:3;40218:9;40214:19;40206:27;;40243:71;40311:1;40300:9;40296:17;40287:6;40243:71;:::i;:::-;40324:72;40392:2;40381:9;40377:18;40368:6;40324:72;:::i;:::-;40406:80;40482:2;40471:9;40467:18;40458:6;40406:80;:::i;:::-;40496;40572:2;40561:9;40557:18;40548:6;40496:80;:::i;:::-;40586:73;40654:3;40643:9;40639:19;40630:6;40586:73;:::i;:::-;40669;40737:3;40726:9;40722:19;40713:6;40669:73;:::i;:::-;39942:807;;;;;;;;;:::o;40755:663::-;40843:6;40851;40859;40908:2;40896:9;40887:7;40883:23;40879:32;40876:119;;;40914:79;;:::i;:::-;40876:119;41034:1;41059:64;41115:7;41106:6;41095:9;41091:22;41059:64;:::i;:::-;41049:74;;41005:128;41172:2;41198:64;41254:7;41245:6;41234:9;41230:22;41198:64;:::i;:::-;41188:74;;41143:129;41311:2;41337:64;41393:7;41384:6;41373:9;41369:22;41337:64;:::i;:::-;41327:74;;41282:129;40755:663;;;;;:::o

Swarm Source

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