ETH Price: $3,414.14 (+1.78%)

Token

SHARBI ($SHARBI)
 

Overview

Max Total Supply

1,000,000,000,000 $SHARBI

Holders

1,212 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (-1.68%)

Onchain Market Cap

$4,421,955.15

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Fake_Phishing605777
Balance
14,131,250 $SHARBI

Value
$62.49 ( ~0.0183032735274353 Eth) [0.0014%]
0x9829a5d63d7c3e24dcb8128fe13d526b83c340c2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Sharbi is the Queen of Memes. We are a DAO-controlled decentralized community token that pays holders USDC and BONE rewards just for holding. Sharbi created the Shibarium University, the university of crypto free for anyone. We are on Arbitrum, ETH, Shibarium.

Market

Volume (24H):$1,592.08
Market Capitalization:$0.00
Circulating Supply:0.00 $SHARBI
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x4D466393...e26EfcD14
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SHARBI_Token

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-14
*/

// SPDX-License-Identifier: MIT

/**
     _______. __    __       ___      .______      .______    __  
    /       ||  |  |  |     /   \     |   _  \     |   _  \  |  | 
   |   (----`|  |__|  |    /  ^  \    |  |_)  |    |  |_)  | |  | 
    \   \    |   __   |   /  /_\  \   |      /     |   _  <  |  | 
.----)   |   |  |  |  |  /  _____  \  |  |\  \----.|  |_)  | |  | 
|_______/    |__|  |__| /__/     \__\ | _| `._____||______/  |__| 
                                                                  
*/

pragma solidity ^0.8.10;

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

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

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

interface 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,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

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

interface IERC20Extended {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;

    function claimDividend(address _user) external;

    function getPaidEarnings(address shareholder)
        external
        view
        returns (uint256);

    function getUnpaidEarnings(address shareholder)
        external
        view
        returns (uint256);

