ETH Price: $3,605.75 (+6.06%)

Token

TrendAppend (TRND)
 

Overview

Max Total Supply

1,000,000,000 TRND

Holders

639 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (+10.83%)

Onchain Market Cap

$419,600.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
TrendAppend: TRND Token
Balance
167,927.572287128 TRND

Value
$70.46 ( ~0.0195410120234526 Eth) [0.0168%]
0xc106b98c4d0b3f1c92da0e9a6089e9c63ceacbb0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Shoppable Video and Marketplace Platform. TREND allows consumers to share fun videos, and for brands to list shoppable videos and product listings. TREND is integrated with a list of Crypto Payment features allowing consumers to buy goods from the marketplace, and many more crypto features.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TrendAppend

Compiler Version
v0.8.17+commit.8df45f5f

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

/**
 * 
TrendAppend Coin.  TrendAppend is the shoppable video platform and marketplace.  Share viral videos with friends and discover new products to improve your life. 
WhitePaper: https://coin.trendappend.com
Website: https://www.trendappend.com
TG: https://t.me/+7Ld-jg3TXhc5MmQx
Email: [email protected] 
twitter: trendappend
*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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 IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        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);
    }
}

contract TrendAppend is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "TrendAppend";
    string constant _symbol = "TRND";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 1) / 200;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 200;
    uint256 _maxWalletSize = (_totalSupply * 1) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) public lastSell;
    mapping (address => uint256) public lastBuy;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public liquidityCreator;

    uint256 marketingFee = 400;
    uint256 marketingSellFee = 400;
    uint256 liquidityFee = 100;
    uint256 liquiditySellFee = 100;
    uint256 totalBuyFee = marketingFee + liquidityFee;
    uint256 totalSellFee = marketingSellFee + liquiditySellFee;
    uint256 feeDenominator = 10000;
    bool public transferTax = false;

    address payable public liquidityFeeReceiver = payable(0x55b82447643a0443Eadd6129d3C7E971805a2c26);
    address payable public marketingFeeReceiver = payable(0x76Dc822c081055E08B9C307B98c7ee49b58e8c8F);

    IDEXRouter public router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) liquidityPools;
    mapping (address => uint256) public protected;
    bool protectionEnabled = true;
    bool protectionDisabled = false;
    uint256 protectionLimit;
    uint256 public protectionCount;
    uint256 protectionTimer;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks;
    bool startBullRun = false;
    bool pauseDisabled = false;
    uint256 public rateLimit = 2;

    bool public swapEnabled = false;
    uint256 public swapThreshold = _totalSupply / 1000;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    mapping (address => bool) teamMember;
    
    modifier onlyTeam() {
        require(teamMember[_msgSender()] || msg.sender == owner(), "Caller is not a team member");
        _;
    }
    
    event ProtectedWallet(address, address, uint256, uint8);

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[owner()] = _totalSupply;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
    function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
    function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function setTeamMember(address _team, bool _enabled) external onlyOwner {
        teamMember[_team] = _enabled;
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function clearStuckBalance(uint256 amountPercentage, address adr) external onlyTeam {
        uint256 amountETH = address(this).balance;

        if(amountETH > 0) {
            (bool sent, ) = adr.call{value: (amountETH * amountPercentage) / 100}("");
            require(sent,"Failed to transfer funds");
        }
    }
    
    function openTrading(uint256 _deadBlocks, uint256 _protection, uint256 _limit) external onlyTeam {
        require(!startBullRun && _deadBlocks < 10);
        deadBlocks = _deadBlocks;
        startBullRun = true;
        launchedAt = block.number;
        protectionTimer = block.timestamp + _protection;
        protectionLimit = _limit * (10 ** _decimals);
    }
    
    function pauseTrading() external onlyTeam {
        require(!pauseDisabled);
        startBullRun = false;
    }
    
    function disablePause() external onlyTeam {
        pauseDisabled = true;
        startBullRun = true;
    }
    
    function setProtection(bool _protect, uint256 _addTime) external onlyTeam {
        require(!protectionDisabled);
        protectionEnabled = _protect;
        require(_addTime < 1 days);
        protectionTimer += _addTime;
    }
    
    function disableProtection() external onlyTeam {
        protectionDisabled = true;
        protectionEnabled = false;
    }
    
    function protectWallet(address[] calldata _wallets, bool _protect) external onlyTeam {
        if (_protect) {
            require(protectionEnabled);
        }
        
        for (uint i = 0; i < _wallets.length; i++) {
            
            if (_protect) {
                protectionCount++;
                emit ProtectedWallet(tx.origin, _wallets[i], block.number, 2);
            }
            else {
                if (protected[_wallets[i]] != 0)
                    protectionCount--;      
            }
            protected[_wallets[i]] = _protect ? block.number : 0;
        }
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "BEP20: transfer from 0x0");
        require(recipient != address(0), "BEP20: transfer to 0x0");
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }
        if(!startBullRun){ require(liquidityCreator[sender] || liquidityCreator[recipient], "Trading not open yet."); }

        checkTxLimit(sender, recipient, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(protectionEnabled && protectionTimer > block.timestamp) {
            if(liquidityPools[sender] && tx.origin != recipient && protected[recipient] == 0) {
                protected[recipient] = block.number;
                protectionCount++;
                emit ProtectedWallet(tx.origin, recipient, block.number, 0);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = amount;

        if(shouldTakeFee(sender, recipient)) {
            amountReceived = takeFee(recipient, amount);
            if(shouldSwapBack(recipient) && amount > 0) swapBack(amount);
        }
        
        _balances[recipient] = _balances[recipient] + amountReceived;

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal {
        if (isTxLimitExempt[sender] || isTxLimitExempt[recipient]) return;
        require(amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
        require(lastBuy[recipient] + rateLimit <= block.number, "Transfer rate limit exceeded.");
        
        if (protected[sender] != 0){
            require(amount <= protectionLimit * (10 ** _decimals) && lastSell[sender] == 0 && protectionTimer > block.timestamp, "Wallet protected, please contact support.");
            lastSell[sender] = block.number;
        }
        
        if (liquidityPools[recipient]) {
            lastSell[sender] = block.number;
        } else if (shouldTakeFee(sender, recipient)) {
            if (protectionEnabled && protectionTimer > block.timestamp && lastBuy[tx.origin] == block.number && protected[recipient] == 0) {
                protected[recipient] = block.number;
                emit ProtectedWallet(tx.origin, recipient, block.number, 1);
            }
            lastBuy[recipient] = block.number;
            if (tx.origin != recipient)
                lastBuy[tx.origin] = block.number;
        }
    }

    function shouldTakeFee(address sender, address recipient) public view returns (bool) {
        if(!transferTax && !liquidityPools[recipient] && !liquidityPools[sender]) return false;
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator - 1; }
        if (selling) return totalSellFee;
        return totalBuyFee;
    }

    function takeFee(address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;
        
        _balances[address(this)] += feeAmount;
    
        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum 
        && totalBuyFee + totalSellFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 totalFee = totalBuyFee + totalSellFee;
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 totalLiquidityFee = liquidityFee + liquiditySellFee;
        uint256 amountToLiquify = (amountToSwap * totalLiquidityFee / 2) / totalFee;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance - balanceBefore;
        uint256 totalETHFee = totalFee - (totalLiquidityFee / 2);

        uint256 amountETHLiquidity = (amountETH * totalLiquidityFee / 2) / totalETHFee;
        uint256 amountETHMarketing = amountETH - amountETHLiquidity;
        
        if (amountETHMarketing > 0) {
            (bool sentMarketing, ) = marketingFeeReceiver.call{value: amountETHMarketing}("");
            if(!sentMarketing) {
                //Failed to transfer to marketing wallet
            }
        }
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityFeeReceiver,
                block.timestamp
            );
        }

        emit FundsDistributed(amountETHMarketing, amountETHLiquidity, amountToLiquify);
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
    }

    function setRateLimit(uint256 rate) external onlyOwner {
        require(rate <= 60 seconds);
        rateLimit = rate;
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _liquiditySellFee, uint256 _marketingFee, uint256 _marketingSellFee, uint256 _feeDenominator) external onlyOwner {
        require(((_liquidityFee + _liquiditySellFee) / 2) * 2 == (_liquidityFee + _liquiditySellFee), "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        liquiditySellFee = _liquiditySellFee;
        marketingFee = _marketingFee;
        marketingSellFee = _marketingSellFee;
        totalBuyFee = _liquidityFee + _marketingFee;
        totalSellFee = _liquiditySellFee + _marketingSellFee;
        feeDenominator = _feeDenominator;
        require(totalBuyFee + totalSellFee <= feeDenominator / 2, "Fees too high");
        emit FeesSet(totalBuyFee, totalSellFee, feeDenominator);
    }

    function toggleTransferTax() external onlyOwner {
        transferTax = !transferTax;
    }

    function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver) external onlyOwner {
        liquidityFeeReceiver = payable(_liquidityFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _swapMinimum) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _swapMinimum * (10 ** _decimals);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    event FundsDistributed(uint256 marketingETH, uint256 liquidityETH, uint256 liquidityTokens);
    event FeesSet(uint256 totalBuyFees, uint256 totalSellFees, uint256 denominator);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTokens","type":"uint256"}],"name":"FundsDistributed","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":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"","type":"uint8"}],"name":"ProtectedWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disablePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityCreator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"},{"internalType":"uint256","name":"_protection","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_protect","type":"bool"}],"name":"protectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"},{"internalType":"uint256","name":"_addTime","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimum","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"shouldTakeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toggleTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000099919062000d96565b633b9aca00620000aa919062000de7565b60035560c86001600354620000c0919062000de7565b620000cc919062000e61565b60045560c86001600354620000e2919062000de7565b620000ee919062000e61565b6005556064600160035462000104919062000de7565b62000110919062000e61565b600655610190600e55610190600f5560646010556064601155601054600e546200013b919062000e99565b601255601154600f5462000150919062000e99565b6013556127106014556000601560006101000a81548160ff0219169083151502179055507355b82447643a0443eadd6129d3c7e971805a2c26601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507376dc822c081055e08b9c307b98c7ee49b58e8c8f601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b60006101000a81548160ff0219169083151502179055506000601b60016101000a81548160ff0219169083151502179055506000602360006101000a81548160ff0219169083151502179055506000602360016101000a81548160ff02191690831515021790555060026024556000602560006101000a81548160ff0219169083151502179055506103e860035462000311919062000e61565b60265561271060035462000326919062000e61565b6027553480156200033657600080fd5b50620003576200034b62000b0760201b60201c565b62000b0f60201b60201c565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044e919062000f3e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fd919062000f3e565b306040518363ffffffff1660e01b81526004016200051d92919062000f81565b6020604051808303816000875af11580156200053d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000563919062000f3e565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860006200065262000bd360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b6000620007c862000bd360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60006200082f62000bd360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000620008ee62000bd360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003546007600062000a4a62000bd360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a9862000bd360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60035460405162000af9919062000fbf565b60405180910390a362000fdc565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c8a5780860481111562000c625762000c6162000bfc565b5b600185161562000c725780820291505b808102905062000c828562000c2b565b945062000c42565b94509492505050565b60008262000ca5576001905062000d78565b8162000cb5576000905062000d78565b816001811462000cce576002811462000cd95762000d0f565b600191505062000d78565b60ff84111562000cee5762000ced62000bfc565b5b8360020a91508482111562000d085762000d0762000bfc565b5b5062000d78565b5060208310610133831016604e8410600b841016171562000d495782820a90508381111562000d435762000d4262000bfc565b5b62000d78565b62000d58848484600162000c38565b9250905081840481111562000d725762000d7162000bfc565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000da38262000d7f565b915062000db08362000d89565b925062000ddf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c93565b905092915050565b600062000df48262000d7f565b915062000e018362000d7f565b925082820262000e118162000d7f565b9150828204841483151762000e2b5762000e2a62000bfc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e6e8262000d7f565b915062000e7b8362000d7f565b92508262000e8e5762000e8d62000e32565b5b828204905092915050565b600062000ea68262000d7f565b915062000eb38362000d7f565b925082820190508082111562000ece5762000ecd62000bfc565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f068262000ed9565b9050919050565b62000f188162000ef9565b811462000f2457600080fd5b50565b60008151905062000f388162000f0d565b92915050565b60006020828403121562000f575762000f5662000ed4565b5b600062000f678482850162000f27565b91505092915050565b62000f7b8162000ef9565b82525050565b600060408201905062000f98600083018562000f70565b62000fa7602083018462000f70565b9392505050565b62000fb98162000d7f565b82525050565b600060208201905062000fd6600083018462000fae565b92915050565b6159978062000fec6000396000f3fe6080604052600436106103855760003560e01c806370a08231116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610d1d578063f8821a6214610d46578063f887ea4014610d71578063fabb0b4f14610d9c5761038c565b8063dd62ed3e14610c4f578063e96fada214610c8c578063f1f3bca314610cb7578063f2fde38b14610cf45761038c565b8063d0889358116100dc578063d088935814610ba9578063d686014214610bd2578063d912b2ce14610bfb578063dae39f9214610c125761038c565b8063bfa21d6a14610b18578063c1adf7bc14610b43578063c287184e14610b805761038c565b80639b02c4021161016f578063a9059cbb11610149578063a9059cbb14610a5c578063abe57e7014610a99578063bafe446b14610ac2578063bf56b37114610aed5761038c565b80639b02c402146109dd578063a4b45c0014610a08578063a8aa1b3114610a315761038c565b8063893d20e8116101ab578063893d20e81461091f5780638b42507f1461094a5780638da5cb5b1461098757806395d89b41146109b25761038c565b806370a08231146108a0578063715018a6146108dd5780638124f7ac146108f45761038c565b8063421dd7c7116102b6578063584f969a11610254578063658d4b7f11610223578063658d4b7f146107e6578063672434821461080f5780636ddd1713146108385780636f4ce428146108635761038c565b8063584f969a1461075057806360bba03d1461076757806361e08e721461079057806363a803e1146107bb5761038c565b80635071393511610290578063507139351461069657806356a227f2146106bf578063571ac8b0146106e85780635804f1e4146107255761038c565b8063421dd7c71461061957806346d7edaa14610630578063492a937b1461066d5761038c565b8063234e949411610323578063313ce567116102fd578063313ce5671461054b578063332402f81461057657806334848b9a146105b35780633f4218e0146105dc5761038c565b8063234e9494146104b857806323b872dd146104e35780632b112e49146105205761038c565b8063095db78f1161035f578063095db78f14610410578063095ea7b3146104395780631031e36e1461047657806318160ddd1461048d5761038c565b80630445b6671461039157806304a66b48146103bc57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dc7565b6040516103b3919061418e565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906141df565b610dcd565b005b3480156103f157600080fd5b506103fa610f33565b60405161040791906142ea565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906143a9565b610f70565b005b34801561044557600080fd5b50610460600480360381019061045b9190614467565b61120f565b60405161046d91906144b6565b60405180910390f35b34801561048257600080fd5b5061048b611301565b005b34801561049957600080fd5b506104a2611408565b6040516104af919061418e565b60405180910390f35b3480156104c457600080fd5b506104cd611412565b6040516104da919061418e565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906144d1565b611434565b60405161051791906144b6565b60405180910390f35b34801561052c57600080fd5b506105356115f6565b604051610542919061418e565b60405180910390f35b34801561055757600080fd5b5061056061166a565b60405161056d9190614540565b60405180910390f35b34801561058257600080fd5b5061059d6004803603810190610598919061455b565b611673565b6040516105aa91906144b6565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d5919061459b565b6117ed565b005b3480156105e857600080fd5b5061060360048036038101906105fe91906145ee565b611942565b60405161061091906144b6565b60405180910390f35b34801561062557600080fd5b5061062e611962565b005b34801561063c57600080fd5b50610657600480360381019061065291906145ee565b611a6a565b604051610664919061418e565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f919061461b565b611a82565b005b3480156106a257600080fd5b506106bd60048036038101906106b8919061459b565b611b75565b005b3480156106cb57600080fd5b506106e660048036038101906106e1919061465b565b611bf3565b005b3480156106f457600080fd5b5061070f600480360381019061070a91906145ee565b611d9b565b60405161071c91906144b6565b60405180910390f35b34801561073157600080fd5b5061073a611dce565b604051610747919061418e565b60405180910390f35b34801561075c57600080fd5b50610765611dd4565b005b34801561077357600080fd5b5061078e6004803603810190610789919061461b565b611edc565b005b34801561079c57600080fd5b506107a5611f3f565b6040516107b2919061418e565b60405180910390f35b3480156107c757600080fd5b506107d0611f45565b6040516107dd919061418e565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061461b565b611f67565b005b34801561081b57600080fd5b50610836600480360381019061083191906146f1565b611fca565b005b34801561084457600080fd5b5061084d61217d565b60405161085a91906144b6565b60405180910390f35b34801561086f57600080fd5b5061088a600480360381019061088591906145ee565b612190565b604051610897919061418e565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c291906145ee565b6121a8565b6040516108d4919061418e565b60405180910390f35b3480156108e957600080fd5b506108f26121f1565b005b34801561090057600080fd5b50610909612205565b60405161091691906144b6565b60405180910390f35b34801561092b57600080fd5b50610934612218565b6040516109419190614781565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906145ee565b612227565b60405161097e91906144b6565b60405180910390f35b34801561099357600080fd5b5061099c612247565b6040516109a99190614781565b60405180910390f35b3480156109be57600080fd5b506109c7612270565b6040516109d491906142ea565b60405180910390f35b3480156109e957600080fd5b506109f26122ad565b6040516109ff919061418e565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a919061455b565b6122b3565b005b348015610a3d57600080fd5b50610a46612341565b604051610a539190614781565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e9190614467565b612367565b604051610a9091906144b6565b60405180910390f35b348015610aa557600080fd5b50610ac06004803603810190610abb919061479c565b61237c565b005b348015610ace57600080fd5b50610ad76123ce565b604051610ae4919061418e565b60405180910390f35b348015610af957600080fd5b50610b026123f0565b604051610b0f919061418e565b60405180910390f35b348015610b2457600080fd5b50610b2d6123f6565b604051610b3a91906147fd565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b6591906145ee565b61241c565b604051610b77919061418e565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190614818565b612434565b005b348015610bb557600080fd5b50610bd06004803603810190610bcb9190614845565b612454565b005b348015610bde57600080fd5b50610bf96004803603810190610bf49190614898565b6124bb565b005b348015610c0757600080fd5b50610c106125eb565b005b348015610c1e57600080fd5b50610c396004803603810190610c3491906145ee565b61261f565b604051610c4691906144b6565b60405180910390f35b348015610c5b57600080fd5b50610c766004803603810190610c71919061455b565b61263f565b604051610c83919061418e565b60405180910390f35b348015610c9857600080fd5b50610ca16126c6565b604051610cae91906147fd565b60405180910390f35b348015610cc357600080fd5b50610cde6004803603810190610cd991906148d8565b6126ec565b604051610ceb919061418e565b60405180910390f35b348015610d0057600080fd5b50610d1b6004803603810190610d1691906145ee565b612735565b005b348015610d2957600080fd5b50610d446004803603810190610d3f919061461b565b6127b8565b005b348015610d5257600080fd5b50610d5b61281b565b604051610d68919061418e565b60405180910390f35b348015610d7d57600080fd5b50610d86612821565b604051610d939190614964565b60405180910390f35b348015610da857600080fd5b50610db1612847565b604051610dbe919061418e565b60405180910390f35b60265481565b610dd561284d565b8385610de191906149ae565b6002808688610df091906149ae565b610dfa9190614a11565b610e049190614a42565b14610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90614af6565b60405180910390fd5b846010819055508360118190555082600e8190555081600f819055508285610e6c91906149ae565b6012819055508184610e7e91906149ae565b601381905550806014819055506002601454610e9a9190614a11565b601354601254610eaa91906149ae565b1115610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290614b62565b60405180910390fd5b7f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f45601254601354601454604051610f2493929190614b82565b60405180910390a15050505050565b60606040518060400160405280600b81526020017f5472656e64417070656e64000000000000000000000000000000000000000000815250905090565b60296000610f7c6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110015750610fd2612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790614c05565b60405180910390fd5b801561106057601b60009054906101000a900460ff1661105f57600080fd5b5b60005b838390508110156112095781156110f657601d600081548092919061108790614c25565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea328585848181106110c1576110c0614c6d565b5b90506020020160208101906110d691906145ee565b4360026040516110e99493929190614cd7565b60405180910390a161117e565b6000601a600086868581811061110f5761110e614c6d565b5b905060200201602081019061112491906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461117d57601d600081548092919061117790614d1c565b91905055505b5b8161118a57600061118c565b435b601a60008686858181106111a3576111a2614c6d565b5b90506020020160208101906111b891906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061120190614c25565b915050611063565b50505050565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112ef919061418e565b60405180910390a36001905092915050565b6029600061130d6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113925750611363612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890614c05565b60405180910390fd5b602360019054906101000a900460ff16156113eb57600080fd5b6000602360006101000a81548160ff021916908315150217905550565b6000600354905090565b60006009600a6114229190614e78565b60055461142f9190614a11565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115e25781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115619190614ec3565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6115ed8484846128d3565b90509392505050565b6000611623600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166121a8565b61164e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166121a8565b61165891906149ae565b6003546116659190614ec3565b905090565b60006009905090565b6000601560009054906101000a900460ff161580156116dc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117325750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561174057600090506117e7565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117e45750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90505b92915050565b602960006117f96128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061187e575061184f612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614c05565b60405180910390fd5b602360009054906101000a900460ff161580156118da5750600a83105b6118e357600080fd5b826022819055506001602360006101000a81548160ff02191690831515021790555043602081905550814261191891906149ae565b601e819055506009600a61192c9190614e78565b816119379190614a42565b601c81905550505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6029600061196e6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119f357506119c4612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990614c05565b60405180910390fd5b6001601b60016101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff021916908315150217905550565b601a6020528060005260406000206000915090505481565b611a8a61284d565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614f69565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b7d61284d565b600083118015611b8d5750600082115b8015611b995750600081115b8015611ba757506127108111155b611bb057600080fd5b8083600354611bbf9190614a42565b611bc99190614a11565b6004819055508082600354611bde9190614a42565b611be89190614a11565b600581905550505050565b60296000611bff6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c845750611c55612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90614c05565b60405180910390fd5b60004790506000811115611d965760008273ffffffffffffffffffffffffffffffffffffffff1660648584611cf89190614a42565b611d029190614a11565b604051611d0e90614fba565b60006040518083038185875af1925050503d8060008114611d4b576040519150601f19603f3d011682016040523d82523d6000602084013e611d50565b606091505b5050905080611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b9061501b565b60405180910390fd5b505b505050565b6000611dc7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61120f565b9050919050565b60215481565b60296000611de06128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e655750611e36612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90614c05565b60405180910390fd5b6001602360016101000a81548160ff0219169083151502179055506001602360006101000a81548160ff021916908315150217905550565b611ee461284d565b80602960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60245481565b60006009600a611f559190614e78565b600654611f629190614a11565b905090565b611f6f61284d565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611fd261284d565b600084849050118015611fea57508383905082829050145b611ff357600080fd5b600033905060005b85859050811015612175576019600087878481811061201d5761201c614c6d565b5b905060200201602081019061203291906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120f85750600d600087878481811061209957612098614c6d565b5b90506020020160208101906120ae91906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612162576121608287878481811061211457612113614c6d565b5b905060200201602081019061212991906145ee565b6009600a6121379190614e78565b87878681811061214a57612149614c6d565b5b9050602002013561215b9190614a42565b613106565b505b808061216d90614c25565b915050611ffb565b505050505050565b602560009054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121f961284d565b6122036000613294565b565b601560009054906101000a900460ff1681565b6000612222612247565b905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f54524e4400000000000000000000000000000000000000000000000000000000815250905090565b601d5481565b6122bb61284d565b81601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006123743384846128d3565b905092915050565b61238461284d565b6000821180156123945750600081115b80156123a257506127108111155b6123ab57600080fd5b80826003546123ba9190614a42565b6123c49190614a11565b6006819055505050565b60006009600a6123de9190614e78565b6004546123eb9190614a11565b905090565b60205481565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b61243c61284d565b603c81111561244a57600080fd5b8060248190555050565b61245c61284d565b6000821161246957600080fd5b82602560006101000a81548160ff021916908315150217905550816003546124919190614a11565b6026819055506009600a6124a59190614e78565b816124b09190614a42565b602781905550505050565b602960006124c76128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061254c575061251d612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290614c05565b60405180910390fd5b601b60019054906101000a900460ff16156125a557600080fd5b81601b60006101000a81548160ff0219169083151502179055506201518081106125ce57600080fd5b80601e60008282546125e091906149ae565b925050819055505050565b6125f361284d565b601560009054906101000a900460ff1615601560006101000a81548160ff021916908315150217905550565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000436022546020546126ff91906149ae565b1061271a5760016014546127139190614ec3565b9050612730565b811561272a576013549050612730565b60125490505b919050565b61273d61284d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906150ad565b60405180910390fd5b6127b581613294565b50565b6127c061284d565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60275481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60225481565b6128556128cb565b73ffffffffffffffffffffffffffffffffffffffff16612873612247565b73ffffffffffffffffffffffffffffffffffffffff16146128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090615119565b60405180910390fd5b565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90615185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a9906151f1565b60405180910390fd5b600082116129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec9061525d565b60405180910390fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e906152c9565b60405180910390fd5b612a7f613358565b158015612ad55750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b6f57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90615335565b60405180910390fd5b612b6e613365565b5b602360009054906101000a900460ff16612c6457600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c245750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5a906153a1565b60405180910390fd5b5b612c6f848484613390565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d175750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d7957600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d7857612d77838361394c565b5b5b601b60009054906101000a900460ff168015612d96575042601e54115b15612f0c57601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2057508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e6b57506000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15612f0b5743601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d6000815480929190612ec790614c25565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051612f0294939291906153fc565b60405180910390a15b5b602860009054906101000a900460ff1615612f3357612f2c848484613106565b90506130ff565b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7e9190614ec3565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000829050612fd08585611673565b1561300657612fdf84846139e5565b9050612fea84613ac8565b8015612ff65750600083115b156130055761300483613c0d565b5b5b80600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305191906149ae565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130f1919061418e565b60405180910390a360019150505b9392505050565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539190614ec3565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131e191906149ae565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613281919061418e565b60405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806020541415905090565b43602081905550426021819055506001602560006101000a81548160ff021916908315150217905550565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134315750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61394757601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661348e57600554613492565b6004545b8111156134d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cb9061548d565b60405180910390fd5b43602454600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352291906149ae565b1115613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355a906154f9565b60405180910390fd5b6000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146136a4576009600a6135b89190614e78565b601c546135c59190614a42565b811115801561361357506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b8015613620575042601e54115b61365f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136569061558b565b60405180910390fd5b43600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561373f5743600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613946565b6137498383611673565b1561394557601b60009054906101000a900460ff16801561376b575042601e54115b80156137b5575043600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b801561380057506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156138885743601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea328343600160405161387f94939291906155e6565b60405180910390a15b43600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146139445743600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b505050565b600060065490508082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f91906149ae565b11156139e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d79061569d565b60405180910390fd5b505050565b600080601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601454613a45836126ec565b85613a509190614a42565b613a5a9190614a11565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613aab91906149ae565b925050819055508084613abe9190614ec3565b9250505092915050565b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b315750602860009054906101000a900460ff16155b8015613b495750602560009054906101000a900460ff165b8015613b9e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613beb5750602754600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015613c0657506000601354601254613c0491906149ae565b115b9050919050565b6001602860006101000a81548160ff0219169083151502179055506000601354601254613c3a91906149ae565b905060006026548310613c4f57602654613c51565b825b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613cdd57600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000601154601054613cef91906149ae565b905060008360028385613d029190614a42565b613d0c9190614a11565b613d169190614a11565b90508083613d249190614ec3565b92506000600267ffffffffffffffff811115613d4357613d426156bd565b5b604051908082528060200260200182016040528015613d715781602001602082028036833780820191505090505b5090503081600081518110613d8957613d88614c6d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e549190615701565b81600181518110613e6857613e67614c6d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008530426040518663ffffffff1660e01b8152600401613f0b95949392919061581d565b600060405180830381600087803b158015613f2557600080fd5b505af1158015613f39573d6000803e3d6000fd5b5050505060008147613f4b9190614ec3565b90506000600286613f5c9190614a11565b88613f679190614ec3565b905060008160028885613f7a9190614a42565b613f849190614a11565b613f8e9190614a11565b905060008184613f9e9190614ec3565b90506000811115614039576000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ff190614fba565b60006040518083038185875af1925050503d806000811461402e576040519150601f19603f3d011682016040523d82523d6000602084013e614033565b606091505b50509050505b600087111561411257601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308a600080601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140cb96959493929190615898565b60606040518083038185885af11580156140e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061410e919061590e565b5050505b7fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df981838960405161414593929190614b82565b60405180910390a1505050505050505050506000602860006101000a81548160ff02191690831515021790555050565b6000819050919050565b61418881614175565b82525050565b60006020820190506141a3600083018461417f565b92915050565b600080fd5b600080fd5b6141bc81614175565b81146141c757600080fd5b50565b6000813590506141d9816141b3565b92915050565b600080600080600060a086880312156141fb576141fa6141a9565b5b6000614209888289016141ca565b955050602061421a888289016141ca565b945050604061422b888289016141ca565b935050606061423c888289016141ca565b925050608061424d888289016141ca565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015614294578082015181840152602081019050614279565b60008484015250505050565b6000601f19601f8301169050919050565b60006142bc8261425a565b6142c68185614265565b93506142d6818560208601614276565b6142df816142a0565b840191505092915050565b6000602082019050818103600083015261430481846142b1565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126143315761433061430c565b5b8235905067ffffffffffffffff81111561434e5761434d614311565b5b60208301915083602082028301111561436a57614369614316565b5b9250929050565b60008115159050919050565b61438681614371565b811461439157600080fd5b50565b6000813590506143a38161437d565b92915050565b6000806000604084860312156143c2576143c16141a9565b5b600084013567ffffffffffffffff8111156143e0576143df6141ae565b5b6143ec8682870161431b565b935093505060206143ff86828701614394565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061443482614409565b9050919050565b61444481614429565b811461444f57600080fd5b50565b6000813590506144618161443b565b92915050565b6000806040838503121561447e5761447d6141a9565b5b600061448c85828601614452565b925050602061449d858286016141ca565b9150509250929050565b6144b081614371565b82525050565b60006020820190506144cb60008301846144a7565b92915050565b6000806000606084860312156144ea576144e96141a9565b5b60006144f886828701614452565b935050602061450986828701614452565b925050604061451a868287016141ca565b9150509250925092565b600060ff82169050919050565b61453a81614524565b82525050565b60006020820190506145556000830184614531565b92915050565b60008060408385031215614572576145716141a9565b5b600061458085828601614452565b925050602061459185828601614452565b9150509250929050565b6000806000606084860312156145b4576145b36141a9565b5b60006145c2868287016141ca565b93505060206145d3868287016141ca565b92505060406145e4868287016141ca565b9150509250925092565b600060208284031215614604576146036141a9565b5b600061461284828501614452565b91505092915050565b60008060408385031215614632576146316141a9565b5b600061464085828601614452565b925050602061465185828601614394565b9150509250929050565b60008060408385031215614672576146716141a9565b5b6000614680858286016141ca565b925050602061469185828601614452565b9150509250929050565b60008083601f8401126146b1576146b061430c565b5b8235905067ffffffffffffffff8111156146ce576146cd614311565b5b6020830191508360208202830111156146ea576146e9614316565b5b9250929050565b6000806000806040858703121561470b5761470a6141a9565b5b600085013567ffffffffffffffff811115614729576147286141ae565b5b6147358782880161431b565b9450945050602085013567ffffffffffffffff811115614758576147576141ae565b5b6147648782880161469b565b925092505092959194509250565b61477b81614429565b82525050565b60006020820190506147966000830184614772565b92915050565b600080604083850312156147b3576147b26141a9565b5b60006147c1858286016141ca565b92505060206147d2858286016141ca565b9150509250929050565b60006147e782614409565b9050919050565b6147f7816147dc565b82525050565b600060208201905061481260008301846147ee565b92915050565b60006020828403121561482e5761482d6141a9565b5b600061483c848285016141ca565b91505092915050565b60008060006060848603121561485e5761485d6141a9565b5b600061486c86828701614394565b935050602061487d868287016141ca565b925050604061488e868287016141ca565b9150509250925092565b600080604083850312156148af576148ae6141a9565b5b60006148bd85828601614394565b92505060206148ce858286016141ca565b9150509250929050565b6000602082840312156148ee576148ed6141a9565b5b60006148fc84828501614394565b91505092915050565b6000819050919050565b600061492a61492561492084614409565b614905565b614409565b9050919050565b600061493c8261490f565b9050919050565b600061494e82614931565b9050919050565b61495e81614943565b82525050565b60006020820190506149796000830184614955565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149b982614175565b91506149c483614175565b92508282019050808211156149dc576149db61497f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a1c82614175565b9150614a2783614175565b925082614a3757614a366149e2565b5b828204905092915050565b6000614a4d82614175565b9150614a5883614175565b9250828202614a6681614175565b91508282048414831517614a7d57614a7c61497f565b5b5092915050565b7f4c697175696469747920666565206d75737420626520616e206576656e206e7560008201527f6d6265722064756520746f20726f756e64696e67000000000000000000000000602082015250565b6000614ae0603483614265565b9150614aeb82614a84565b604082019050919050565b60006020820190508181036000830152614b0f81614ad3565b9050919050565b7f4665657320746f6f206869676800000000000000000000000000000000000000600082015250565b6000614b4c600d83614265565b9150614b5782614b16565b602082019050919050565b60006020820190508181036000830152614b7b81614b3f565b9050919050565b6000606082019050614b97600083018661417f565b614ba4602083018561417f565b614bb1604083018461417f565b949350505050565b7f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000600082015250565b6000614bef601b83614265565b9150614bfa82614bb9565b602082019050919050565b60006020820190508181036000830152614c1e81614be2565b9050919050565b6000614c3082614175565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c6257614c6161497f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614cc1614cbc614cb784614c9c565b614905565b614524565b9050919050565b614cd181614ca6565b82525050565b6000608082019050614cec6000830187614772565b614cf96020830186614772565b614d06604083018561417f565b614d136060830184614cc8565b95945050505050565b6000614d2782614175565b915060008203614d3a57614d3961497f565b5b600182039050919050565b60008160011c9050919050565b6000808291508390505b6001851115614d9c57808604811115614d7857614d7761497f565b5b6001851615614d875780820291505b8081029050614d9585614d45565b9450614d5c565b94509492505050565b600082614db55760019050614e71565b81614dc35760009050614e71565b8160018114614dd95760028114614de357614e12565b6001915050614e71565b60ff841115614df557614df461497f565b5b8360020a915084821115614e0c57614e0b61497f565b5b50614e71565b5060208310610133831016604e8410600b8410161715614e475782820a905083811115614e4257614e4161497f565b5b614e71565b614e548484846001614d52565b92509050818404811115614e6b57614e6a61497f565b5b81810290505b9392505050565b6000614e8382614175565b9150614e8e83614524565b9250614ebb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614da5565b905092915050565b6000614ece82614175565b9150614ed983614175565b9250828203905081811115614ef157614ef061497f565b5b92915050565b7f43616e277420616c7465722063757272656e74206c697175696469747920706160008201527f6972000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f53602283614265565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b600081905092915050565b50565b6000614fa4600083614f89565b9150614faf82614f94565b600082019050919050565b6000614fc582614f97565b9150819050919050565b7f4661696c656420746f207472616e736665722066756e64730000000000000000600082015250565b6000615005601883614265565b915061501082614fcf565b602082019050919050565b6000602082019050818103600083015261503481614ff8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615097602683614265565b91506150a28261503b565b604082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615103602083614265565b915061510e826150cd565b602082019050919050565b60006020820190508181036000830152615132816150f6565b9050919050565b7f42455032303a207472616e736665722066726f6d203078300000000000000000600082015250565b600061516f601883614265565b915061517a82615139565b602082019050919050565b6000602082019050818103600083015261519e81615162565b9050919050565b7f42455032303a207472616e7366657220746f2030783000000000000000000000600082015250565b60006151db601683614265565b91506151e6826151a5565b602082019050919050565b6000602082019050818103600083015261520a816151ce565b9050919050565b7f416d6f756e74206d757374206265203e207a65726f0000000000000000000000600082015250565b6000615247601583614265565b915061525282615211565b602082019050919050565b600060208201905081810360008301526152768161523a565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006152b3601483614265565b91506152be8261527d565b602082019050919050565b600060208201905081810360008301526152e2816152a6565b9050919050565b7f4c6971756964697479206e6f74206164646564207965742e0000000000000000600082015250565b600061531f601883614265565b915061532a826152e9565b602082019050919050565b6000602082019050818103600083015261534e81615312565b9050919050565b7f54726164696e67206e6f74206f70656e207965742e0000000000000000000000600082015250565b600061538b601583614265565b915061539682615355565b602082019050919050565b600060208201905081810360008301526153ba8161537e565b9050919050565b6000819050919050565b60006153e66153e16153dc846153c1565b614905565b614524565b9050919050565b6153f6816153cb565b82525050565b60006080820190506154116000830187614772565b61541e6020830186614772565b61542b604083018561417f565b61543860608301846153ed565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615477601183614265565b915061548282615441565b602082019050919050565b600060208201905081810360008301526154a68161546a565b9050919050565b7f5472616e736665722072617465206c696d69742065786365656465642e000000600082015250565b60006154e3601d83614265565b91506154ee826154ad565b602082019050919050565b60006020820190508181036000830152615512816154d6565b9050919050565b7f57616c6c65742070726f7465637465642c20706c6561736520636f6e7461637460008201527f20737570706f72742e0000000000000000000000000000000000000000000000602082015250565b6000615575602983614265565b915061558082615519565b604082019050919050565b600060208201905081810360008301526155a481615568565b9050919050565b6000819050919050565b60006155d06155cb6155c6846155ab565b614905565b614524565b9050919050565b6155e0816155b5565b82525050565b60006080820190506155fb6000830187614772565b6156086020830186614772565b615615604083018561417f565b61562260608301846155d7565b95945050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000615687602583614265565b91506156928261562b565b604082019050919050565b600060208201905081810360008301526156b68161567a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506156fb8161443b565b92915050565b600060208284031215615717576157166141a9565b5b6000615725848285016156ec565b91505092915050565b600061574961574461573f846153c1565b614905565b614175565b9050919050565b6157598161572e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61579481614429565b82525050565b60006157a6838361578b565b60208301905092915050565b6000602082019050919050565b60006157ca8261575f565b6157d4818561576a565b93506157df8361577b565b8060005b838110156158105781516157f7888261579a565b9750615802836157b2565b9250506001810190506157e3565b5085935050505092915050565b600060a082019050615832600083018861417f565b61583f6020830187615750565b818103604083015261585181866157bf565b90506158606060830185614772565b61586d608083018461417f565b9695505050505050565b600061588282614931565b9050919050565b61589281615877565b82525050565b600060c0820190506158ad6000830189614772565b6158ba602083018861417f565b6158c76040830187615750565b6158d46060830186615750565b6158e16080830185615889565b6158ee60a083018461417f565b979650505050505050565b600081519050615908816141b3565b92915050565b600080600060608486031215615927576159266141a9565b5b6000615935868287016158f9565b9350506020615946868287016158f9565b9250506040615957868287016158f9565b915050925092509256fea264697066735822122075c6e25ca2267d7ada4a646a947368a29e15d76db5da703326c047c4f3941e4e64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806370a08231116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610d1d578063f8821a6214610d46578063f887ea4014610d71578063fabb0b4f14610d9c5761038c565b8063dd62ed3e14610c4f578063e96fada214610c8c578063f1f3bca314610cb7578063f2fde38b14610cf45761038c565b8063d0889358116100dc578063d088935814610ba9578063d686014214610bd2578063d912b2ce14610bfb578063dae39f9214610c125761038c565b8063bfa21d6a14610b18578063c1adf7bc14610b43578063c287184e14610b805761038c565b80639b02c4021161016f578063a9059cbb11610149578063a9059cbb14610a5c578063abe57e7014610a99578063bafe446b14610ac2578063bf56b37114610aed5761038c565b80639b02c402146109dd578063a4b45c0014610a08578063a8aa1b3114610a315761038c565b8063893d20e8116101ab578063893d20e81461091f5780638b42507f1461094a5780638da5cb5b1461098757806395d89b41146109b25761038c565b806370a08231146108a0578063715018a6146108dd5780638124f7ac146108f45761038c565b8063421dd7c7116102b6578063584f969a11610254578063658d4b7f11610223578063658d4b7f146107e6578063672434821461080f5780636ddd1713146108385780636f4ce428146108635761038c565b8063584f969a1461075057806360bba03d1461076757806361e08e721461079057806363a803e1146107bb5761038c565b80635071393511610290578063507139351461069657806356a227f2146106bf578063571ac8b0146106e85780635804f1e4146107255761038c565b8063421dd7c71461061957806346d7edaa14610630578063492a937b1461066d5761038c565b8063234e949411610323578063313ce567116102fd578063313ce5671461054b578063332402f81461057657806334848b9a146105b35780633f4218e0146105dc5761038c565b8063234e9494146104b857806323b872dd146104e35780632b112e49146105205761038c565b8063095db78f1161035f578063095db78f14610410578063095ea7b3146104395780631031e36e1461047657806318160ddd1461048d5761038c565b80630445b6671461039157806304a66b48146103bc57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dc7565b6040516103b3919061418e565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906141df565b610dcd565b005b3480156103f157600080fd5b506103fa610f33565b60405161040791906142ea565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906143a9565b610f70565b005b34801561044557600080fd5b50610460600480360381019061045b9190614467565b61120f565b60405161046d91906144b6565b60405180910390f35b34801561048257600080fd5b5061048b611301565b005b34801561049957600080fd5b506104a2611408565b6040516104af919061418e565b60405180910390f35b3480156104c457600080fd5b506104cd611412565b6040516104da919061418e565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906144d1565b611434565b60405161051791906144b6565b60405180910390f35b34801561052c57600080fd5b506105356115f6565b604051610542919061418e565b60405180910390f35b34801561055757600080fd5b5061056061166a565b60405161056d9190614540565b60405180910390f35b34801561058257600080fd5b5061059d6004803603810190610598919061455b565b611673565b6040516105aa91906144b6565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d5919061459b565b6117ed565b005b3480156105e857600080fd5b5061060360048036038101906105fe91906145ee565b611942565b60405161061091906144b6565b60405180910390f35b34801561062557600080fd5b5061062e611962565b005b34801561063c57600080fd5b50610657600480360381019061065291906145ee565b611a6a565b604051610664919061418e565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f919061461b565b611a82565b005b3480156106a257600080fd5b506106bd60048036038101906106b8919061459b565b611b75565b005b3480156106cb57600080fd5b506106e660048036038101906106e1919061465b565b611bf3565b005b3480156106f457600080fd5b5061070f600480360381019061070a91906145ee565b611d9b565b60405161071c91906144b6565b60405180910390f35b34801561073157600080fd5b5061073a611dce565b604051610747919061418e565b60405180910390f35b34801561075c57600080fd5b50610765611dd4565b005b34801561077357600080fd5b5061078e6004803603810190610789919061461b565b611edc565b005b34801561079c57600080fd5b506107a5611f3f565b6040516107b2919061418e565b60405180910390f35b3480156107c757600080fd5b506107d0611f45565b6040516107dd919061418e565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061461b565b611f67565b005b34801561081b57600080fd5b50610836600480360381019061083191906146f1565b611fca565b005b34801561084457600080fd5b5061084d61217d565b60405161085a91906144b6565b60405180910390f35b34801561086f57600080fd5b5061088a600480360381019061088591906145ee565b612190565b604051610897919061418e565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c291906145ee565b6121a8565b6040516108d4919061418e565b60405180910390f35b3480156108e957600080fd5b506108f26121f1565b005b34801561090057600080fd5b50610909612205565b60405161091691906144b6565b60405180910390f35b34801561092b57600080fd5b50610934612218565b6040516109419190614781565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906145ee565b612227565b60405161097e91906144b6565b60405180910390f35b34801561099357600080fd5b5061099c612247565b6040516109a99190614781565b60405180910390f35b3480156109be57600080fd5b506109c7612270565b6040516109d491906142ea565b60405180910390f35b3480156109e957600080fd5b506109f26122ad565b6040516109ff919061418e565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a919061455b565b6122b3565b005b348015610a3d57600080fd5b50610a46612341565b604051610a539190614781565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e9190614467565b612367565b604051610a9091906144b6565b60405180910390f35b348015610aa557600080fd5b50610ac06004803603810190610abb919061479c565b61237c565b005b348015610ace57600080fd5b50610ad76123ce565b604051610ae4919061418e565b60405180910390f35b348015610af957600080fd5b50610b026123f0565b604051610b0f919061418e565b60405180910390f35b348015610b2457600080fd5b50610b2d6123f6565b604051610b3a91906147fd565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b6591906145ee565b61241c565b604051610b77919061418e565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190614818565b612434565b005b348015610bb557600080fd5b50610bd06004803603810190610bcb9190614845565b612454565b005b348015610bde57600080fd5b50610bf96004803603810190610bf49190614898565b6124bb565b005b348015610c0757600080fd5b50610c106125eb565b005b348015610c1e57600080fd5b50610c396004803603810190610c3491906145ee565b61261f565b604051610c4691906144b6565b60405180910390f35b348015610c5b57600080fd5b50610c766004803603810190610c71919061455b565b61263f565b604051610c83919061418e565b60405180910390f35b348015610c9857600080fd5b50610ca16126c6565b604051610cae91906147fd565b60405180910390f35b348015610cc357600080fd5b50610cde6004803603810190610cd991906148d8565b6126ec565b604051610ceb919061418e565b60405180910390f35b348015610d0057600080fd5b50610d1b6004803603810190610d1691906145ee565b612735565b005b348015610d2957600080fd5b50610d446004803603810190610d3f919061461b565b6127b8565b005b348015610d5257600080fd5b50610d5b61281b565b604051610d68919061418e565b60405180910390f35b348015610d7d57600080fd5b50610d86612821565b604051610d939190614964565b60405180910390f35b348015610da857600080fd5b50610db1612847565b604051610dbe919061418e565b60405180910390f35b60265481565b610dd561284d565b8385610de191906149ae565b6002808688610df091906149ae565b610dfa9190614a11565b610e049190614a42565b14610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90614af6565b60405180910390fd5b846010819055508360118190555082600e8190555081600f819055508285610e6c91906149ae565b6012819055508184610e7e91906149ae565b601381905550806014819055506002601454610e9a9190614a11565b601354601254610eaa91906149ae565b1115610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290614b62565b60405180910390fd5b7f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f45601254601354601454604051610f2493929190614b82565b60405180910390a15050505050565b60606040518060400160405280600b81526020017f5472656e64417070656e64000000000000000000000000000000000000000000815250905090565b60296000610f7c6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110015750610fd2612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790614c05565b60405180910390fd5b801561106057601b60009054906101000a900460ff1661105f57600080fd5b5b60005b838390508110156112095781156110f657601d600081548092919061108790614c25565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea328585848181106110c1576110c0614c6d565b5b90506020020160208101906110d691906145ee565b4360026040516110e99493929190614cd7565b60405180910390a161117e565b6000601a600086868581811061110f5761110e614c6d565b5b905060200201602081019061112491906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461117d57601d600081548092919061117790614d1c565b91905055505b5b8161118a57600061118c565b435b601a60008686858181106111a3576111a2614c6d565b5b90506020020160208101906111b891906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061120190614c25565b915050611063565b50505050565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112ef919061418e565b60405180910390a36001905092915050565b6029600061130d6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113925750611363612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890614c05565b60405180910390fd5b602360019054906101000a900460ff16156113eb57600080fd5b6000602360006101000a81548160ff021916908315150217905550565b6000600354905090565b60006009600a6114229190614e78565b60055461142f9190614a11565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115e25781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115619190614ec3565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6115ed8484846128d3565b90509392505050565b6000611623600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166121a8565b61164e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166121a8565b61165891906149ae565b6003546116659190614ec3565b905090565b60006009905090565b6000601560009054906101000a900460ff161580156116dc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117325750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561174057600090506117e7565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117e45750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90505b92915050565b602960006117f96128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061187e575061184f612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614c05565b60405180910390fd5b602360009054906101000a900460ff161580156118da5750600a83105b6118e357600080fd5b826022819055506001602360006101000a81548160ff02191690831515021790555043602081905550814261191891906149ae565b601e819055506009600a61192c9190614e78565b816119379190614a42565b601c81905550505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6029600061196e6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119f357506119c4612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990614c05565b60405180910390fd5b6001601b60016101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff021916908315150217905550565b601a6020528060005260406000206000915090505481565b611a8a61284d565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614f69565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b7d61284d565b600083118015611b8d5750600082115b8015611b995750600081115b8015611ba757506127108111155b611bb057600080fd5b8083600354611bbf9190614a42565b611bc99190614a11565b6004819055508082600354611bde9190614a42565b611be89190614a11565b600581905550505050565b60296000611bff6128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c845750611c55612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90614c05565b60405180910390fd5b60004790506000811115611d965760008273ffffffffffffffffffffffffffffffffffffffff1660648584611cf89190614a42565b611d029190614a11565b604051611d0e90614fba565b60006040518083038185875af1925050503d8060008114611d4b576040519150601f19603f3d011682016040523d82523d6000602084013e611d50565b606091505b5050905080611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b9061501b565b60405180910390fd5b505b505050565b6000611dc7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61120f565b9050919050565b60215481565b60296000611de06128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e655750611e36612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90614c05565b60405180910390fd5b6001602360016101000a81548160ff0219169083151502179055506001602360006101000a81548160ff021916908315150217905550565b611ee461284d565b80602960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60245481565b60006009600a611f559190614e78565b600654611f629190614a11565b905090565b611f6f61284d565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611fd261284d565b600084849050118015611fea57508383905082829050145b611ff357600080fd5b600033905060005b85859050811015612175576019600087878481811061201d5761201c614c6d565b5b905060200201602081019061203291906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120f85750600d600087878481811061209957612098614c6d565b5b90506020020160208101906120ae91906145ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612162576121608287878481811061211457612113614c6d565b5b905060200201602081019061212991906145ee565b6009600a6121379190614e78565b87878681811061214a57612149614c6d565b5b9050602002013561215b9190614a42565b613106565b505b808061216d90614c25565b915050611ffb565b505050505050565b602560009054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121f961284d565b6122036000613294565b565b601560009054906101000a900460ff1681565b6000612222612247565b905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f54524e4400000000000000000000000000000000000000000000000000000000815250905090565b601d5481565b6122bb61284d565b81601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006123743384846128d3565b905092915050565b61238461284d565b6000821180156123945750600081115b80156123a257506127108111155b6123ab57600080fd5b80826003546123ba9190614a42565b6123c49190614a11565b6006819055505050565b60006009600a6123de9190614e78565b6004546123eb9190614a11565b905090565b60205481565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b61243c61284d565b603c81111561244a57600080fd5b8060248190555050565b61245c61284d565b6000821161246957600080fd5b82602560006101000a81548160ff021916908315150217905550816003546124919190614a11565b6026819055506009600a6124a59190614e78565b816124b09190614a42565b602781905550505050565b602960006124c76128cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061254c575061251d612247565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290614c05565b60405180910390fd5b601b60019054906101000a900460ff16156125a557600080fd5b81601b60006101000a81548160ff0219169083151502179055506201518081106125ce57600080fd5b80601e60008282546125e091906149ae565b925050819055505050565b6125f361284d565b601560009054906101000a900460ff1615601560006101000a81548160ff021916908315150217905550565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000436022546020546126ff91906149ae565b1061271a5760016014546127139190614ec3565b9050612730565b811561272a576013549050612730565b60125490505b919050565b61273d61284d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906150ad565b60405180910390fd5b6127b581613294565b50565b6127c061284d565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60275481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60225481565b6128556128cb565b73ffffffffffffffffffffffffffffffffffffffff16612873612247565b73ffffffffffffffffffffffffffffffffffffffff16146128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090615119565b60405180910390fd5b565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90615185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a9906151f1565b60405180910390fd5b600082116129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec9061525d565b60405180910390fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e906152c9565b60405180910390fd5b612a7f613358565b158015612ad55750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b6f57600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90615335565b60405180910390fd5b612b6e613365565b5b602360009054906101000a900460ff16612c6457600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c245750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5a906153a1565b60405180910390fd5b5b612c6f848484613390565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d175750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d7957600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d7857612d77838361394c565b5b5b601b60009054906101000a900460ff168015612d96575042601e54115b15612f0c57601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2057508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e6b57506000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15612f0b5743601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d6000815480929190612ec790614c25565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051612f0294939291906153fc565b60405180910390a15b5b602860009054906101000a900460ff1615612f3357612f2c848484613106565b90506130ff565b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7e9190614ec3565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000829050612fd08585611673565b1561300657612fdf84846139e5565b9050612fea84613ac8565b8015612ff65750600083115b156130055761300483613c0d565b5b5b80600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305191906149ae565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130f1919061418e565b60405180910390a360019150505b9392505050565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539190614ec3565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131e191906149ae565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613281919061418e565b60405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806020541415905090565b43602081905550426021819055506001602560006101000a81548160ff021916908315150217905550565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134315750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61394757601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661348e57600554613492565b6004545b8111156134d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cb9061548d565b60405180910390fd5b43602454600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352291906149ae565b1115613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355a906154f9565b60405180910390fd5b6000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146136a4576009600a6135b89190614e78565b601c546135c59190614a42565b811115801561361357506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b8015613620575042601e54115b61365f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136569061558b565b60405180910390fd5b43600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561373f5743600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613946565b6137498383611673565b1561394557601b60009054906101000a900460ff16801561376b575042601e54115b80156137b5575043600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b801561380057506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156138885743601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea328343600160405161387f94939291906155e6565b60405180910390a15b43600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146139445743600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b505050565b600060065490508082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f91906149ae565b11156139e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d79061569d565b60405180910390fd5b505050565b600080601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601454613a45836126ec565b85613a509190614a42565b613a5a9190614a11565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613aab91906149ae565b925050819055508084613abe9190614ec3565b9250505092915050565b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b315750602860009054906101000a900460ff16155b8015613b495750602560009054906101000a900460ff165b8015613b9e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613beb5750602754600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015613c0657506000601354601254613c0491906149ae565b115b9050919050565b6001602860006101000a81548160ff0219169083151502179055506000601354601254613c3a91906149ae565b905060006026548310613c4f57602654613c51565b825b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613cdd57600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000601154601054613cef91906149ae565b905060008360028385613d029190614a42565b613d0c9190614a11565b613d169190614a11565b90508083613d249190614ec3565b92506000600267ffffffffffffffff811115613d4357613d426156bd565b5b604051908082528060200260200182016040528015613d715781602001602082028036833780820191505090505b5090503081600081518110613d8957613d88614c6d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e549190615701565b81600181518110613e6857613e67614c6d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008530426040518663ffffffff1660e01b8152600401613f0b95949392919061581d565b600060405180830381600087803b158015613f2557600080fd5b505af1158015613f39573d6000803e3d6000fd5b5050505060008147613f4b9190614ec3565b90506000600286613f5c9190614a11565b88613f679190614ec3565b905060008160028885613f7a9190614a42565b613f849190614a11565b613f8e9190614a11565b905060008184613f9e9190614ec3565b90506000811115614039576000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ff190614fba565b60006040518083038185875af1925050503d806000811461402e576040519150601f19603f3d011682016040523d82523d6000602084013e614033565b606091505b50509050505b600087111561411257601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308a600080601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140cb96959493929190615898565b60606040518083038185885af11580156140e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061410e919061590e565b5050505b7fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df981838960405161414593929190614b82565b60405180910390a1505050505050505050506000602860006101000a81548160ff02191690831515021790555050565b6000819050919050565b61418881614175565b82525050565b60006020820190506141a3600083018461417f565b92915050565b600080fd5b600080fd5b6141bc81614175565b81146141c757600080fd5b50565b6000813590506141d9816141b3565b92915050565b600080600080600060a086880312156141fb576141fa6141a9565b5b6000614209888289016141ca565b955050602061421a888289016141ca565b945050604061422b888289016141ca565b935050606061423c888289016141ca565b925050608061424d888289016141ca565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015614294578082015181840152602081019050614279565b60008484015250505050565b6000601f19601f8301169050919050565b60006142bc8261425a565b6142c68185614265565b93506142d6818560208601614276565b6142df816142a0565b840191505092915050565b6000602082019050818103600083015261430481846142b1565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126143315761433061430c565b5b8235905067ffffffffffffffff81111561434e5761434d614311565b5b60208301915083602082028301111561436a57614369614316565b5b9250929050565b60008115159050919050565b61438681614371565b811461439157600080fd5b50565b6000813590506143a38161437d565b92915050565b6000806000604084860312156143c2576143c16141a9565b5b600084013567ffffffffffffffff8111156143e0576143df6141ae565b5b6143ec8682870161431b565b935093505060206143ff86828701614394565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061443482614409565b9050919050565b61444481614429565b811461444f57600080fd5b50565b6000813590506144618161443b565b92915050565b6000806040838503121561447e5761447d6141a9565b5b600061448c85828601614452565b925050602061449d858286016141ca565b9150509250929050565b6144b081614371565b82525050565b60006020820190506144cb60008301846144a7565b92915050565b6000806000606084860312156144ea576144e96141a9565b5b60006144f886828701614452565b935050602061450986828701614452565b925050604061451a868287016141ca565b9150509250925092565b600060ff82169050919050565b61453a81614524565b82525050565b60006020820190506145556000830184614531565b92915050565b60008060408385031215614572576145716141a9565b5b600061458085828601614452565b925050602061459185828601614452565b9150509250929050565b6000806000606084860312156145b4576145b36141a9565b5b60006145c2868287016141ca565b93505060206145d3868287016141ca565b92505060406145e4868287016141ca565b9150509250925092565b600060208284031215614604576146036141a9565b5b600061461284828501614452565b91505092915050565b60008060408385031215614632576146316141a9565b5b600061464085828601614452565b925050602061465185828601614394565b9150509250929050565b60008060408385031215614672576146716141a9565b5b6000614680858286016141ca565b925050602061469185828601614452565b9150509250929050565b60008083601f8401126146b1576146b061430c565b5b8235905067ffffffffffffffff8111156146ce576146cd614311565b5b6020830191508360208202830111156146ea576146e9614316565b5b9250929050565b6000806000806040858703121561470b5761470a6141a9565b5b600085013567ffffffffffffffff811115614729576147286141ae565b5b6147358782880161431b565b9450945050602085013567ffffffffffffffff811115614758576147576141ae565b5b6147648782880161469b565b925092505092959194509250565b61477b81614429565b82525050565b60006020820190506147966000830184614772565b92915050565b600080604083850312156147b3576147b26141a9565b5b60006147c1858286016141ca565b92505060206147d2858286016141ca565b9150509250929050565b60006147e782614409565b9050919050565b6147f7816147dc565b82525050565b600060208201905061481260008301846147ee565b92915050565b60006020828403121561482e5761482d6141a9565b5b600061483c848285016141ca565b91505092915050565b60008060006060848603121561485e5761485d6141a9565b5b600061486c86828701614394565b935050602061487d868287016141ca565b925050604061488e868287016141ca565b9150509250925092565b600080604083850312156148af576148ae6141a9565b5b60006148bd85828601614394565b92505060206148ce858286016141ca565b9150509250929050565b6000602082840312156148ee576148ed6141a9565b5b60006148fc84828501614394565b91505092915050565b6000819050919050565b600061492a61492561492084614409565b614905565b614409565b9050919050565b600061493c8261490f565b9050919050565b600061494e82614931565b9050919050565b61495e81614943565b82525050565b60006020820190506149796000830184614955565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149b982614175565b91506149c483614175565b92508282019050808211156149dc576149db61497f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a1c82614175565b9150614a2783614175565b925082614a3757614a366149e2565b5b828204905092915050565b6000614a4d82614175565b9150614a5883614175565b9250828202614a6681614175565b91508282048414831517614a7d57614a7c61497f565b5b5092915050565b7f4c697175696469747920666565206d75737420626520616e206576656e206e7560008201527f6d6265722064756520746f20726f756e64696e67000000000000000000000000602082015250565b6000614ae0603483614265565b9150614aeb82614a84565b604082019050919050565b60006020820190508181036000830152614b0f81614ad3565b9050919050565b7f4665657320746f6f206869676800000000000000000000000000000000000000600082015250565b6000614b4c600d83614265565b9150614b5782614b16565b602082019050919050565b60006020820190508181036000830152614b7b81614b3f565b9050919050565b6000606082019050614b97600083018661417f565b614ba4602083018561417f565b614bb1604083018461417f565b949350505050565b7f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000600082015250565b6000614bef601b83614265565b9150614bfa82614bb9565b602082019050919050565b60006020820190508181036000830152614c1e81614be2565b9050919050565b6000614c3082614175565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c6257614c6161497f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614cc1614cbc614cb784614c9c565b614905565b614524565b9050919050565b614cd181614ca6565b82525050565b6000608082019050614cec6000830187614772565b614cf96020830186614772565b614d06604083018561417f565b614d136060830184614cc8565b95945050505050565b6000614d2782614175565b915060008203614d3a57614d3961497f565b5b600182039050919050565b60008160011c9050919050565b6000808291508390505b6001851115614d9c57808604811115614d7857614d7761497f565b5b6001851615614d875780820291505b8081029050614d9585614d45565b9450614d5c565b94509492505050565b600082614db55760019050614e71565b81614dc35760009050614e71565b8160018114614dd95760028114614de357614e12565b6001915050614e71565b60ff841115614df557614df461497f565b5b8360020a915084821115614e0c57614e0b61497f565b5b50614e71565b5060208310610133831016604e8410600b8410161715614e475782820a905083811115614e4257614e4161497f565b5b614e71565b614e548484846001614d52565b92509050818404811115614e6b57614e6a61497f565b5b81810290505b9392505050565b6000614e8382614175565b9150614e8e83614524565b9250614ebb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614da5565b905092915050565b6000614ece82614175565b9150614ed983614175565b9250828203905081811115614ef157614ef061497f565b5b92915050565b7f43616e277420616c7465722063757272656e74206c697175696469747920706160008201527f6972000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f53602283614265565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b600081905092915050565b50565b6000614fa4600083614f89565b9150614faf82614f94565b600082019050919050565b6000614fc582614f97565b9150819050919050565b7f4661696c656420746f207472616e736665722066756e64730000000000000000600082015250565b6000615005601883614265565b915061501082614fcf565b602082019050919050565b6000602082019050818103600083015261503481614ff8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615097602683614265565b91506150a28261503b565b604082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615103602083614265565b915061510e826150cd565b602082019050919050565b60006020820190508181036000830152615132816150f6565b9050919050565b7f42455032303a207472616e736665722066726f6d203078300000000000000000600082015250565b600061516f601883614265565b915061517a82615139565b602082019050919050565b6000602082019050818103600083015261519e81615162565b9050919050565b7f42455032303a207472616e7366657220746f2030783000000000000000000000600082015250565b60006151db601683614265565b91506151e6826151a5565b602082019050919050565b6000602082019050818103600083015261520a816151ce565b9050919050565b7f416d6f756e74206d757374206265203e207a65726f0000000000000000000000600082015250565b6000615247601583614265565b915061525282615211565b602082019050919050565b600060208201905081810360008301526152768161523a565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006152b3601483614265565b91506152be8261527d565b602082019050919050565b600060208201905081810360008301526152e2816152a6565b9050919050565b7f4c6971756964697479206e6f74206164646564207965742e0000000000000000600082015250565b600061531f601883614265565b915061532a826152e9565b602082019050919050565b6000602082019050818103600083015261534e81615312565b9050919050565b7f54726164696e67206e6f74206f70656e207965742e0000000000000000000000600082015250565b600061538b601583614265565b915061539682615355565b602082019050919050565b600060208201905081810360008301526153ba8161537e565b9050919050565b6000819050919050565b60006153e66153e16153dc846153c1565b614905565b614524565b9050919050565b6153f6816153cb565b82525050565b60006080820190506154116000830187614772565b61541e6020830186614772565b61542b604083018561417f565b61543860608301846153ed565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615477601183614265565b915061548282615441565b602082019050919050565b600060208201905081810360008301526154a68161546a565b9050919050565b7f5472616e736665722072617465206c696d69742065786365656465642e000000600082015250565b60006154e3601d83614265565b91506154ee826154ad565b602082019050919050565b60006020820190508181036000830152615512816154d6565b9050919050565b7f57616c6c65742070726f7465637465642c20706c6561736520636f6e7461637460008201527f20737570706f72742e0000000000000000000000000000000000000000000000602082015250565b6000615575602983614265565b915061558082615519565b604082019050919050565b600060208201905081810360008301526155a481615568565b9050919050565b6000819050919050565b60006155d06155cb6155c6846155ab565b614905565b614524565b9050919050565b6155e0816155b5565b82525050565b60006080820190506155fb6000830187614772565b6156086020830186614772565b615615604083018561417f565b61562260608301846155d7565b95945050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000615687602583614265565b91506156928261562b565b604082019050919050565b600060208201905081810360008301526156b68161567a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506156fb8161443b565b92915050565b600060208284031215615717576157166141a9565b5b6000615725848285016156ec565b91505092915050565b600061574961574461573f846153c1565b614905565b614175565b9050919050565b6157598161572e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61579481614429565b82525050565b60006157a6838361578b565b60208301905092915050565b6000602082019050919050565b60006157ca8261575f565b6157d4818561576a565b93506157df8361577b565b8060005b838110156158105781516157f7888261579a565b9750615802836157b2565b9250506001810190506157e3565b5085935050505092915050565b600060a082019050615832600083018861417f565b61583f6020830187615750565b818103604083015261585181866157bf565b90506158606060830185614772565b61586d608083018461417f565b9695505050505050565b600061588282614931565b9050919050565b61589281615877565b82525050565b600060c0820190506158ad6000830189614772565b6158ba602083018861417f565b6158c76040830187615750565b6158d46060830186615750565b6158e16080830185615889565b6158ee60a083018461417f565b979650505050505050565b600081519050615908816141b3565b92915050565b600080600060608486031215615927576159266141a9565b5b6000615935868287016158f9565b9350506020615946868287016158f9565b9250506040615957868287016158f9565b915050925092509256fea264697066735822122075c6e25ca2267d7ada4a646a947368a29e15d76db5da703326c047c4f3941e4e64736f6c63430008110033

Deployed Bytecode Sourcemap

7365:17647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9506:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23211:812;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10970:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14041:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11711:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13405:115;;;;;;;;;;;;;:::i;:::-;;10718:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11235:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14830:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24685:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10812:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19043:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13021:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8152:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13902:127;;;;;;;;;;;;;:::i;:::-;;9015:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22043:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22371:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12680:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11935:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9300:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13532:111;;;;;;;;;;;;;:::i;:::-;;12069:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9431:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11348:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22949:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12200:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9468:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8049:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11459:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6851:103;;;;;;;;;;;;;:::i;:::-;;8614:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11047:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8203:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6620:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10889:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9171:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24132:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9240:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14666:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11124:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9268:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8654:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8100:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22235:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24382:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13655:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24031:93;;;;;;;;;;;;;:::i;:::-;;8258:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11570:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8758:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19306:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6960:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23076:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9563:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8864:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9334:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9506:50;;;;:::o;23211:812::-;6581:13;:11;:13::i;:::-;23457:17:::1;23441:13;:33;;;;:::i;:::-;23435:1;23430::::0;23409:17:::1;23393:13;:33;;;;:::i;:::-;23392:39;;;;:::i;:::-;23391:45;;;;:::i;:::-;:84;23383:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;23558:13;23543:12;:28;;;;23601:17;23582:16;:36;;;;23644:13;23629:12;:28;;;;23687:17;23668:16;:36;;;;23745:13;23729;:29;;;;:::i;:::-;23715:11;:43;;;;23804:17;23784;:37;;;;:::i;:::-;23769:12;:52;;;;23849:15;23832:14;:32;;;;23930:1;23913:14;;:18;;;;:::i;:::-;23897:12;;23883:11;;:26;;;;:::i;:::-;:48;;23875:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23965:50;23973:11;;23986:12;;24000:14;;23965:50;;;;;;;;:::i;:::-;;;;;;;;23211:812:::0;;;;;:::o;10970:71::-;11009:13;11033:5;;;;;;;;;;;;;;;;;11026:12;;10970:71;:::o;14041:617::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;14141:8:::1;14137:67;;;14174:17;;;;;;;;;;;14166:26;;;::::0;::::1;;14137:67;14229:6;14224:427;14245:8;;:15;;14241:1;:19;14224:427;;;14300:8;14296:277;;;14329:15;;:17;;;;;;;;;:::i;:::-;;;;;;14370:56;14386:9;14397:8;;14406:1;14397:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14410:12;14424:1;14370:56;;;;;;;;;:::i;:::-;;;;;;;;14296:277;;;14510:1;14484:9;:22;14494:8;;14503:1;14494:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14484:22;;;;;;;;;;;;;;;;:27;14480:71;;14534:15;;:17;;;;;;;;;:::i;:::-;;;;;;14480:71;14296:277;14612:8;:27;;14638:1;14612:27;;;14623:12;14612:27;14587:9;:22;14597:8;;14606:1;14597:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14587:22;;;;;;;;;;;;;;;:52;;;;14262:3;;;;;:::i;:::-;;;;14224:427;;;;14041:617:::0;;;:::o;11711:216::-;11786:4;11838:6;11803:11;:23;11815:10;11803:23;;;;;;;;;;;;;;;:32;11827:7;11803:32;;;;;;;;;;;;;;;:41;;;;11881:7;11860:37;;11869:10;11860:37;;;11890:6;11860:37;;;;;;:::i;:::-;;;;;;;;11915:4;11908:11;;11711:216;;;;:::o;13405:115::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13467:13:::1;;;;;;;;;;;13466:14;13458:23;;;::::0;::::1;;13507:5;13492:12;;:20;;;;;;;;;;;;;;;;;;13405:115::o:0;10718:88::-;10773:7;10791:12;;10784:19;;10718:88;:::o;11235:107::-;11285:7;7690:1;11323:2;:15;;;;:::i;:::-;11303:16;;:36;;;;:::i;:::-;11296:43;;11235:107;:::o;14830:341::-;14930:4;14985:17;14950:11;:19;14962:6;14950:19;;;;;;;;;;;;;;;:31;14970:10;14950:31;;;;;;;;;;;;;;;;:52;14947:157;;15086:6;15052:11;:19;15064:6;15052:19;;;;;;;;;;;;;;;:31;15072:10;15052:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;15018:11;:19;15030:6;15018:19;;;;;;;;;;;;;;;:31;15038:10;15018:31;;;;;;;;;;;;;;;:74;;;;14947:157;15123:40;15137:6;15145:9;15156:6;15123:13;:40::i;:::-;15116:47;;14830:341;;;;;:::o;24685:138::-;24738:7;24799:15;24809:4;;;;;;;;;;;24799:9;:15::i;:::-;24781;24791:4;;;;;;;;;;;24781:9;:15::i;:::-;:33;;;;:::i;:::-;24765:12;;:50;;;;:::i;:::-;24758:57;;24685:138;:::o;10812:71::-;10855:5;7690:1;10864:16;;10812:71;:::o;19043:255::-;19122:4;19143:11;;;;;;;;;;;19142:12;:42;;;;;19159:14;:25;19174:9;19159:25;;;;;;;;;;;;;;;;;;;;;;;;;19158:26;19142:42;:69;;;;;19189:14;:22;19204:6;19189:22;;;;;;;;;;;;;;;;;;;;;;;;;19188:23;19142:69;19139:86;;;19220:5;19213:12;;;;19139:86;19244:11;:19;19256:6;19244:19;;;;;;;;;;;;;;;;;;;;;;;;;19243:20;:47;;;;;19268:11;:22;19280:9;19268:22;;;;;;;;;;;;;;;;;;;;;;;;;19267:23;19243:47;19236:54;;19043:255;;;;;:::o;13021:372::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13138:12:::1;;;;;;;;;;;13137:13;:33;;;;;13168:2;13154:11;:16;13137:33;13129:42;;;::::0;::::1;;13195:11;13182:10;:24;;;;13232:4;13217:12;;:19;;;;;;;;;;;;;;;;;;13260:12;13247:10;:25;;;;13319:11;13301:15;:29;;;;:::i;:::-;13283:15;:47;;;;7690:1;13369:2;:15;;;;:::i;:::-;13359:6;:26;;;;:::i;:::-;13341:15;:44;;;;13021:372:::0;;;:::o;8152:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;13902:127::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13981:4:::1;13960:18;;:25;;;;;;;;;;;;;;;;;;14016:5;13996:17;;:25;;;;;;;;;;;;;;;;;;13902:127::o:0;9015:45::-;;;;;;;;;;;;;;;;;:::o;22043:184::-;6581:13;:11;:13::i;:::-;22138:4:::1;;;;;;;;;;;22132:10;;:2;:10;;::::0;22124:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22213:6;22192:14;:18;22207:2;22192:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22043:184:::0;;:::o;22371:339::-;6581:13;:11;:13::i;:::-;22506:1:::1;22491:12;:16;:37;;;;;22527:1;22511:13;:17;22491:37;:52;;;;;22542:1;22532:7;:11;22491:52;:72;;;;;22558:5;22547:7;:16;;22491:72;22483:81;;;::::0;::::1;;22625:7;22609:12;22594;;:27;;;;:::i;:::-;22593:39;;;;:::i;:::-;22575:15;:57;;;;22695:7;22678:13;22663:12;;:28;;;;:::i;:::-;22662:40;;;;:::i;:::-;22643:16;:59;;;;22371:339:::0;;;:::o;12680:329::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12775:17:::1;12795:21;12775:41;;12844:1;12832:9;:13;12829:173;;;12863:9;12878:3;:8;;12927:3;12907:16;12895:9;:28;;;;:::i;:::-;12894:36;;;;:::i;:::-;12878:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12862:73;;;12958:4;12950:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;12847:155;12829:173;12764:245;12680:329:::0;;:::o;11935:122::-;11990:4;12014:35;12022:7;12031:17;12014:7;:35::i;:::-;12007:42;;11935:122;;;:::o;9300:27::-;;;;:::o;13532:111::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13601:4:::1;13585:13;;:20;;;;;;;;;;;;;;;;;;13631:4;13616:12;;:19;;;;;;;;;;;;;;;;;;13532:111::o:0;12069:119::-;6581:13;:11;:13::i;:::-;12172:8:::1;12152:10;:17;12163:5;12152:17;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;12069:119:::0;;:::o;9431:28::-;;;;:::o;11348:105::-;11398:7;7690:1;11434:2;:15;;;;:::i;:::-;11416:14;;:34;;;;:::i;:::-;11409:41;;11348:105;:::o;22949:119::-;6581:13;:11;:13::i;:::-;23054:6:::1;23032:11;:19;23044:6;23032:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22949:119:::0;;:::o;12200:468::-;6581:13;:11;:13::i;:::-;12332:1:::1;12313:9;;:16;;:20;:58;;;;;12355:9;;:16;;12337:7;;:14;;:34;12313:58;12305:67;;;::::0;::::1;;12383:12;12398:10;12383:25;;12426:6;12421:240;12442:9;;:16;;12438:1;:20;12421:240;;;12484:14;:28;12499:9;;12509:1;12499:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;12484:28;;;;;;;;;;;;;;;;;;;;;;;;;12483:29;:64;;;;;12517:16;:30;12534:9;;12544:1;12534:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;12517:30;;;;;;;;;;;;;;;;;;;;;;;;;12516:31;12483:64;12480:170;;;12568:66;12583:4;12589:9;;12599:1;12589:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;7690:1;12617:2;:15;;;;:::i;:::-;12603:7;;12611:1;12603:10;;;;;;;:::i;:::-;;;;;;;;:30;;;;:::i;:::-;12568:14;:66::i;:::-;;12480:170;12460:3;;;;;:::i;:::-;;;;12421:240;;;;12294:374;12200:468:::0;;;;:::o;9468:31::-;;;;;;;;;;;;;:::o;8049:44::-;;;;;;;;;;;;;;;;;:::o;11459:105::-;11525:7;11543:9;:18;11553:7;11543:18;;;;;;;;;;;;;;;;11536:25;;11459:105;;;:::o;6851:103::-;6581:13;:11;:13::i;:::-;6916:30:::1;6943:1;6916:18;:30::i;:::-;6851:103::o:0;8614:31::-;;;;;;;;;;;;;:::o;11047:71::-;11090:7;11108;:5;:7::i;:::-;11101:14;;11047:71;:::o;8203:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;6620:87::-;6666:7;6693:6;;;;;;;;;;;6686:13;;6620:87;:::o;10889:75::-;10930:13;10954:7;;;;;;;;;;;;;;;;;10947:14;;10889:75;:::o;9171:30::-;;;;:::o;24132:242::-;6581:13;:11;:13::i;:::-;24280:21:::1;24249:20;;:53;;;;;;;;;;;;;;;;;;24344:21;24313:20;;:53;;;;;;;;;;;;;;;;;;24132:242:::0;;:::o;9240:19::-;;;;;;;;;;;;;:::o;14666:156::-;14746:4;14770:44;14784:10;14796:9;14807:6;14770:13;:44::i;:::-;14763:51;;14666:156;;;;:::o;22722:219::-;6581:13;:11;:13::i;:::-;22832:1:::1;22820:9;:13;:28;;;;;22847:1;22837:7;:11;22820:28;:48;;;;;22863:5;22852:7;:16;;22820:48;22812:57;;;::::0;::::1;;22926:7;22913:9;22898:12;;:24;;;;:::i;:::-;22897:36;;;;:::i;:::-;22880:14;:53;;;;22722:219:::0;;:::o;11124:105::-;11173:7;7690:1;11210:2;:15;;;;:::i;:::-;11191;;:35;;;;:::i;:::-;11184:42;;11124:105;:::o;9268:25::-;;;;:::o;8654:97::-;;;;;;;;;;;;;:::o;8100:43::-;;;;;;;;;;;;;;;;;:::o;22235:128::-;6581:13;:11;:13::i;:::-;22317:10:::1;22309:4;:18;;22301:27;;;::::0;::::1;;22351:4;22339:9;:16;;;;22235:128:::0;:::o;24382:295::-;6581:13;:11;:13::i;:::-;24523:1:::1;24508:12;:16;24500:25;;;::::0;::::1;;24550:8;24536:11;;:22;;;;;;;;;;;;;;;;;;24600:12;24585;;:27;;;;:::i;:::-;24569:13;:43;;;;7690:1;24653:2;:15;;;;:::i;:::-;24637:12;:32;;;;:::i;:::-;24623:11;:46;;;;24382:295:::0;;;:::o;13655:235::-;9794:10;:24;9805:12;:10;:12::i;:::-;9794:24;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;9836:7;:5;:7::i;:::-;9822:21;;:10;:21;;;9794:49;9786:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13749:18:::1;;;;;;;;;;;13748:19;13740:28;;;::::0;::::1;;13799:8;13779:17;;:28;;;;;;;;;;;;;;;;;;13837:6;13826:8;:17;13818:26;;;::::0;::::1;;13874:8;13855:15;;:27;;;;;;;:::i;:::-;;;;;;;;13655:235:::0;;:::o;24031:93::-;6581:13;:11;:13::i;:::-;24105:11:::1;;;;;;;;;;;24104:12;24090:11;;:26;;;;;;;;;;;;;;;;;;24031:93::o:0;8258:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;11570:133::-;11654:7;11672:11;:19;11684:6;11672:19;;;;;;;;;;;;;;;:28;11692:7;11672:28;;;;;;;;;;;;;;;;11665:35;;11570:133;;;;:::o;8758:97::-;;;;;;;;;;;;;:::o;19306:228::-;19362:7;19412:12;19398:10;;19385;;:23;;;;:::i;:::-;:39;19382:73;;19451:1;19434:14;;:18;;;;:::i;:::-;19427:25;;;;19382:73;19469:7;19465:32;;;19485:12;;19478:19;;;;19465:32;19515:11;;19508:18;;19306:228;;;;:::o;6960:201::-;6581:13;:11;:13::i;:::-;7069:1:::1;7049:22;;:8;:22;;::::0;7041:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7125:28;7144:8;7125:18;:28::i;:::-;6960:201:::0;:::o;23076:127::-;6581:13;:11;:13::i;:::-;23189:6:::1;23163:15;:23;23179:6;23163:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23076:127:::0;;:::o;9563:49::-;;;;:::o;8864:24::-;;;;;;;;;;;;;:::o;9334:25::-;;;;:::o;6713:132::-;6788:12;:10;:12::i;:::-;6777:23;;:7;:5;:7::i;:::-;:23;;;6769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6713:132::o;4670:98::-;4723:7;4750:10;4743:17;;4670:98;:::o;15179:1789::-;15271:4;15314:1;15296:20;;:6;:20;;;15288:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15385:1;15364:23;;:9;:23;;;15356:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15442:1;15433:6;:10;15425:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;15509:6;15488:9;:17;15498:6;15488:17;;;;;;;;;;;;;;;;:27;;15480:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15555:10;:8;:10::i;:::-;15554:11;:40;;;;;15569:14;:25;15584:9;15569:25;;;;;;;;;;;;;;;;;;;;;;;;;15554:40;15551:120;;;15605:16;:24;15622:6;15605:24;;;;;;;;;;;;;;;;;;;;;;;;;15597:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;15660:8;:6;:8::i;:::-;15551:120;15685:12;;;;;;;;;;;15681:111;;15708:16;:24;15725:6;15708:24;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;15736:16;:27;15753:9;15736:27;;;;;;;;;;;;;;;;;;;;;;;;;15708:55;15700:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;15681:111;15804:39;15817:6;15825:9;15836:6;15804:12;:39::i;:::-;15869:14;:25;15884:9;15869:25;;;;;;;;;;;;;;;;;;;;;;;;;15868:26;:47;;;;;15911:4;;;;;;;;;;;15898:17;;:9;:17;;;;15868:47;15864:182;;;15937:15;:26;15953:9;15937:26;;;;;;;;;;;;;;;;;;;;;;;;;15932:103;;15984:35;16001:9;16012:6;15984:16;:35::i;:::-;15932:103;15864:182;16069:17;;;;;;;;;;;:54;;;;;16108:15;16090;;:33;16069:54;16066:351;;;16143:14;:22;16158:6;16143:22;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;16182:9;16169:22;;:9;:22;;;;16143:48;:77;;;;;16219:1;16195:9;:20;16205:9;16195:20;;;;;;;;;;;;;;;;:25;16143:77;16140:266;;;16264:12;16241:9;:20;16251:9;16241:20;;;;;;;;;;;;;;;:35;;;;16295:15;;:17;;;;;;;;;:::i;:::-;;;;;;16336:54;16352:9;16363;16374:12;16388:1;16336:54;;;;;;;;;:::i;:::-;;;;;;;;16140:266;16066:351;16440:6;;;;;;;;;;;16437:63;;;16456:41;16471:6;16479:9;16490:6;16456:14;:41::i;:::-;16449:48;;;;16437:63;16552:6;16532:9;:17;16542:6;16532:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;16512:9;:17;16522:6;16512:17;;;;;;;;;;;;;;;:46;;;;16571:22;16596:6;16571:31;;16618:32;16632:6;16640:9;16618:13;:32::i;:::-;16615:182;;;16684:26;16692:9;16703:6;16684:7;:26::i;:::-;16667:43;;16728:25;16743:9;16728:14;:25::i;:::-;:39;;;;;16766:1;16757:6;:10;16728:39;16725:60;;;16769:16;16778:6;16769:8;:16::i;:::-;16725:60;16615:182;16863:14;16840:9;:20;16850:9;16840:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;16817:9;:20;16827:9;16817:20;;;;;;;;;;;;;;;:60;;;;16912:9;16895:43;;16904:6;16895:43;;;16923:14;16895:43;;;;;;:::i;:::-;;;;;;;;16956:4;16949:11;;;15179:1789;;;;;;:::o;17227:300::-;17320:4;17377:6;17357:9;:17;17367:6;17357:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;17337:9;:17;17347:6;17337:17;;;;;;;;;;;;;;;:46;;;;17440:6;17417:9;:20;17427:9;17417:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;17394:9;:20;17404:9;17394:20;;;;;;;;;;;;;;;:52;;;;17479:9;17462:35;;17471:6;17462:35;;;17490:6;17462:35;;;;;;:::i;:::-;;;;;;;;17515:4;17508:11;;17227:300;;;;;:::o;7167:191::-;7241:16;7260:6;;;;;;;;;;;7241:25;;7286:8;7277:6;;:17;;;;;;;;;;;;;;;;;;7341:8;7310:40;;7331:8;7310:40;;;;;;;;;;;;7230:128;7167:191;:::o;16980:90::-;17023:4;17061:1;17047:10;;:15;;17040:22;;16980:90;:::o;17078:141::-;17129:12;17116:10;:25;;;;17167:15;17152:12;:30;;;;17207:4;17193:11;;:18;;;;;;;;;;;;;;;;;;17078:141::o;17782:1253::-;17879:15;:23;17895:6;17879:23;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;17906:15;:26;17922:9;17906:26;;;;;;;;;;;;;;;;;;;;;;;;;17879:53;17934:7;17875:66;17970:14;:22;17985:6;17970:22;;;;;;;;;;;;;;;;;;;;;;;;;:59;;18013:16;;17970:59;;;17995:15;;17970:59;17959:6;:71;;17951:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18105:12;18092:9;;18071:7;:18;18079:9;18071:18;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:46;;18063:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;18197:1;18176:9;:17;18186:6;18176:17;;;;;;;;;;;;;;;;:22;18172:261;;7690:1;18251:2;:15;;;;:::i;:::-;18232;;:35;;;;:::i;:::-;18222:6;:45;;:70;;;;;18291:1;18271:8;:16;18280:6;18271:16;;;;;;;;;;;;;;;;:21;18222:70;:107;;;;;18314:15;18296;;:33;18222:107;18214:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;18409:12;18390:8;:16;18399:6;18390:16;;;;;;;;;;;;;;;:31;;;;18172:261;18457:14;:25;18472:9;18457:25;;;;;;;;;;;;;;;;;;;;;;;;;18453:575;;;18518:12;18499:8;:16;18508:6;18499:16;;;;;;;;;;;;;;;:31;;;;18453:575;;;18552:32;18566:6;18574:9;18552:13;:32::i;:::-;18548:480;;;18605:17;;;;;;;;;;;:54;;;;;18644:15;18626;;:33;18605:54;:92;;;;;18685:12;18663:7;:18;18671:9;18663:18;;;;;;;;;;;;;;;;:34;18605:92;:121;;;;;18725:1;18701:9;:20;18711:9;18701:20;;;;;;;;;;;;;;;;:25;18605:121;18601:275;;;18770:12;18747:9;:20;18757:9;18747:20;;;;;;;;;;;;;;;:35;;;;18806:54;18822:9;18833;18844:12;18858:1;18806:54;;;;;;;;;:::i;:::-;;;;;;;;18601:275;18911:12;18890:7;:18;18898:9;18890:18;;;;;;;;;;;;;;;:33;;;;18955:9;18942:22;;:9;:22;;;18938:78;;19004:12;18983:7;:18;18991:9;18983:18;;;;;;;;;;;;;;;:33;;;;18938:78;18548:480;18453:575;17782:1253;;;;:::o;17539:235::-;17625:19;17647:14;;17625:36;;17713:11;17703:6;17680:9;:20;17690:9;17680:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:44;;17672:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;17614:160;17539:235;;:::o;19542:317::-;19612:7;19632:12;19647:14;:25;19662:9;19647:25;;;;;;;;;;;;;;;;;;;;;;;;;19632:40;;19683:17;19737:14;;19713:20;19725:7;19713:11;:20::i;:::-;19704:6;:29;;;;:::i;:::-;19703:48;;;;:::i;:::-;19683:68;;19800:9;19772;:24;19790:4;19772:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;19842:9;19833:6;:18;;;;:::i;:::-;19826:25;;;;19542:317;;;;:::o;19867:303::-;19933:4;19958:14;:26;19973:10;19958:26;;;;;;;;;;;;;;;;;;;;;;;;;19957:27;:47;;;;;19998:6;;;;;;;;;;;19997:7;19957:47;:71;;;;;20017:11;;;;;;;;;;;19957:71;:109;;;;;20041:14;:25;20056:9;20041:25;;;;;;;;;;;;;;;;;;;;;;;;;19957:109;:161;;;;;20107:11;;20079:9;:24;20097:4;20079:24;;;;;;;;;;;;;;;;:39;;19957:161;:205;;;;;20161:1;20146:12;;20132:11;;:26;;;;:::i;:::-;:30;19957:205;19950:212;;19867:303;;;:::o;20178:1853::-;9668:4;9659:6;;:13;;;;;;;;;;;;;;;;;;20241:16:::1;20274:12;;20260:11;;:26;;;;:::i;:::-;20241:45;;20297:20;20329:13;;20320:6;:22;:47;;20354:13;;20320:47;;;20345:6;20320:47;20297:70;;20409:12;20382:9;:24;20400:4;20382:24;;;;;;;;;;;;;;;;:39;20378:84;;;20438:9;:24;20456:4;20438:24;;;;;;;;;;;;;;;;20423:39;;20378:84;20483:25;20526:16;;20511:12;;:31;;;;:::i;:::-;20483:59;;20553:23;20620:8;20615:1;20595:17;20580:12;:32;;;;:::i;:::-;:36;;;;:::i;:::-;20579:49;;;;:::i;:::-;20553:75;;20655:15;20639:31;;;;;:::i;:::-;;;20683:21;20721:1;20707:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20683:40;;20752:4;20734;20739:1;20734:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;20778:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20768:4;20773:1;20768:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;20812:21;20836;20812:45;;20870:6;;;;;;;;;;;:57;;;20942:12;20969:1;20985:4;21012;21032:15;20870:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21071:17;21115:13;21091:21;:37;;;;:::i;:::-;21071:57;;21139:19;21193:1;21173:17;:21;;;;:::i;:::-;21161:8;:34;;;;:::i;:::-;21139:56;;21208:26;21275:11;21270:1;21250:17;21238:9;:29;;;;:::i;:::-;:33;;;;:::i;:::-;21237:49;;;;:::i;:::-;21208:78;;21297:26;21338:18;21326:9;:30;;;;:::i;:::-;21297:59;;21402:1;21381:18;:22;21377:243;;;21421:18;21445:20;;;;;;;;;;;:25;;21478:18;21445:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21420:81;;;21405:215;21377:243;21661:1;21643:15;:19;21640:293;;;21678:6;;;;;;;;;;;:22;;;21708:18;21754:4;21778:15;21812:1;21832::::0;21852:20:::1;;;;;;;;;;;21891:15;21678:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21640:293;21950:73;21967:18;21987;22007:15;21950:73;;;;;;;;:::i;:::-;;;;;;;;20230:1801;;;;;;;;;;9686:5:::0;9677:6;;:14;;;;;;;;;;;;;;;;;;20178:1853;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:911::-;1137:6;1145;1153;1161;1169;1218:3;1206:9;1197:7;1193:23;1189:33;1186:120;;;1225:79;;:::i;:::-;1186:120;1345:1;1370:53;1415:7;1406:6;1395:9;1391:22;1370:53;:::i;:::-;1360:63;;1316:117;1472:2;1498:53;1543:7;1534:6;1523:9;1519:22;1498:53;:::i;:::-;1488:63;;1443:118;1600:2;1626:53;1671:7;1662:6;1651:9;1647:22;1626:53;:::i;:::-;1616:63;;1571:118;1728:2;1754:53;1799:7;1790:6;1779:9;1775:22;1754:53;:::i;:::-;1744:63;;1699:118;1856:3;1883:53;1928:7;1919:6;1908:9;1904:22;1883:53;:::i;:::-;1873:63;;1827:119;1042:911;;;;;;;;:::o;1959:99::-;2011:6;2045:5;2039:12;2029:22;;1959:99;;;:::o;2064:169::-;2148:11;2182:6;2177:3;2170:19;2222:4;2217:3;2213:14;2198:29;;2064:169;;;;:::o;2239:246::-;2320:1;2330:113;2344:6;2341:1;2338:13;2330:113;;;2429:1;2424:3;2420:11;2414:18;2410:1;2405:3;2401:11;2394:39;2366:2;2363:1;2359:10;2354:15;;2330:113;;;2477:1;2468:6;2463:3;2459:16;2452:27;2301:184;2239:246;;;:::o;2491:102::-;2532:6;2583:2;2579:7;2574:2;2567:5;2563:14;2559:28;2549:38;;2491:102;;;:::o;2599:377::-;2687:3;2715:39;2748:5;2715:39;:::i;:::-;2770:71;2834:6;2829:3;2770:71;:::i;:::-;2763:78;;2850:65;2908:6;2903:3;2896:4;2889:5;2885:16;2850:65;:::i;:::-;2940:29;2962:6;2940:29;:::i;:::-;2935:3;2931:39;2924:46;;2691:285;2599:377;;;;:::o;2982:313::-;3095:4;3133:2;3122:9;3118:18;3110:26;;3182:9;3176:4;3172:20;3168:1;3157:9;3153:17;3146:47;3210:78;3283:4;3274:6;3210:78;:::i;:::-;3202:86;;2982:313;;;;:::o;3301:117::-;3410:1;3407;3400:12;3424:117;3533:1;3530;3523:12;3547:117;3656:1;3653;3646:12;3687:568;3760:8;3770:6;3820:3;3813:4;3805:6;3801:17;3797:27;3787:122;;3828:79;;:::i;:::-;3787:122;3941:6;3928:20;3918:30;;3971:18;3963:6;3960:30;3957:117;;;3993:79;;:::i;:::-;3957:117;4107:4;4099:6;4095:17;4083:29;;4161:3;4153:4;4145:6;4141:17;4131:8;4127:32;4124:41;4121:128;;;4168:79;;:::i;:::-;4121:128;3687:568;;;;;:::o;4261:90::-;4295:7;4338:5;4331:13;4324:21;4313:32;;4261:90;;;:::o;4357:116::-;4427:21;4442:5;4427:21;:::i;:::-;4420:5;4417:32;4407:60;;4463:1;4460;4453:12;4407:60;4357:116;:::o;4479:133::-;4522:5;4560:6;4547:20;4538:29;;4576:30;4600:5;4576:30;:::i;:::-;4479:133;;;;:::o;4618:698::-;4710:6;4718;4726;4775:2;4763:9;4754:7;4750:23;4746:32;4743:119;;;4781:79;;:::i;:::-;4743:119;4929:1;4918:9;4914:17;4901:31;4959:18;4951:6;4948:30;4945:117;;;4981:79;;:::i;:::-;4945:117;5094:80;5166:7;5157:6;5146:9;5142:22;5094:80;:::i;:::-;5076:98;;;;4872:312;5223:2;5249:50;5291:7;5282:6;5271:9;5267:22;5249:50;:::i;:::-;5239:60;;5194:115;4618:698;;;;;:::o;5322:126::-;5359:7;5399:42;5392:5;5388:54;5377:65;;5322:126;;;:::o;5454:96::-;5491:7;5520:24;5538:5;5520:24;:::i;:::-;5509:35;;5454:96;;;:::o;5556:122::-;5629:24;5647:5;5629:24;:::i;:::-;5622:5;5619:35;5609:63;;5668:1;5665;5658:12;5609:63;5556:122;:::o;5684:139::-;5730:5;5768:6;5755:20;5746:29;;5784:33;5811:5;5784:33;:::i;:::-;5684:139;;;;:::o;5829:474::-;5897:6;5905;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;6207:2;6233:53;6278:7;6269:6;6258:9;6254:22;6233:53;:::i;:::-;6223:63;;6178:118;5829:474;;;;;:::o;6309:109::-;6390:21;6405:5;6390:21;:::i;:::-;6385:3;6378:34;6309:109;;:::o;6424:210::-;6511:4;6549:2;6538:9;6534:18;6526:26;;6562:65;6624:1;6613:9;6609:17;6600:6;6562:65;:::i;:::-;6424:210;;;;:::o;6640:619::-;6717:6;6725;6733;6782:2;6770:9;6761:7;6757:23;6753:32;6750:119;;;6788:79;;:::i;:::-;6750:119;6908:1;6933:53;6978:7;6969:6;6958:9;6954:22;6933:53;:::i;:::-;6923:63;;6879:117;7035:2;7061:53;7106:7;7097:6;7086:9;7082:22;7061:53;:::i;:::-;7051:63;;7006:118;7163:2;7189:53;7234:7;7225:6;7214:9;7210:22;7189:53;:::i;:::-;7179:63;;7134:118;6640:619;;;;;:::o;7265:86::-;7300:7;7340:4;7333:5;7329:16;7318:27;;7265:86;;;:::o;7357:112::-;7440:22;7456:5;7440:22;:::i;:::-;7435:3;7428:35;7357:112;;:::o;7475:214::-;7564:4;7602:2;7591:9;7587:18;7579:26;;7615:67;7679:1;7668:9;7664:17;7655:6;7615:67;:::i;:::-;7475:214;;;;:::o;7695:474::-;7763:6;7771;7820:2;7808:9;7799:7;7795:23;7791:32;7788:119;;;7826:79;;:::i;:::-;7788:119;7946:1;7971:53;8016:7;8007:6;7996:9;7992:22;7971:53;:::i;:::-;7961:63;;7917:117;8073:2;8099:53;8144:7;8135:6;8124:9;8120:22;8099:53;:::i;:::-;8089:63;;8044:118;7695:474;;;;;:::o;8175:619::-;8252:6;8260;8268;8317:2;8305:9;8296:7;8292:23;8288:32;8285:119;;;8323:79;;:::i;:::-;8285:119;8443:1;8468:53;8513:7;8504:6;8493:9;8489:22;8468:53;:::i;:::-;8458:63;;8414:117;8570:2;8596:53;8641:7;8632:6;8621:9;8617:22;8596:53;:::i;:::-;8586:63;;8541:118;8698:2;8724:53;8769:7;8760:6;8749:9;8745:22;8724:53;:::i;:::-;8714:63;;8669:118;8175:619;;;;;:::o;8800:329::-;8859:6;8908:2;8896:9;8887:7;8883:23;8879:32;8876:119;;;8914:79;;:::i;:::-;8876:119;9034:1;9059:53;9104:7;9095:6;9084:9;9080:22;9059:53;:::i;:::-;9049:63;;9005:117;8800:329;;;;:::o;9135:468::-;9200:6;9208;9257:2;9245:9;9236:7;9232:23;9228:32;9225:119;;;9263:79;;:::i;:::-;9225:119;9383:1;9408:53;9453:7;9444:6;9433:9;9429:22;9408:53;:::i;:::-;9398:63;;9354:117;9510:2;9536:50;9578:7;9569:6;9558:9;9554:22;9536:50;:::i;:::-;9526:60;;9481:115;9135:468;;;;;:::o;9609:474::-;9677:6;9685;9734:2;9722:9;9713:7;9709:23;9705:32;9702:119;;;9740:79;;:::i;:::-;9702:119;9860:1;9885:53;9930:7;9921:6;9910:9;9906:22;9885:53;:::i;:::-;9875:63;;9831:117;9987:2;10013:53;10058:7;10049:6;10038:9;10034:22;10013:53;:::i;:::-;10003:63;;9958:118;9609:474;;;;;:::o;10106:568::-;10179:8;10189:6;10239:3;10232:4;10224:6;10220:17;10216:27;10206:122;;10247:79;;:::i;:::-;10206:122;10360:6;10347:20;10337:30;;10390:18;10382:6;10379:30;10376:117;;;10412:79;;:::i;:::-;10376:117;10526:4;10518:6;10514:17;10502:29;;10580:3;10572:4;10564:6;10560:17;10550:8;10546:32;10543:41;10540:128;;;10587:79;;:::i;:::-;10540:128;10106:568;;;;;:::o;10680:934::-;10802:6;10810;10818;10826;10875:2;10863:9;10854:7;10850:23;10846:32;10843:119;;;10881:79;;:::i;:::-;10843:119;11029:1;11018:9;11014:17;11001:31;11059:18;11051:6;11048:30;11045:117;;;11081:79;;:::i;:::-;11045:117;11194:80;11266:7;11257:6;11246:9;11242:22;11194:80;:::i;:::-;11176:98;;;;10972:312;11351:2;11340:9;11336:18;11323:32;11382:18;11374:6;11371:30;11368:117;;;11404:79;;:::i;:::-;11368:117;11517:80;11589:7;11580:6;11569:9;11565:22;11517:80;:::i;:::-;11499:98;;;;11294:313;10680:934;;;;;;;:::o;11620:118::-;11707:24;11725:5;11707:24;:::i;:::-;11702:3;11695:37;11620:118;;:::o;11744:222::-;11837:4;11875:2;11864:9;11860:18;11852:26;;11888:71;11956:1;11945:9;11941:17;11932:6;11888:71;:::i;:::-;11744:222;;;;:::o;11972:474::-;12040:6;12048;12097:2;12085:9;12076:7;12072:23;12068:32;12065:119;;;12103:79;;:::i;:::-;12065:119;12223:1;12248:53;12293:7;12284:6;12273:9;12269:22;12248:53;:::i;:::-;12238:63;;12194:117;12350:2;12376:53;12421:7;12412:6;12401:9;12397:22;12376:53;:::i;:::-;12366:63;;12321:118;11972:474;;;;;:::o;12452:104::-;12497:7;12526:24;12544:5;12526:24;:::i;:::-;12515:35;;12452:104;;;:::o;12562:142::-;12665:32;12691:5;12665:32;:::i;:::-;12660:3;12653:45;12562:142;;:::o;12710:254::-;12819:4;12857:2;12846:9;12842:18;12834:26;;12870:87;12954:1;12943:9;12939:17;12930:6;12870:87;:::i;:::-;12710:254;;;;:::o;12970:329::-;13029:6;13078:2;13066:9;13057:7;13053:23;13049:32;13046:119;;;13084:79;;:::i;:::-;13046:119;13204:1;13229:53;13274:7;13265:6;13254:9;13250:22;13229:53;:::i;:::-;13219:63;;13175:117;12970:329;;;;:::o;13305:613::-;13379:6;13387;13395;13444:2;13432:9;13423:7;13419:23;13415:32;13412:119;;;13450:79;;:::i;:::-;13412:119;13570:1;13595:50;13637:7;13628:6;13617:9;13613:22;13595:50;:::i;:::-;13585:60;;13541:114;13694:2;13720:53;13765:7;13756:6;13745:9;13741:22;13720:53;:::i;:::-;13710:63;;13665:118;13822:2;13848:53;13893:7;13884:6;13873:9;13869:22;13848:53;:::i;:::-;13838:63;;13793:118;13305:613;;;;;:::o;13924:468::-;13989:6;13997;14046:2;14034:9;14025:7;14021:23;14017:32;14014:119;;;14052:79;;:::i;:::-;14014:119;14172:1;14197:50;14239:7;14230:6;14219:9;14215:22;14197:50;:::i;:::-;14187:60;;14143:114;14296:2;14322:53;14367:7;14358:6;14347:9;14343:22;14322:53;:::i;:::-;14312:63;;14267:118;13924:468;;;;;:::o;14398:323::-;14454:6;14503:2;14491:9;14482:7;14478:23;14474:32;14471:119;;;14509:79;;:::i;:::-;14471:119;14629:1;14654:50;14696:7;14687:6;14676:9;14672:22;14654:50;:::i;:::-;14644:60;;14600:114;14398:323;;;;:::o;14727:60::-;14755:3;14776:5;14769:12;;14727:60;;;:::o;14793:142::-;14843:9;14876:53;14894:34;14903:24;14921:5;14903:24;:::i;:::-;14894:34;:::i;:::-;14876:53;:::i;:::-;14863:66;;14793:142;;;:::o;14941:126::-;14991:9;15024:37;15055:5;15024:37;:::i;:::-;15011:50;;14941:126;;;:::o;15073:144::-;15141:9;15174:37;15205:5;15174:37;:::i;:::-;15161:50;;15073:144;;;:::o;15223:167::-;15328:55;15377:5;15328:55;:::i;:::-;15323:3;15316:68;15223:167;;:::o;15396:258::-;15507:4;15545:2;15534:9;15530:18;15522:26;;15558:89;15644:1;15633:9;15629:17;15620:6;15558:89;:::i;:::-;15396:258;;;;:::o;15660:180::-;15708:77;15705:1;15698:88;15805:4;15802:1;15795:15;15829:4;15826:1;15819:15;15846:191;15886:3;15905:20;15923:1;15905:20;:::i;:::-;15900:25;;15939:20;15957:1;15939:20;:::i;:::-;15934:25;;15982:1;15979;15975:9;15968:16;;16003:3;16000:1;15997:10;15994:36;;;16010:18;;:::i;:::-;15994:36;15846:191;;;;:::o;16043:180::-;16091:77;16088:1;16081:88;16188:4;16185:1;16178:15;16212:4;16209:1;16202:15;16229:185;16269:1;16286:20;16304:1;16286:20;:::i;:::-;16281:25;;16320:20;16338:1;16320:20;:::i;:::-;16315:25;;16359:1;16349:35;;16364:18;;:::i;:::-;16349:35;16406:1;16403;16399:9;16394:14;;16229:185;;;;:::o;16420:410::-;16460:7;16483:20;16501:1;16483:20;:::i;:::-;16478:25;;16517:20;16535:1;16517:20;:::i;:::-;16512:25;;16572:1;16569;16565:9;16594:30;16612:11;16594:30;:::i;:::-;16583:41;;16773:1;16764:7;16760:15;16757:1;16754:22;16734:1;16727:9;16707:83;16684:139;;16803:18;;:::i;:::-;16684:139;16468:362;16420:410;;;;:::o;16836:239::-;16976:34;16972:1;16964:6;16960:14;16953:58;17045:22;17040:2;17032:6;17028:15;17021:47;16836:239;:::o;17081:366::-;17223:3;17244:67;17308:2;17303:3;17244:67;:::i;:::-;17237:74;;17320:93;17409:3;17320:93;:::i;:::-;17438:2;17433:3;17429:12;17422:19;;17081:366;;;:::o;17453:419::-;17619:4;17657:2;17646:9;17642:18;17634:26;;17706:9;17700:4;17696:20;17692:1;17681:9;17677:17;17670:47;17734:131;17860:4;17734:131;:::i;:::-;17726:139;;17453:419;;;:::o;17878:163::-;18018:15;18014:1;18006:6;18002:14;17995:39;17878:163;:::o;18047:366::-;18189:3;18210:67;18274:2;18269:3;18210:67;:::i;:::-;18203:74;;18286:93;18375:3;18286:93;:::i;:::-;18404:2;18399:3;18395:12;18388:19;;18047:366;;;:::o;18419:419::-;18585:4;18623:2;18612:9;18608:18;18600:26;;18672:9;18666:4;18662:20;18658:1;18647:9;18643:17;18636:47;18700:131;18826:4;18700:131;:::i;:::-;18692:139;;18419:419;;;:::o;18844:442::-;18993:4;19031:2;19020:9;19016:18;19008:26;;19044:71;19112:1;19101:9;19097:17;19088:6;19044:71;:::i;:::-;19125:72;19193:2;19182:9;19178:18;19169:6;19125:72;:::i;:::-;19207;19275:2;19264:9;19260:18;19251:6;19207:72;:::i;:::-;18844:442;;;;;;:::o;19292:177::-;19432:29;19428:1;19420:6;19416:14;19409:53;19292:177;:::o;19475:366::-;19617:3;19638:67;19702:2;19697:3;19638:67;:::i;:::-;19631:74;;19714:93;19803:3;19714:93;:::i;:::-;19832:2;19827:3;19823:12;19816:19;;19475:366;;;:::o;19847:419::-;20013:4;20051:2;20040:9;20036:18;20028:26;;20100:9;20094:4;20090:20;20086:1;20075:9;20071:17;20064:47;20128:131;20254:4;20128:131;:::i;:::-;20120:139;;19847:419;;;:::o;20272:233::-;20311:3;20334:24;20352:5;20334:24;:::i;:::-;20325:33;;20380:66;20373:5;20370:77;20367:103;;20450:18;;:::i;:::-;20367:103;20497:1;20490:5;20486:13;20479:20;;20272:233;;;:::o;20511:180::-;20559:77;20556:1;20549:88;20656:4;20653:1;20646:15;20680:4;20677:1;20670:15;20697:85;20742:7;20771:5;20760:16;;20697:85;;;:::o;20788:154::-;20844:9;20877:59;20893:42;20902:32;20928:5;20902:32;:::i;:::-;20893:42;:::i;:::-;20877:59;:::i;:::-;20864:72;;20788:154;;;:::o;20948:143::-;21041:43;21078:5;21041:43;:::i;:::-;21036:3;21029:56;20948:143;;:::o;21097:565::-;21280:4;21318:3;21307:9;21303:19;21295:27;;21332:71;21400:1;21389:9;21385:17;21376:6;21332:71;:::i;:::-;21413:72;21481:2;21470:9;21466:18;21457:6;21413:72;:::i;:::-;21495;21563:2;21552:9;21548:18;21539:6;21495:72;:::i;:::-;21577:78;21651:2;21640:9;21636:18;21627:6;21577:78;:::i;:::-;21097:565;;;;;;;:::o;21668:171::-;21707:3;21730:24;21748:5;21730:24;:::i;:::-;21721:33;;21776:4;21769:5;21766:15;21763:41;;21784:18;;:::i;:::-;21763:41;21831:1;21824:5;21820:13;21813:20;;21668:171;;;:::o;21845:102::-;21887:8;21934:5;21931:1;21927:13;21906:34;;21845:102;;;:::o;21953:848::-;22014:5;22021:4;22045:6;22036:15;;22069:5;22060:14;;22083:712;22104:1;22094:8;22091:15;22083:712;;;22199:4;22194:3;22190:14;22184:4;22181:24;22178:50;;;22208:18;;:::i;:::-;22178:50;22258:1;22248:8;22244:16;22241:451;;;22673:4;22666:5;22662:16;22653:25;;22241:451;22723:4;22717;22713:15;22705:23;;22753:32;22776:8;22753:32;:::i;:::-;22741:44;;22083:712;;;21953:848;;;;;;;:::o;22807:1073::-;22861:5;23052:8;23042:40;;23073:1;23064:10;;23075:5;;23042:40;23101:4;23091:36;;23118:1;23109:10;;23120:5;;23091:36;23187:4;23235:1;23230:27;;;;23271:1;23266:191;;;;23180:277;;23230:27;23248:1;23239:10;;23250:5;;;23266:191;23311:3;23301:8;23298:17;23295:43;;;23318:18;;:::i;:::-;23295:43;23367:8;23364:1;23360:16;23351:25;;23402:3;23395:5;23392:14;23389:40;;;23409:18;;:::i;:::-;23389:40;23442:5;;;23180:277;;23566:2;23556:8;23553:16;23547:3;23541:4;23538:13;23534:36;23516:2;23506:8;23503:16;23498:2;23492:4;23489:12;23485:35;23469:111;23466:246;;;23622:8;23616:4;23612:19;23603:28;;23657:3;23650:5;23647:14;23644:40;;;23664:18;;:::i;:::-;23644:40;23697:5;;23466:246;23737:42;23775:3;23765:8;23759:4;23756:1;23737:42;:::i;:::-;23722:57;;;;23811:4;23806:3;23802:14;23795:5;23792:25;23789:51;;;23820:18;;:::i;:::-;23789:51;23869:4;23862:5;23858:16;23849:25;;22807:1073;;;;;;:::o;23886:281::-;23944:5;23968:23;23986:4;23968:23;:::i;:::-;23960:31;;24012:25;24028:8;24012:25;:::i;:::-;24000:37;;24056:104;24093:66;24083:8;24077:4;24056:104;:::i;:::-;24047:113;;23886:281;;;;:::o;24173:194::-;24213:4;24233:20;24251:1;24233:20;:::i;:::-;24228:25;;24267:20;24285:1;24267:20;:::i;:::-;24262:25;;24311:1;24308;24304:9;24296:17;;24335:1;24329:4;24326:11;24323:37;;;24340:18;;:::i;:::-;24323:37;24173:194;;;;:::o;24373:221::-;24513:34;24509:1;24501:6;24497:14;24490:58;24582:4;24577:2;24569:6;24565:15;24558:29;24373:221;:::o;24600:366::-;24742:3;24763:67;24827:2;24822:3;24763:67;:::i;:::-;24756:74;;24839:93;24928:3;24839:93;:::i;:::-;24957:2;24952:3;24948:12;24941:19;;24600:366;;;:::o;24972:419::-;25138:4;25176:2;25165:9;25161:18;25153:26;;25225:9;25219:4;25215:20;25211:1;25200:9;25196:17;25189:47;25253:131;25379:4;25253:131;:::i;:::-;25245:139;;24972:419;;;:::o;25397:147::-;25498:11;25535:3;25520:18;;25397:147;;;;:::o;25550:114::-;;:::o;25670:398::-;25829:3;25850:83;25931:1;25926:3;25850:83;:::i;:::-;25843:90;;25942:93;26031:3;25942:93;:::i;:::-;26060:1;26055:3;26051:11;26044:18;;25670:398;;;:::o;26074:379::-;26258:3;26280:147;26423:3;26280:147;:::i;:::-;26273:154;;26444:3;26437:10;;26074:379;;;:::o;26459:174::-;26599:26;26595:1;26587:6;26583:14;26576:50;26459:174;:::o;26639:366::-;26781:3;26802:67;26866:2;26861:3;26802:67;:::i;:::-;26795:74;;26878:93;26967:3;26878:93;:::i;:::-;26996:2;26991:3;26987:12;26980:19;;26639:366;;;:::o;27011:419::-;27177:4;27215:2;27204:9;27200:18;27192:26;;27264:9;27258:4;27254:20;27250:1;27239:9;27235:17;27228:47;27292:131;27418:4;27292:131;:::i;:::-;27284:139;;27011:419;;;:::o;27436:225::-;27576:34;27572:1;27564:6;27560:14;27553:58;27645:8;27640:2;27632:6;27628:15;27621:33;27436:225;:::o;27667:366::-;27809:3;27830:67;27894:2;27889:3;27830:67;:::i;:::-;27823:74;;27906:93;27995:3;27906:93;:::i;:::-;28024:2;28019:3;28015:12;28008:19;;27667:366;;;:::o;28039:419::-;28205:4;28243:2;28232:9;28228:18;28220:26;;28292:9;28286:4;28282:20;28278:1;28267:9;28263:17;28256:47;28320:131;28446:4;28320:131;:::i;:::-;28312:139;;28039:419;;;:::o;28464:182::-;28604:34;28600:1;28592:6;28588:14;28581:58;28464:182;:::o;28652:366::-;28794:3;28815:67;28879:2;28874:3;28815:67;:::i;:::-;28808:74;;28891:93;28980:3;28891:93;:::i;:::-;29009:2;29004:3;29000:12;28993:19;;28652:366;;;:::o;29024:419::-;29190:4;29228:2;29217:9;29213:18;29205:26;;29277:9;29271:4;29267:20;29263:1;29252:9;29248:17;29241:47;29305:131;29431:4;29305:131;:::i;:::-;29297:139;;29024:419;;;:::o;29449:174::-;29589:26;29585:1;29577:6;29573:14;29566:50;29449:174;:::o;29629:366::-;29771:3;29792:67;29856:2;29851:3;29792:67;:::i;:::-;29785:74;;29868:93;29957:3;29868:93;:::i;:::-;29986:2;29981:3;29977:12;29970:19;;29629:366;;;:::o;30001:419::-;30167:4;30205:2;30194:9;30190:18;30182:26;;30254:9;30248:4;30244:20;30240:1;30229:9;30225:17;30218:47;30282:131;30408:4;30282:131;:::i;:::-;30274:139;;30001:419;;;:::o;30426:172::-;30566:24;30562:1;30554:6;30550:14;30543:48;30426:172;:::o;30604:366::-;30746:3;30767:67;30831:2;30826:3;30767:67;:::i;:::-;30760:74;;30843:93;30932:3;30843:93;:::i;:::-;30961:2;30956:3;30952:12;30945:19;;30604:366;;;:::o;30976:419::-;31142:4;31180:2;31169:9;31165:18;31157:26;;31229:9;31223:4;31219:20;31215:1;31204:9;31200:17;31193:47;31257:131;31383:4;31257:131;:::i;:::-;31249:139;;30976:419;;;:::o;31401:171::-;31541:23;31537:1;31529:6;31525:14;31518:47;31401:171;:::o;31578:366::-;31720:3;31741:67;31805:2;31800:3;31741:67;:::i;:::-;31734:74;;31817:93;31906:3;31817:93;:::i;:::-;31935:2;31930:3;31926:12;31919:19;;31578:366;;;:::o;31950:419::-;32116:4;32154:2;32143:9;32139:18;32131:26;;32203:9;32197:4;32193:20;32189:1;32178:9;32174:17;32167:47;32231:131;32357:4;32231:131;:::i;:::-;32223:139;;31950:419;;;:::o;32375:170::-;32515:22;32511:1;32503:6;32499:14;32492:46;32375:170;:::o;32551:366::-;32693:3;32714:67;32778:2;32773:3;32714:67;:::i;:::-;32707:74;;32790:93;32879:3;32790:93;:::i;:::-;32908:2;32903:3;32899:12;32892:19;;32551:366;;;:::o;32923:419::-;33089:4;33127:2;33116:9;33112:18;33104:26;;33176:9;33170:4;33166:20;33162:1;33151:9;33147:17;33140:47;33204:131;33330:4;33204:131;:::i;:::-;33196:139;;32923:419;;;:::o;33348:174::-;33488:26;33484:1;33476:6;33472:14;33465:50;33348:174;:::o;33528:366::-;33670:3;33691:67;33755:2;33750:3;33691:67;:::i;:::-;33684:74;;33767:93;33856:3;33767:93;:::i;:::-;33885:2;33880:3;33876:12;33869:19;;33528:366;;;:::o;33900:419::-;34066:4;34104:2;34093:9;34089:18;34081:26;;34153:9;34147:4;34143:20;34139:1;34128:9;34124:17;34117:47;34181:131;34307:4;34181:131;:::i;:::-;34173:139;;33900:419;;;:::o;34325:171::-;34465:23;34461:1;34453:6;34449:14;34442:47;34325:171;:::o;34502:366::-;34644:3;34665:67;34729:2;34724:3;34665:67;:::i;:::-;34658:74;;34741:93;34830:3;34741:93;:::i;:::-;34859:2;34854:3;34850:12;34843:19;;34502:366;;;:::o;34874:419::-;35040:4;35078:2;35067:9;35063:18;35055:26;;35127:9;35121:4;35117:20;35113:1;35102:9;35098:17;35091:47;35155:131;35281:4;35155:131;:::i;:::-;35147:139;;34874:419;;;:::o;35299:85::-;35344:7;35373:5;35362:16;;35299:85;;;:::o;35390:154::-;35446:9;35479:59;35495:42;35504:32;35530:5;35504:32;:::i;:::-;35495:42;:::i;:::-;35479:59;:::i;:::-;35466:72;;35390:154;;;:::o;35550:143::-;35643:43;35680:5;35643:43;:::i;:::-;35638:3;35631:56;35550:143;;:::o;35699:565::-;35882:4;35920:3;35909:9;35905:19;35897:27;;35934:71;36002:1;35991:9;35987:17;35978:6;35934:71;:::i;:::-;36015:72;36083:2;36072:9;36068:18;36059:6;36015:72;:::i;:::-;36097;36165:2;36154:9;36150:18;36141:6;36097:72;:::i;:::-;36179:78;36253:2;36242:9;36238:18;36229:6;36179:78;:::i;:::-;35699:565;;;;;;;:::o;36270:167::-;36410:19;36406:1;36398:6;36394:14;36387:43;36270:167;:::o;36443:366::-;36585:3;36606:67;36670:2;36665:3;36606:67;:::i;:::-;36599:74;;36682:93;36771:3;36682:93;:::i;:::-;36800:2;36795:3;36791:12;36784:19;;36443:366;;;:::o;36815:419::-;36981:4;37019:2;37008:9;37004:18;36996:26;;37068:9;37062:4;37058:20;37054:1;37043:9;37039:17;37032:47;37096:131;37222:4;37096:131;:::i;:::-;37088:139;;36815:419;;;:::o;37240:179::-;37380:31;37376:1;37368:6;37364:14;37357:55;37240:179;:::o;37425:366::-;37567:3;37588:67;37652:2;37647:3;37588:67;:::i;:::-;37581:74;;37664:93;37753:3;37664:93;:::i;:::-;37782:2;37777:3;37773:12;37766:19;;37425:366;;;:::o;37797:419::-;37963:4;38001:2;37990:9;37986:18;37978:26;;38050:9;38044:4;38040:20;38036:1;38025:9;38021:17;38014:47;38078:131;38204:4;38078:131;:::i;:::-;38070:139;;37797:419;;;:::o;38222:228::-;38362:34;38358:1;38350:6;38346:14;38339:58;38431:11;38426:2;38418:6;38414:15;38407:36;38222:228;:::o;38456:366::-;38598:3;38619:67;38683:2;38678:3;38619:67;:::i;:::-;38612:74;;38695:93;38784:3;38695:93;:::i;:::-;38813:2;38808:3;38804:12;38797:19;;38456:366;;;:::o;38828:419::-;38994:4;39032:2;39021:9;39017:18;39009:26;;39081:9;39075:4;39071:20;39067:1;39056:9;39052:17;39045:47;39109:131;39235:4;39109:131;:::i;:::-;39101:139;;38828:419;;;:::o;39253:85::-;39298:7;39327:5;39316:16;;39253:85;;;:::o;39344:154::-;39400:9;39433:59;39449:42;39458:32;39484:5;39458:32;:::i;:::-;39449:42;:::i;:::-;39433:59;:::i;:::-;39420:72;;39344:154;;;:::o;39504:143::-;39597:43;39634:5;39597:43;:::i;:::-;39592:3;39585:56;39504:143;;:::o;39653:565::-;39836:4;39874:3;39863:9;39859:19;39851:27;;39888:71;39956:1;39945:9;39941:17;39932:6;39888:71;:::i;:::-;39969:72;40037:2;40026:9;40022:18;40013:6;39969:72;:::i;:::-;40051;40119:2;40108:9;40104:18;40095:6;40051:72;:::i;:::-;40133:78;40207:2;40196:9;40192:18;40183:6;40133:78;:::i;:::-;39653:565;;;;;;;:::o;40224:224::-;40364:34;40360:1;40352:6;40348:14;40341:58;40433:7;40428:2;40420:6;40416:15;40409:32;40224:224;:::o;40454:366::-;40596:3;40617:67;40681:2;40676:3;40617:67;:::i;:::-;40610:74;;40693:93;40782:3;40693:93;:::i;:::-;40811:2;40806:3;40802:12;40795:19;;40454:366;;;:::o;40826:419::-;40992:4;41030:2;41019:9;41015:18;41007:26;;41079:9;41073:4;41069:20;41065:1;41054:9;41050:17;41043:47;41107:131;41233:4;41107:131;:::i;:::-;41099:139;;40826:419;;;:::o;41251:180::-;41299:77;41296:1;41289:88;41396:4;41393:1;41386:15;41420:4;41417:1;41410:15;41437:143;41494:5;41525:6;41519:13;41510:22;;41541:33;41568:5;41541:33;:::i;:::-;41437:143;;;;:::o;41586:351::-;41656:6;41705:2;41693:9;41684:7;41680:23;41676:32;41673:119;;;41711:79;;:::i;:::-;41673:119;41831:1;41856:64;41912:7;41903:6;41892:9;41888:22;41856:64;:::i;:::-;41846:74;;41802:128;41586:351;;;;:::o;41943:158::-;42001:9;42034:61;42052:42;42061:32;42087:5;42061:32;:::i;:::-;42052:42;:::i;:::-;42034:61;:::i;:::-;42021:74;;41943:158;;;:::o;42107:147::-;42202:45;42241:5;42202:45;:::i;:::-;42197:3;42190:58;42107:147;;:::o;42260:114::-;42327:6;42361:5;42355:12;42345:22;;42260:114;;;:::o;42380:184::-;42479:11;42513:6;42508:3;42501:19;42553:4;42548:3;42544:14;42529:29;;42380:184;;;;:::o;42570:132::-;42637:4;42660:3;42652:11;;42690:4;42685:3;42681:14;42673:22;;42570:132;;;:::o;42708:108::-;42785:24;42803:5;42785:24;:::i;:::-;42780:3;42773:37;42708:108;;:::o;42822:179::-;42891:10;42912:46;42954:3;42946:6;42912:46;:::i;:::-;42990:4;42985:3;42981:14;42967:28;;42822:179;;;;:::o;43007:113::-;43077:4;43109;43104:3;43100:14;43092:22;;43007:113;;;:::o;43156:732::-;43275:3;43304:54;43352:5;43304:54;:::i;:::-;43374:86;43453:6;43448:3;43374:86;:::i;:::-;43367:93;;43484:56;43534:5;43484:56;:::i;:::-;43563:7;43594:1;43579:284;43604:6;43601:1;43598:13;43579:284;;;43680:6;43674:13;43707:63;43766:3;43751:13;43707:63;:::i;:::-;43700:70;;43793:60;43846:6;43793:60;:::i;:::-;43783:70;;43639:224;43626:1;43623;43619:9;43614:14;;43579:284;;;43583:14;43879:3;43872:10;;43280:608;;;43156:732;;;;:::o;43894:831::-;44157:4;44195:3;44184:9;44180:19;44172:27;;44209:71;44277:1;44266:9;44262:17;44253:6;44209:71;:::i;:::-;44290:80;44366:2;44355:9;44351:18;44342:6;44290:80;:::i;:::-;44417:9;44411:4;44407:20;44402:2;44391:9;44387:18;44380:48;44445:108;44548:4;44539:6;44445:108;:::i;:::-;44437:116;;44563:72;44631:2;44620:9;44616:18;44607:6;44563:72;:::i;:::-;44645:73;44713:3;44702:9;44698:19;44689:6;44645:73;:::i;:::-;43894:831;;;;;;;;:::o;44731:134::-;44789:9;44822:37;44853:5;44822:37;:::i;:::-;44809:50;;44731:134;;;:::o;44871:147::-;44966:45;45005:5;44966:45;:::i;:::-;44961:3;44954:58;44871:147;;:::o;45024:823::-;45281:4;45319:3;45308:9;45304:19;45296:27;;45333:71;45401:1;45390:9;45386:17;45377:6;45333:71;:::i;:::-;45414:72;45482:2;45471:9;45467:18;45458:6;45414:72;:::i;:::-;45496:80;45572:2;45561:9;45557:18;45548:6;45496:80;:::i;:::-;45586;45662:2;45651:9;45647:18;45638:6;45586:80;:::i;:::-;45676:81;45752:3;45741:9;45737:19;45728:6;45676:81;:::i;:::-;45767:73;45835:3;45824:9;45820:19;45811:6;45767:73;:::i;:::-;45024:823;;;;;;;;;:::o;45853:143::-;45910:5;45941:6;45935:13;45926:22;;45957:33;45984:5;45957:33;:::i;:::-;45853:143;;;;:::o;46002:663::-;46090:6;46098;46106;46155:2;46143:9;46134:7;46130:23;46126:32;46123:119;;;46161:79;;:::i;:::-;46123:119;46281:1;46306:64;46362:7;46353:6;46342:9;46338:22;46306:64;:::i;:::-;46296:74;;46252:128;46419:2;46445:64;46501:7;46492:6;46481:9;46477:22;46445:64;:::i;:::-;46435:74;;46390:129;46558:2;46584:64;46640:7;46631:6;46620:9;46616:22;46584:64;:::i;:::-;46574:74;;46529:129;46002:663;;;;;:::o

Swarm Source

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