    function totalDistributed() external view returns (uint256);
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address public token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20Extended public USDC =
        IERC20Extended(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    IDexRouter public router;

    address[] public shareholders;
    mapping(address => uint256) public shareholderIndexes;
    mapping(address => uint256) public shareholderClaims;

    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1 * (10**USDC.decimals());

    uint256 currentIndex;

    bool initialized;
    modifier initializer() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == token);
        _;
    }

    constructor(address router_) {
        token = msg.sender;
        router = IDexRouter(router_);
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = USDC.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(USDC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: msg.value
        }(0, path, address(this), block.timestamp);

        uint256 amount = USDC.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            USDC.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend(address _user) external {
        distributeDividend(_user);
    }

    function getPaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        return shares[shareholder].totalRealised;
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

// main contract
contract SHARBI_Token is IERC20Extended, Ownable {
    using SafeMath for uint256;

    string private constant _name = "SHARBI";
    string private constant _symbol = "$SHARBI";
    uint8 private constant _decimals = 9;
    uint256 private constant _totalSupply = 1_000_000_000_000 * 10**_decimals;

    address public USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address private constant DEAD = address(0xdead);
    address private constant ZERO = address(0);
    IDexRouter public router;
    address public pair;
    address public autoLiquidityReceiver;

    uint256 _reflectionBuyFee = 4_00;
    uint256 _liquidityBuyFee = 1_00;

    uint256 _reflectionSellFee = 4_00;
    uint256 _liquiditySellFee = 1_00;

    uint256 _reflectionFeeCount;
    uint256 _liquidityFeeCount;

    uint256 public totalBuyFee = 5_00;
    uint256 public totalSellFee = 5_00;
    uint256 public feeDenominator = 100_00;

    DividendDistributor public distributor;
    uint256 public distributorGas = 500000;

    uint256 public maxTxnAmount = _totalSupply / 100;
    uint256 public maxWalletAmount = _totalSupply / 1000;
    uint256 public launchedAt;
    uint256 public snipingTime = 30 seconds;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isLimitExmpt;
    mapping(address => bool) public isWalletExmpt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) public isBot;

    uint256 public swapThreshold = _totalSupply / 1000;
    bool public swapEnabled;
    bool public trading;
    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

    constructor() Ownable() {
        address router_ = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        autoLiquidityReceiver = msg.sender;

        router = IDexRouter(router_);
        pair = IDexFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        distributor = new DividendDistributor(router_);

        isFeeExempt[autoLiquidityReceiver] = true;
        isFeeExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(router)] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        isLimitExmpt[autoLiquidityReceiver] = true;
        isLimitExmpt[address(this)] = true;
        isLimitExmpt[address(router)] = true;

        isWalletExmpt[autoLiquidityReceiver] = true;
        isWalletExmpt[pair] = true;
        isWalletExmpt[address(router)] = true;
        isWalletExmpt[address(this)] = true;

        _allowances[address(this)][address(router)] = _totalSupply;
        _allowances[address(this)][address(pair)] = _totalSupply;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

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

    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] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(!isBot[sender],"Bot detected");
        if (!isLimitExmpt[sender] && !isLimitExmpt[recipient]) {
            require(amount <= maxTxnAmount, "Max txn limit exceeds");

            // trading disable till launch
            if (!trading) {
                require(
                    pair != sender && pair != recipient,
                    "Trading is disable"
                );
            }
            // anti snipper bot
            if (
                block.timestamp < launchedAt + snipingTime &&
                sender != address(router)
            ) {
                if (pair == sender) {
                    isBot[recipient] = true;
                } else if (pair == recipient) {
                    isBot[sender] = true;
                }
            }
        }

        if (!isWalletExmpt[recipient]) {
            require(
                balanceOf(recipient).add(amount) <= maxWalletAmount,
                "Max Wallet limit exceeds"
            );
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (shouldSwapBack()) {
            swapBack();
        }

        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        uint256 amountReceived;
        if (
            isFeeExempt[sender] ||
            isFeeExempt[recipient] ||
            (sender != pair && recipient != pair)
        ) {
            amountReceived = amount;
        } else {
            uint256 feeAmount;
            if (sender == pair) {
                feeAmount = amount.mul(totalBuyFee).div(feeDenominator);
                amountReceived = amount.sub(feeAmount);
                takeFee(sender, feeAmount);
                setBuyAccFee(amount);
            } else {
                feeAmount = amount.mul(totalSellFee).div(feeDenominator);
                amountReceived = amount.sub(feeAmount);
                takeFee(sender, feeAmount);
                setSellAccFee(amount);
            }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try
                distributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(address sender, uint256 feeAmount) internal {
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
    }

    function setBuyAccFee(uint256 _amount) internal {
        _liquidityFeeCount += _amount.mul(_liquidityBuyFee).div(feeDenominator);
        _reflectionFeeCount += _amount.mul(_reflectionBuyFee).div(
            feeDenominator
        );
    }

    function setSellAccFee(uint256 _amount) internal {
        _liquidityFeeCount += _amount.mul(_liquiditySellFee).div(
            feeDenominator
        );
        _reflectionFeeCount += _amount.mul(_reflectionSellFee).div(
            feeDenominator
        );
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            msg.sender != pair &&
            !inSwap &&
            swapEnabled &&
            _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 totalFee = _liquidityFeeCount.add(_reflectionFeeCount);

        uint256 amountToLiquify = swapThreshold
            .mul(_liquidityFeeCount)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);
        _allowances[address(this)][address(router)] = _totalSupply;
        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 amountBNB = address(this).balance.sub(balanceBefore);

        uint256 totalBNBFee = totalFee.sub(_liquidityFeeCount.div(2));

        uint256 amountBNBLiquidity = amountBNB
            .mul(_liquidityFeeCount)
            .div(totalBNBFee)
            .div(2);

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }

        uint256 amountBNBReflection = amountBNB.mul(_reflectionFeeCount).div(
            totalBNBFee
        );
        if (amountBNBReflection > 0) {
            try distributor.deposit{value: amountBNBReflection}() {} catch {}
        }

        _liquidityFeeCount = 0;
        _reflectionFeeCount = 0;
    }

    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }

    function getPaidDividend(address shareholder)
        public
        view
        returns (uint256)
    {
        return distributor.getPaidEarnings(shareholder);
    }

    function getUnpaidDividend(address shareholder)
        external
        view
        returns (uint256)
    {
        return distributor.getUnpaidEarnings(shareholder);
    }

    function getTotalDistributedDividend() external view returns (uint256) {
        return distributor.totalDistributed();
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function enableTrading() external onlyOwner {
        require(!trading, "Already enabled");
        trading = true;
        swapEnabled = true;
        launchedAt = block.timestamp;
    }

    function removeStuckEth(uint256 amount) external onlyOwner {
        payable(owner()).transfer(amount);
    }

    function setMaxTxnAmount(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 1000);
        maxTxnAmount = amount;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 1000);
        maxWalletAmount = amount;
    }

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

    function setIsLimitExempt(address[] memory holders, bool exempt) external onlyOwner {
        for (uint256 i; i < holders.length; i++) {
            isLimitExmpt[holders[i]] = exempt;
        }
    }

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

    function removeBots(address[] memory accounts)
        external
        onlyOwner
    {
        for (uint256 i; i < accounts.length; i++) {
            isBot[accounts[i]] = false;
        }
    }

    function setBuyFees(
        uint256 _reflectionFee,
        uint256 _liquidityFee,
        uint256 _feeDenominator
    ) public onlyOwner {
        _reflectionBuyFee = _reflectionFee;
        _liquidityBuyFee = _liquidityFee;
        totalBuyFee = _liquidityFee.add(_reflectionFee);
        feeDenominator = _feeDenominator;
        require(
            totalBuyFee <= feeDenominator.div(10),
            "Can't be greater than 10%"
        );
    }

    function setSellFees(
        uint256 _liquidityFee,
        uint256 _reflectionFee,
        uint256 _feeDenominator
    ) public onlyOwner {
        _liquiditySellFee = _liquidityFee;
        _reflectionSellFee = _reflectionFee;
        totalSellFee = _liquidityFee.add(_reflectionFee);
        feeDenominator = _feeDenominator;
        require(
            totalSellFee <= feeDenominator.div(10),
            "Can't be greater than 10%"
        );
    }

    function setFeeReceivers(address _autoLiquidityReceiver)
        external
        onlyOwner
    {
        autoLiquidityReceiver = _autoLiquidityReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount)
        external
        onlyOwner
    {
        require(swapThreshold > 0);
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }

    function multiTransfer(address[] memory accounts, uint256[] memory amounts)
        external
        onlyOwner
    {
        require(accounts.length == amounts.length,"Invalid");
        for (uint256 i; i < accounts.length; i++) {
            _transferFrom(msg.sender, accounts[i], amounts[i]);
        }
    }
}

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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getPaidDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDistributedDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isLimitExmpt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletExmpt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeStuckEth","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","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":"holders","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610190600555606460065561019060075560646008556101f4600b556101f4600c55612710600d556207a120600f5560646009600a6200009a919062000f0c565b64e8d4a51000620000ac919062000f5d565b620000b8919062000fed565b6010556103e86009600a620000ce919062000f0c565b64e8d4a51000620000e0919062000f5d565b620000ec919062000fed565b601155601e6013556103e86009600a62000107919062000f0c565b64e8d4a5100062000119919062000f5d565b62000125919062000fed565b601b553480156200013557600080fd5b506200014662000d5c60201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d905033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f91906200108f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df91906200108f565b6040518363ffffffff1660e01b8152600401620003fe929190620010d2565b6020604051808303816000875af11580156200041e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044491906200108f565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620004939062000d64565b6200049f9190620010ff565b604051809103906000f080158015620004bc573d6000803e3d6000fd5b50600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009600a62000aef919062000f0c565b64e8d4a5100062000b01919062000f5d565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a62000bb3919062000f0c565b64e8d4a5100062000bc5919062000f5d565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a62000c77919062000f0c565b64e8d4a5100062000c89919062000f5d565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000d2c919062000f0c565b64e8d4a5100062000d3e919062000f5d565b60405162000d4d91906200112d565b60405180910390a3506200114a565b600033905090565b6123a7806200677183390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e005780860481111562000dd85762000dd762000d72565b5b600185161562000de85780820291505b808102905062000df88562000da1565b945062000db8565b94509492505050565b60008262000e1b576001905062000eee565b8162000e2b576000905062000eee565b816001811462000e44576002811462000e4f5762000e85565b600191505062000eee565b60ff84111562000e645762000e6362000d72565b5b8360020a91508482111562000e7e5762000e7d62000d72565b5b5062000eee565b5060208310610133831016604e8410600b841016171562000ebf5782820a90508381111562000eb95762000eb862000d72565b5b62000eee565b62000ece848484600162000dae565b9250905081840481111562000ee85762000ee762000d72565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000f198262000ef5565b915062000f268362000eff565b925062000f557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e09565b905092915050565b600062000f6a8262000ef5565b915062000f778362000ef5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fb35762000fb262000d72565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ffa8262000ef5565b9150620010078362000ef5565b9250826200101a576200101962000fbe565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001057826200102a565b9050919050565b62001069816200104a565b81146200107557600080fd5b50565b60008151905062001089816200105e565b92915050565b600060208284031215620010a857620010a762001025565b5b6000620010b88482850162001078565b91505092915050565b620010cc816200104a565b82525050565b6000604082019050620010e96000830185620010c1565b620010f86020830184620010c1565b9392505050565b6000602082019050620011166000830184620010c1565b92915050565b620011278162000ef5565b82525050565b60006020820190506200114460008301846200111c565b92915050565b615617806200115a6000396000f3fe6080604052600436106103395760003560e01c80637d99c66d116101ab578063bf56b371116100f7578063ec44acf211610095578063f6cfa08a1161006f578063f6cfa08a14610c3f578063f708a64f14610c68578063f887ea4014610c91578063fc899bdc14610cbc57610340565b8063ec44acf214610bd4578063f0fc6bca14610bff578063f2fde38b14610c1657610340565b8063cf46f24c116100d1578063cf46f24c14610b1a578063dd62ed3e14610b45578063df20fd4914610b82578063e01bb68814610bab57610340565b8063bf56b37114610a99578063bfe1092814610ac4578063ca33e64c14610aef57610340565b80638da5cb5b116101645780639d9241ec1161013e5780639d9241ec146109db578063a8aa1b3114610a06578063a9059cbb14610a31578063aa4bde2814610a6e57610340565b80638da5cb5b1461095c57806395d89b41146109875780639d1944f5146109b257610340565b80637d99c66d1461084c57806386cb8fb11461087757806386db0c05146108b4578063893c9f2b146108f157806389a302711461091a5780638a8c523c1461094557610340565b80633bbac5791161028557806360e71962116102235780636ddd1713116101fd5780636ddd1713146107a457806370a08231146107cf578063715018a61461080c57806374010ece1461082357610340565b806360e7196214610727578063658d4b7f146107525780636c3bbfd71461077b57610340565b806349bc3feb1161025f57806349bc3feb14610645578063540b8a2714610682578063571ac8b0146106bf57806359b107b9146106fc57610340565b80633bbac5791461058e5780633f4218e0146105cb5780634355855a1461060857610340565b806318160ddd116102f257806323b872dd116102cc57806323b872dd146104d457806327a14fc2146105115780632d48e8961461053a578063313ce5671461056357610340565b806318160ddd146104555780631961cee2146104805780631e89d545146104ab57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b5780630d075d9c146103d85780630f683e9014610401578063180b0d7e1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ce5565b60405161036791906142bf565b60405180910390f35b34801561037c57600080fd5b50610385610ceb565b6040516103929190614373565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614433565b610d28565b6040516103cf919061448e565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906144a9565b610e1a565b005b34801561040d57600080fd5b50610428600480360381019061042391906144a9565b610f3c565b005b34801561043657600080fd5b5061043f61105e565b60405161044c91906142bf565b60405180910390f35b34801561046157600080fd5b5061046a611064565b60405161047791906142bf565b60405180910390f35b34801561048c57600080fd5b50610495611089565b6040516104a291906142bf565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd9190614707565b611121565b005b3480156104e057600080fd5b506104fb60048036038101906104f6919061477f565b61125e565b604051610508919061448e565b60405180910390f35b34801561051d57600080fd5b50610538600480360381019061053391906147d2565b61145b565b005b34801561054657600080fd5b50610561600480360381019061055c91906147ff565b611531565b005b34801561056f57600080fd5b50610578611659565b604051610585919061485b565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190614876565b611662565b6040516105c2919061448e565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190614876565b611682565b6040516105ff919061448e565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190614876565b6116a2565b60405161063c919061448e565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190614876565b6116c2565b60405161067991906142bf565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190614876565b611767565b6040516106b6919061448e565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190614876565b611787565b6040516106f3919061448e565b60405180910390f35b34801561070857600080fd5b506107116117b7565b60405161071e91906142bf565b60405180910390f35b34801561073357600080fd5b5061073c6117bd565b60405161074991906142bf565b60405180910390f35b34801561075e57600080fd5b50610779600480360381019061077491906148cf565b6117c3565b005b34801561078757600080fd5b506107a2600480360381019061079d919061490f565b6118b3565b005b3480156107b057600080fd5b506107b96119dd565b6040516107c6919061448e565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190614876565b6119f0565b60405161080391906142bf565b60405180910390f35b34801561081857600080fd5b50610821611a39565b005b34801561082f57600080fd5b5061084a600480360381019061084591906147d2565b611b8c565b005b34801561085857600080fd5b50610861611c62565b60405161086e91906142bf565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614876565b611c68565b6040516108ab919061448e565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614876565b611c88565b6040516108e891906142bf565b60405180910390f35b3480156108fd57600080fd5b50610918600480360381019061091391906147d2565b611d2d565b005b34801561092657600080fd5b5061092f611e13565b60405161093c9190614967565b60405180910390f35b34801561095157600080fd5b5061095a611e39565b005b34801561096857600080fd5b50610971611f5d565b60405161097e9190614967565b60405180910390f35b34801561099357600080fd5b5061099c611f86565b6040516109a99190614373565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d491906147d2565b611fc3565b005b3480156109e757600080fd5b506109f06120a7565b6040516109fd91906142bf565b60405180910390f35b348015610a1257600080fd5b50610a1b6120ad565b604051610a289190614967565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a539190614433565b6120d3565b604051610a65919061448e565b60405180910390f35b348015610a7a57600080fd5b50610a836120e8565b604051610a9091906142bf565b60405180910390f35b348015610aa557600080fd5b50610aae6120ee565b604051610abb91906142bf565b60405180910390f35b348015610ad057600080fd5b50610ad96120f4565b604051610ae691906149e1565b60405180910390f35b348015610afb57600080fd5b50610b0461211a565b604051610b119190614967565b60405180910390f35b348015610b2657600080fd5b50610b2f612140565b604051610b3c91906142bf565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b6791906149fc565b612146565b604051610b7991906142bf565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614a3c565b6121cd565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd9190614876565b612296565b005b348015610be057600080fd5b50610be961236f565b604051610bf6919061448e565b60405180910390f35b348015610c0b57600080fd5b50610c14612382565b005b348015610c2257600080fd5b50610c3d6004803603810190610c389190614876565b612411565b005b348015610c4b57600080fd5b50610c666004803603810190610c619190614a7c565b6125d3565b005b348015610c7457600080fd5b50610c8f6004803603810190610c8a91906148cf565b6126fd565b005b348015610c9d57600080fd5b50610ca66129ea565b604051610cb39190614af9565b60405180910390f35b348015610cc857600080fd5b50610ce36004803603810190610cde91906148cf565b612a10565b005b601b5481565b60606040518060400160405280600681526020017f5348415242490000000000000000000000000000000000000000000000000000815250905090565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e0891906142bf565b60405180910390a36001905092915050565b610e22612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690614b60565b60405180910390fd5b8260058190555081600681905550610ed08383612b0890919063ffffffff16565b600b8190555080600d81905550610ef3600a600d54612b1e90919063ffffffff16565b600b541115610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614bcc565b60405180910390fd5b505050565b610f44612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc890614b60565b60405180910390fd5b8260088190555081600781905550610ff28284612b0890919063ffffffff16565b600c8190555080600d81905550611015600a600d54612b1e90919063ffffffff16565b600c541115611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090614bcc565b60405180910390fd5b505050565b600d5481565b60006009600a6110749190614d4e565b64e8d4a510006110849190614d99565b905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190614e08565b905090565b611129612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90614b60565b60405180910390fd5b80518251146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614e81565b60405180910390fd5b60005b8251811015611259576112453384838151811061121d5761121c614ea1565b5b602002602001015184848151811061123857611237614ea1565b5b6020026020010151612b34565b50808061125190614ed0565b9150506111fd565b505050565b60006009600a61126e9190614d4e565b64e8d4a5100061127e9190614d99565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611447576113c6826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137899092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611452848484612b34565b90509392505050565b611463612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614b60565b60405180910390fd5b6103e86009600a6115019190614d4e565b64e8d4a510006115119190614d99565b61151b9190614f48565b81101561152757600080fd5b8060118190555050565b611539612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90614b60565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611623929190614f79565b600060405180830381600087803b15801561163d57600080fd5b505af1158015611651573d6000803e3d6000fd5b505050505050565b60006009905090565b601a6020528060005260406000206000915054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b815260040161171f9190614967565b602060405180830381865afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190614e08565b9050919050565b60176020528060005260406000206000915054906101000a900460ff1681565b60006117b0826009600a61179b9190614d4e565b64e8d4a510006117ab9190614d99565b610d28565b9050919050565b600b5481565b600f5481565b6117cb612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614b60565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118bb612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90614b60565b60405180910390fd5b60005b81518110156119d9576000601a600084848151811061196d5761196c614ea1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119d190614ed0565b91505061194b565b5050565b601c60009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a41612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b94612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1890614b60565b60405180910390fd5b6103e86009600a611c329190614d4e565b64e8d4a51000611c429190614d99565b611c4c9190614f48565b811015611c5857600080fd5b8060108190555050565b60135481565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b8152600401611ce59190614967565b602060405180830381865afa158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d269190614e08565b9050919050565b611d35612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990614b60565b60405180910390fd5b611dca611f5d565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611e0f573d6000803e3d6000fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e41612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614b60565b60405180910390fd5b601c60019054906101000a900460ff1615611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590614fee565b60405180910390fd5b6001601c60016101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff02191690831515021790555042601281905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f2453484152424900000000000000000000000000000000000000000000000000815250905090565b611fcb612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f90614b60565b60405180910390fd5b620b71b0811061209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061505a565b60405180910390fd5b80600f8190555050565b600c5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120e0338484612b34565b905092915050565b60115481565b60125481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121d5612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614b60565b60405180910390fd5b6000601b541161227157600080fd5b81601c60006101000a81548160ff02191690831515021790555080601b819055505050565b61229e612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232290614b60565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60019054906101000a900460ff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b81526004016123dd9190614967565b600060405180830381600087803b1580156123f757600080fd5b505af115801561240b573d6000803e3d6000fd5b50505050565b612419612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d90614b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d906150ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125db612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90614b60565b60405180910390fd5b60005b82518110156126f857816017600085848151811061268c5761268b614ea1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806126f090614ed0565b91505061266b565b505050565b612705612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614b60565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561281c5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61282557600080fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561291757600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016128e0929190615147565b600060405180830381600087803b1580156128fa57600080fd5b505af115801561290e573d6000803e3d6000fd5b505050506129e6565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016129b3929190615170565b600060405180830381600087803b1580156129cd57600080fd5b505af11580156129e1573d6000803e3d6000fd5b505050505b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612a18612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c90614b60565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60008183612b169190615199565b905092915050565b60008183612b2c9190614f48565b905092915050565b6000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bba9061523b565b60405180910390fd5b601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c675750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8757601054821115612cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca8906152a7565b60405180910390fd5b601c60019054906101000a900460ff16612db1578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612d7157508273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da790615313565b60405180910390fd5b5b601354601254612dc19190615199565b42108015612e1d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612f86578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ed5576001601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f85565b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f84576001601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661303857601154612ff683612fe8866119f0565b612b0890919063ffffffff16565b1115613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e9061537f565b60405180910390fd5b5b601c60029054906101000a900460ff161561305f576130588484846137de565b9050613782565b6130676139b1565b1561307557613074613a88565b5b6130fe826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137899092919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131e45750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132975750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156132965750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b156132a4578290506133aa565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561335457613325600d54613317600b548761407290919063ffffffff16565b612b1e90919063ffffffff16565b905061333a818561408890919063ffffffff16565b9150613346868261409e565b61334f8461419c565b6133a8565b61337d600d5461336f600c548761407290919063ffffffff16565b612b1e90919063ffffffff16565b9050613392818561408890919063ffffffff16565b915061339e868261409e565b6133a784614221565b5b505b6133fc81601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0890919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356257600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161352c929190615170565b600060405180830381600087803b15801561354657600080fd5b505af1925050508015613557575060015b61356057613561565b5b5b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661368557600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161364f929190615170565b600060405180830381600087803b15801561366957600080fd5b505af192505050801561367a575060015b61368357613684565b5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479600f546040518263ffffffff1660e01b81526004016136e291906142bf565b600060405180830381600087803b1580156136fc57600080fd5b505af192505050801561370d575060015b61371657613717565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161377491906142bf565b60405180910390a360019150505b9392505050565b60008383111582906137d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c89190614373565b60405180910390fd5b5082840390509392505050565b6000613869826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137899092919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138fe82601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0890919063ffffffff16565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161399e91906142bf565b60405180910390a3600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613a1e5750601c60029054906101000a900460ff16155b8015613a365750601c60009054906101000a900460ff165b8015613a835750601b54601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601c60026101000a81548160ff0219169083151502179055506000613abc600954600a54612b0890919063ffffffff16565b90506000613afc6002613aee84613ae0600a54601b5461407290919063ffffffff16565b612b1e90919063ffffffff16565b612b1e90919063ffffffff16565b90506000613b1582601b5461408890919063ffffffff16565b90506009600a613b259190614d4e565b64e8d4a51000613b359190614d99565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff811115613bf457613bf3614501565b5b604051908082528060200260200182016040528015613c225781602001602082028036833780820191505090505b5090503081600081518110613c3a57613c39614ea1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0591906153b4565b81600181518110613d1957613d18614ea1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613dbc95949392919061549f565b600060405180830381600087803b158015613dd657600080fd5b505af1158015613dea573d6000803e3d6000fd5b505050506000613e03824761408890919063ffffffff16565b90506000613e2f613e206002600a54612b1e90919063ffffffff16565b8861408890919063ffffffff16565b90506000613e6d6002613e5f84613e51600a548861407290919063ffffffff16565b612b1e90919063ffffffff16565b612b1e90919063ffffffff16565b90506000871115613f8157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613f01969594939291906154f9565b60606040518083038185885af1158015613f1f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f44919061555a565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051613f78929190614f79565b60405180910390a15b6000613faa83613f9c6009548761407290919063ffffffff16565b612b1e90919063ffffffff16565b9050600081111561403c57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561401f57600080fd5b505af193505050508015614031575060015b61403a5761403b565b5b5b6000600a8190555060006009819055505050505050505050506000601c60026101000a81548160ff021916908315150217905550565b600081836140809190614d99565b905092915050565b6000818361409691906155ad565b905092915050565b6140f081601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0890919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161419091906142bf565b60405180910390a35050565b6141c5600d546141b76006548461407290919063ffffffff16565b612b1e90919063ffffffff16565b600a60008282546141d69190615199565b92505081905550614206600d546141f86005548461407290919063ffffffff16565b612b1e90919063ffffffff16565b600960008282546142179190615199565b9250508190555050565b61424a600d5461423c6008548461407290919063ffffffff16565b612b1e90919063ffffffff16565b600a600082825461425b9190615199565b9250508190555061428b600d5461427d6007548461407290919063ffffffff16565b612b1e90919063ffffffff16565b6009600082825461429c9190615199565b9250508190555050565b6000819050919050565b6142b9816142a6565b82525050565b60006020820190506142d460008301846142b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143145780820151818401526020810190506142f9565b83811115614323576000848401525b50505050565b6000601f19601f8301169050919050565b6000614345826142da565b61434f81856142e5565b935061435f8185602086016142f6565b61436881614329565b840191505092915050565b6000602082019050818103600083015261438d818461433a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143d4826143a9565b9050919050565b6143e4816143c9565b81146143ef57600080fd5b50565b600081359050614401816143db565b92915050565b614410816142a6565b811461441b57600080fd5b50565b60008135905061442d81614407565b92915050565b6000806040838503121561444a5761444961439f565b5b6000614458858286016143f2565b92505060206144698582860161441e565b9150509250929050565b60008115159050919050565b61448881614473565b82525050565b60006020820190506144a3600083018461447f565b92915050565b6000806000606084860312156144c2576144c161439f565b5b60006144d08682870161441e565b93505060206144e18682870161441e565b92505060406144f28682870161441e565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61453982614329565b810181811067ffffffffffffffff8211171561455857614557614501565b5b80604052505050565b600061456b614395565b90506145778282614530565b919050565b600067ffffffffffffffff82111561459757614596614501565b5b602082029050602081019050919050565b600080fd5b60006145c06145bb8461457c565b614561565b905080838252602082019050602084028301858111156145e3576145e26145a8565b5b835b8181101561460c57806145f888826143f2565b8452602084019350506020810190506145e5565b5050509392505050565b600082601f83011261462b5761462a6144fc565b5b813561463b8482602086016145ad565b91505092915050565b600067ffffffffffffffff82111561465f5761465e614501565b5b602082029050602081019050919050565b600061468361467e84614644565b614561565b905080838252602082019050602084028301858111156146a6576146a56145a8565b5b835b818110156146cf57806146bb888261441e565b8452602084019350506020810190506146a8565b5050509392505050565b600082601f8301126146ee576146ed6144fc565b5b81356146fe848260208601614670565b91505092915050565b6000806040838503121561471e5761471d61439f565b5b600083013567ffffffffffffffff81111561473c5761473b6143a4565b5b61474885828601614616565b925050602083013567ffffffffffffffff811115614769576147686143a4565b5b614775858286016146d9565b9150509250929050565b6000806000606084860312156147985761479761439f565b5b60006147a6868287016143f2565b93505060206147b7868287016143f2565b92505060406147c88682870161441e565b9150509250925092565b6000602082840312156147e8576147e761439f565b5b60006147f68482850161441e565b91505092915050565b600080604083850312156148165761481561439f565b5b60006148248582860161441e565b92505060206148358582860161441e565b9150509250929050565b600060ff82169050919050565b6148558161483f565b82525050565b6000602082019050614870600083018461484c565b92915050565b60006020828403121561488c5761488b61439f565b5b600061489a848285016143f2565b91505092915050565b6148ac81614473565b81146148b757600080fd5b50565b6000813590506148c9816148a3565b92915050565b600080604083850312156148e6576148e561439f565b5b60006148f4858286016143f2565b9250506020614905858286016148ba565b9150509250929050565b6000602082840312156149255761492461439f565b5b600082013567ffffffffffffffff811115614943576149426143a4565b5b61494f84828501614616565b91505092915050565b614961816143c9565b82525050565b600060208201905061497c6000830184614958565b92915050565b6000819050919050565b60006149a76149a261499d846143a9565b614982565b6143a9565b9050919050565b60006149b98261498c565b9050919050565b60006149cb826149ae565b9050919050565b6149db816149c0565b82525050565b60006020820190506149f660008301846149d2565b92915050565b60008060408385031215614a1357614a1261439f565b5b6000614a21858286016143f2565b9250506020614a32858286016143f2565b9150509250929050565b60008060408385031215614a5357614a5261439f565b5b6000614a61858286016148ba565b9250506020614a728582860161441e565b9150509250929050565b60008060408385031215614a9357614a9261439f565b5b600083013567ffffffffffffffff811115614ab157614ab06143a4565b5b614abd85828601614616565b9250506020614ace858286016148ba565b9150509250929050565b6000614ae3826149ae565b9050919050565b614af381614ad8565b82525050565b6000602082019050614b0e6000830184614aea565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4a6020836142e5565b9150614b5582614b14565b602082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f43616e27742062652067726561746572207468616e2031302500000000000000600082015250565b6000614bb66019836142e5565b9150614bc182614b80565b602082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614c7257808604811115614c4e57614c4d614bec565b5b6001851615614c5d5780820291505b8081029050614c6b85614c1b565b9450614c32565b94509492505050565b600082614c8b5760019050614d47565b81614c995760009050614d47565b8160018114614caf5760028114614cb957614ce8565b6001915050614d47565b60ff841115614ccb57614cca614bec565b5b8360020a915084821115614ce257614ce1614bec565b5b50614d47565b5060208310610133831016604e8410600b8410161715614d1d5782820a905083811115614d1857614d17614bec565b5b614d47565b614d2a8484846001614c28565b92509050818404811115614d4157614d40614bec565b5b81810290505b9392505050565b6000614d59826142a6565b9150614d648361483f565b9250614d917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614c7b565b905092915050565b6000614da4826142a6565b9150614daf836142a6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614de857614de7614bec565b5b828202905092915050565b600081519050614e0281614407565b92915050565b600060208284031215614e1e57614e1d61439f565b5b6000614e2c84828501614df3565b91505092915050565b7f496e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000614e6b6007836142e5565b9150614e7682614e35565b602082019050919050565b60006020820190508181036000830152614e9a81614e5e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614edb826142a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f0e57614f0d614bec565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f53826142a6565b9150614f5e836142a6565b925082614f6e57614f6d614f19565b5b828204905092915050565b6000604082019050614f8e60008301856142b0565b614f9b60208301846142b0565b9392505050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614fd8600f836142e5565b9150614fe382614fa2565b602082019050919050565b6000602082019050818103600083015261500781614fcb565b9050919050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000615044601d836142e5565b915061504f8261500e565b602082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150d66026836142e5565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b6000819050919050565b600061513161512c6151278461510c565b614982565b6142a6565b9050919050565b61514181615116565b82525050565b600060408201905061515c6000830185614958565b6151696020830184615138565b9392505050565b60006040820190506151856000830185614958565b61519260208301846142b0565b9392505050565b60006151a4826142a6565b91506151af836142a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151e4576151e3614bec565b5b828201905092915050565b7f426f742064657465637465640000000000000000000000000000000000000000600082015250565b6000615225600c836142e5565b9150615230826151ef565b602082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f4d61782074786e206c696d697420657863656564730000000000000000000000600082015250565b60006152916015836142e5565b915061529c8261525b565b602082019050919050565b600060208201905081810360008301526152c081615284565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b60006152fd6012836142e5565b9150615308826152c7565b602082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f4d61782057616c6c6574206c696d697420657863656564730000000000000000600082015250565b60006153696018836142e5565b915061537482615333565b602082019050919050565b600060208201905081810360008301526153988161535c565b9050919050565b6000815190506153ae816143db565b92915050565b6000602082840312156153ca576153c961439f565b5b60006153d88482850161539f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615416816143c9565b82525050565b6000615428838361540d565b60208301905092915050565b6000602082019050919050565b600061544c826153e1565b61545681856153ec565b9350615461836153fd565b8060005b83811015615492578151615479888261541c565b975061548483615434565b925050600181019050615465565b5085935050505092915050565b600060a0820190506154b460008301886142b0565b6154c16020830187615138565b81810360408301526154d38186615441565b90506154e26060830185614958565b6154ef60808301846142b0565b9695505050505050565b600060c08201905061550e6000830189614958565b61551b60208301886142b0565b6155286040830187615138565b6155356060830186615138565b6155426080830185614958565b61554f60a08301846142b0565b979650505050505050565b6000806000606084860312156155735761557261439f565b5b600061558186828701614df3565b935050602061559286828701614df3565b92505060406155a386828701614df3565b9150509250925092565b60006155b8826142a6565b91506155c3836142a6565b9250828210156155d6576155d5614bec565b5b82820390509291505056fea26469706673582212208e70f6c45b64bba466d69bc627c3547a447e3dca9665a26f2c233d8ea4c7d2c064736f6c634300080a0033608060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600b55610e10600c55600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000106919062000223565b600a620001149190620003e2565b600162000122919062000433565b600d553480156200013257600080fd5b50604051620023a7380380620023a78339818101604052810190620001589190620004f9565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200052b565b600080fd5b600060ff82169050919050565b620001fd81620001e5565b81146200020957600080fd5b50565b6000815190506200021d81620001f2565b92915050565b6000602082840312156200023c576200023b620001e0565b5b60006200024c848285016200020c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620002e357808604811115620002bb57620002ba62000255565b5b6001851615620002cb5780820291505b8081029050620002db8562000284565b94506200029b565b94509492505050565b600082620002fe5760019050620003d1565b816200030e5760009050620003d1565b8160018114620003275760028114620003325762000368565b6001915050620003d1565b60ff84111562000347576200034662000255565b5b8360020a91508482111562000361576200036062000255565b5b50620003d1565b5060208310610133831016604e8410600b8410161715620003a25782820a9050838111156200039c576200039b62000255565b5b620003d1565b620003b1848484600162000291565b92509050818404811115620003cb57620003ca62000255565b5b81810290505b9392505050565b6000819050919050565b6000620003ef82620003d8565b9150620003fc83620001e5565b92506200042b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620002ec565b905092915050565b60006200044082620003d8565b91506200044d83620003d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000489576200048862000255565b5b828202905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004c18262000494565b9050919050565b620004d381620004b4565b8114620004df57600080fd5b50565b600081519050620004f381620004c8565b92915050565b600060208284031215620005125762000511620001e0565b5b60006200052284828501620004e2565b91505092915050565b611e6c806200053b6000396000f3fe60806040526004361061012a5760003560e01c8063997664d7116100ab578063e2d2e2191161006f578063e2d2e219146103fb578063efca2eed14610426578063f887ea4014610451578063fc0c546a1461047c578063ffb2c479146104a7578063ffd49c84146104d05761012a565b8063997664d71461030d578063ab377daa14610338578063ce7c2ac214610375578063d0e30db0146103b4578063d4fda1f2146103be5761012a565b80633a98ef39116100f25780633a98ef39146102125780634fab0ae81461023d57806352f481581461026857806366817df5146102a557806389a30271146102e25761012a565b806311ce023d1461012f57806314b6ca961461015a57806315f7e05e1461018357806328fd3198146101ac5780632d48e896146101e9575b600080fd5b34801561013b57600080fd5b506101446104fb565b60405161015191906116fb565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906117a5565b610501565b005b34801561018f57600080fd5b506101aa60048036038101906101a591906117e5565b6107c0565b005b3480156101b857600080fd5b506101d360048036038101906101ce91906117e5565b6107cc565b6040516101e091906116fb565b60405180910390f35b3480156101f557600080fd5b50610210600480360381019061020b9190611812565b6108e6565b005b34801561021e57600080fd5b50610227610950565b60405161023491906116fb565b60405180910390f35b34801561024957600080fd5b50610252610956565b60405161025f91906116fb565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a91906117e5565b61095c565b60405161029c91906116fb565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906117e5565b6109a8565b6040516102d991906116fb565b60405180910390f35b3480156102ee57600080fd5b506102f76109c0565b60405161030491906118b1565b60405180910390f35b34801561031957600080fd5b506103226109e6565b60405161032f91906116fb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a91906118cc565b6109ec565b60405161036c9190611908565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906117e5565b610a2b565b6040516103ab93929190611923565b60405180910390f35b6103bc610a55565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906117e5565b610e95565b6040516103f291906116fb565b60405180910390f35b34801561040757600080fd5b50610410610ead565b60405161041d91906116fb565b60405180910390f35b34801561043257600080fd5b5061043b610eb3565b60405161044891906116fb565b60405180910390f35b34801561045d57600080fd5b50610466610eb9565b604051610473919061197b565b60405180910390f35b34801561048857600080fd5b50610491610edf565b60405161049e9190611908565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906118cc565b610f03565b005b3480156104dc57600080fd5b506104e5611097565b6040516104f291906116fb565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055957600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156105ae576105ad8261109d565b5b60008111801561060057506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156106135761060e82611335565b610675565b60008114801561066557506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561067457610673826113e4565b5b5b6106de816106d0600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007546115eb90919063ffffffff16565b61160190919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610776600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b6107c98161109d565b50565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561082157600090506108e1565b600061086e600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116108c9576000925050506108e1565b6108dc81836115eb90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461093e57600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60056020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600381815481106109fc57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b0a9190611908565b602060405180830381865afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b91906119ab565b90506000600267ffffffffffffffff811115610b6a57610b696119d8565b5b604051908082528060200260200182016040528015610b985781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190611a1c565b81600081518110610c4057610c3f611a49565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610cb157610cb0611a49565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610d4e9493929190611b71565b6000604051808303818588803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b50505050506000610e3083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610de19190611908565b602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906119ab565b6115eb90919063ffffffff16565b9050610e478160085461160190919063ffffffff16565b600881905550610e8a610e79600754610e6b84600b5461164990919063ffffffff16565b61165f90919063ffffffff16565b600a5461160190919063ffffffff16565b600a81905550505050565b60046020528060005260406000206000915090505481565b600a5481565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5b57600080fd5b600060038054905090506000811415610f745750611094565b6000805a905060005b8483108015610f8b57508381105b1561108f5783600e5410610fa2576000600e819055505b610feb6003600e5481548110610fbb57610fba611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611675565b1561103a576110396003600e548154811061100957611008611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661109d565b5b61105f6110505a846115eb90919063ffffffff16565b8461160190919063ffffffff16565b92505a9150600e600081548092919061107790611bec565b9190505550808061108790611bec565b915050610f7d565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156110ed57611332565b60006110f8826107cc565b90506000811115611330576111188160095461160190919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161117b929190611c35565b6020604051808303816000875af115801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190611c96565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125881600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461160190919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112e9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506113f89190611cc3565b8154811061140957611408611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061148757611486611a49565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506115279190611cc3565b8154811061153857611537611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806115b3576115b2611cf7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836115f99190611cc3565b905092915050565b6000818361160f9190611d26565b905092915050565b6000611642600b54611634600a548561164990919063ffffffff16565b61165f90919063ffffffff16565b9050919050565b600081836116579190611d7c565b905092915050565b6000818361166d9190611e05565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c59190611d26565b1080156116db5750600d546116d9836107cc565b115b9050919050565b6000819050919050565b6116f5816116e2565b82525050565b600060208201905061171060008301846116ec565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117468261171b565b9050919050565b6117568161173b565b811461176157600080fd5b50565b6000813590506117738161174d565b92915050565b611782816116e2565b811461178d57600080fd5b50565b60008135905061179f81611779565b92915050565b600080604083850312156117bc576117bb611716565b5b60006117ca85828601611764565b92505060206117db85828601611790565b9150509250929050565b6000602082840312156117fb576117fa611716565b5b600061180984828501611764565b91505092915050565b6000806040838503121561182957611828611716565b5b600061183785828601611790565b925050602061184885828601611790565b9150509250929050565b6000819050919050565b600061187761187261186d8461171b565b611852565b61171b565b9050919050565b60006118898261185c565b9050919050565b600061189b8261187e565b9050919050565b6118ab81611890565b82525050565b60006020820190506118c660008301846118a2565b92915050565b6000602082840312156118e2576118e1611716565b5b60006118f084828501611790565b91505092915050565b6119028161173b565b82525050565b600060208201905061191d60008301846118f9565b92915050565b600060608201905061193860008301866116ec565b61194560208301856116ec565b61195260408301846116ec565b949350505050565b60006119658261187e565b9050919050565b6119758161195a565b82525050565b6000602082019050611990600083018461196c565b92915050565b6000815190506119a581611779565b92915050565b6000602082840312156119c1576119c0611716565b5b60006119cf84828501611996565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611a168161174d565b92915050565b600060208284031215611a3257611a31611716565b5b6000611a4084828501611a07565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000611a9d611a98611a9384611a78565b611852565b6116e2565b9050919050565b611aad81611a82565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ae88161173b565b82525050565b6000611afa8383611adf565b60208301905092915050565b6000602082019050919050565b6000611b1e82611ab3565b611b288185611abe565b9350611b3383611acf565b8060005b83811015611b64578151611b4b8882611aee565b9750611b5683611b06565b925050600181019050611b37565b5085935050505092915050565b6000608082019050611b866000830187611aa4565b8181036020830152611b988186611b13565b9050611ba760408301856118f9565b611bb460608301846116ec565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bf7826116e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c2a57611c29611bbd565b5b600182019050919050565b6000604082019050611c4a60008301856118f9565b611c5760208301846116ec565b9392505050565b60008115159050919050565b611c7381611c5e565b8114611c7e57600080fd5b50565b600081519050611c9081611c6a565b92915050565b600060208284031215611cac57611cab611716565b5b6000611cba84828501611c81565b91505092915050565b6000611cce826116e2565b9150611cd9836116e2565b925082821015611cec57611ceb611bbd565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611d31826116e2565b9150611d3c836116e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d7157611d70611bbd565b5b828201905092915050565b6000611d87826116e2565b9150611d92836116e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dcb57611dca611bbd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e10826116e2565b9150611e1b836116e2565b925082611e2b57611e2a611dd6565b5b82820490509291505056fea26469706673582212204e888f3ec702cf35fedd52e29bca3029a76a22090053fae6d783c49d0169275464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80637d99c66d116101ab578063bf56b371116100f7578063ec44acf211610095578063f6cfa08a1161006f578063f6cfa08a14610c3f578063f708a64f14610c68578063f887ea4014610c91578063fc899bdc14610cbc57610340565b8063ec44acf214610bd4578063f0fc6bca14610bff578063f2fde38b14610c1657610340565b8063cf46f24c116100d1578063cf46f24c14610b1a578063dd62ed3e14610b45578063df20fd4914610b82578063e01bb68814610bab57610340565b8063bf56b37114610a99578063bfe1092814610ac4578063ca33e64c14610aef57610340565b80638da5cb5b116101645780639d9241ec1161013e5780639d9241ec146109db578063a8aa1b3114610a06578063a9059cbb14610a31578063aa4bde2814610a6e57610340565b80638da5cb5b1461095c57806395d89b41146109875780639d1944f5146109b257610340565b80637d99c66d1461084c57806386cb8fb11461087757806386db0c05146108b4578063893c9f2b146108f157806389a302711461091a5780638a8c523c1461094557610340565b80633bbac5791161028557806360e71962116102235780636ddd1713116101fd5780636ddd1713146107a457806370a08231146107cf578063715018a61461080c57806374010ece1461082357610340565b806360e7196214610727578063658d4b7f146107525780636c3bbfd71461077b57610340565b806349bc3feb1161025f57806349bc3feb14610645578063540b8a2714610682578063571ac8b0146106bf57806359b107b9146106fc57610340565b80633bbac5791461058e5780633f4218e0146105cb5780634355855a1461060857610340565b806318160ddd116102f257806323b872dd116102cc57806323b872dd146104d457806327a14fc2146105115780632d48e8961461053a578063313ce5671461056357610340565b806318160ddd146104555780631961cee2146104805780631e89d545146104ab57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b5780630d075d9c146103d85780630f683e9014610401578063180b0d7e1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ce5565b60405161036791906142bf565b60405180910390f35b34801561037c57600080fd5b50610385610ceb565b6040516103929190614373565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614433565b610d28565b6040516103cf919061448e565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906144a9565b610e1a565b005b34801561040d57600080fd5b50610428600480360381019061042391906144a9565b610f3c565b005b34801561043657600080fd5b5061043f61105e565b60405161044c91906142bf565b60405180910390f35b34801561046157600080fd5b5061046a611064565b60405161047791906142bf565b60405180910390f35b34801561048c57600080fd5b50610495611089565b6040516104a291906142bf565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd9190614707565b611121565b005b3480156104e057600080fd5b506104fb60048036038101906104f6919061477f565b61125e565b604051610508919061448e565b60405180910390f35b34801561051d57600080fd5b50610538600480360381019061053391906147d2565b61145b565b005b34801561054657600080fd5b50610561600480360381019061055c91906147ff565b611531565b005b34801561056f57600080fd5b50610578611659565b604051610585919061485b565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190614876565b611662565b6040516105c2919061448e565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190614876565b611682565b6040516105ff919061448e565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190614876565b6116a2565b60405161063c919061448e565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190614876565b6116c2565b60405161067991906142bf565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190614876565b611767565b6040516106b6919061448e565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190614876565b611787565b6040516106f3919061448e565b60405180910390f35b34801561070857600080fd5b506107116117b7565b60405161071e91906142bf565b60405180910390f35b34801561073357600080fd5b5061073c6117bd565b60405161074991906142bf565b60405180910390f35b34801561075e57600080fd5b50610779600480360381019061077491906148cf565b6117c3565b005b34801561078757600080fd5b506107a2600480360381019061079d919061490f565b6118b3565b005b3480156107b057600080fd5b506107b96119dd565b6040516107c6919061448e565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190614876565b6119f0565b60405161080391906142bf565b60405180910390f35b34801561081857600080fd5b50610821611a39565b005b34801561082f57600080fd5b5061084a600480360381019061084591906147d2565b611b8c565b005b34801561085857600080fd5b50610861611c62565b60405161086e91906142bf565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614876565b611c68565b6040516108ab919061448e565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614876565b611c88565b6040516108e891906142bf565b60405180910390f35b3480156108fd57600080fd5b50610918600480360381019061091391906147d2565b611d2d565b005b34801561092657600080fd5b5061092f611e13565b60405161093c9190614967565b60405180910390f35b34801561095157600080fd5b5061095a611e39565b005b34801561096857600080fd5b50610971611f5d565b60405161097e9190614967565b60405180910390f35b34801561099357600080fd5b5061099c611f86565b6040516109a99190614373565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d491906147d2565b611fc3565b005b3480156109e757600080fd5b506109f06120a7565b6040516109fd91906142bf565b60405180910390f35b348015610a1257600080fd5b50610a1b6120ad565b604051610a289190614967565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a539190614433565b6120d3565b604051610a65919061448e565b60405180910390f35b348015610a7a57600080fd5b50610a836120e8565b604051610a9091906142bf565b60405180910390f35b348015610aa557600080fd5b50610aae6120ee565b604051610abb91906142bf565b60405180910390f35b348015610ad057600080fd5b50610ad96120f4565b604051610ae691906149e1565b60405180910390f35b348015610afb57600080fd5b50610b0461211a565b604051610b119190614967565b60405180910390f35b348015610b2657600080fd5b50610b2f612140565b604051610b3c91906142bf565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b6791906149fc565b612146565b604051610b7991906142bf565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614a3c565b6121cd565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd9190614876565b612296565b005b348015610be057600080fd5b50610be961236f565b604051610bf6919061448e565b60405180910390f35b348015610c0b57600080fd5b50610c14612382565b005b348015610c2257600080fd5b50610c3d6004803603810190610c389190614876565b612411565b005b348015610c4b57600080fd5b50610c666004803603810190610c619190614a7c565b6125d3565b005b348015610c7457600080fd5b50610c8f6004803603810190610c8a91906148cf565b6126fd565b005b348015610c9d57600080fd5b50610ca66129ea565b604051610cb39190614af9565b60405180910390f35b348015610cc857600080fd5b50610ce36004803603810190610cde91906148cf565b612a10565b005b601b5481565b60606040518060400160405280600681526020017f5348415242490000000000000000000000000000000000000000000000000000815250905090565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e0891906142bf565b60405180910390a36001905092915050565b610e22612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690614b60565b60405180910390fd5b8260058190555081600681905550610ed08383612b0890919063ffffffff16565b600b8190555080600d81905550610ef3600a600d54612b1e90919063ffffffff16565b600b541115610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614bcc565b60405180910390fd5b505050565b610f44612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc890614b60565b60405180910390fd5b8260088190555081600781905550610ff28284612b0890919063ffffffff16565b600c8190555080600d81905550611015600a600d54612b1e90919063ffffffff16565b600c541115611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090614bcc565b60405180910390fd5b505050565b600d5481565b60006009600a6110749190614d4e565b64e8d4a510006110849190614d99565b905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190614e08565b905090565b611129612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90614b60565b60405180910390fd5b80518251146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614e81565b60405180910390fd5b60005b8251811015611259576112453384838151811061121d5761121c614ea1565b5b602002602001015184848151811061123857611237614ea1565b5b6020026020010151612b34565b50808061125190614ed0565b9150506111fd565b505050565b60006009600a61126e9190614d4e565b64e8d4a5100061127e9190614d99565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611447576113c6826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137899092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611452848484612b34565b90509392505050565b611463612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614b60565b60405180910390fd5b6103e86009600a6115019190614d4e565b64e8d4a510006115119190614d99565b61151b9190614f48565b81101561152757600080fd5b8060118190555050565b611539612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90614b60565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611623929190614f79565b600060405180830381600087803b15801561163d57600080fd5b505af1158015611651573d6000803e3d6000fd5b505050505050565b60006009905090565b601a6020528060005260406000206000915054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b815260040161171f9190614967565b602060405180830381865afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190614e08565b9050919050565b60176020528060005260406000206000915054906101000a900460ff1681565b60006117b0826009600a61179b9190614d4e565b64e8d4a510006117ab9190614d99565b610d28565b9050919050565b600b5481565b600f5481565b6117cb612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614b60565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118bb612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90614b60565b60405180910390fd5b60005b81518110156119d9576000601a600084848151811061196d5761196c614ea1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806119d190614ed0565b91505061194b565b5050565b601c60009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a41612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b94612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1890614b60565b60405180910390fd5b6103e86009600a611c329190614d4e565b64e8d4a51000611c429190614d99565b611c4c9190614f48565b811015611c5857600080fd5b8060108190555050565b60135481565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b8152600401611ce59190614967565b602060405180830381865afa158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d269190614e08565b9050919050565b611d35612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990614b60565b60405180910390fd5b611dca611f5d565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611e0f573d6000803e3d6000fd5b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e41612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614b60565b60405180910390fd5b601c60019054906101000a900460ff1615611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590614fee565b60405180910390fd5b6001601c60016101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff02191690831515021790555042601281905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f2453484152424900000000000000000000000000000000000000000000000000815250905090565b611fcb612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f90614b60565b60405180910390fd5b620b71b0811061209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061505a565b60405180910390fd5b80600f8190555050565b600c5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120e0338484612b34565b905092915050565b60115481565b60125481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121d5612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614b60565b60405180910390fd5b6000601b541161227157600080fd5b81601c60006101000a81548160ff02191690831515021790555080601b819055505050565b61229e612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232290614b60565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60019054906101000a900460ff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b81526004016123dd9190614967565b600060405180830381600087803b1580156123f757600080fd5b505af115801561240b573d6000803e3d6000fd5b50505050565b612419612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d90614b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d906150ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125db612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90614b60565b60405180910390fd5b60005b82518110156126f857816017600085848151811061268c5761268b614ea1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806126f090614ed0565b91505061266b565b505050565b612705612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614b60565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561281c5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61282557600080fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561291757600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016128e0929190615147565b600060405180830381600087803b1580156128fa57600080fd5b505af115801561290e573d6000803e3d6000fd5b505050506129e6565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016129b3929190615170565b600060405180830381600087803b1580156129cd57600080fd5b505af11580156129e1573d6000803e3d6000fd5b505050505b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612a18612b00565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c90614b60565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60008183612b169190615199565b905092915050565b60008183612b2c9190614f48565b905092915050565b6000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bba9061523b565b60405180910390fd5b601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c675750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8757601054821115612cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca8906152a7565b60405180910390fd5b601c60019054906101000a900460ff16612db1578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612d7157508273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da790615313565b60405180910390fd5b5b601354601254612dc19190615199565b42108015612e1d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612f86578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ed5576001601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f85565b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f84576001601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661303857601154612ff683612fe8866119f0565b612b0890919063ffffffff16565b1115613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e9061537f565b60405180910390fd5b5b601c60029054906101000a900460ff161561305f576130588484846137de565b9050613782565b6130676139b1565b1561307557613074613a88565b5b6130fe826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137899092919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131e45750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132975750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156132965750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b156132a4578290506133aa565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561335457613325600d54613317600b548761407290919063ffffffff16565b612b1e90919063ffffffff16565b905061333a818561408890919063ffffffff16565b9150613346868261409e565b61334f8461419c565b6133a8565b61337d600d5461336f600c548761407290919063ffffffff16565b612b1e90919063ffffffff16565b9050613392818561408890919063ffffffff16565b915061339e868261409e565b6133a784614221565b5b505b6133fc81601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0890919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356257600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161352c929190615170565b600060405180830381600087803b15801561354657600080fd5b505af1925050508015613557575060015b61356057613561565b5b5b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661368557600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161364f929190615170565b600060405180830381600087803b15801561366957600080fd5b505af192505050801561367a575060015b61368357613684565b5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479600f546040518263ffffffff1660e01b81526004016136e291906142bf565b600060405180830381600087803b1580156136fc57600080fd5b505af192505050801561370d575060015b61371657613717565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161377491906142bf565b60405180910390a360019150505b9392505050565b60008383111582906137d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c89190614373565b60405180910390fd5b5082840390509392505050565b6000613869826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137899092919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138fe82601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0890919063ffffffff16565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161399e91906142bf565b60405180910390a3600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613a1e5750601c60029054906101000a900460ff16155b8015613a365750601c60009054906101000a900460ff165b8015613a835750601b54601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601c60026101000a81548160ff0219169083151502179055506000613abc600954600a54612b0890919063ffffffff16565b90506000613afc6002613aee84613ae0600a54601b5461407290919063ffffffff16565b612b1e90919063ffffffff16565b612b1e90919063ffffffff16565b90506000613b1582601b5461408890919063ffffffff16565b90506009600a613b259190614d4e565b64e8d4a51000613b359190614d99565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff811115613bf457613bf3614501565b5b604051908082528060200260200182016040528015613c225781602001602082028036833780820191505090505b5090503081600081518110613c3a57613c39614ea1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0591906153b4565b81600181518110613d1957613d18614ea1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613dbc95949392919061549f565b600060405180830381600087803b158015613dd657600080fd5b505af1158015613dea573d6000803e3d6000fd5b505050506000613e03824761408890919063ffffffff16565b90506000613e2f613e206002600a54612b1e90919063ffffffff16565b8861408890919063ffffffff16565b90506000613e6d6002613e5f84613e51600a548861407290919063ffffffff16565b612b1e90919063ffffffff16565b612b1e90919063ffffffff16565b90506000871115613f8157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613f01969594939291906154f9565b60606040518083038185885af1158015613f1f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f44919061555a565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051613f78929190614f79565b60405180910390a15b6000613faa83613f9c6009548761407290919063ffffffff16565b612b1e90919063ffffffff16565b9050600081111561403c57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561401f57600080fd5b505af193505050508015614031575060015b61403a5761403b565b5b5b6000600a8190555060006009819055505050505050505050506000601c60026101000a81548160ff021916908315150217905550565b600081836140809190614d99565b905092915050565b6000818361409691906155ad565b905092915050565b6140f081601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0890919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161419091906142bf565b60405180910390a35050565b6141c5600d546141b76006548461407290919063ffffffff16565b612b1e90919063ffffffff16565b600a60008282546141d69190615199565b92505081905550614206600d546141f86005548461407290919063ffffffff16565b612b1e90919063ffffffff16565b600960008282546142179190615199565b9250508190555050565b61424a600d5461423c6008548461407290919063ffffffff16565b612b1e90919063ffffffff16565b600a600082825461425b9190615199565b9250508190555061428b600d5461427d6007548461407290919063ffffffff16565b612b1e90919063ffffffff16565b6009600082825461429c9190615199565b9250508190555050565b6000819050919050565b6142b9816142a6565b82525050565b60006020820190506142d460008301846142b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143145780820151818401526020810190506142f9565b83811115614323576000848401525b50505050565b6000601f19601f8301169050919050565b6000614345826142da565b61434f81856142e5565b935061435f8185602086016142f6565b61436881614329565b840191505092915050565b6000602082019050818103600083015261438d818461433a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143d4826143a9565b9050919050565b6143e4816143c9565b81146143ef57600080fd5b50565b600081359050614401816143db565b92915050565b614410816142a6565b811461441b57600080fd5b50565b60008135905061442d81614407565b92915050565b6000806040838503121561444a5761444961439f565b5b6000614458858286016143f2565b92505060206144698582860161441e565b9150509250929050565b60008115159050919050565b61448881614473565b82525050565b60006020820190506144a3600083018461447f565b92915050565b6000806000606084860312156144c2576144c161439f565b5b60006144d08682870161441e565b93505060206144e18682870161441e565b92505060406144f28682870161441e565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61453982614329565b810181811067ffffffffffffffff8211171561455857614557614501565b5b80604052505050565b600061456b614395565b90506145778282614530565b919050565b600067ffffffffffffffff82111561459757614596614501565b5b602082029050602081019050919050565b600080fd5b60006145c06145bb8461457c565b614561565b905080838252602082019050602084028301858111156145e3576145e26145a8565b5b835b8181101561460c57806145f888826143f2565b8452602084019350506020810190506145e5565b5050509392505050565b600082601f83011261462b5761462a6144fc565b5b813561463b8482602086016145ad565b91505092915050565b600067ffffffffffffffff82111561465f5761465e614501565b5b602082029050602081019050919050565b600061468361467e84614644565b614561565b905080838252602082019050602084028301858111156146a6576146a56145a8565b5b835b818110156146cf57806146bb888261441e565b8452602084019350506020810190506146a8565b5050509392505050565b600082601f8301126146ee576146ed6144fc565b5b81356146fe848260208601614670565b91505092915050565b6000806040838503121561471e5761471d61439f565b5b600083013567ffffffffffffffff81111561473c5761473b6143a4565b5b61474885828601614616565b925050602083013567ffffffffffffffff811115614769576147686143a4565b5b614775858286016146d9565b9150509250929050565b6000806000606084860312156147985761479761439f565b5b60006147a6868287016143f2565b93505060206147b7868287016143f2565b92505060406147c88682870161441e565b9150509250925092565b6000602082840312156147e8576147e761439f565b5b60006147f68482850161441e565b91505092915050565b600080604083850312156148165761481561439f565b5b60006148248582860161441e565b92505060206148358582860161441e565b9150509250929050565b600060ff82169050919050565b6148558161483f565b82525050565b6000602082019050614870600083018461484c565b92915050565b60006020828403121561488c5761488b61439f565b5b600061489a848285016143f2565b91505092915050565b6148ac81614473565b81146148b757600080fd5b50565b6000813590506148c9816148a3565b92915050565b600080604083850312156148e6576148e561439f565b5b60006148f4858286016143f2565b9250506020614905858286016148ba565b9150509250929050565b6000602082840312156149255761492461439f565b5b600082013567ffffffffffffffff811115614943576149426143a4565b5b61494f84828501614616565b91505092915050565b614961816143c9565b82525050565b600060208201905061497c6000830184614958565b92915050565b6000819050919050565b60006149a76149a261499d846143a9565b614982565b6143a9565b9050919050565b60006149b98261498c565b9050919050565b60006149cb826149ae565b9050919050565b6149db816149c0565b82525050565b60006020820190506149f660008301846149d2565b92915050565b60008060408385031215614a1357614a1261439f565b5b6000614a21858286016143f2565b9250506020614a32858286016143f2565b9150509250929050565b60008060408385031215614a5357614a5261439f565b5b6000614a61858286016148ba565b9250506020614a728582860161441e565b9150509250929050565b60008060408385031215614a9357614a9261439f565b5b600083013567ffffffffffffffff811115614ab157614ab06143a4565b5b614abd85828601614616565b9250506020614ace858286016148ba565b9150509250929050565b6000614ae3826149ae565b9050919050565b614af381614ad8565b82525050565b6000602082019050614b0e6000830184614aea565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4a6020836142e5565b9150614b5582614b14565b602082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f43616e27742062652067726561746572207468616e2031302500000000000000600082015250565b6000614bb66019836142e5565b9150614bc182614b80565b602082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614c7257808604811115614c4e57614c4d614bec565b5b6001851615614c5d5780820291505b8081029050614c6b85614c1b565b9450614c32565b94509492505050565b600082614c8b5760019050614d47565b81614c995760009050614d47565b8160018114614caf5760028114614cb957614ce8565b6001915050614d47565b60ff841115614ccb57614cca614bec565b5b8360020a915084821115614ce257614ce1614bec565b5b50614d47565b5060208310610133831016604e8410600b8410161715614d1d5782820a905083811115614d1857614d17614bec565b5b614d47565b614d2a8484846001614c28565b92509050818404811115614d4157614d40614bec565b5b81810290505b9392505050565b6000614d59826142a6565b9150614d648361483f565b9250614d917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614c7b565b905092915050565b6000614da4826142a6565b9150614daf836142a6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614de857614de7614bec565b5b828202905092915050565b600081519050614e0281614407565b92915050565b600060208284031215614e1e57614e1d61439f565b5b6000614e2c84828501614df3565b91505092915050565b7f496e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000614e6b6007836142e5565b9150614e7682614e35565b602082019050919050565b60006020820190508181036000830152614e9a81614e5e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614edb826142a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f0e57614f0d614bec565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f53826142a6565b9150614f5e836142a6565b925082614f6e57614f6d614f19565b5b828204905092915050565b6000604082019050614f8e60008301856142b0565b614f9b60208301846142b0565b9392505050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614fd8600f836142e5565b9150614fe382614fa2565b602082019050919050565b6000602082019050818103600083015261500781614fcb565b9050919050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000615044601d836142e5565b915061504f8261500e565b602082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150d66026836142e5565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b6000819050919050565b600061513161512c6151278461510c565b614982565b6142a6565b9050919050565b61514181615116565b82525050565b600060408201905061515c6000830185614958565b6151696020830184615138565b9392505050565b60006040820190506151856000830185614958565b61519260208301846142b0565b9392505050565b60006151a4826142a6565b91506151af836142a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151e4576151e3614bec565b5b828201905092915050565b7f426f742064657465637465640000000000000000000000000000000000000000600082015250565b6000615225600c836142e5565b9150615230826151ef565b602082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f4d61782074786e206c696d697420657863656564730000000000000000000000600082015250565b60006152916015836142e5565b915061529c8261525b565b602082019050919050565b600060208201905081810360008301526152c081615284565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b60006152fd6012836142e5565b9150615308826152c7565b602082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f4d61782057616c6c6574206c696d697420657863656564730000000000000000600082015250565b60006153696018836142e5565b915061537482615333565b602082019050919050565b600060208201905081810360008301526153988161535c565b9050919050565b6000815190506153ae816143db565b92915050565b6000602082840312156153ca576153c961439f565b5b60006153d88482850161539f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615416816143c9565b82525050565b6000615428838361540d565b60208301905092915050565b6000602082019050919050565b600061544c826153e1565b61545681856153ec565b9350615461836153fd565b8060005b83811015615492578151615479888261541c565b975061548483615434565b925050600181019050615465565b5085935050505092915050565b600060a0820190506154b460008301886142b0565b6154c16020830187615138565b81810360408301526154d38186615441565b90506154e26060830185614958565b6154ef60808301846142b0565b9695505050505050565b600060c08201905061550e6000830189614958565b61551b60208301886142b0565b6155286040830187615138565b6155356060830186615138565b6155426080830185614958565b61554f60a08301846142b0565b979650505050505050565b6000806000606084860312156155735761557261439f565b5b600061558186828701614df3565b935050602061559286828701614df3565b92505060406155a386828701614df3565b9150509250925092565b60006155b8826142a6565b91506155c3836142a6565b9250828210156155d6576155d5614bec565b5b82820390509291505056fea26469706673582212208e70f6c45b64bba466d69bc627c3547a447e3dca9665a26f2c233d8ea4c7d2c064736f6c634300080a0033

Deployed Bytecode Sourcemap

13745:15255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15357:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17286:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17711:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26946:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27417:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14644:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16968:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25111:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28679:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18288:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26103:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28288:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17078:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15311:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15103:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15256:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24741:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15153:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17967:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14563:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14736:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26266:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26736:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15414:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17388:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6344:157;;;;;;;;;;;;;:::i;:::-;;25946:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14929:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15204:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24923:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25827:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14058:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25627:192;;;;;;;;;;;;;:::i;:::-;;6130:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17180:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28503:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14603:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14263:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18092:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14838:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14897:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14691:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14289:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14783:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17515:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28065:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27893:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15444:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24643:90;;;;;;;;;;;;;:::i;:::-;;6509:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26393:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25246:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14232:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26604:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15357:50;;;;:::o;17286:94::-;17334:13;17367:5;;;;;;;;;;;;;;;;;17360:12;;17286:94;:::o;17711:248::-;17813:4;17870:6;17835:11;:23;17847:10;17835:23;;;;;;;;;;;;;;;:32;17859:7;17835:32;;;;;;;;;;;;;;;:41;;;;17913:7;17892:37;;17901:10;17892:37;;;17922:6;17892:37;;;;;;:::i;:::-;;;;;;;;17947:4;17940:11;;17711:248;;;;:::o;26946:463::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27120:14:::1;27100:17;:34;;;;27164:13;27145:16;:32;;;;27202:33;27220:14;27202:13;:17;;:33;;;;:::i;:::-;27188:11;:47;;;;27263:15;27246:14;:32;;;;27326:22;27345:2;27326:14;;:18;;:22;;;;:::i;:::-;27311:11;;:37;;27289:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;26946:463:::0;;;:::o;27417:468::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:13:::1;27572:17;:33;;;;27637:14;27616:18;:35;;;;27677:33;27695:14;27677:13;:17;;:33;;;;:::i;:::-;27662:12;:48;;;;27738:15;27721:14;:32;;;;27802:22;27821:2;27802:14;;:18;;:22;;;;:::i;:::-;27786:12;;:38;;27764:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;27417:468:::0;;;:::o;14644:38::-;;;;:::o;16968:102::-;17023:7;13968:1;14036:2;:13;;;;:::i;:::-;14016:17;:33;;;;:::i;:::-;17043:19;;16968:102;:::o;25111:127::-;25173:7;25200:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25193:37;;25111:127;:::o;28679:318::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28835:7:::1;:14;28816:8;:15;:33;28808:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;28876:9;28871:119;28891:8;:15;28887:1;:19;28871:119;;;28928:50;28942:10;28954:8;28963:1;28954:11;;;;;;;;:::i;:::-;;;;;;;;28967:7;28975:1;28967:10;;;;;;;;:::i;:::-;;;;;;;;28928:13;:50::i;:::-;;28908:3;;;;;:::i;:::-;;;;28871:119;;;;28679:318:::0;;:::o;18288:419::-;18422:4;13968:1;14036:2;:13;;;;:::i;:::-;14016:17;:33;;;;:::i;:::-;18443:11;:19;18455:6;18443:19;;;;;;;;;;;;;;;:31;18463:10;18443:31;;;;;;;;;;;;;;;;:47;18439:201;;18541:87;18595:6;18541:87;;;;;;;;;;;;;;;;;:11;:19;18553:6;18541:19;;;;;;;;;;;;;;;:31;18561:10;18541:31;;;;;;;;;;;;;;;;:53;;:87;;;;;:::i;:::-;18507:11;:19;18519:6;18507:19;;;;;;;;;;;;;;;:31;18527:10;18507:31;;;;;;;;;;;;;;;:121;;;;18439:201;18659:40;18673:6;18681:9;18692:6;18659:13;:40::i;:::-;18652:47;;18288:419;;;;;:::o;26103:155::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26210:4:::1;13968:1;14036:2;:13;;;;:::i;:::-;14016:17;:33;;;;:::i;:::-;26195:19;;;;:::i;:::-;26185:6;:29;;26177:38;;;::::0;::::1;;26244:6;26226:15;:24;;;;26103:155:::0;:::o;28288:207::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28422:11:::1;;;;;;;;;;;:35;;;28458:10;28470:16;28422:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28288:207:::0;;:::o;17078:94::-;17130:5;13968:1;17148:16;;17078:94;:::o;15311:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;15103:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;15256:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;24741:174::-;24835:7;24867:11;;;;;;;;;;;:27;;;24895:11;24867:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24860:47;;24741:174;;;:::o;15153:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17967:117::-;18022:4;18046:30;18054:7;13968:1;14036:2;:13;;;;:::i;:::-;14016:17;:33;;;;:::i;:::-;18046:7;:30::i;:::-;18039:37;;17967:117;;;:::o;14563:33::-;;;;:::o;14736:38::-;;;;:::o;26266:119::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26371:6:::1;26349:11;:19;26361:6;26349:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26266:119:::0;;:::o;26736:202::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26841:9:::1;26836:95;26856:8;:15;26852:1;:19;26836:95;;;26914:5;26893;:18;26899:8;26908:1;26899:11;;;;;;;;:::i;:::-;;;;;;;;26893:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;26873:3;;;;;:::i;:::-;;;;26836:95;;;;26736:202:::0;:::o;15414:23::-;;;;;;;;;;;;;:::o;17388:119::-;17454:7;17481:9;:18;17491:7;17481:18;;;;;;;;;;;;;;;;17474:25;;17388:119;;;:::o;6344:157::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6451:1:::1;6414:40;;6435:6;::::0;::::1;;;;;;;;6414:40;;;;;;;;;;;;6490:1;6465:6:::0;::::1;:28;;;;;;;;;;;;;;;;;;6344:157::o:0;25946:149::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26050:4:::1;13968:1;14036:2;:13;;;;:::i;:::-;14016:17;:33;;;;:::i;:::-;26035:19;;;;:::i;:::-;26025:6;:29;;26017:38;;;::::0;::::1;;26081:6;26066:12;:21;;;;25946:149:::0;:::o;14929:39::-;;;;:::o;15204:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;24923:180::-;25021:7;25053:11;;;;;;;;;;;:29;;;25083:11;25053:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25046:49;;24923:180;;;:::o;25827:111::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25905:7:::1;:5;:7::i;:::-;25897:25;;:33;25923:6;25897:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25827:111:::0;:::o;14058:64::-;;;;;;;;;;;;;:::o;25627:192::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25691:7:::1;;;;;;;;;;;25690:8;25682:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;25739:4;25729:7;;:14;;;;;;;;;;;;;;;;;;25768:4;25754:11;;:18;;;;;;;;;;;;;;;;;;25796:15;25783:10;:28;;;;25627:192::o:0;6130:79::-;6168:7;6195:6;;;;;;;;;;;6188:13;;6130:79;:::o;17180:98::-;17230:13;17263:7;;;;;;;;;;;;;;;;;17256:14;;17180:98;:::o;28503:168::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28592:6:::1;28586:3;:12;28578:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28660:3;28643:14;:20;;;;28503:168:::0;:::o;14603:34::-;;;;:::o;14263:19::-;;;;;;;;;;;;;:::o;18092:188::-;18199:4;18228:44;18242:10;18254:9;18265:6;18228:13;:44::i;:::-;18221:51;;18092:188;;;;:::o;14838:52::-;;;;:::o;14897:25::-;;;;:::o;14691:38::-;;;;;;;;;;;;;:::o;14289:36::-;;;;;;;;;;;;;:::o;14783:48::-;;;;:::o;17515:188::-;17635:7;17667:11;:19;17679:6;17667:19;;;;;;;;;;;;;;;:28;17687:7;17667:28;;;;;;;;;;;;;;;;17660:35;;17515:188;;;;:::o;28065:215::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28203:1:::1;28187:13;;:17;28179:26;;;::::0;::::1;;28230:8;28216:11;;:22;;;;;;;;;;;;;;;;;;28265:7;28249:13;:23;;;;28065:215:::0;;:::o;27893:164::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28027:22:::1;28003:21;;:46;;;;;;;;;;;;;;;;;;27893:164:::0;:::o;15444:19::-;;;;;;;;;;;;;:::o;24643:90::-;24688:11;;;;;;;;;;;:25;;;24714:10;24688:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24643:90::o;6509:281::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6632:1:::1;6612:22;;:8;:22;;;;6590:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6745:8;6716:38;;6737:6;::::0;::::1;;;;;;;;6716:38;;;;;;;;;;;;6774:8;6765:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6509:281:::0;:::o;26393:203::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26493:9:::1;26488:101;26508:7;:14;26504:1;:18;26488:101;;;26571:6;26544:12;:24;26557:7;26565:1;26557:10;;;;;;;;:::i;:::-;;;;;;;;26544:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26524:3;;;;;:::i;:::-;;;;26488:101;;;;26393:203:::0;;:::o;25246:373::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25383:4:::1;25365:23;;:6;:23;;;;:41;;;;;25402:4;;;;;;;;;;;25392:14;;:6;:14;;;;25365:41;25357:50;;;::::0;::::1;;25445:6;25418:16;:24;25435:6;25418:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25466:6;25462:150;;;25489:11;;;;;;;;;;;:20;;;25510:6;25518:1;25489:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25462:150;;;25553:11;;;;;;;;;;;:20;;;25574:6;25582:9;:17;25592:6;25582:17;;;;;;;;;;;;;;;;25553:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25462:150;25246:373:::0;;:::o;14232:24::-;;;;;;;;;;;;;:::o;26604:124::-;6267:12;:10;:12::i;:::-;6257:22;;:6;;;;;;;;;;:22;;;6249:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26714:6:::1;26690:13;:21;26704:6;26690:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;26604:124:::0;;:::o;5466:115::-;5519:15;5562:10;5547:26;;5466:115;:::o;2083:98::-;2141:7;2172:1;2168;:5;;;;:::i;:::-;2161:12;;2083:98;;;;:::o;2401:::-;2459:7;2490:1;2486;:5;;;;:::i;:::-;2479:12;;2401:98;;;;:::o;18715:2772::-;18841:4;18867:5;:13;18873:6;18867:13;;;;;;;;;;;;;;;;;;;;;;;;;18866:14;18858:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18912:12;:20;18925:6;18912:20;;;;;;;;;;;;;;;;;;;;;;;;;18911:21;:49;;;;;18937:12;:23;18950:9;18937:23;;;;;;;;;;;;;;;;;;;;;;;;;18936:24;18911:49;18907:759;;;18995:12;;18985:6;:22;;18977:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19099:7;;;;;;;;;;;19094:176;;19165:6;19157:14;;:4;;;;;;;;;;;:14;;;;:35;;;;;19183:9;19175:17;;:4;;;;;;;;;;;:17;;;;19157:35;19127:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;19094:176;19370:11;;19357:10;;:24;;;;:::i;:::-;19339:15;:42;:88;;;;;19420:6;;;;;;;;;;;19402:25;;:6;:25;;;;19339:88;19317:338;;;19474:6;19466:14;;:4;;;;;;;;;;;:14;;;19462:178;;;19524:4;19505:5;:16;19511:9;19505:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;19462:178;;;19566:9;19558:17;;:4;;;;;;;;;;;:17;;;19554:86;;;19616:4;19600:5;:13;19606:6;19600:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;19554:86;19462:178;19317:338;18907:759;19683:13;:24;19697:9;19683:24;;;;;;;;;;;;;;;;;;;;;;;;;19678:195;;19786:15;;19750:32;19775:6;19750:20;19760:9;19750;:20::i;:::-;:24;;:32;;;;:::i;:::-;:51;;19724:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;19678:195;19889:6;;;;;;;;;;;19885:87;;;19919:41;19934:6;19942:9;19953:6;19919:14;:41::i;:::-;19912:48;;;;19885:87;19988:16;:14;:16::i;:::-;19984:59;;;20021:10;:8;:10::i;:::-;19984:59;20075:90;20111:6;20075:90;;;;;;;;;;;;;;;;;:9;:17;20085:6;20075:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;20055:9;:17;20065:6;20055:17;;;;;;;;;;;;;;;:110;;;;20178:22;20229:11;:19;20241:6;20229:19;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;20265:11;:22;20277:9;20265:22;;;;;;;;;;;;;;;;;;;;;;;;;20229:58;:112;;;;20315:4;;;;;;;;;;;20305:14;;:6;:14;;;;:35;;;;;20336:4;;;;;;;;;;;20323:17;;:9;:17;;;;20305:35;20229:112;20211:746;;;20385:6;20368:23;;20211:746;;;20424:17;20470:4;;;;;;;;;;;20460:14;;:6;:14;;;20456:490;;;20507:43;20535:14;;20507:23;20518:11;;20507:6;:10;;:23;;;;:::i;:::-;:27;;:43;;;;:::i;:::-;20495:55;;20586:21;20597:9;20586:6;:10;;:21;;;;:::i;:::-;20569:38;;20626:26;20634:6;20642:9;20626:7;:26::i;:::-;20671:20;20684:6;20671:12;:20::i;:::-;20456:490;;;20744:44;20773:14;;20744:24;20755:12;;20744:6;:10;;:24;;;;:::i;:::-;:28;;:44;;;;:::i;:::-;20732:56;;20824:21;20835:9;20824:6;:10;;:21;;;;:::i;:::-;20807:38;;20864:26;20872:6;20880:9;20864:7;:26::i;:::-;20909:21;20923:6;20909:13;:21::i;:::-;20456:490;20409:548;20211:746;20992:40;21017:14;20992:9;:20;21002:9;20992:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;20969:9;:20;20979:9;20969:20;;;;;;;;;;;;;;;:63;;;;21050:16;:24;21067:6;21050:24;;;;;;;;;;;;;;;;;;;;;;;;;21045:120;;21095:11;;;;;;;;;;;:20;;;21116:6;21124:9;:17;21134:6;21124:17;;;;;;;;;;;;;;;;21095:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21091:63;;;;;;21045:120;21180:16;:27;21197:9;21180:27;;;;;;;;;;;;;;;;;;;;;;;;;21175:159;;21245:11;;;;;;;;;;;:20;;;21266:9;21277;:20;21287:9;21277:20;;;;;;;;;;;;;;;;21245:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21224:99;;;;;;21175:159;21350:11;;;;;;;;;;;:19;;;21370:14;;21350:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21346:51;;;;;;21431:9;21414:43;;21423:6;21414:43;;;21442:14;21414:43;;;;;;:::i;:::-;;;;;;;;21475:4;21468:11;;;18715:2772;;;;;;:::o;2613:240::-;2733:7;2791:1;2786;:6;;2794:12;2778:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2833:1;2829;:5;2822:12;;2613:240;;;;;:::o;21495:401::-;21622:4;21659:90;21695:6;21659:90;;;;;;;;;;;;;;;;;:9;:17;21669:6;21659:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;21639:9;:17;21649:6;21639:17;;;;;;;;;;;;;;;:110;;;;21783:32;21808:6;21783:9;:20;21793:9;21783:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21760:9;:20;21770:9;21760:20;;;;;;;;;;;;;;;:55;;;;21848:9;21831:35;;21840:6;21831:35;;;21859:6;21831:35;;;;;;:::i;:::-;;;;;;;;21884:4;21877:11;;21495:401;;;;;:::o;22651:222::-;22700:4;22751;;;;;;;;;;;22737:18;;:10;:18;;;;:42;;;;;22773:6;;;;;;;;;;;22772:7;22737:42;:70;;;;;22796:11;;;;;;;;;;;22737:70;:128;;;;;22852:13;;22824:9;:24;22842:4;22824:24;;;;;;;;;;;;;;;;:41;;22737:128;22717:148;;22651:222;:::o;22881:1754::-;15528:4;15519:6;;:13;;;;;;;;;;;;;;;;;;22930:16:::1;22949:43;22972:19;;22949:18;;:22;;:43;;;;:::i;:::-;22930:62;;23005:23;23031:100;23129:1;23031:79;23101:8;23031:51;23063:18;;23031:13;;:31;;:51;;;;:::i;:::-;:69;;:79;;;;:::i;:::-;:97;;:100;;;;:::i;:::-;23005:126;;23144:20;23167:34;23185:15;23167:13;;:17;;:34;;;;:::i;:::-;23144:57;;13968:1;14036:2;:13;;;;:::i;:::-;14016:17;:33;;;;:::i;:::-;23212:11;:26;23232:4;23212:26;;;;;;;;;;;;;;;:43;23247:6;;;;;;;;;;;23212:43;;;;;;;;;;;;;;;:58;;;;23281:21;23319:1;23305:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23281:40;;23350:4;23332;23337:1;23332:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23376:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23366:4;23371:1;23366:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23400:21;23424;23400:45;;23458:6;;;;;;;;;;;:57;;;23530:12;23557:1;23573:4;23600;23620:15;23458:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23659:17;23679:40;23705:13;23679:21;:25;;:40;;;;:::i;:::-;23659:60;;23732:19;23754:39;23767:25;23790:1;23767:18;;:22;;:25;;;;:::i;:::-;23754:8;:12;;:39;;;;:::i;:::-;23732:61;;23806:26;23835:99;23932:1;23835:78;23901:11;23835:47;23863:18;;23835:9;:27;;:47;;;;:::i;:::-;:65;;:78;;;;:::i;:::-;:96;;:99;;;;:::i;:::-;23806:128;;23969:1;23951:15;:19;23947:364;;;23987:6;;;;;;;;;;;:22;;;24017:18;24063:4;24087:15;24121:1;24141::::0;24161:21:::1;;;;;;;;;;;24201:15;23987:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24251:48;24263:18;24283:15;24251:48;;;;;;;:::i;:::-;;;;;;;;23947:364;24323:27;24353:75;24406:11;24353:34;24367:19;;24353:9;:13;;:34;;;;:::i;:::-;:38;;:75;;;;:::i;:::-;24323:105;;24465:1;24443:19;:23;24439:120;;;24487:11;;;;;;;;;;;:19;;;24514;24487:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;24483:65;;;;;;24439:120;24592:1;24571:18;:22;;;;24626:1;24604:19;:23;;;;22919:1716;;;;;;;;;15564:5:::0;15555:6;;:14;;;;;;;;;;;;;;;;;;22881:1754::o;2295:98::-;2353:7;2384:1;2380;:5;;;;:::i;:::-;2373:12;;2295:98;;;;:::o;2189:::-;2247:7;2278:1;2274;:5;;;;:::i;:::-;2267:12;;2189:98;;;;:::o;21904:204::-;22003:39;22032:9;22003;:24;22021:4;22003:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;21976:9;:24;21994:4;21976:24;;;;;;;;;;;;;;;:66;;;;22083:4;22058:42;;22067:6;22058:42;;;22090:9;22058:42;;;;;;:::i;:::-;;;;;;;;21904:204;;:::o;22116:246::-;22197:49;22231:14;;22197:29;22209:16;;22197:7;:11;;:29;;;;:::i;:::-;:33;;:49;;;;:::i;:::-;22175:18;;:71;;;;;;;:::i;:::-;;;;;;;;22280:74;22329:14;;22280:30;22292:17;;22280:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22257:19;;:97;;;;;;;:::i;:::-;;;;;;;;22116:246;:::o;22370:273::-;22452:74;22501:14;;22452:30;22464:17;;22452:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22430:18;;:96;;;;;;;:::i;:::-;;;;;;;;22560:75;22610:14;;22560:31;22572:18;;22560:7;:11;;:31;;;;:::i;:::-;:35;;:75;;;;:::i;:::-;22537:19;;:98;;;;;;;:::i;:::-;;;;;;;;22370:273;:::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;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:117::-;4580:1;4577;4570:12;4594:180;4642:77;4639:1;4632:88;4739:4;4736:1;4729:15;4763:4;4760:1;4753:15;4780:281;4863:27;4885:4;4863:27;:::i;:::-;4855:6;4851:40;4993:6;4981:10;4978:22;4957:18;4945:10;4942:34;4939:62;4936:88;;;5004:18;;:::i;:::-;4936:88;5044:10;5040:2;5033:22;4823:238;4780:281;;:::o;5067:129::-;5101:6;5128:20;;:::i;:::-;5118:30;;5157:33;5185:4;5177:6;5157:33;:::i;:::-;5067:129;;;:::o;5202:311::-;5279:4;5369:18;5361:6;5358:30;5355:56;;;5391:18;;:::i;:::-;5355:56;5441:4;5433:6;5429:17;5421:25;;5501:4;5495;5491:15;5483:23;;5202:311;;;:::o;5519:117::-;5628:1;5625;5618:12;5659:710;5755:5;5780:81;5796:64;5853:6;5796:64;:::i;:::-;5780:81;:::i;:::-;5771:90;;5881:5;5910:6;5903:5;5896:21;5944:4;5937:5;5933:16;5926:23;;5997:4;5989:6;5985:17;5977:6;5973:30;6026:3;6018:6;6015:15;6012:122;;;6045:79;;:::i;:::-;6012:122;6160:6;6143:220;6177:6;6172:3;6169:15;6143:220;;;6252:3;6281:37;6314:3;6302:10;6281:37;:::i;:::-;6276:3;6269:50;6348:4;6343:3;6339:14;6332:21;;6219:144;6203:4;6198:3;6194:14;6187:21;;6143:220;;;6147:21;5761:608;;5659:710;;;;;:::o;6392:370::-;6463:5;6512:3;6505:4;6497:6;6493:17;6489:27;6479:122;;6520:79;;:::i;:::-;6479:122;6637:6;6624:20;6662:94;6752:3;6744:6;6737:4;6729:6;6725:17;6662:94;:::i;:::-;6653:103;;6469:293;6392:370;;;;:::o;6768:311::-;6845:4;6935:18;6927:6;6924:30;6921:56;;;6957:18;;:::i;:::-;6921:56;7007:4;6999:6;6995:17;6987:25;;7067:4;7061;7057:15;7049:23;;6768:311;;;:::o;7102:710::-;7198:5;7223:81;7239:64;7296:6;7239:64;:::i;:::-;7223:81;:::i;:::-;7214:90;;7324:5;7353:6;7346:5;7339:21;7387:4;7380:5;7376:16;7369:23;;7440:4;7432:6;7428:17;7420:6;7416:30;7469:3;7461:6;7458:15;7455:122;;;7488:79;;:::i;:::-;7455:122;7603:6;7586:220;7620:6;7615:3;7612:15;7586:220;;;7695:3;7724:37;7757:3;7745:10;7724:37;:::i;:::-;7719:3;7712:50;7791:4;7786:3;7782:14;7775:21;;7662:144;7646:4;7641:3;7637:14;7630:21;;7586:220;;;7590:21;7204:608;;7102:710;;;;;:::o;7835:370::-;7906:5;7955:3;7948:4;7940:6;7936:17;7932:27;7922:122;;7963:79;;:::i;:::-;7922:122;8080:6;8067:20;8105:94;8195:3;8187:6;8180:4;8172:6;8168:17;8105:94;:::i;:::-;8096:103;;7912:293;7835:370;;;;:::o;8211:894::-;8329:6;8337;8386:2;8374:9;8365:7;8361:23;8357:32;8354:119;;;8392:79;;:::i;:::-;8354:119;8540:1;8529:9;8525:17;8512:31;8570:18;8562:6;8559:30;8556:117;;;8592:79;;:::i;:::-;8556:117;8697:78;8767:7;8758:6;8747:9;8743:22;8697:78;:::i;:::-;8687:88;;8483:302;8852:2;8841:9;8837:18;8824:32;8883:18;8875:6;8872:30;8869:117;;;8905:79;;:::i;:::-;8869:117;9010:78;9080:7;9071:6;9060:9;9056:22;9010:78;:::i;:::-;9000:88;;8795:303;8211:894;;;;;:::o;9111:619::-;9188:6;9196;9204;9253:2;9241:9;9232:7;9228:23;9224:32;9221:119;;;9259:79;;:::i;:::-;9221:119;9379:1;9404:53;9449:7;9440:6;9429:9;9425:22;9404:53;:::i;:::-;9394:63;;9350:117;9506:2;9532:53;9577:7;9568:6;9557:9;9553:22;9532:53;:::i;:::-;9522:63;;9477:118;9634:2;9660:53;9705:7;9696:6;9685:9;9681:22;9660:53;:::i;:::-;9650:63;;9605:118;9111:619;;;;;:::o;9736:329::-;9795:6;9844:2;9832:9;9823:7;9819:23;9815:32;9812:119;;;9850:79;;:::i;:::-;9812:119;9970:1;9995:53;10040:7;10031:6;10020:9;10016:22;9995:53;:::i;:::-;9985:63;;9941:117;9736:329;;;;:::o;10071:474::-;10139:6;10147;10196:2;10184:9;10175:7;10171:23;10167:32;10164:119;;;10202:79;;:::i;:::-;10164:119;10322:1;10347:53;10392:7;10383:6;10372:9;10368:22;10347:53;:::i;:::-;10337:63;;10293:117;10449:2;10475:53;10520:7;10511:6;10500:9;10496:22;10475:53;:::i;:::-;10465:63;;10420:118;10071:474;;;;;:::o;10551:86::-;10586:7;10626:4;10619:5;10615:16;10604:27;;10551:86;;;:::o;10643:112::-;10726:22;10742:5;10726:22;:::i;:::-;10721:3;10714:35;10643:112;;:::o;10761:214::-;10850:4;10888:2;10877:9;10873:18;10865:26;;10901:67;10965:1;10954:9;10950:17;10941:6;10901:67;:::i;:::-;10761:214;;;;:::o;10981:329::-;11040:6;11089:2;11077:9;11068:7;11064:23;11060:32;11057:119;;;11095:79;;:::i;:::-;11057:119;11215:1;11240:53;11285:7;11276:6;11265:9;11261:22;11240:53;:::i;:::-;11230:63;;11186:117;10981:329;;;;:::o;11316:116::-;11386:21;11401:5;11386:21;:::i;:::-;11379:5;11376:32;11366:60;;11422:1;11419;11412:12;11366:60;11316:116;:::o;11438:133::-;11481:5;11519:6;11506:20;11497:29;;11535:30;11559:5;11535:30;:::i;:::-;11438:133;;;;:::o;11577:468::-;11642:6;11650;11699:2;11687:9;11678:7;11674:23;11670:32;11667:119;;;11705:79;;:::i;:::-;11667:119;11825:1;11850:53;11895:7;11886:6;11875:9;11871:22;11850:53;:::i;:::-;11840:63;;11796:117;11952:2;11978:50;12020:7;12011:6;12000:9;11996:22;11978:50;:::i;:::-;11968:60;;11923:115;11577:468;;;;;:::o;12051:539::-;12135:6;12184:2;12172:9;12163:7;12159:23;12155:32;12152:119;;;12190:79;;:::i;:::-;12152:119;12338:1;12327:9;12323:17;12310:31;12368:18;12360:6;12357:30;12354:117;;;12390:79;;:::i;:::-;12354:117;12495:78;12565:7;12556:6;12545:9;12541:22;12495:78;:::i;:::-;12485:88;;12281:302;12051:539;;;;:::o;12596:118::-;12683:24;12701:5;12683:24;:::i;:::-;12678:3;12671:37;12596:118;;:::o;12720:222::-;12813:4;12851:2;12840:9;12836:18;12828:26;;12864:71;12932:1;12921:9;12917:17;12908:6;12864:71;:::i;:::-;12720:222;;;;:::o;12948:60::-;12976:3;12997:5;12990:12;;12948:60;;;:::o;13014:142::-;13064:9;13097:53;13115:34;13124:24;13142:5;13124:24;:::i;:::-;13115:34;:::i;:::-;13097:53;:::i;:::-;13084:66;;13014:142;;;:::o;13162:126::-;13212:9;13245:37;13276:5;13245:37;:::i;:::-;13232:50;;13162:126;;;:::o;13294:154::-;13372:9;13405:37;13436:5;13405:37;:::i;:::-;13392:50;;13294:154;;;:::o;13454:187::-;13569:65;13628:5;13569:65;:::i;:::-;13564:3;13557:78;13454:187;;:::o;13647:278::-;13768:4;13806:2;13795:9;13791:18;13783:26;;13819:99;13915:1;13904:9;13900:17;13891:6;13819:99;:::i;:::-;13647:278;;;;:::o;13931:474::-;13999:6;14007;14056:2;14044:9;14035:7;14031:23;14027:32;14024:119;;;14062:79;;:::i;:::-;14024:119;14182:1;14207:53;14252:7;14243:6;14232:9;14228:22;14207:53;:::i;:::-;14197:63;;14153:117;14309:2;14335:53;14380:7;14371:6;14360:9;14356:22;14335:53;:::i;:::-;14325:63;;14280:118;13931:474;;;;;:::o;14411:468::-;14476:6;14484;14533:2;14521:9;14512:7;14508:23;14504:32;14501:119;;;14539:79;;:::i;:::-;14501:119;14659:1;14684:50;14726:7;14717:6;14706:9;14702:22;14684:50;:::i;:::-;14674:60;;14630:114;14783:2;14809:53;14854:7;14845:6;14834:9;14830:22;14809:53;:::i;:::-;14799:63;;14754:118;14411:468;;;;;:::o;14885:678::-;14975:6;14983;15032:2;15020:9;15011:7;15007:23;15003:32;15000:119;;;15038:79;;:::i;:::-;15000:119;15186:1;15175:9;15171:17;15158:31;15216:18;15208:6;15205:30;15202:117;;;15238:79;;:::i;:::-;15202:117;15343:78;15413:7;15404:6;15393:9;15389:22;15343:78;:::i;:::-;15333:88;;15129:302;15470:2;15496:50;15538:7;15529:6;15518:9;15514:22;15496:50;:::i;:::-;15486:60;;15441:115;14885:678;;;;;:::o;15569:144::-;15637:9;15670:37;15701:5;15670:37;:::i;:::-;15657:50;;15569:144;;;:::o;15719:167::-;15824:55;15873:5;15824:55;:::i;:::-;15819:3;15812:68;15719:167;;:::o;15892:258::-;16003:4;16041:2;16030:9;16026:18;16018:26;;16054:89;16140:1;16129:9;16125:17;16116:6;16054:89;:::i;:::-;15892:258;;;;:::o;16156:182::-;16296:34;16292:1;16284:6;16280:14;16273:58;16156:182;:::o;16344:366::-;16486:3;16507:67;16571:2;16566:3;16507:67;:::i;:::-;16500:74;;16583:93;16672:3;16583:93;:::i;:::-;16701:2;16696:3;16692:12;16685:19;;16344:366;;;:::o;16716:419::-;16882:4;16920:2;16909:9;16905:18;16897:26;;16969:9;16963:4;16959:20;16955:1;16944:9;16940:17;16933:47;16997:131;17123:4;16997:131;:::i;:::-;16989:139;;16716:419;;;:::o;17141:175::-;17281:27;17277:1;17269:6;17265:14;17258:51;17141:175;:::o;17322:366::-;17464:3;17485:67;17549:2;17544:3;17485:67;:::i;:::-;17478:74;;17561:93;17650:3;17561:93;:::i;:::-;17679:2;17674:3;17670:12;17663:19;;17322:366;;;:::o;17694:419::-;17860:4;17898:2;17887:9;17883:18;17875:26;;17947:9;17941:4;17937:20;17933:1;17922:9;17918:17;17911:47;17975:131;18101:4;17975:131;:::i;:::-;17967:139;;17694:419;;;:::o;18119:180::-;18167:77;18164:1;18157:88;18264:4;18261:1;18254:15;18288:4;18285:1;18278:15;18305:102;18347:8;18394:5;18391:1;18387:13;18366:34;;18305:102;;;:::o;18413:848::-;18474:5;18481:4;18505:6;18496:15;;18529:5;18520:14;;18543:712;18564:1;18554:8;18551:15;18543:712;;;18659:4;18654:3;18650:14;18644:4;18641:24;18638:50;;;18668:18;;:::i;:::-;18638:50;18718:1;18708:8;18704:16;18701:451;;;19133:4;19126:5;19122:16;19113:25;;18701:451;19183:4;19177;19173:15;19165:23;;19213:32;19236:8;19213:32;:::i;:::-;19201:44;;18543:712;;;18413:848;;;;;;;:::o;19267:1073::-;19321:5;19512:8;19502:40;;19533:1;19524:10;;19535:5;;19502:40;19561:4;19551:36;;19578:1;19569:10;;19580:5;;19551:36;19647:4;19695:1;19690:27;;;;19731:1;19726:191;;;;19640:277;;19690:27;19708:1;19699:10;;19710:5;;;19726:191;19771:3;19761:8;19758:17;19755:43;;;19778:18;;:::i;:::-;19755:43;19827:8;19824:1;19820:16;19811:25;;19862:3;19855:5;19852:14;19849:40;;;19869:18;;:::i;:::-;19849:40;19902:5;;;19640:277;;20026:2;20016:8;20013:16;20007:3;20001:4;19998:13;19994:36;19976:2;19966:8;19963:16;19958:2;19952:4;19949:12;19945:35;19929:111;19926:246;;;20082:8;20076:4;20072:19;20063:28;;20117:3;20110:5;20107:14;20104:40;;;20124:18;;:::i;:::-;20104:40;20157:5;;19926:246;20197:42;20235:3;20225:8;20219:4;20216:1;20197:42;:::i;:::-;20182:57;;;;20271:4;20266:3;20262:14;20255:5;20252:25;20249:51;;;20280:18;;:::i;:::-;20249:51;20329:4;20322:5;20318:16;20309:25;;19267:1073;;;;;;:::o;20346:281::-;20404:5;20428:23;20446:4;20428:23;:::i;:::-;20420:31;;20472:25;20488:8;20472:25;:::i;:::-;20460:37;;20516:104;20553:66;20543:8;20537:4;20516:104;:::i;:::-;20507:113;;20346:281;;;;:::o;20633:348::-;20673:7;20696:20;20714:1;20696:20;:::i;:::-;20691:25;;20730:20;20748:1;20730:20;:::i;:::-;20725:25;;20918:1;20850:66;20846:74;20843:1;20840:81;20835:1;20828:9;20821:17;20817:105;20814:131;;;20925:18;;:::i;:::-;20814:131;20973:1;20970;20966:9;20955:20;;20633:348;;;;:::o;20987:143::-;21044:5;21075:6;21069:13;21060:22;;21091:33;21118:5;21091:33;:::i;:::-;20987:143;;;;:::o;21136:351::-;21206:6;21255:2;21243:9;21234:7;21230:23;21226:32;21223:119;;;21261:79;;:::i;:::-;21223:119;21381:1;21406:64;21462:7;21453:6;21442:9;21438:22;21406:64;:::i;:::-;21396:74;;21352:128;21136:351;;;;:::o;21493:157::-;21633:9;21629:1;21621:6;21617:14;21610:33;21493:157;:::o;21656:365::-;21798:3;21819:66;21883:1;21878:3;21819:66;:::i;:::-;21812:73;;21894:93;21983:3;21894:93;:::i;:::-;22012:2;22007:3;22003:12;21996:19;;21656:365;;;:::o;22027:419::-;22193:4;22231:2;22220:9;22216:18;22208:26;;22280:9;22274:4;22270:20;22266:1;22255:9;22251:17;22244:47;22308:131;22434:4;22308:131;:::i;:::-;22300:139;;22027:419;;;:::o;22452:180::-;22500:77;22497:1;22490:88;22597:4;22594:1;22587:15;22621:4;22618:1;22611:15;22638:233;22677:3;22700:24;22718:5;22700:24;:::i;:::-;22691:33;;22746:66;22739:5;22736:77;22733:103;;;22816:18;;:::i;:::-;22733:103;22863:1;22856:5;22852:13;22845:20;;22638:233;;;:::o;22877:180::-;22925:77;22922:1;22915:88;23022:4;23019:1;23012:15;23046:4;23043:1;23036:15;23063:185;23103:1;23120:20;23138:1;23120:20;:::i;:::-;23115:25;;23154:20;23172:1;23154:20;:::i;:::-;23149:25;;23193:1;23183:35;;23198:18;;:::i;:::-;23183:35;23240:1;23237;23233:9;23228:14;;23063:185;;;;:::o;23254:332::-;23375:4;23413:2;23402:9;23398:18;23390:26;;23426:71;23494:1;23483:9;23479:17;23470:6;23426:71;:::i;:::-;23507:72;23575:2;23564:9;23560:18;23551:6;23507:72;:::i;:::-;23254:332;;;;;:::o;23592:165::-;23732:17;23728:1;23720:6;23716:14;23709:41;23592:165;:::o;23763:366::-;23905:3;23926:67;23990:2;23985:3;23926:67;:::i;:::-;23919:74;;24002:93;24091:3;24002:93;:::i;:::-;24120:2;24115:3;24111:12;24104:19;;23763:366;;;:::o;24135:419::-;24301:4;24339:2;24328:9;24324:18;24316:26;;24388:9;24382:4;24378:20;24374:1;24363:9;24359:17;24352:47;24416:131;24542:4;24416:131;:::i;:::-;24408:139;;24135:419;;;:::o;24560:179::-;24700:31;24696:1;24688:6;24684:14;24677:55;24560:179;:::o;24745:366::-;24887:3;24908:67;24972:2;24967:3;24908:67;:::i;:::-;24901:74;;24984:93;25073:3;24984:93;:::i;:::-;25102:2;25097:3;25093:12;25086:19;;24745:366;;;:::o;25117:419::-;25283:4;25321:2;25310:9;25306:18;25298:26;;25370:9;25364:4;25360:20;25356:1;25345:9;25341:17;25334:47;25398:131;25524:4;25398:131;:::i;:::-;25390:139;;25117:419;;;:::o;25542:225::-;25682:34;25678:1;25670:6;25666:14;25659:58;25751:8;25746:2;25738:6;25734:15;25727:33;25542:225;:::o;25773:366::-;25915:3;25936:67;26000:2;25995:3;25936:67;:::i;:::-;25929:74;;26012:93;26101:3;26012:93;:::i;:::-;26130:2;26125:3;26121:12;26114:19;;25773:366;;;:::o;26145:419::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:85::-;26615:7;26644:5;26633:16;;26570:85;;;:::o;26661:158::-;26719:9;26752:61;26770:42;26779:32;26805:5;26779:32;:::i;:::-;26770:42;:::i;:::-;26752:61;:::i;:::-;26739:74;;26661:158;;;:::o;26825:147::-;26920:45;26959:5;26920:45;:::i;:::-;26915:3;26908:58;26825:147;;:::o;26978:348::-;27107:4;27145:2;27134:9;27130:18;27122:26;;27158:71;27226:1;27215:9;27211:17;27202:6;27158:71;:::i;:::-;27239:80;27315:2;27304:9;27300:18;27291:6;27239:80;:::i;:::-;26978:348;;;;;:::o;27332:332::-;27453:4;27491:2;27480:9;27476:18;27468:26;;27504:71;27572:1;27561:9;27557:17;27548:6;27504:71;:::i;:::-;27585:72;27653:2;27642:9;27638:18;27629:6;27585:72;:::i;:::-;27332:332;;;;;:::o;27670:305::-;27710:3;27729:20;27747:1;27729:20;:::i;:::-;27724:25;;27763:20;27781:1;27763:20;:::i;:::-;27758:25;;27917:1;27849:66;27845:74;27842:1;27839:81;27836:107;;;27923:18;;:::i;:::-;27836:107;27967:1;27964;27960:9;27953:16;;27670:305;;;;:::o;27981:162::-;28121:14;28117:1;28109:6;28105:14;28098:38;27981:162;:::o;28149:366::-;28291:3;28312:67;28376:2;28371:3;28312:67;:::i;:::-;28305:74;;28388:93;28477:3;28388:93;:::i;:::-;28506:2;28501:3;28497:12;28490:19;;28149:366;;;:::o;28521:419::-;28687:4;28725:2;28714:9;28710:18;28702:26;;28774:9;28768:4;28764:20;28760:1;28749:9;28745:17;28738:47;28802:131;28928:4;28802:131;:::i;:::-;28794:139;;28521:419;;;:::o;28946:171::-;29086:23;29082:1;29074:6;29070:14;29063:47;28946:171;:::o;29123:366::-;29265:3;29286:67;29350:2;29345:3;29286:67;:::i;:::-;29279:74;;29362:93;29451:3;29362:93;:::i;:::-;29480:2;29475:3;29471:12;29464:19;;29123:366;;;:::o;29495:419::-;29661:4;29699:2;29688:9;29684:18;29676:26;;29748:9;29742:4;29738:20;29734:1;29723:9;29719:17;29712:47;29776:131;29902:4;29776:131;:::i;:::-;29768:139;;29495:419;;;:::o;29920:168::-;30060:20;30056:1;30048:6;30044:14;30037:44;29920:168;:::o;30094:366::-;30236:3;30257:67;30321:2;30316:3;30257:67;:::i;:::-;30250:74;;30333:93;30422:3;30333:93;:::i;:::-;30451:2;30446:3;30442:12;30435:19;;30094:366;;;:::o;30466:419::-;30632:4;30670:2;30659:9;30655:18;30647:26;;30719:9;30713:4;30709:20;30705:1;30694:9;30690:17;30683:47;30747:131;30873:4;30747:131;:::i;:::-;30739:139;;30466:419;;;:::o;30891:174::-;31031:26;31027:1;31019:6;31015:14;31008:50;30891:174;:::o;31071:366::-;31213:3;31234:67;31298:2;31293:3;31234:67;:::i;:::-;31227:74;;31310:93;31399:3;31310:93;:::i;:::-;31428:2;31423:3;31419:12;31412:19;;31071:366;;;:::o;31443:419::-;31609:4;31647:2;31636:9;31632:18;31624:26;;31696:9;31690:4;31686:20;31682:1;31671:9;31667:17;31660:47;31724:131;31850:4;31724:131;:::i;:::-;31716:139;;31443:419;;;:::o;31868:143::-;31925:5;31956:6;31950:13;31941:22;;31972:33;31999:5;31972:33;:::i;:::-;31868:143;;;;:::o;32017:351::-;32087:6;32136:2;32124:9;32115:7;32111:23;32107:32;32104:119;;;32142:79;;:::i;:::-;32104:119;32262:1;32287:64;32343:7;32334:6;32323:9;32319:22;32287:64;:::i;:::-;32277:74;;32233:128;32017:351;;;;:::o;32374:114::-;32441:6;32475:5;32469:12;32459:22;;32374:114;;;:::o;32494:184::-;32593:11;32627:6;32622:3;32615:19;32667:4;32662:3;32658:14;32643:29;;32494:184;;;;:::o;32684:132::-;32751:4;32774:3;32766:11;;32804:4;32799:3;32795:14;32787:22;;32684:132;;;:::o;32822:108::-;32899:24;32917:5;32899:24;:::i;:::-;32894:3;32887:37;32822:108;;:::o;32936:179::-;33005:10;33026:46;33068:3;33060:6;33026:46;:::i;:::-;33104:4;33099:3;33095:14;33081:28;;32936:179;;;;:::o;33121:113::-;33191:4;33223;33218:3;33214:14;33206:22;;33121:113;;;:::o;33270:732::-;33389:3;33418:54;33466:5;33418:54;:::i;:::-;33488:86;33567:6;33562:3;33488:86;:::i;:::-;33481:93;;33598:56;33648:5;33598:56;:::i;:::-;33677:7;33708:1;33693:284;33718:6;33715:1;33712:13;33693:284;;;33794:6;33788:13;33821:63;33880:3;33865:13;33821:63;:::i;:::-;33814:70;;33907:60;33960:6;33907:60;:::i;:::-;33897:70;;33753:224;33740:1;33737;33733:9;33728:14;;33693:284;;;33697:14;33993:3;33986:10;;33394:608;;;33270:732;;;;:::o;34008:831::-;34271:4;34309:3;34298:9;34294:19;34286:27;;34323:71;34391:1;34380:9;34376:17;34367:6;34323:71;:::i;:::-;34404:80;34480:2;34469:9;34465:18;34456:6;34404:80;:::i;:::-;34531:9;34525:4;34521:20;34516:2;34505:9;34501:18;34494:48;34559:108;34662:4;34653:6;34559:108;:::i;:::-;34551:116;;34677:72;34745:2;34734:9;34730:18;34721:6;34677:72;:::i;:::-;34759:73;34827:3;34816:9;34812:19;34803:6;34759:73;:::i;:::-;34008:831;;;;;;;;:::o;34845:807::-;35094:4;35132:3;35121:9;35117:19;35109:27;;35146:71;35214:1;35203:9;35199:17;35190:6;35146:71;:::i;:::-;35227:72;35295:2;35284:9;35280:18;35271:6;35227:72;:::i;:::-;35309:80;35385:2;35374:9;35370:18;35361:6;35309:80;:::i;:::-;35399;35475:2;35464:9;35460:18;35451:6;35399:80;:::i;:::-;35489:73;35557:3;35546:9;35542:19;35533:6;35489:73;:::i;:::-;35572;35640:3;35629:9;35625:19;35616:6;35572:73;:::i;:::-;34845:807;;;;;;;;;:::o;35658:663::-;35746:6;35754;35762;35811:2;35799:9;35790:7;35786:23;35782:32;35779:119;;;35817:79;;:::i;:::-;35779:119;35937:1;35962:64;36018:7;36009:6;35998:9;35994:22;35962:64;:::i;:::-;35952:74;;35908:128;36075:2;36101:64;36157:7;36148:6;36137:9;36133:22;36101:64;:::i;:::-;36091:74;;36046:129;36214:2;36240:64;36296:7;36287:6;36276:9;36272:22;36240:64;:::i;:::-;36230:74;;36185:129;35658:663;;;;;:::o;36327:191::-;36367:4;36387:20;36405:1;36387:20;:::i;:::-;36382:25;;36421:20;36439:1;36421:20;:::i;:::-;36416:25;;36460:1;36457;36454:8;36451:34;;;36465:18;;:::i;:::-;36451:34;36510:1;36507;36503:9;36495:17;;36327:191;;;;:::o

Swarm Source

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