ETH Price: $3,352.54 (-0.97%)

Token

Baby Sharbi ($BSHARBI)
 

Overview

Max Total Supply

1,000,000,000,000 $BSHARBI

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
coraboat.eth
Balance
8,988,728,564.868562404 $BSHARBI

Value
$0.00
0xb8ea26780b1b19e700b4517dd650a958e911b5c6
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BABY_SHARBI_ETH

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-03-27
*/

//Telegram: t.me/baby_sharbi
//Twitter: https://twitter.com/Baby_Sharbi
//Medium: https://medium.com/@Baby_Sharbi

// 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 Sharbi =
        IERC20Extended(0xF3A3023e6Dede84AD88a656A3269F2A36e83c9a9);
    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**Sharbi.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 = Sharbi.balanceOf(address(this));

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

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

        uint256 amount = Sharbi.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);
            Sharbi.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 BABY_SHARBI_ETH is IERC20Extended, Ownable {
    using SafeMath for uint256;

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

    address public Sharbi = 0xF3A3023e6Dede84AD88a656A3269F2A36e83c9a9;
    address private constant DEAD = address(0xdead);
    address private constant ZERO = address(0);
    IDexRouter public router;
    address public pair;
    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 _reflectionBuyFee = 3_00;
    uint256 _liquidityBuyFee = 1_00;
    uint256 _marketingBuyFee = 2_00;

    uint256 _reflectionSellFee = 3_00;
    uint256 _liquiditySellFee = 1_00;
    uint256 _marketingSellFee = 95_00;

    uint256 _reflectionFeeCount;
    uint256 _liquidityFeeCount;
    uint256 _marketingFeeCount;

    uint256 public totalBuyFee = 6_00;
    uint256 public totalSellFee = 99_00;
    uint256 public feeDenominator = 100_00;

    DividendDistributor public distributor;
    uint256 public distributorGas = 500000;

    uint256 public maxTxnAmount = _totalSupply / 100;
    uint256 public maxWalletAmount = _totalSupply / 100;
    uint256 public launchedAt;
    uint256 public snipingTime = 60 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;
        marketingFeeReceiver = 0x80d44E3cEF43cc13D95F5641f4eF0D86708E275a;

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

        isFeeExempt[autoLiquidityReceiver] = true;
        isFeeExempt[marketingFeeReceiver] = 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[marketingFeeReceiver] = true;
        isLimitExmpt[address(this)] = true;
        isLimitExmpt[address(router)] = true;

        isWalletExmpt[autoLiquidityReceiver] = true;
        isWalletExmpt[marketingFeeReceiver] = 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
        );
        _marketingFeeCount += _amount.mul(_marketingBuyFee).div(feeDenominator);
    }

    function setSellAccFee(uint256 _amount) internal {
        _liquidityFeeCount += _amount.mul(_liquiditySellFee).div(
            feeDenominator
        );
        _reflectionFeeCount += _amount.mul(_reflectionSellFee).div(
            feeDenominator
        );
        _marketingFeeCount += _amount.mul(_marketingSellFee).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).add(
            _marketingFeeCount
        );

        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 {}
        }

        uint256 amountBNBMarketing = amountBNB.mul(_marketingFeeCount).div(
            totalBNBFee
        );

        if (amountBNBMarketing > 0) {
            payable(marketingFeeReceiver).transfer(amountBNBMarketing);
        }

        _liquidityFeeCount = 0;
        _reflectionFeeCount = 0;
        _marketingFeeCount = 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 / 10000);
        maxTxnAmount = amount;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 10000);
        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 addOrRemoveBots(address[] memory accounts, bool exempt)
        external
        onlyOwner
    {
        for (uint256 i; i < accounts.length; i++) {
            isBot[accounts[i]] = exempt;
        }
    }

    function setBuyFees(
        uint256 _reflectionFee,
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _feeDenominator
    ) public onlyOwner {
        _reflectionBuyFee = _reflectionFee;
        _liquidityBuyFee = _liquidityFee;
        _marketingBuyFee = _marketingFee;
        totalBuyFee = _liquidityFee.add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
    }

    function setSellFees(
        uint256 _liquidityFee,
        uint256 _reflectionFee,
        uint256 _marketingFee,
        uint256 _feeDenominator
    ) public onlyOwner {
        _liquiditySellFee = _liquidityFee;
        _reflectionSellFee = _reflectionFee;
        _marketingSellFee = _marketingFee;
        totalSellFee = _liquidityFee.add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
    }

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

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

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":"Sharbi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"addOrRemoveBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"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":"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":"_marketingFee","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"},{"internalType":"address","name":"_marketingFeeReceiver","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":"_marketingFee","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"}]

608060405273f3a3023e6dede84ad88a656a3269f2a36e83c9a9600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c600655606460075560c860085561012c6009556064600a5561251c600b55610258600f556126ac6010556127106011556207a12060135560646009600a620000a59190620010d9565b64e8d4a51000620000b791906200112a565b620000c39190620011ba565b60145560646009600a620000d89190620010d9565b64e8d4a51000620000ea91906200112a565b620000f69190620011ba565b601555603c6017556103e86009600a620001119190620010d9565b64e8d4a510006200012391906200112a565b6200012f9190620011ba565b601f553480156200013f57600080fd5b506200015062000f2960201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d905033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507380d44e3cef43cc13d95f5641f4ef0d86708e275a600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e91906200125c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000418573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043e91906200125c565b6040518363ffffffff1660e01b81526004016200045d9291906200129f565b6020604051808303816000875af11580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a391906200125c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620004f29062000f31565b620004fe9190620012cc565b604051809103906000f0801580156200051b573d6000803e3d6000fd5b50601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009600a62000cbc9190620010d9565b64e8d4a5100062000cce91906200112a565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a62000d809190620010d9565b64e8d4a5100062000d9291906200112a565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a62000e449190620010d9565b64e8d4a5100062000e5691906200112a565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000ef99190620010d9565b64e8d4a5100062000f0b91906200112a565b60405162000f1a9190620012fa565b60405180910390a35062001317565b600033905090565b6123a780620066e083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fcd5780860481111562000fa55762000fa462000f3f565b5b600185161562000fb55780820291505b808102905062000fc58562000f6e565b945062000f85565b94509492505050565b60008262000fe85760019050620010bb565b8162000ff85760009050620010bb565b81600181146200101157600281146200101c5762001052565b6001915050620010bb565b60ff84111562001031576200103062000f3f565b5b8360020a9150848211156200104b576200104a62000f3f565b5b50620010bb565b5060208310610133831016604e8410600b84101617156200108c5782820a90508381111562001086576200108562000f3f565b5b620010bb565b6200109b848484600162000f7b565b92509050818404811115620010b557620010b462000f3f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620010e682620010c2565b9150620010f383620010cc565b9250620011227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fd6565b905092915050565b60006200113782620010c2565b91506200114483620010c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001180576200117f62000f3f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011c782620010c2565b9150620011d483620010c2565b925082620011e757620011e66200118b565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200122482620011f7565b9050919050565b620012368162001217565b81146200124257600080fd5b50565b60008151905062001256816200122b565b92915050565b600060208284031215620012755762001274620011f2565b5b6000620012858482850162001245565b91505092915050565b620012998162001217565b82525050565b6000604082019050620012b660008301856200128e565b620012c560208301846200128e565b9392505050565b6000602082019050620012e360008301846200128e565b92915050565b620012f481620010c2565b82525050565b6000602082019050620013116000830184620012e9565b92915050565b6153b980620013276000396000f3fe6080604052600436106103395760003560e01c806386cb8fb1116101ab578063bfe10928116100f7578063ec44acf211610095578063f6cfa08a1161006f578063f6cfa08a14610c41578063f708a64f14610c6a578063f887ea4014610c93578063fc899bdc14610cbe57610340565b8063ec44acf214610bd6578063f0fc6bca14610c01578063f2fde38b14610c1857610340565b8063cf46f24c116100d1578063cf46f24c14610b1a578063dd62ed3e14610b45578063df20fd4914610b82578063e96fada214610bab57610340565b8063bfe1092814610a99578063c346df5014610ac4578063ca33e64c14610aef57610340565b80639d1944f511610164578063a8aa1b311161013e578063a8aa1b31146109db578063a9059cbb14610a06578063aa4bde2814610a43578063bf56b37114610a6e57610340565b80639d1944f51461095e5780639d9241ec14610987578063a4b45c00146109b257610340565b806386cb8fb11461084e57806386db0c051461088b578063893c9f2b146108c85780638a8c523c146108f15780638da5cb5b1461090857806395d89b411461093357610340565b80633f4218e011610285578063658d4b7f1161022357806370a08231116101fd57806370a08231146107a6578063715018a6146107e357806374010ece146107fa5780637d99c66d1461082357610340565b8063658d4b7f146107295780636c5b2855146107525780636ddd17131461077b57610340565b8063540b8a271161025f578063540b8a2714610659578063571ac8b01461069657806359b107b9146106d357806360e71962146106fe57610340565b80633f4218e0146105a25780634355855a146105df57806349bc3feb1461061c57610340565b806318160ddd116102f257806327a14fc2116102cc57806327a14fc2146104e85780632d48e89614610511578063313ce5671461053a5780633bbac5791461056557610340565b806318160ddd146104555780631961cee21461048057806323b872dd146104ab57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b57806310a60f02146103d8578063178d9b8e14610401578063180b0d7e1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ce7565b60405161036791906142a9565b60405180910390f35b34801561037c57600080fd5b50610385610ced565b604051610392919061435d565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd919061441d565b610d2a565b6040516103cf9190614478565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614607565b610e1c565b005b34801561040d57600080fd5b5061042860048036038101906104239190614663565b610f46565b005b34801561043657600080fd5b5061043f611028565b60405161044c91906142a9565b60405180910390f35b34801561046157600080fd5b5061046a61102e565b60405161047791906142a9565b60405180910390f35b34801561048c57600080fd5b50610495611053565b6040516104a291906142a9565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906146ca565b6110eb565b6040516104df9190614478565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061471d565b6112e8565b005b34801561051d57600080fd5b506105386004803603810190610533919061474a565b6113be565b005b34801561054657600080fd5b5061054f6114e6565b60405161055c91906147a6565b60405180910390f35b34801561057157600080fd5b5061058c600480360381019061058791906147c1565b6114ef565b6040516105999190614478565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906147c1565b61150f565b6040516105d69190614478565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906147c1565b61152f565b6040516106139190614478565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906147c1565b61154f565b60405161065091906142a9565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b91906147c1565b6115f4565b60405161068d9190614478565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b891906147c1565b611614565b6040516106ca9190614478565b60405180910390f35b3480156106df57600080fd5b506106e8611644565b6040516106f591906142a9565b60405180910390f35b34801561070a57600080fd5b5061071361164a565b60405161072091906142a9565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b91906147ee565b611650565b005b34801561075e57600080fd5b5061077960048036038101906107749190614663565b611740565b005b34801561078757600080fd5b50610790611822565b60405161079d9190614478565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c891906147c1565b611835565b6040516107da91906142a9565b60405180910390f35b3480156107ef57600080fd5b506107f861187e565b005b34801561080657600080fd5b50610821600480360381019061081c919061471d565b6119d1565b005b34801561082f57600080fd5b50610838611aa7565b60405161084591906142a9565b60405180910390f35b34801561085a57600080fd5b50610875600480360381019061087091906147c1565b611aad565b6040516108829190614478565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906147c1565b611acd565b6040516108bf91906142a9565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea919061471d565b611b72565b005b3480156108fd57600080fd5b50610906611c58565b005b34801561091457600080fd5b5061091d611d7c565b60405161092a919061483d565b60405180910390f35b34801561093f57600080fd5b50610948611da5565b604051610955919061435d565b60405180910390f35b34801561096a57600080fd5b506109856004803603810190610980919061471d565b611de2565b005b34801561099357600080fd5b5061099c611ec6565b6040516109a991906142a9565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190614858565b611ecc565b005b3480156109e757600080fd5b506109f0611fe7565b6040516109fd919061483d565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a28919061441d565b61200d565b604051610a3a9190614478565b60405180910390f35b348015610a4f57600080fd5b50610a58612022565b604051610a6591906142a9565b60405180910390f35b348015610a7a57600080fd5b50610a83612028565b604051610a9091906142a9565b60405180910390f35b348015610aa557600080fd5b50610aae61202e565b604051610abb91906148f7565b60405180910390f35b348015610ad057600080fd5b50610ad9612054565b604051610ae6919061483d565b60405180910390f35b348015610afb57600080fd5b50610b0461207a565b604051610b11919061483d565b60405180910390f35b348015610b2657600080fd5b50610b2f6120a0565b604051610b3c91906142a9565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614858565b6120a6565b604051610b7991906142a9565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614912565b61212d565b005b348015610bb757600080fd5b50610bc06121f6565b604051610bcd919061483d565b60405180910390f35b348015610be257600080fd5b50610beb61221c565b604051610bf89190614478565b60405180910390f35b348015610c0d57600080fd5b50610c1661222f565b005b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906147c1565b6122be565b005b348015610c4d57600080fd5b50610c686004803603810190610c639190614607565b612480565b005b348015610c7657600080fd5b50610c916004803603810190610c8c91906147ee565b6125aa565b005b348015610c9f57600080fd5b50610ca8612897565b604051610cb59190614973565b60405180910390f35b348015610cca57600080fd5b50610ce56004803603810190610ce091906147ee565b6128bd565b005b601f5481565b60606040518060400160405280600b81526020017f4261627920536861726269000000000000000000000000000000000000000000815250905090565b600081601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e0a91906142a9565b60405180910390a36001905092915050565b610e246129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea8906149da565b60405180910390fd5b60005b8251811015610f415781601e6000858481518110610ed557610ed46149fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f3990614a58565b915050610eb4565b505050565b610f4e6129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906149da565b60405180910390fd5b8360068190555082600781905550816008819055506110158261100786866129b590919063ffffffff16565b6129b590919063ffffffff16565b600f819055508060118190555050505050565b60115481565b60006009600a61103e9190614bd4565b64e8d4a5100061104e9190614c1f565b905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e69190614c8e565b905090565b60006009600a6110fb9190614bd4565b64e8d4a5100061110b9190614c1f565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112d457611253826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cb9092919063ffffffff16565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112df848484612a20565b90509392505050565b6112f06129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611374906149da565b60405180910390fd5b6127106009600a61138e9190614bd4565b64e8d4a5100061139e9190614c1f565b6113a89190614cea565b8110156113b457600080fd5b8060158190555050565b6113c66129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906149da565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016114b0929190614d1b565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b505050505050565b60006009905090565b601e6020528060005260406000206000915054906101000a900460ff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b81526004016115ac919061483d565b602060405180830381865afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190614c8e565b9050919050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600061163d826009600a6116289190614bd4565b64e8d4a510006116389190614c1f565b610d2a565b9050919050565b600f5481565b60135481565b6116586129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906149da565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117486129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc906149da565b60405180910390fd5b83600a819055508260098190555081600b8190555061180f8261180185876129b590919063ffffffff16565b6129b590919063ffffffff16565b6010819055508060118190555050505050565b602060009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118866129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906149da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119d96129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d906149da565b60405180910390fd5b6127106009600a611a779190614bd4565b64e8d4a51000611a879190614c1f565b611a919190614cea565b811015611a9d57600080fd5b8060148190555050565b60175481565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b8152600401611b2a919061483d565b602060405180830381865afa158015611b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6b9190614c8e565b9050919050565b611b7a6129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906149da565b60405180910390fd5b611c0f611d7c565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c54573d6000803e3d6000fd5b5050565b611c606129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce4906149da565b60405180910390fd5b602060019054906101000a900460ff1615611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490614d90565b60405180910390fd5b6001602060016101000a81548160ff0219169083151502179055506001602060006101000a81548160ff02191690831515021790555042601681905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f2442534841524249000000000000000000000000000000000000000000000000815250905090565b611dea6129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906149da565b60405180910390fd5b620b71b08110611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390614dfc565b60405180910390fd5b8060138190555050565b60105481565b611ed46129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f58906149da565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061201a338484612a20565b905092915050565b60155481565b60165481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121356129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b9906149da565b60405180910390fd5b6000601f54116121d157600080fd5b81602060006101000a81548160ff02191690831515021790555080601f819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060019054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b815260040161228a919061483d565b600060405180830381600087803b1580156122a457600080fd5b505af11580156122b8573d6000803e3d6000fd5b50505050565b6122c66129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a906149da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90614e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124886129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c906149da565b60405180910390fd5b60005b82518110156125a55781601b6000858481518110612539576125386149fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061259d90614a58565b915050612518565b505050565b6125b26129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612636906149da565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126c95750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6126d257600080fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156127c457601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161278d929190614ee9565b600060405180830381600087803b1580156127a757600080fd5b505af11580156127bb573d6000803e3d6000fd5b50505050612893565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612860929190614f12565b600060405180830381600087803b15801561287a57600080fd5b505af115801561288e573d6000803e3d6000fd5b505050505b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6128c56129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612949906149da565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600081836129c39190614f3b565b905092915050565b6000838311158290612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a919061435d565b60405180910390fd5b5082840390509392505050565b6000601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690614fdd565b60405180910390fd5b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b535750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7357601454821115612b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9490615049565b60405180910390fd5b602060019054906101000a900460ff16612c9d578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c5d57508273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c93906150b5565b60405180910390fd5b5b601754601654612cad9190614f3b565b42108015612d095750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612e72578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612dc1576001601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e71565b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e70576001601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2457601554612ee283612ed486611835565b6129b590919063ffffffff16565b1115612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90615121565b60405180910390fd5b5b602060029054906101000a900460ff1615612f4b57612f44848484613675565b905061366e565b612f53613848565b15612f6157612f6061391f565b5b612fea826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cb9092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130d05750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806131835750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156131825750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561319057829050613296565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561324057613211601154613203600f5487613fc490919063ffffffff16565b613fda90919063ffffffff16565b90506132268185613ff090919063ffffffff16565b91506132328682614006565b61323b84614104565b613294565b61326960115461325b60105487613fc490919063ffffffff16565b613fda90919063ffffffff16565b905061327e8185613ff090919063ffffffff16565b915061328a8682614006565b613293846141ca565b5b505b6132e881601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b590919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344e57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613418929190614f12565b600060405180830381600087803b15801561343257600080fd5b505af1925050508015613443575060015b61344c5761344d565b5b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661357157601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161353b929190614f12565b600060405180830381600087803b15801561355557600080fd5b505af1925050508015613566575060015b61356f57613570565b5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b81526004016135ce91906142a9565b600060405180830381600087803b1580156135e857600080fd5b505af19250505080156135f9575060015b61360257613603565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161366091906142a9565b60405180910390a360019150505b9392505050565b6000613700826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cb9092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379582601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b590919063ffffffff16565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383591906142a9565b60405180910390a3600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156138b55750602060029054906101000a900460ff16155b80156138cd5750602060009054906101000a900460ff165b801561391a5750601f54601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060026101000a81548160ff0219169083151502179055506000613967600e54613959600c54600d546129b590919063ffffffff16565b6129b590919063ffffffff16565b905060006139a760026139998461398b600d54601f54613fc490919063ffffffff16565b613fda90919063ffffffff16565b613fda90919063ffffffff16565b905060006139c082601f54613ff090919063ffffffff16565b90506009600a6139d09190614bd4565b64e8d4a510006139e09190614c1f565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff811115613a9f57613a9e614498565b5b604051908082528060200260200182016040528015613acd5781602001602082028036833780820191505090505b5090503081600081518110613ae557613ae46149fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb09190615156565b81600181518110613bc457613bc36149fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613c67959493929190615241565b600060405180830381600087803b158015613c8157600080fd5b505af1158015613c95573d6000803e3d6000fd5b505050506000613cae8247613ff090919063ffffffff16565b90506000613cda613ccb6002600d54613fda90919063ffffffff16565b88613ff090919063ffffffff16565b90506000613d186002613d0a84613cfc600d5488613fc490919063ffffffff16565b613fda90919063ffffffff16565b613fda90919063ffffffff16565b90506000871115613e2c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613dac9695949392919061529b565b60606040518083038185885af1158015613dca573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613def91906152fc565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051613e23929190614d1b565b60405180910390a15b6000613e5583613e47600c5487613fc490919063ffffffff16565b613fda90919063ffffffff16565b90506000811115613ee757601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613eca57600080fd5b505af193505050508015613edc575060015b613ee557613ee6565b5b5b6000613f1084613f02600e5488613fc490919063ffffffff16565b613fda90919063ffffffff16565b90506000811115613f8557600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613f83573d6000803e3d6000fd5b505b6000600d819055506000600c819055506000600e81905550505050505050505050506000602060026101000a81548160ff021916908315150217905550565b60008183613fd29190614c1f565b905092915050565b60008183613fe89190614cea565b905092915050565b60008183613ffe919061534f565b905092915050565b61405881601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b590919063ffffffff16565b601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140f891906142a9565b60405180910390a35050565b61412d60115461411f60075484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600d600082825461413e9190614f3b565b9250508190555061416e60115461416060065484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600c600082825461417f9190614f3b565b925050819055506141af6011546141a160085484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600e60008282546141c09190614f3b565b9250508190555050565b6141f36011546141e5600a5484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600d60008282546142049190614f3b565b9250508190555061423460115461422660095484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600c60008282546142459190614f3b565b92505081905550614275601154614267600b5484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600e60008282546142869190614f3b565b9250508190555050565b6000819050919050565b6142a381614290565b82525050565b60006020820190506142be600083018461429a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142fe5780820151818401526020810190506142e3565b8381111561430d576000848401525b50505050565b6000601f19601f8301169050919050565b600061432f826142c4565b61433981856142cf565b93506143498185602086016142e0565b61435281614313565b840191505092915050565b600060208201905081810360008301526143778184614324565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143be82614393565b9050919050565b6143ce816143b3565b81146143d957600080fd5b50565b6000813590506143eb816143c5565b92915050565b6143fa81614290565b811461440557600080fd5b50565b600081359050614417816143f1565b92915050565b6000806040838503121561443457614433614389565b5b6000614442858286016143dc565b925050602061445385828601614408565b9150509250929050565b60008115159050919050565b6144728161445d565b82525050565b600060208201905061448d6000830184614469565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6144d082614313565b810181811067ffffffffffffffff821117156144ef576144ee614498565b5b80604052505050565b600061450261437f565b905061450e82826144c7565b919050565b600067ffffffffffffffff82111561452e5761452d614498565b5b602082029050602081019050919050565b600080fd5b600061455761455284614513565b6144f8565b9050808382526020820190506020840283018581111561457a5761457961453f565b5b835b818110156145a3578061458f88826143dc565b84526020840193505060208101905061457c565b5050509392505050565b600082601f8301126145c2576145c1614493565b5b81356145d2848260208601614544565b91505092915050565b6145e48161445d565b81146145ef57600080fd5b50565b600081359050614601816145db565b92915050565b6000806040838503121561461e5761461d614389565b5b600083013567ffffffffffffffff81111561463c5761463b61438e565b5b614648858286016145ad565b9250506020614659858286016145f2565b9150509250929050565b6000806000806080858703121561467d5761467c614389565b5b600061468b87828801614408565b945050602061469c87828801614408565b93505060406146ad87828801614408565b92505060606146be87828801614408565b91505092959194509250565b6000806000606084860312156146e3576146e2614389565b5b60006146f1868287016143dc565b9350506020614702868287016143dc565b925050604061471386828701614408565b9150509250925092565b60006020828403121561473357614732614389565b5b600061474184828501614408565b91505092915050565b6000806040838503121561476157614760614389565b5b600061476f85828601614408565b925050602061478085828601614408565b9150509250929050565b600060ff82169050919050565b6147a08161478a565b82525050565b60006020820190506147bb6000830184614797565b92915050565b6000602082840312156147d7576147d6614389565b5b60006147e5848285016143dc565b91505092915050565b6000806040838503121561480557614804614389565b5b6000614813858286016143dc565b9250506020614824858286016145f2565b9150509250929050565b614837816143b3565b82525050565b6000602082019050614852600083018461482e565b92915050565b6000806040838503121561486f5761486e614389565b5b600061487d858286016143dc565b925050602061488e858286016143dc565b9150509250929050565b6000819050919050565b60006148bd6148b86148b384614393565b614898565b614393565b9050919050565b60006148cf826148a2565b9050919050565b60006148e1826148c4565b9050919050565b6148f1816148d6565b82525050565b600060208201905061490c60008301846148e8565b92915050565b6000806040838503121561492957614928614389565b5b6000614937858286016145f2565b925050602061494885828601614408565b9150509250929050565b600061495d826148c4565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149c46020836142cf565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a6382614290565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a9657614a95614a29565b5b600182019050919050565b60008160011c9050919050565b6000808291508390505b6001851115614af857808604811115614ad457614ad3614a29565b5b6001851615614ae35780820291505b8081029050614af185614aa1565b9450614ab8565b94509492505050565b600082614b115760019050614bcd565b81614b1f5760009050614bcd565b8160018114614b355760028114614b3f57614b6e565b6001915050614bcd565b60ff841115614b5157614b50614a29565b5b8360020a915084821115614b6857614b67614a29565b5b50614bcd565b5060208310610133831016604e8410600b8410161715614ba35782820a905083811115614b9e57614b9d614a29565b5b614bcd565b614bb08484846001614aae565b92509050818404811115614bc757614bc6614a29565b5b81810290505b9392505050565b6000614bdf82614290565b9150614bea8361478a565b9250614c177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614b01565b905092915050565b6000614c2a82614290565b9150614c3583614290565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6e57614c6d614a29565b5b828202905092915050565b600081519050614c88816143f1565b92915050565b600060208284031215614ca457614ca3614389565b5b6000614cb284828501614c79565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cf582614290565b9150614d0083614290565b925082614d1057614d0f614cbb565b5b828204905092915050565b6000604082019050614d30600083018561429a565b614d3d602083018461429a565b9392505050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614d7a600f836142cf565b9150614d8582614d44565b602082019050919050565b60006020820190508181036000830152614da981614d6d565b9050919050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000614de6601d836142cf565b9150614df182614db0565b602082019050919050565b60006020820190508181036000830152614e1581614dd9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e786026836142cf565b9150614e8382614e1c565b604082019050919050565b60006020820190508181036000830152614ea781614e6b565b9050919050565b6000819050919050565b6000614ed3614ece614ec984614eae565b614898565b614290565b9050919050565b614ee381614eb8565b82525050565b6000604082019050614efe600083018561482e565b614f0b6020830184614eda565b9392505050565b6000604082019050614f27600083018561482e565b614f34602083018461429a565b9392505050565b6000614f4682614290565b9150614f5183614290565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8657614f85614a29565b5b828201905092915050565b7f426f742064657465637465640000000000000000000000000000000000000000600082015250565b6000614fc7600c836142cf565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f4d61782074786e206c696d697420657863656564730000000000000000000000600082015250565b60006150336015836142cf565b915061503e82614ffd565b602082019050919050565b6000602082019050818103600083015261506281615026565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b600061509f6012836142cf565b91506150aa82615069565b602082019050919050565b600060208201905081810360008301526150ce81615092565b9050919050565b7f4d61782057616c6c6574206c696d697420657863656564730000000000000000600082015250565b600061510b6018836142cf565b9150615116826150d5565b602082019050919050565b6000602082019050818103600083015261513a816150fe565b9050919050565b600081519050615150816143c5565b92915050565b60006020828403121561516c5761516b614389565b5b600061517a84828501615141565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151b8816143b3565b82525050565b60006151ca83836151af565b60208301905092915050565b6000602082019050919050565b60006151ee82615183565b6151f8818561518e565b93506152038361519f565b8060005b8381101561523457815161521b88826151be565b9750615226836151d6565b925050600181019050615207565b5085935050505092915050565b600060a082019050615256600083018861429a565b6152636020830187614eda565b818103604083015261527581866151e3565b9050615284606083018561482e565b615291608083018461429a565b9695505050505050565b600060c0820190506152b0600083018961482e565b6152bd602083018861429a565b6152ca6040830187614eda565b6152d76060830186614eda565b6152e4608083018561482e565b6152f160a083018461429a565b979650505050505050565b60008060006060848603121561531557615314614389565b5b600061532386828701614c79565b935050602061533486828701614c79565b925050604061534586828701614c79565b9150509250925092565b600061535a82614290565b915061536583614290565b92508282101561537857615377614a29565b5b82820390509291505056fea26469706673582212202d67296f84cd87e527d6cc31cb1d0e4a349de2c482bf7226fe390166b9ead9f064736f6c634300080a0033608060405273f3a3023e6dede84ad88a656a3269f2a36e83c9a9600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600b55610e10600c55600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000106919062000223565b600a620001149190620003e2565b600162000122919062000433565b600d553480156200013257600080fd5b50604051620023a7380380620023a78339818101604052810190620001589190620004f9565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200052b565b600080fd5b600060ff82169050919050565b620001fd81620001e5565b81146200020957600080fd5b50565b6000815190506200021d81620001f2565b92915050565b6000602082840312156200023c576200023b620001e0565b5b60006200024c848285016200020c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620002e357808604811115620002bb57620002ba62000255565b5b6001851615620002cb5780820291505b8081029050620002db8562000284565b94506200029b565b94509492505050565b600082620002fe5760019050620003d1565b816200030e5760009050620003d1565b8160018114620003275760028114620003325762000368565b6001915050620003d1565b60ff84111562000347576200034662000255565b5b8360020a91508482111562000361576200036062000255565b5b50620003d1565b5060208310610133831016604e8410600b8410161715620003a25782820a9050838111156200039c576200039b62000255565b5b620003d1565b620003b1848484600162000291565b92509050818404811115620003cb57620003ca62000255565b5b81810290505b9392505050565b6000819050919050565b6000620003ef82620003d8565b9150620003fc83620001e5565b92506200042b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620002ec565b905092915050565b60006200044082620003d8565b91506200044d83620003d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000489576200048862000255565b5b828202905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004c18262000494565b9050919050565b620004d381620004b4565b8114620004df57600080fd5b50565b600081519050620004f381620004c8565b92915050565b600060208284031215620005125762000511620001e0565b5b60006200052284828501620004e2565b91505092915050565b611e6c806200053b6000396000f3fe60806040526004361061012a5760003560e01c8063ab377daa116100ab578063e2d2e2191161006f578063e2d2e219146103fb578063efca2eed14610426578063f887ea4014610451578063fc0c546a1461047c578063ffb2c479146104a7578063ffd49c84146104d05761012a565b8063ab377daa1461030d578063c346df501461034a578063ce7c2ac214610375578063d0e30db0146103b4578063d4fda1f2146103be5761012a565b80633a98ef39116100f25780633a98ef39146102125780634fab0ae81461023d57806352f481581461026857806366817df5146102a5578063997664d7146102e25761012a565b806311ce023d1461012f57806314b6ca961461015a57806315f7e05e1461018357806328fd3198146101ac5780632d48e896146101e9575b600080fd5b34801561013b57600080fd5b506101446104fb565b60405161015191906116fb565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906117a5565b610501565b005b34801561018f57600080fd5b506101aa60048036038101906101a591906117e5565b6107c0565b005b3480156101b857600080fd5b506101d360048036038101906101ce91906117e5565b6107cc565b6040516101e091906116fb565b60405180910390f35b3480156101f557600080fd5b50610210600480360381019061020b9190611812565b6108e6565b005b34801561021e57600080fd5b50610227610950565b60405161023491906116fb565b60405180910390f35b34801561024957600080fd5b50610252610956565b60405161025f91906116fb565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a91906117e5565b61095c565b60405161029c91906116fb565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906117e5565b6109a8565b6040516102d991906116fb565b60405180910390f35b3480156102ee57600080fd5b506102f76109c0565b60405161030491906116fb565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190611852565b6109c6565b604051610341919061188e565b60405180910390f35b34801561035657600080fd5b5061035f610a05565b60405161036c9190611908565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906117e5565b610a2b565b6040516103ab93929190611923565b60405180910390f35b6103bc610a55565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906117e5565b610e95565b6040516103f291906116fb565b60405180910390f35b34801561040757600080fd5b50610410610ead565b60405161041d91906116fb565b60405180910390f35b34801561043257600080fd5b5061043b610eb3565b60405161044891906116fb565b60405180910390f35b34801561045d57600080fd5b50610466610eb9565b604051610473919061197b565b60405180910390f35b34801561048857600080fd5b50610491610edf565b60405161049e919061188e565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190611852565b610f03565b005b3480156104dc57600080fd5b506104e5611097565b6040516104f291906116fb565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055957600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156105ae576105ad8261109d565b5b60008111801561060057506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156106135761060e82611335565b610675565b60008114801561066557506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561067457610673826113e4565b5b5b6106de816106d0600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007546115eb90919063ffffffff16565b61160190919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610776600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b6107c98161109d565b50565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561082157600090506108e1565b600061086e600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116108c9576000925050506108e1565b6108dc81836115eb90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461093e57600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60056020528060005260406000206000915090505481565b60085481565b600381815481106109d657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b0a919061188e565b602060405180830381865afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b91906119ab565b90506000600267ffffffffffffffff811115610b6a57610b696119d8565b5b604051908082528060200260200182016040528015610b985781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190611a1c565b81600081518110610c4057610c3f611a49565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610cb157610cb0611a49565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610d4e9493929190611b71565b6000604051808303818588803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b50505050506000610e3083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610de1919061188e565b602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906119ab565b6115eb90919063ffffffff16565b9050610e478160085461160190919063ffffffff16565b600881905550610e8a610e79600754610e6b84600b5461164990919063ffffffff16565b61165f90919063ffffffff16565b600a5461160190919063ffffffff16565b600a81905550505050565b60046020528060005260406000206000915090505481565b600a5481565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5b57600080fd5b600060038054905090506000811415610f745750611094565b6000805a905060005b8483108015610f8b57508381105b1561108f5783600e5410610fa2576000600e819055505b610feb6003600e5481548110610fbb57610fba611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611675565b1561103a576110396003600e548154811061100957611008611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661109d565b5b61105f6110505a846115eb90919063ffffffff16565b8461160190919063ffffffff16565b92505a9150600e600081548092919061107790611bec565b9190505550808061108790611bec565b915050610f7d565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156110ed57611332565b60006110f8826107cc565b90506000811115611330576111188160095461160190919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161117b929190611c35565b6020604051808303816000875af115801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190611c96565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125881600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461160190919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112e9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506113f89190611cc3565b8154811061140957611408611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061148757611486611a49565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506115279190611cc3565b8154811061153857611537611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806115b3576115b2611cf7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836115f99190611cc3565b905092915050565b6000818361160f9190611d26565b905092915050565b6000611642600b54611634600a548561164990919063ffffffff16565b61165f90919063ffffffff16565b9050919050565b600081836116579190611d7c565b905092915050565b6000818361166d9190611e05565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c59190611d26565b1080156116db5750600d546116d9836107cc565b115b9050919050565b6000819050919050565b6116f5816116e2565b82525050565b600060208201905061171060008301846116ec565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117468261171b565b9050919050565b6117568161173b565b811461176157600080fd5b50565b6000813590506117738161174d565b92915050565b611782816116e2565b811461178d57600080fd5b50565b60008135905061179f81611779565b92915050565b600080604083850312156117bc576117bb611716565b5b60006117ca85828601611764565b92505060206117db85828601611790565b9150509250929050565b6000602082840312156117fb576117fa611716565b5b600061180984828501611764565b91505092915050565b6000806040838503121561182957611828611716565b5b600061183785828601611790565b925050602061184885828601611790565b9150509250929050565b60006020828403121561186857611867611716565b5b600061187684828501611790565b91505092915050565b6118888161173b565b82525050565b60006020820190506118a3600083018461187f565b92915050565b6000819050919050565b60006118ce6118c96118c48461171b565b6118a9565b61171b565b9050919050565b60006118e0826118b3565b9050919050565b60006118f2826118d5565b9050919050565b611902816118e7565b82525050565b600060208201905061191d60008301846118f9565b92915050565b600060608201905061193860008301866116ec565b61194560208301856116ec565b61195260408301846116ec565b949350505050565b6000611965826118d5565b9050919050565b6119758161195a565b82525050565b6000602082019050611990600083018461196c565b92915050565b6000815190506119a581611779565b92915050565b6000602082840312156119c1576119c0611716565b5b60006119cf84828501611996565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611a168161174d565b92915050565b600060208284031215611a3257611a31611716565b5b6000611a4084828501611a07565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000611a9d611a98611a9384611a78565b6118a9565b6116e2565b9050919050565b611aad81611a82565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ae88161173b565b82525050565b6000611afa8383611adf565b60208301905092915050565b6000602082019050919050565b6000611b1e82611ab3565b611b288185611abe565b9350611b3383611acf565b8060005b83811015611b64578151611b4b8882611aee565b9750611b5683611b06565b925050600181019050611b37565b5085935050505092915050565b6000608082019050611b866000830187611aa4565b8181036020830152611b988186611b13565b9050611ba7604083018561187f565b611bb460608301846116ec565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bf7826116e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c2a57611c29611bbd565b5b600182019050919050565b6000604082019050611c4a600083018561187f565b611c5760208301846116ec565b9392505050565b60008115159050919050565b611c7381611c5e565b8114611c7e57600080fd5b50565b600081519050611c9081611c6a565b92915050565b600060208284031215611cac57611cab611716565b5b6000611cba84828501611c81565b91505092915050565b6000611cce826116e2565b9150611cd9836116e2565b925082821015611cec57611ceb611bbd565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611d31826116e2565b9150611d3c836116e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d7157611d70611bbd565b5b828201905092915050565b6000611d87826116e2565b9150611d92836116e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dcb57611dca611bbd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e10826116e2565b9150611e1b836116e2565b925082611e2b57611e2a611dd6565b5b82820490509291505056fea2646970667358221220e10e87fe5a169c9018aef12b497a6537565f740a7f28cdb50b71fbf4c03eb13364736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806386cb8fb1116101ab578063bfe10928116100f7578063ec44acf211610095578063f6cfa08a1161006f578063f6cfa08a14610c41578063f708a64f14610c6a578063f887ea4014610c93578063fc899bdc14610cbe57610340565b8063ec44acf214610bd6578063f0fc6bca14610c01578063f2fde38b14610c1857610340565b8063cf46f24c116100d1578063cf46f24c14610b1a578063dd62ed3e14610b45578063df20fd4914610b82578063e96fada214610bab57610340565b8063bfe1092814610a99578063c346df5014610ac4578063ca33e64c14610aef57610340565b80639d1944f511610164578063a8aa1b311161013e578063a8aa1b31146109db578063a9059cbb14610a06578063aa4bde2814610a43578063bf56b37114610a6e57610340565b80639d1944f51461095e5780639d9241ec14610987578063a4b45c00146109b257610340565b806386cb8fb11461084e57806386db0c051461088b578063893c9f2b146108c85780638a8c523c146108f15780638da5cb5b1461090857806395d89b411461093357610340565b80633f4218e011610285578063658d4b7f1161022357806370a08231116101fd57806370a08231146107a6578063715018a6146107e357806374010ece146107fa5780637d99c66d1461082357610340565b8063658d4b7f146107295780636c5b2855146107525780636ddd17131461077b57610340565b8063540b8a271161025f578063540b8a2714610659578063571ac8b01461069657806359b107b9146106d357806360e71962146106fe57610340565b80633f4218e0146105a25780634355855a146105df57806349bc3feb1461061c57610340565b806318160ddd116102f257806327a14fc2116102cc57806327a14fc2146104e85780632d48e89614610511578063313ce5671461053a5780633bbac5791461056557610340565b806318160ddd146104555780631961cee21461048057806323b872dd146104ab57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b57806310a60f02146103d8578063178d9b8e14610401578063180b0d7e1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ce7565b60405161036791906142a9565b60405180910390f35b34801561037c57600080fd5b50610385610ced565b604051610392919061435d565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd919061441d565b610d2a565b6040516103cf9190614478565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614607565b610e1c565b005b34801561040d57600080fd5b5061042860048036038101906104239190614663565b610f46565b005b34801561043657600080fd5b5061043f611028565b60405161044c91906142a9565b60405180910390f35b34801561046157600080fd5b5061046a61102e565b60405161047791906142a9565b60405180910390f35b34801561048c57600080fd5b50610495611053565b6040516104a291906142a9565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906146ca565b6110eb565b6040516104df9190614478565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061471d565b6112e8565b005b34801561051d57600080fd5b506105386004803603810190610533919061474a565b6113be565b005b34801561054657600080fd5b5061054f6114e6565b60405161055c91906147a6565b60405180910390f35b34801561057157600080fd5b5061058c600480360381019061058791906147c1565b6114ef565b6040516105999190614478565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906147c1565b61150f565b6040516105d69190614478565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906147c1565b61152f565b6040516106139190614478565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906147c1565b61154f565b60405161065091906142a9565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b91906147c1565b6115f4565b60405161068d9190614478565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b891906147c1565b611614565b6040516106ca9190614478565b60405180910390f35b3480156106df57600080fd5b506106e8611644565b6040516106f591906142a9565b60405180910390f35b34801561070a57600080fd5b5061071361164a565b60405161072091906142a9565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b91906147ee565b611650565b005b34801561075e57600080fd5b5061077960048036038101906107749190614663565b611740565b005b34801561078757600080fd5b50610790611822565b60405161079d9190614478565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c891906147c1565b611835565b6040516107da91906142a9565b60405180910390f35b3480156107ef57600080fd5b506107f861187e565b005b34801561080657600080fd5b50610821600480360381019061081c919061471d565b6119d1565b005b34801561082f57600080fd5b50610838611aa7565b60405161084591906142a9565b60405180910390f35b34801561085a57600080fd5b50610875600480360381019061087091906147c1565b611aad565b6040516108829190614478565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906147c1565b611acd565b6040516108bf91906142a9565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea919061471d565b611b72565b005b3480156108fd57600080fd5b50610906611c58565b005b34801561091457600080fd5b5061091d611d7c565b60405161092a919061483d565b60405180910390f35b34801561093f57600080fd5b50610948611da5565b604051610955919061435d565b60405180910390f35b34801561096a57600080fd5b506109856004803603810190610980919061471d565b611de2565b005b34801561099357600080fd5b5061099c611ec6565b6040516109a991906142a9565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190614858565b611ecc565b005b3480156109e757600080fd5b506109f0611fe7565b6040516109fd919061483d565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a28919061441d565b61200d565b604051610a3a9190614478565b60405180910390f35b348015610a4f57600080fd5b50610a58612022565b604051610a6591906142a9565b60405180910390f35b348015610a7a57600080fd5b50610a83612028565b604051610a9091906142a9565b60405180910390f35b348015610aa557600080fd5b50610aae61202e565b604051610abb91906148f7565b60405180910390f35b348015610ad057600080fd5b50610ad9612054565b604051610ae6919061483d565b60405180910390f35b348015610afb57600080fd5b50610b0461207a565b604051610b11919061483d565b60405180910390f35b348015610b2657600080fd5b50610b2f6120a0565b604051610b3c91906142a9565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614858565b6120a6565b604051610b7991906142a9565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614912565b61212d565b005b348015610bb757600080fd5b50610bc06121f6565b604051610bcd919061483d565b60405180910390f35b348015610be257600080fd5b50610beb61221c565b604051610bf89190614478565b60405180910390f35b348015610c0d57600080fd5b50610c1661222f565b005b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906147c1565b6122be565b005b348015610c4d57600080fd5b50610c686004803603810190610c639190614607565b612480565b005b348015610c7657600080fd5b50610c916004803603810190610c8c91906147ee565b6125aa565b005b348015610c9f57600080fd5b50610ca8612897565b604051610cb59190614973565b60405180910390f35b348015610cca57600080fd5b50610ce56004803603810190610ce091906147ee565b6128bd565b005b601f5481565b60606040518060400160405280600b81526020017f4261627920536861726269000000000000000000000000000000000000000000815250905090565b600081601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e0a91906142a9565b60405180910390a36001905092915050565b610e246129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea8906149da565b60405180910390fd5b60005b8251811015610f415781601e6000858481518110610ed557610ed46149fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f3990614a58565b915050610eb4565b505050565b610f4e6129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906149da565b60405180910390fd5b8360068190555082600781905550816008819055506110158261100786866129b590919063ffffffff16565b6129b590919063ffffffff16565b600f819055508060118190555050505050565b60115481565b60006009600a61103e9190614bd4565b64e8d4a5100061104e9190614c1f565b905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e69190614c8e565b905090565b60006009600a6110fb9190614bd4565b64e8d4a5100061110b9190614c1f565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112d457611253826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cb9092919063ffffffff16565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112df848484612a20565b90509392505050565b6112f06129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611374906149da565b60405180910390fd5b6127106009600a61138e9190614bd4565b64e8d4a5100061139e9190614c1f565b6113a89190614cea565b8110156113b457600080fd5b8060158190555050565b6113c66129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906149da565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016114b0929190614d1b565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b505050505050565b60006009905090565b601e6020528060005260406000206000915054906101000a900460ff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b81526004016115ac919061483d565b602060405180830381865afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190614c8e565b9050919050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600061163d826009600a6116289190614bd4565b64e8d4a510006116389190614c1f565b610d2a565b9050919050565b600f5481565b60135481565b6116586129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906149da565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117486129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc906149da565b60405180910390fd5b83600a819055508260098190555081600b8190555061180f8261180185876129b590919063ffffffff16565b6129b590919063ffffffff16565b6010819055508060118190555050505050565b602060009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118866129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906149da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119d96129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d906149da565b60405180910390fd5b6127106009600a611a779190614bd4565b64e8d4a51000611a879190614c1f565b611a919190614cea565b811015611a9d57600080fd5b8060148190555050565b60175481565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b8152600401611b2a919061483d565b602060405180830381865afa158015611b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6b9190614c8e565b9050919050565b611b7a6129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906149da565b60405180910390fd5b611c0f611d7c565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c54573d6000803e3d6000fd5b5050565b611c606129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce4906149da565b60405180910390fd5b602060019054906101000a900460ff1615611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490614d90565b60405180910390fd5b6001602060016101000a81548160ff0219169083151502179055506001602060006101000a81548160ff02191690831515021790555042601681905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f2442534841524249000000000000000000000000000000000000000000000000815250905090565b611dea6129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906149da565b60405180910390fd5b620b71b08110611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390614dfc565b60405180910390fd5b8060138190555050565b60105481565b611ed46129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f58906149da565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061201a338484612a20565b905092915050565b60155481565b60165481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121356129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b9906149da565b60405180910390fd5b6000601f54116121d157600080fd5b81602060006101000a81548160ff02191690831515021790555080601f819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060019054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b815260040161228a919061483d565b600060405180830381600087803b1580156122a457600080fd5b505af11580156122b8573d6000803e3d6000fd5b50505050565b6122c66129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a906149da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90614e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124886129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c906149da565b60405180910390fd5b60005b82518110156125a55781601b6000858481518110612539576125386149fa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061259d90614a58565b915050612518565b505050565b6125b26129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612636906149da565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126c95750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6126d257600080fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156127c457601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161278d929190614ee9565b600060405180830381600087803b1580156127a757600080fd5b505af11580156127bb573d6000803e3d6000fd5b50505050612893565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612860929190614f12565b600060405180830381600087803b15801561287a57600080fd5b505af115801561288e573d6000803e3d6000fd5b505050505b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6128c56129ad565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612949906149da565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600081836129c39190614f3b565b905092915050565b6000838311158290612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a919061435d565b60405180910390fd5b5082840390509392505050565b6000601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690614fdd565b60405180910390fd5b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b535750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7357601454821115612b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9490615049565b60405180910390fd5b602060019054906101000a900460ff16612c9d578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c5d57508273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c93906150b5565b60405180910390fd5b5b601754601654612cad9190614f3b565b42108015612d095750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612e72578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612dc1576001601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e71565b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e70576001601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2457601554612ee283612ed486611835565b6129b590919063ffffffff16565b1115612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90615121565b60405180910390fd5b5b602060029054906101000a900460ff1615612f4b57612f44848484613675565b905061366e565b612f53613848565b15612f6157612f6061391f565b5b612fea826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cb9092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130d05750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806131835750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156131825750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561319057829050613296565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561324057613211601154613203600f5487613fc490919063ffffffff16565b613fda90919063ffffffff16565b90506132268185613ff090919063ffffffff16565b91506132328682614006565b61323b84614104565b613294565b61326960115461325b60105487613fc490919063ffffffff16565b613fda90919063ffffffff16565b905061327e8185613ff090919063ffffffff16565b915061328a8682614006565b613293846141ca565b5b505b6132e881601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b590919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344e57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613418929190614f12565b600060405180830381600087803b15801561343257600080fd5b505af1925050508015613443575060015b61344c5761344d565b5b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661357157601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161353b929190614f12565b600060405180830381600087803b15801561355557600080fd5b505af1925050508015613566575060015b61356f57613570565b5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b81526004016135ce91906142a9565b600060405180830381600087803b1580156135e857600080fd5b505af19250505080156135f9575060015b61360257613603565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161366091906142a9565b60405180910390a360019150505b9392505050565b6000613700826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cb9092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379582601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b590919063ffffffff16565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383591906142a9565b60405180910390a3600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156138b55750602060029054906101000a900460ff16155b80156138cd5750602060009054906101000a900460ff165b801561391a5750601f54601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060026101000a81548160ff0219169083151502179055506000613967600e54613959600c54600d546129b590919063ffffffff16565b6129b590919063ffffffff16565b905060006139a760026139998461398b600d54601f54613fc490919063ffffffff16565b613fda90919063ffffffff16565b613fda90919063ffffffff16565b905060006139c082601f54613ff090919063ffffffff16565b90506009600a6139d09190614bd4565b64e8d4a510006139e09190614c1f565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff811115613a9f57613a9e614498565b5b604051908082528060200260200182016040528015613acd5781602001602082028036833780820191505090505b5090503081600081518110613ae557613ae46149fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb09190615156565b81600181518110613bc457613bc36149fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613c67959493929190615241565b600060405180830381600087803b158015613c8157600080fd5b505af1158015613c95573d6000803e3d6000fd5b505050506000613cae8247613ff090919063ffffffff16565b90506000613cda613ccb6002600d54613fda90919063ffffffff16565b88613ff090919063ffffffff16565b90506000613d186002613d0a84613cfc600d5488613fc490919063ffffffff16565b613fda90919063ffffffff16565b613fda90919063ffffffff16565b90506000871115613e2c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613dac9695949392919061529b565b60606040518083038185885af1158015613dca573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613def91906152fc565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051613e23929190614d1b565b60405180910390a15b6000613e5583613e47600c5487613fc490919063ffffffff16565b613fda90919063ffffffff16565b90506000811115613ee757601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613eca57600080fd5b505af193505050508015613edc575060015b613ee557613ee6565b5b5b6000613f1084613f02600e5488613fc490919063ffffffff16565b613fda90919063ffffffff16565b90506000811115613f8557600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613f83573d6000803e3d6000fd5b505b6000600d819055506000600c819055506000600e81905550505050505050505050506000602060026101000a81548160ff021916908315150217905550565b60008183613fd29190614c1f565b905092915050565b60008183613fe89190614cea565b905092915050565b60008183613ffe919061534f565b905092915050565b61405881601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b590919063ffffffff16565b601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140f891906142a9565b60405180910390a35050565b61412d60115461411f60075484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600d600082825461413e9190614f3b565b9250508190555061416e60115461416060065484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600c600082825461417f9190614f3b565b925050819055506141af6011546141a160085484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600e60008282546141c09190614f3b565b9250508190555050565b6141f36011546141e5600a5484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600d60008282546142049190614f3b565b9250508190555061423460115461422660095484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600c60008282546142459190614f3b565b92505081905550614275601154614267600b5484613fc490919063ffffffff16565b613fda90919063ffffffff16565b600e60008282546142869190614f3b565b9250508190555050565b6000819050919050565b6142a381614290565b82525050565b60006020820190506142be600083018461429a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142fe5780820151818401526020810190506142e3565b8381111561430d576000848401525b50505050565b6000601f19601f8301169050919050565b600061432f826142c4565b61433981856142cf565b93506143498185602086016142e0565b61435281614313565b840191505092915050565b600060208201905081810360008301526143778184614324565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143be82614393565b9050919050565b6143ce816143b3565b81146143d957600080fd5b50565b6000813590506143eb816143c5565b92915050565b6143fa81614290565b811461440557600080fd5b50565b600081359050614417816143f1565b92915050565b6000806040838503121561443457614433614389565b5b6000614442858286016143dc565b925050602061445385828601614408565b9150509250929050565b60008115159050919050565b6144728161445d565b82525050565b600060208201905061448d6000830184614469565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6144d082614313565b810181811067ffffffffffffffff821117156144ef576144ee614498565b5b80604052505050565b600061450261437f565b905061450e82826144c7565b919050565b600067ffffffffffffffff82111561452e5761452d614498565b5b602082029050602081019050919050565b600080fd5b600061455761455284614513565b6144f8565b9050808382526020820190506020840283018581111561457a5761457961453f565b5b835b818110156145a3578061458f88826143dc565b84526020840193505060208101905061457c565b5050509392505050565b600082601f8301126145c2576145c1614493565b5b81356145d2848260208601614544565b91505092915050565b6145e48161445d565b81146145ef57600080fd5b50565b600081359050614601816145db565b92915050565b6000806040838503121561461e5761461d614389565b5b600083013567ffffffffffffffff81111561463c5761463b61438e565b5b614648858286016145ad565b9250506020614659858286016145f2565b9150509250929050565b6000806000806080858703121561467d5761467c614389565b5b600061468b87828801614408565b945050602061469c87828801614408565b93505060406146ad87828801614408565b92505060606146be87828801614408565b91505092959194509250565b6000806000606084860312156146e3576146e2614389565b5b60006146f1868287016143dc565b9350506020614702868287016143dc565b925050604061471386828701614408565b9150509250925092565b60006020828403121561473357614732614389565b5b600061474184828501614408565b91505092915050565b6000806040838503121561476157614760614389565b5b600061476f85828601614408565b925050602061478085828601614408565b9150509250929050565b600060ff82169050919050565b6147a08161478a565b82525050565b60006020820190506147bb6000830184614797565b92915050565b6000602082840312156147d7576147d6614389565b5b60006147e5848285016143dc565b91505092915050565b6000806040838503121561480557614804614389565b5b6000614813858286016143dc565b9250506020614824858286016145f2565b9150509250929050565b614837816143b3565b82525050565b6000602082019050614852600083018461482e565b92915050565b6000806040838503121561486f5761486e614389565b5b600061487d858286016143dc565b925050602061488e858286016143dc565b9150509250929050565b6000819050919050565b60006148bd6148b86148b384614393565b614898565b614393565b9050919050565b60006148cf826148a2565b9050919050565b60006148e1826148c4565b9050919050565b6148f1816148d6565b82525050565b600060208201905061490c60008301846148e8565b92915050565b6000806040838503121561492957614928614389565b5b6000614937858286016145f2565b925050602061494885828601614408565b9150509250929050565b600061495d826148c4565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149c46020836142cf565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a6382614290565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a9657614a95614a29565b5b600182019050919050565b60008160011c9050919050565b6000808291508390505b6001851115614af857808604811115614ad457614ad3614a29565b5b6001851615614ae35780820291505b8081029050614af185614aa1565b9450614ab8565b94509492505050565b600082614b115760019050614bcd565b81614b1f5760009050614bcd565b8160018114614b355760028114614b3f57614b6e565b6001915050614bcd565b60ff841115614b5157614b50614a29565b5b8360020a915084821115614b6857614b67614a29565b5b50614bcd565b5060208310610133831016604e8410600b8410161715614ba35782820a905083811115614b9e57614b9d614a29565b5b614bcd565b614bb08484846001614aae565b92509050818404811115614bc757614bc6614a29565b5b81810290505b9392505050565b6000614bdf82614290565b9150614bea8361478a565b9250614c177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614b01565b905092915050565b6000614c2a82614290565b9150614c3583614290565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6e57614c6d614a29565b5b828202905092915050565b600081519050614c88816143f1565b92915050565b600060208284031215614ca457614ca3614389565b5b6000614cb284828501614c79565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cf582614290565b9150614d0083614290565b925082614d1057614d0f614cbb565b5b828204905092915050565b6000604082019050614d30600083018561429a565b614d3d602083018461429a565b9392505050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614d7a600f836142cf565b9150614d8582614d44565b602082019050919050565b60006020820190508181036000830152614da981614d6d565b9050919050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000614de6601d836142cf565b9150614df182614db0565b602082019050919050565b60006020820190508181036000830152614e1581614dd9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e786026836142cf565b9150614e8382614e1c565b604082019050919050565b60006020820190508181036000830152614ea781614e6b565b9050919050565b6000819050919050565b6000614ed3614ece614ec984614eae565b614898565b614290565b9050919050565b614ee381614eb8565b82525050565b6000604082019050614efe600083018561482e565b614f0b6020830184614eda565b9392505050565b6000604082019050614f27600083018561482e565b614f34602083018461429a565b9392505050565b6000614f4682614290565b9150614f5183614290565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8657614f85614a29565b5b828201905092915050565b7f426f742064657465637465640000000000000000000000000000000000000000600082015250565b6000614fc7600c836142cf565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f4d61782074786e206c696d697420657863656564730000000000000000000000600082015250565b60006150336015836142cf565b915061503e82614ffd565b602082019050919050565b6000602082019050818103600083015261506281615026565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b600061509f6012836142cf565b91506150aa82615069565b602082019050919050565b600060208201905081810360008301526150ce81615092565b9050919050565b7f4d61782057616c6c6574206c696d697420657863656564730000000000000000600082015250565b600061510b6018836142cf565b9150615116826150d5565b602082019050919050565b6000602082019050818103600083015261513a816150fe565b9050919050565b600081519050615150816143c5565b92915050565b60006020828403121561516c5761516b614389565b5b600061517a84828501615141565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151b8816143b3565b82525050565b60006151ca83836151af565b60208301905092915050565b6000602082019050919050565b60006151ee82615183565b6151f8818561518e565b93506152038361519f565b8060005b8381101561523457815161521b88826151be565b9750615226836151d6565b925050600181019050615207565b5085935050505092915050565b600060a082019050615256600083018861429a565b6152636020830187614eda565b818103604083015261527581866151e3565b9050615284606083018561482e565b615291608083018461429a565b9695505050505050565b600060c0820190506152b0600083018961482e565b6152bd602083018861429a565b6152ca6040830187614eda565b6152d76060830186614eda565b6152e4608083018561482e565b6152f160a083018461429a565b979650505050505050565b60008060006060848603121561531557615314614389565b5b600061532386828701614c79565b935050602061533486828701614c79565b925050604061534586828701614c79565b9150509250925092565b600061535a82614290565b915061536583614290565b92508282101561537857615377614a29565b5b82820390509291505056fea26469706673582212202d67296f84cd87e527d6cc31cb1d0e4a349de2c482bf7226fe390166b9ead9f064736f6c634300080a0033

Deployed Bytecode Sourcemap

13389:15911:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15165:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17326:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17751:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27313:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27542:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14453:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17008:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25663:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18328:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26656:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28914:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17118:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15119:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14911:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15064:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25293:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14961:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18007:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14371:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14545:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26820:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27984:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15222:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17428:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5976:157;;;;;;;;;;;;;:::i;:::-;;26498:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14737:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15012:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25475:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26379:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26179:192;;;;;;;;;;;;;:::i;:::-;;5762:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17220:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29129:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14411:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28431:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13918:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18132:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14647:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14705:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14500:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13711:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13944:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14592:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17555:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28691:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13987:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15252:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25195:90;;;;;;;;;;;;;:::i;:::-;;6141:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26947:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25798:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13887:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27181:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15165:50;;;;:::o;17326:94::-;17374:13;17407:5;;;;;;;;;;;;;;;;;17400:12;;17326:94;:::o;17751:248::-;17853:4;17910:6;17875:11;:23;17887:10;17875:23;;;;;;;;;;;;;;;:32;17899:7;17875:32;;;;;;;;;;;;;;;:41;;;;17953:7;17932:37;;17941:10;17932:37;;;17962:6;17932:37;;;;;;:::i;:::-;;;;;;;;17987:4;17980:11;;17751:248;;;;:::o;27313:221::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27436:9:::1;27431:96;27451:8;:15;27447:1;:19;27431:96;;;27509:6;27488:5;:18;27494:8;27503:1;27494:11;;;;;;;;:::i;:::-;;;;;;;;27488:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27468:3;;;;;:::i;:::-;;;;27431:96;;;;27313:221:::0;;:::o;27542:434::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:14:::1;27728:17;:34;;;;27792:13;27773:16;:32;;;;27835:13;27816:16;:32;;;;27873:52;27911:13;27873:33;27891:14;27873:13;:17;;:33;;;;:::i;:::-;:37;;:52;;;;:::i;:::-;27859:11;:66;;;;27953:15;27936:14;:32;;;;27542:434:::0;;;;:::o;14453:38::-;;;;:::o;17008:102::-;17063:7;13621:1;13689:2;:13;;;;:::i;:::-;13669:17;:33;;;;:::i;:::-;17083:19;;17008:102;:::o;25663:127::-;25725:7;25752:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25745:37;;25663:127;:::o;18328:419::-;18462:4;13621:1;13689:2;:13;;;;:::i;:::-;13669:17;:33;;;;:::i;:::-;18483:11;:19;18495:6;18483:19;;;;;;;;;;;;;;;:31;18503:10;18483:31;;;;;;;;;;;;;;;;:47;18479:201;;18581:87;18635:6;18581:87;;;;;;;;;;;;;;;;;:11;:19;18593:6;18581:19;;;;;;;;;;;;;;;:31;18601:10;18581:31;;;;;;;;;;;;;;;;:53;;:87;;;;;:::i;:::-;18547:11;:19;18559:6;18547:19;;;;;;;;;;;;;;;:31;18567:10;18547:31;;;;;;;;;;;;;;;:121;;;;18479:201;18699:40;18713:6;18721:9;18732:6;18699:13;:40::i;:::-;18692:47;;18328:419;;;;;:::o;26656:156::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26763:5:::1;13621:1;13689:2;:13;;;;:::i;:::-;13669:17;:33;;;;:::i;:::-;26748:20;;;;:::i;:::-;26738:6;:30;;26730:39;;;::::0;::::1;;26798:6;26780:15;:24;;;;26656:156:::0;:::o;28914:207::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29048:11:::1;;;;;;;;;;;:35;;;29084:10;29096:16;29048:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28914:207:::0;;:::o;17118:94::-;17170:5;13621:1;17188:16;;17118:94;:::o;15119:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;14911:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;15064:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;25293:174::-;25387:7;25419:11;;;;;;;;;;;:27;;;25447:11;25419:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25412:47;;25293:174;;;:::o;14961:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;18007:117::-;18062:4;18086:30;18094:7;13621:1;13689:2;:13;;;;:::i;:::-;13669:17;:33;;;;:::i;:::-;18086:7;:30::i;:::-;18079:37;;18007:117;;;:::o;14371:33::-;;;;:::o;14545:38::-;;;;:::o;26820:119::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26925:6:::1;26903:11;:19;26915:6;26903:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26820:119:::0;;:::o;27984:439::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28191:13:::1;28171:17;:33;;;;28236:14;28215:18;:35;;;;28281:13;28261:17;:33;;;;28320:52;28358:13;28320:33;28338:14;28320:13;:17;;:33;;;;:::i;:::-;:37;;:52;;;;:::i;:::-;28305:12;:67;;;;28400:15;28383:14;:32;;;;27984:439:::0;;;;:::o;15222:23::-;;;;;;;;;;;;;:::o;17428:119::-;17494:7;17521:9;:18;17531:7;17521:18;;;;;;;;;;;;;;;;17514:25;;17428:119;;;:::o;5976:157::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6083:1:::1;6046:40;;6067:6;::::0;::::1;;;;;;;;6046:40;;;;;;;;;;;;6122:1;6097:6:::0;::::1;:28;;;;;;;;;;;;;;;;;;5976:157::o:0;26498:150::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26602:5:::1;13621:1;13689:2;:13;;;;:::i;:::-;13669:17;:33;;;;:::i;:::-;26587:20;;;;:::i;:::-;26577:6;:30;;26569:39;;;::::0;::::1;;26634:6;26619:12;:21;;;;26498:150:::0;:::o;14737:39::-;;;;:::o;15012:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;25475:180::-;25573:7;25605:11;;;;;;;;;;;:29;;;25635:11;25605:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25598:49;;25475:180;;;:::o;26379:111::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26457:7:::1;:5;:7::i;:::-;26449:25;;:33;26475:6;26449:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26379:111:::0;:::o;26179:192::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26243:7:::1;;;;;;;;;;;26242:8;26234:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;26291:4;26281:7;;:14;;;;;;;;;;;;;;;;;;26320:4;26306:11;;:18;;;;;;;;;;;;;;;;;;26348:15;26335:10;:28;;;;26179:192::o:0;5762:79::-;5800:7;5827:6;;;;;;;;;;;5820:13;;5762:79;:::o;17220:98::-;17270:13;17303:7;;;;;;;;;;;;;;;;;17296:14;;17220:98;:::o;29129:168::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29218:6:::1;29212:3;:12;29204:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29286:3;29269:14;:20;;;;29129:168:::0;:::o;14411:35::-;;;;:::o;28431:252::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28598:22:::1;28574:21;;:46;;;;;;;;;;;;;;;;;;28654:21;28631:20;;:44;;;;;;;;;;;;;;;;;;28431:252:::0;;:::o;13918:19::-;;;;;;;;;;;;;:::o;18132:188::-;18239:4;18268:44;18282:10;18294:9;18305:6;18268:13;:44::i;:::-;18261:51;;18132:188;;;;:::o;14647:51::-;;;;:::o;14705:25::-;;;;:::o;14500:38::-;;;;;;;;;;;;;:::o;13711:66::-;;;;;;;;;;;;;:::o;13944:36::-;;;;;;;;;;;;;:::o;14592:48::-;;;;:::o;17555:188::-;17675:7;17707:11;:19;17719:6;17707:19;;;;;;;;;;;;;;;:28;17727:7;17707:28;;;;;;;;;;;;;;;;17700:35;;17555:188;;;;:::o;28691:215::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28829:1:::1;28813:13;;:17;28805:26;;;::::0;::::1;;28856:8;28842:11;;:22;;;;;;;;;;;;;;;;;;28891:7;28875:13;:23;;;;28691:215:::0;;:::o;13987:35::-;;;;;;;;;;;;;:::o;15252:19::-;;;;;;;;;;;;;:::o;25195:90::-;25240:11;;;;;;;;;;;:25;;;25266:10;25240:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25195:90::o;6141:281::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6264:1:::1;6244:22;;:8;:22;;;;6222:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6377:8;6348:38;;6369:6;::::0;::::1;;;;;;;;6348:38;;;;;;;;;;;;6406:8;6397:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6141:281:::0;:::o;26947:226::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27070:9:::1;27065:101;27085:7;:14;27081:1;:18;27065:101;;;27148:6;27121:12;:24;27134:7;27142:1;27134:10;;;;;;;;:::i;:::-;;;;;;;;27121:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27101:3;;;;;:::i;:::-;;;;27065:101;;;;26947:226:::0;;:::o;25798:373::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25935:4:::1;25917:23;;:6;:23;;;;:41;;;;;25954:4;;;;;;;;;;;25944:14;;:6;:14;;;;25917:41;25909:50;;;::::0;::::1;;25997:6;25970:16;:24;25987:6;25970:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26018:6;26014:150;;;26041:11;;;;;;;;;;;:20;;;26062:6;26070:1;26041:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26014:150;;;26105:11;;;;;;;;;;;:20;;;26126:6;26134:9;:17;26144:6;26134:17;;;;;;;;;;;;;;;;26105:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26014:150;25798:373:::0;;:::o;13887:24::-;;;;;;;;;;;;;:::o;27181:124::-;5899:12;:10;:12::i;:::-;5889:22;;:6;;;;;;;;;;:22;;;5881:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27291:6:::1;27267:13;:21;27281:6;27267:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;27181:124:::0;;:::o;5098:115::-;5151:15;5194:10;5179:26;;5098:115;:::o;1715:98::-;1773:7;1804:1;1800;:5;;;;:::i;:::-;1793:12;;1715:98;;;;:::o;2245:240::-;2365:7;2423:1;2418;:6;;2426:12;2410:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2465:1;2461;:5;2454:12;;2245:240;;;;;:::o;18755:2773::-;18881:4;18907:5;:13;18913:6;18907:13;;;;;;;;;;;;;;;;;;;;;;;;;18906:14;18898:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;18953:12;:20;18966:6;18953:20;;;;;;;;;;;;;;;;;;;;;;;;;18952:21;:49;;;;;18978:12;:23;18991:9;18978:23;;;;;;;;;;;;;;;;;;;;;;;;;18977:24;18952:49;18948:759;;;19036:12;;19026:6;:22;;19018:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19140:7;;;;;;;;;;;19135:176;;19206:6;19198:14;;:4;;;;;;;;;;;:14;;;;:35;;;;;19224:9;19216:17;;:4;;;;;;;;;;;:17;;;;19198:35;19168:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;19135:176;19411:11;;19398:10;;:24;;;;:::i;:::-;19380:15;:42;:88;;;;;19461:6;;;;;;;;;;;19443:25;;:6;:25;;;;19380:88;19358:338;;;19515:6;19507:14;;:4;;;;;;;;;;;:14;;;19503:178;;;19565:4;19546:5;:16;19552:9;19546:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;19503:178;;;19607:9;19599:17;;:4;;;;;;;;;;;:17;;;19595:86;;;19657:4;19641:5;:13;19647:6;19641:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;19595:86;19503:178;19358:338;18948:759;19724:13;:24;19738:9;19724:24;;;;;;;;;;;;;;;;;;;;;;;;;19719:195;;19827:15;;19791:32;19816:6;19791:20;19801:9;19791;:20::i;:::-;:24;;:32;;;;:::i;:::-;:51;;19765:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;19719:195;19930:6;;;;;;;;;;;19926:87;;;19960:41;19975:6;19983:9;19994:6;19960:14;:41::i;:::-;19953:48;;;;19926:87;20029:16;:14;:16::i;:::-;20025:59;;;20062:10;:8;:10::i;:::-;20025:59;20116:90;20152:6;20116:90;;;;;;;;;;;;;;;;;:9;:17;20126:6;20116:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;20096:9;:17;20106:6;20096:17;;;;;;;;;;;;;;;:110;;;;20219:22;20270:11;:19;20282:6;20270:19;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;20306:11;:22;20318:9;20306:22;;;;;;;;;;;;;;;;;;;;;;;;;20270:58;:112;;;;20356:4;;;;;;;;;;;20346:14;;:6;:14;;;;:35;;;;;20377:4;;;;;;;;;;;20364:17;;:9;:17;;;;20346:35;20270:112;20252:746;;;20426:6;20409:23;;20252:746;;;20465:17;20511:4;;;;;;;;;;;20501:14;;:6;:14;;;20497:490;;;20548:43;20576:14;;20548:23;20559:11;;20548:6;:10;;:23;;;;:::i;:::-;:27;;:43;;;;:::i;:::-;20536:55;;20627:21;20638:9;20627:6;:10;;:21;;;;:::i;:::-;20610:38;;20667:26;20675:6;20683:9;20667:7;:26::i;:::-;20712:20;20725:6;20712:12;:20::i;:::-;20497:490;;;20785:44;20814:14;;20785:24;20796:12;;20785:6;:10;;:24;;;;:::i;:::-;:28;;:44;;;;:::i;:::-;20773:56;;20865:21;20876:9;20865:6;:10;;:21;;;;:::i;:::-;20848:38;;20905:26;20913:6;20921:9;20905:7;:26::i;:::-;20950:21;20964:6;20950:13;:21::i;:::-;20497:490;20450:548;20252:746;21033:40;21058:14;21033:9;:20;21043:9;21033:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;21010:9;:20;21020:9;21010:20;;;;;;;;;;;;;;;:63;;;;21091:16;:24;21108:6;21091:24;;;;;;;;;;;;;;;;;;;;;;;;;21086:120;;21136:11;;;;;;;;;;;:20;;;21157:6;21165:9;:17;21175:6;21165:17;;;;;;;;;;;;;;;;21136:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21132:63;;;;;;21086:120;21221:16;:27;21238:9;21221:27;;;;;;;;;;;;;;;;;;;;;;;;;21216:159;;21286:11;;;;;;;;;;;:20;;;21307:9;21318;:20;21328:9;21318:20;;;;;;;;;;;;;;;;21286:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21265:99;;;;;;21216:159;21391:11;;;;;;;;;;;:19;;;21411:14;;21391:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21387:51;;;;;;21472:9;21455:43;;21464:6;21455:43;;;21483:14;21455:43;;;;;;:::i;:::-;;;;;;;;21516:4;21509:11;;;18755:2773;;;;;;:::o;21536:401::-;21663:4;21700:90;21736:6;21700:90;;;;;;;;;;;;;;;;;:9;:17;21710:6;21700:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;21680:9;:17;21690:6;21680:17;;;;;;;;;;;;;;;:110;;;;21824:32;21849:6;21824:9;:20;21834:9;21824:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21801:9;:20;21811:9;21801:20;;;;;;;;;;;;;;;:55;;;;21889:9;21872:35;;21881:6;21872:35;;;21900:6;21872:35;;;;;;:::i;:::-;;;;;;;;21925:4;21918:11;;21536:401;;;;;:::o;22881:222::-;22930:4;22981;;;;;;;;;;;22967:18;;:10;:18;;;;:42;;;;;23003:6;;;;;;;;;;;23002:7;22967:42;:70;;;;;23026:11;;;;;;;;;;;22967:70;:128;;;;;23082:13;;23054:9;:24;23072:4;23054:24;;;;;;;;;;;;;;;;:41;;22967:128;22947:148;;22881:222;:::o;23111:2076::-;15336:4;15327:6;;:13;;;;;;;;;;;;;;;;;;23160:16:::1;23179:91;23241:18;;23179:43;23202:19;;23179:18;;:22;;:43;;;;:::i;:::-;:47;;:91;;;;:::i;:::-;23160:110;;23283:23;23309:100;23407:1;23309:79;23379:8;23309:51;23341:18;;23309:13;;:31;;:51;;;;:::i;:::-;:69;;:79;;;;:::i;:::-;:97;;:100;;;;:::i;:::-;23283:126;;23422:20;23445:34;23463:15;23445:13;;:17;;:34;;;;:::i;:::-;23422:57;;13621:1;13689:2;:13;;;;:::i;:::-;13669:17;:33;;;;:::i;:::-;23490:11;:26;23510:4;23490:26;;;;;;;;;;;;;;;:43;23525:6;;;;;;;;;;;23490:43;;;;;;;;;;;;;;;:58;;;;23559:21;23597:1;23583:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23559:40;;23628:4;23610;23615:1;23610:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23654:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23644:4;23649:1;23644:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23678:21;23702;23678:45;;23736:6;;;;;;;;;;;:57;;;23808:12;23835:1;23851:4;23878;23898:15;23736:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23937:17;23957:40;23983:13;23957:21;:25;;:40;;;;:::i;:::-;23937:60;;24010:19;24032:39;24045:25;24068:1;24045:18;;:22;;:25;;;;:::i;:::-;24032:8;:12;;:39;;;;:::i;:::-;24010:61;;24084:26;24113:99;24210:1;24113:78;24179:11;24113:47;24141:18;;24113:9;:27;;:47;;;;:::i;:::-;:65;;:78;;;;:::i;:::-;:96;;:99;;;;:::i;:::-;24084:128;;24247:1;24229:15;:19;24225:364;;;24265:6;;;;;;;;;;;:22;;;24295:18;24341:4;24365:15;24399:1;24419::::0;24439:21:::1;;;;;;;;;;;24479:15;24265:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24529:48;24541:18;24561:15;24529:48;;;;;;;:::i;:::-;;;;;;;;24225:364;24601:27;24631:75;24684:11;24631:34;24645:19;;24631:9;:13;;:34;;;;:::i;:::-;:38;;:75;;;;:::i;:::-;24601:105;;24743:1;24721:19;:23;24717:120;;;24765:11;;;;;;;;;;;:19;;;24792;24765:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;24761:65;;;;;;24717:120;24849:26;24878:74;24930:11;24878:33;24892:18;;24878:9;:13;;:33;;;;:::i;:::-;:37;;:74;;;;:::i;:::-;24849:103;;24990:1;24969:18;:22;24965:113;;;25016:20;;;;;;;;;;;25008:38;;:58;25047:18;25008:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24965:113;25111:1;25090:18;:22;;;;25145:1;25123:19;:23;;;;25178:1;25157:18;:22;;;;23149:2038;;;;;;;;;;15372:5:::0;15363:6;;:14;;;;;;;;;;;;;;;;;;23111:2076::o;1927:98::-;1985:7;2016:1;2012;:5;;;;:::i;:::-;2005:12;;1927:98;;;;:::o;2033:::-;2091:7;2122:1;2118;:5;;;;:::i;:::-;2111:12;;2033:98;;;;:::o;1821:::-;1879:7;1910:1;1906;:5;;;;:::i;:::-;1899:12;;1821:98;;;;:::o;21945:204::-;22044:39;22073:9;22044;:24;22062:4;22044:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22017:9;:24;22035:4;22017:24;;;;;;;;;;;;;;;:66;;;;22124:4;22099:42;;22108:6;22099:42;;;22131:9;22099:42;;;;;;:::i;:::-;;;;;;;;21945:204;;:::o;22157:328::-;22238:49;22272:14;;22238:29;22250:16;;22238:7;:11;;:29;;;;:::i;:::-;:33;;:49;;;;:::i;:::-;22216:18;;:71;;;;;;;:::i;:::-;;;;;;;;22321:74;22370:14;;22321:30;22333:17;;22321:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22298:19;;:97;;;;;;;:::i;:::-;;;;;;;;22428:49;22462:14;;22428:29;22440:16;;22428:7;:11;;:29;;;;:::i;:::-;:33;;:49;;;;:::i;:::-;22406:18;;:71;;;;;;;:::i;:::-;;;;;;;;22157:328;:::o;22493:380::-;22575:74;22624:14;;22575:30;22587:17;;22575:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22553:18;;:96;;;;;;;:::i;:::-;;;;;;;;22683:75;22733:14;;22683:31;22695:18;;22683:7;:11;;:31;;;;:::i;:::-;:35;;:75;;;;:::i;:::-;22660:19;;:98;;;;;;;:::i;:::-;;;;;;;;22791:74;22840:14;;22791:30;22803:17;;22791:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22769:18;;:96;;;;;;;:::i;:::-;;;;;;;;22493:380;:::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:117::-;3955:1;3952;3945:12;3969:180;4017:77;4014:1;4007:88;4114:4;4111:1;4104:15;4138:4;4135:1;4128:15;4155:281;4238:27;4260:4;4238:27;:::i;:::-;4230:6;4226:40;4368:6;4356:10;4353:22;4332:18;4320:10;4317:34;4314:62;4311:88;;;4379:18;;:::i;:::-;4311:88;4419:10;4415:2;4408:22;4198:238;4155:281;;:::o;4442:129::-;4476:6;4503:20;;:::i;:::-;4493:30;;4532:33;4560:4;4552:6;4532:33;:::i;:::-;4442:129;;;:::o;4577:311::-;4654:4;4744:18;4736:6;4733:30;4730:56;;;4766:18;;:::i;:::-;4730:56;4816:4;4808:6;4804:17;4796:25;;4876:4;4870;4866:15;4858:23;;4577:311;;;:::o;4894:117::-;5003:1;5000;4993:12;5034:710;5130:5;5155:81;5171:64;5228:6;5171:64;:::i;:::-;5155:81;:::i;:::-;5146:90;;5256:5;5285:6;5278:5;5271:21;5319:4;5312:5;5308:16;5301:23;;5372:4;5364:6;5360:17;5352:6;5348:30;5401:3;5393:6;5390:15;5387:122;;;5420:79;;:::i;:::-;5387:122;5535:6;5518:220;5552:6;5547:3;5544:15;5518:220;;;5627:3;5656:37;5689:3;5677:10;5656:37;:::i;:::-;5651:3;5644:50;5723:4;5718:3;5714:14;5707:21;;5594:144;5578:4;5573:3;5569:14;5562:21;;5518:220;;;5522:21;5136:608;;5034:710;;;;;:::o;5767:370::-;5838:5;5887:3;5880:4;5872:6;5868:17;5864:27;5854:122;;5895:79;;:::i;:::-;5854:122;6012:6;5999:20;6037:94;6127:3;6119:6;6112:4;6104:6;6100:17;6037:94;:::i;:::-;6028:103;;5844:293;5767:370;;;;:::o;6143:116::-;6213:21;6228:5;6213:21;:::i;:::-;6206:5;6203:32;6193:60;;6249:1;6246;6239:12;6193:60;6143:116;:::o;6265:133::-;6308:5;6346:6;6333:20;6324:29;;6362:30;6386:5;6362:30;:::i;:::-;6265:133;;;;:::o;6404:678::-;6494:6;6502;6551:2;6539:9;6530:7;6526:23;6522:32;6519:119;;;6557:79;;:::i;:::-;6519:119;6705:1;6694:9;6690:17;6677:31;6735:18;6727:6;6724:30;6721:117;;;6757:79;;:::i;:::-;6721:117;6862:78;6932:7;6923:6;6912:9;6908:22;6862:78;:::i;:::-;6852:88;;6648:302;6989:2;7015:50;7057:7;7048:6;7037:9;7033:22;7015:50;:::i;:::-;7005:60;;6960:115;6404:678;;;;;:::o;7088:765::-;7174:6;7182;7190;7198;7247:3;7235:9;7226:7;7222:23;7218:33;7215:120;;;7254:79;;:::i;:::-;7215:120;7374:1;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7345:117;7501:2;7527:53;7572:7;7563:6;7552:9;7548:22;7527:53;:::i;:::-;7517:63;;7472:118;7629:2;7655:53;7700:7;7691:6;7680:9;7676:22;7655:53;:::i;:::-;7645:63;;7600:118;7757:2;7783:53;7828:7;7819:6;7808:9;7804:22;7783:53;:::i;:::-;7773:63;;7728:118;7088:765;;;;;;;:::o;7859:619::-;7936:6;7944;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:53;8325:7;8316:6;8305:9;8301:22;8280:53;:::i;:::-;8270:63;;8225:118;8382:2;8408:53;8453:7;8444:6;8433:9;8429:22;8408:53;:::i;:::-;8398:63;;8353:118;7859:619;;;;;:::o;8484:329::-;8543:6;8592:2;8580:9;8571:7;8567:23;8563:32;8560:119;;;8598:79;;:::i;:::-;8560:119;8718:1;8743:53;8788:7;8779:6;8768:9;8764:22;8743:53;:::i;:::-;8733:63;;8689:117;8484:329;;;;:::o;8819:474::-;8887:6;8895;8944:2;8932:9;8923:7;8919:23;8915:32;8912:119;;;8950:79;;:::i;:::-;8912:119;9070:1;9095:53;9140:7;9131:6;9120:9;9116:22;9095:53;:::i;:::-;9085:63;;9041:117;9197:2;9223:53;9268:7;9259:6;9248:9;9244:22;9223:53;:::i;:::-;9213:63;;9168:118;8819:474;;;;;:::o;9299:86::-;9334:7;9374:4;9367:5;9363:16;9352:27;;9299:86;;;:::o;9391:112::-;9474:22;9490:5;9474:22;:::i;:::-;9469:3;9462:35;9391:112;;:::o;9509:214::-;9598:4;9636:2;9625:9;9621:18;9613:26;;9649:67;9713:1;9702:9;9698:17;9689:6;9649:67;:::i;:::-;9509:214;;;;:::o;9729:329::-;9788:6;9837:2;9825:9;9816:7;9812:23;9808:32;9805:119;;;9843:79;;:::i;:::-;9805:119;9963:1;9988:53;10033:7;10024:6;10013:9;10009:22;9988:53;:::i;:::-;9978:63;;9934:117;9729:329;;;;:::o;10064:468::-;10129:6;10137;10186:2;10174:9;10165:7;10161:23;10157:32;10154:119;;;10192:79;;:::i;:::-;10154:119;10312:1;10337:53;10382:7;10373:6;10362:9;10358:22;10337:53;:::i;:::-;10327:63;;10283:117;10439:2;10465:50;10507:7;10498:6;10487:9;10483:22;10465:50;:::i;:::-;10455:60;;10410:115;10064:468;;;;;:::o;10538:118::-;10625:24;10643:5;10625:24;:::i;:::-;10620:3;10613:37;10538:118;;:::o;10662:222::-;10755:4;10793:2;10782:9;10778:18;10770:26;;10806:71;10874:1;10863:9;10859:17;10850:6;10806:71;:::i;:::-;10662:222;;;;:::o;10890:474::-;10958:6;10966;11015:2;11003:9;10994:7;10990:23;10986:32;10983:119;;;11021:79;;:::i;:::-;10983:119;11141:1;11166:53;11211:7;11202:6;11191:9;11187:22;11166:53;:::i;:::-;11156:63;;11112:117;11268:2;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11239:118;10890:474;;;;;:::o;11370:60::-;11398:3;11419:5;11412:12;;11370:60;;;:::o;11436:142::-;11486:9;11519:53;11537:34;11546:24;11564:5;11546:24;:::i;:::-;11537:34;:::i;:::-;11519:53;:::i;:::-;11506:66;;11436:142;;;:::o;11584:126::-;11634:9;11667:37;11698:5;11667:37;:::i;:::-;11654:50;;11584:126;;;:::o;11716:154::-;11794:9;11827:37;11858:5;11827:37;:::i;:::-;11814:50;;11716:154;;;:::o;11876:187::-;11991:65;12050:5;11991:65;:::i;:::-;11986:3;11979:78;11876:187;;:::o;12069:278::-;12190:4;12228:2;12217:9;12213:18;12205:26;;12241:99;12337:1;12326:9;12322:17;12313:6;12241:99;:::i;:::-;12069:278;;;;:::o;12353:468::-;12418:6;12426;12475:2;12463:9;12454:7;12450:23;12446:32;12443:119;;;12481:79;;:::i;:::-;12443:119;12601:1;12626:50;12668:7;12659:6;12648:9;12644:22;12626:50;:::i;:::-;12616:60;;12572:114;12725:2;12751:53;12796:7;12787:6;12776:9;12772:22;12751:53;:::i;:::-;12741:63;;12696:118;12353:468;;;;;:::o;12827:144::-;12895:9;12928:37;12959:5;12928:37;:::i;:::-;12915:50;;12827:144;;;:::o;12977:167::-;13082:55;13131:5;13082:55;:::i;:::-;13077:3;13070:68;12977:167;;:::o;13150:258::-;13261:4;13299:2;13288:9;13284:18;13276:26;;13312:89;13398:1;13387:9;13383:17;13374:6;13312:89;:::i;:::-;13150:258;;;;:::o;13414:182::-;13554:34;13550:1;13542:6;13538:14;13531:58;13414:182;:::o;13602:366::-;13744:3;13765:67;13829:2;13824:3;13765:67;:::i;:::-;13758:74;;13841:93;13930:3;13841:93;:::i;:::-;13959:2;13954:3;13950:12;13943:19;;13602:366;;;:::o;13974:419::-;14140:4;14178:2;14167:9;14163:18;14155:26;;14227:9;14221:4;14217:20;14213:1;14202:9;14198:17;14191:47;14255:131;14381:4;14255:131;:::i;:::-;14247:139;;13974:419;;;:::o;14399:180::-;14447:77;14444:1;14437:88;14544:4;14541:1;14534:15;14568:4;14565:1;14558:15;14585:180;14633:77;14630:1;14623:88;14730:4;14727:1;14720:15;14754:4;14751:1;14744:15;14771:233;14810:3;14833:24;14851:5;14833:24;:::i;:::-;14824:33;;14879:66;14872:5;14869:77;14866:103;;;14949:18;;:::i;:::-;14866:103;14996:1;14989:5;14985:13;14978:20;;14771:233;;;:::o;15010:102::-;15052:8;15099:5;15096:1;15092:13;15071:34;;15010:102;;;:::o;15118:848::-;15179:5;15186:4;15210:6;15201:15;;15234:5;15225:14;;15248:712;15269:1;15259:8;15256:15;15248:712;;;15364:4;15359:3;15355:14;15349:4;15346:24;15343:50;;;15373:18;;:::i;:::-;15343:50;15423:1;15413:8;15409:16;15406:451;;;15838:4;15831:5;15827:16;15818:25;;15406:451;15888:4;15882;15878:15;15870:23;;15918:32;15941:8;15918:32;:::i;:::-;15906:44;;15248:712;;;15118:848;;;;;;;:::o;15972:1073::-;16026:5;16217:8;16207:40;;16238:1;16229:10;;16240:5;;16207:40;16266:4;16256:36;;16283:1;16274:10;;16285:5;;16256:36;16352:4;16400:1;16395:27;;;;16436:1;16431:191;;;;16345:277;;16395:27;16413:1;16404:10;;16415:5;;;16431:191;16476:3;16466:8;16463:17;16460:43;;;16483:18;;:::i;:::-;16460:43;16532:8;16529:1;16525:16;16516:25;;16567:3;16560:5;16557:14;16554:40;;;16574:18;;:::i;:::-;16554:40;16607:5;;;16345:277;;16731:2;16721:8;16718:16;16712:3;16706:4;16703:13;16699:36;16681:2;16671:8;16668:16;16663:2;16657:4;16654:12;16650:35;16634:111;16631:246;;;16787:8;16781:4;16777:19;16768:28;;16822:3;16815:5;16812:14;16809:40;;;16829:18;;:::i;:::-;16809:40;16862:5;;16631:246;16902:42;16940:3;16930:8;16924:4;16921:1;16902:42;:::i;:::-;16887:57;;;;16976:4;16971:3;16967:14;16960:5;16957:25;16954:51;;;16985:18;;:::i;:::-;16954:51;17034:4;17027:5;17023:16;17014:25;;15972:1073;;;;;;:::o;17051:281::-;17109:5;17133:23;17151:4;17133:23;:::i;:::-;17125:31;;17177:25;17193:8;17177:25;:::i;:::-;17165:37;;17221:104;17258:66;17248:8;17242:4;17221:104;:::i;:::-;17212:113;;17051:281;;;;:::o;17338:348::-;17378:7;17401:20;17419:1;17401:20;:::i;:::-;17396:25;;17435:20;17453:1;17435:20;:::i;:::-;17430:25;;17623:1;17555:66;17551:74;17548:1;17545:81;17540:1;17533:9;17526:17;17522:105;17519:131;;;17630:18;;:::i;:::-;17519:131;17678:1;17675;17671:9;17660:20;;17338:348;;;;:::o;17692:143::-;17749:5;17780:6;17774:13;17765:22;;17796:33;17823:5;17796:33;:::i;:::-;17692:143;;;;:::o;17841:351::-;17911:6;17960:2;17948:9;17939:7;17935:23;17931:32;17928:119;;;17966:79;;:::i;:::-;17928:119;18086:1;18111:64;18167:7;18158:6;18147:9;18143:22;18111:64;:::i;:::-;18101:74;;18057:128;17841:351;;;;:::o;18198:180::-;18246:77;18243:1;18236:88;18343:4;18340:1;18333:15;18367:4;18364:1;18357:15;18384:185;18424:1;18441:20;18459:1;18441:20;:::i;:::-;18436:25;;18475:20;18493:1;18475:20;:::i;:::-;18470:25;;18514:1;18504:35;;18519:18;;:::i;:::-;18504:35;18561:1;18558;18554:9;18549:14;;18384:185;;;;:::o;18575:332::-;18696:4;18734:2;18723:9;18719:18;18711:26;;18747:71;18815:1;18804:9;18800:17;18791:6;18747:71;:::i;:::-;18828:72;18896:2;18885:9;18881:18;18872:6;18828:72;:::i;:::-;18575:332;;;;;:::o;18913:165::-;19053:17;19049:1;19041:6;19037:14;19030:41;18913:165;:::o;19084:366::-;19226:3;19247:67;19311:2;19306:3;19247:67;:::i;:::-;19240:74;;19323:93;19412:3;19323:93;:::i;:::-;19441:2;19436:3;19432:12;19425:19;;19084:366;;;:::o;19456:419::-;19622:4;19660:2;19649:9;19645:18;19637:26;;19709:9;19703:4;19699:20;19695:1;19684:9;19680:17;19673:47;19737:131;19863:4;19737:131;:::i;:::-;19729:139;;19456:419;;;:::o;19881:179::-;20021:31;20017:1;20009:6;20005:14;19998:55;19881:179;:::o;20066:366::-;20208:3;20229:67;20293:2;20288:3;20229:67;:::i;:::-;20222:74;;20305:93;20394:3;20305:93;:::i;:::-;20423:2;20418:3;20414:12;20407:19;;20066:366;;;:::o;20438:419::-;20604:4;20642:2;20631:9;20627:18;20619:26;;20691:9;20685:4;20681:20;20677:1;20666:9;20662:17;20655:47;20719:131;20845:4;20719:131;:::i;:::-;20711:139;;20438:419;;;:::o;20863:225::-;21003:34;20999:1;20991:6;20987:14;20980:58;21072:8;21067:2;21059:6;21055:15;21048:33;20863:225;:::o;21094:366::-;21236:3;21257:67;21321:2;21316:3;21257:67;:::i;:::-;21250:74;;21333:93;21422:3;21333:93;:::i;:::-;21451:2;21446:3;21442:12;21435:19;;21094:366;;;:::o;21466:419::-;21632:4;21670:2;21659:9;21655:18;21647:26;;21719:9;21713:4;21709:20;21705:1;21694:9;21690:17;21683:47;21747:131;21873:4;21747:131;:::i;:::-;21739:139;;21466:419;;;:::o;21891:85::-;21936:7;21965:5;21954:16;;21891:85;;;:::o;21982:158::-;22040:9;22073:61;22091:42;22100:32;22126:5;22100:32;:::i;:::-;22091:42;:::i;:::-;22073:61;:::i;:::-;22060:74;;21982:158;;;:::o;22146:147::-;22241:45;22280:5;22241:45;:::i;:::-;22236:3;22229:58;22146:147;;:::o;22299:348::-;22428:4;22466:2;22455:9;22451:18;22443:26;;22479:71;22547:1;22536:9;22532:17;22523:6;22479:71;:::i;:::-;22560:80;22636:2;22625:9;22621:18;22612:6;22560:80;:::i;:::-;22299:348;;;;;:::o;22653:332::-;22774:4;22812:2;22801:9;22797:18;22789:26;;22825:71;22893:1;22882:9;22878:17;22869:6;22825:71;:::i;:::-;22906:72;22974:2;22963:9;22959:18;22950:6;22906:72;:::i;:::-;22653:332;;;;;:::o;22991:305::-;23031:3;23050:20;23068:1;23050:20;:::i;:::-;23045:25;;23084:20;23102:1;23084:20;:::i;:::-;23079:25;;23238:1;23170:66;23166:74;23163:1;23160:81;23157:107;;;23244:18;;:::i;:::-;23157:107;23288:1;23285;23281:9;23274:16;;22991:305;;;;:::o;23302:162::-;23442:14;23438:1;23430:6;23426:14;23419:38;23302:162;:::o;23470:366::-;23612:3;23633:67;23697:2;23692:3;23633:67;:::i;:::-;23626:74;;23709:93;23798:3;23709:93;:::i;:::-;23827:2;23822:3;23818:12;23811:19;;23470:366;;;:::o;23842:419::-;24008:4;24046:2;24035:9;24031:18;24023:26;;24095:9;24089:4;24085:20;24081:1;24070:9;24066:17;24059:47;24123:131;24249:4;24123:131;:::i;:::-;24115:139;;23842:419;;;:::o;24267:171::-;24407:23;24403:1;24395:6;24391:14;24384:47;24267:171;:::o;24444:366::-;24586:3;24607:67;24671:2;24666:3;24607:67;:::i;:::-;24600:74;;24683:93;24772:3;24683:93;:::i;:::-;24801:2;24796:3;24792:12;24785:19;;24444:366;;;:::o;24816:419::-;24982:4;25020:2;25009:9;25005:18;24997:26;;25069:9;25063:4;25059:20;25055:1;25044:9;25040:17;25033:47;25097:131;25223:4;25097:131;:::i;:::-;25089:139;;24816:419;;;:::o;25241:168::-;25381:20;25377:1;25369:6;25365:14;25358:44;25241:168;:::o;25415:366::-;25557:3;25578:67;25642:2;25637:3;25578:67;:::i;:::-;25571:74;;25654:93;25743:3;25654:93;:::i;:::-;25772:2;25767:3;25763:12;25756:19;;25415:366;;;:::o;25787:419::-;25953:4;25991:2;25980:9;25976:18;25968:26;;26040:9;26034:4;26030:20;26026:1;26015:9;26011:17;26004:47;26068:131;26194:4;26068:131;:::i;:::-;26060:139;;25787:419;;;:::o;26212:174::-;26352:26;26348:1;26340:6;26336:14;26329:50;26212:174;:::o;26392:366::-;26534:3;26555:67;26619:2;26614:3;26555:67;:::i;:::-;26548:74;;26631:93;26720:3;26631:93;:::i;:::-;26749:2;26744:3;26740:12;26733:19;;26392:366;;;:::o;26764:419::-;26930:4;26968:2;26957:9;26953:18;26945:26;;27017:9;27011:4;27007:20;27003:1;26992:9;26988:17;26981:47;27045:131;27171:4;27045:131;:::i;:::-;27037:139;;26764:419;;;:::o;27189:143::-;27246:5;27277:6;27271:13;27262:22;;27293:33;27320:5;27293:33;:::i;:::-;27189:143;;;;:::o;27338:351::-;27408:6;27457:2;27445:9;27436:7;27432:23;27428:32;27425:119;;;27463:79;;:::i;:::-;27425:119;27583:1;27608:64;27664:7;27655:6;27644:9;27640:22;27608:64;:::i;:::-;27598:74;;27554:128;27338:351;;;;:::o;27695:114::-;27762:6;27796:5;27790:12;27780:22;;27695:114;;;:::o;27815:184::-;27914:11;27948:6;27943:3;27936:19;27988:4;27983:3;27979:14;27964:29;;27815:184;;;;:::o;28005:132::-;28072:4;28095:3;28087:11;;28125:4;28120:3;28116:14;28108:22;;28005:132;;;:::o;28143:108::-;28220:24;28238:5;28220:24;:::i;:::-;28215:3;28208:37;28143:108;;:::o;28257:179::-;28326:10;28347:46;28389:3;28381:6;28347:46;:::i;:::-;28425:4;28420:3;28416:14;28402:28;;28257:179;;;;:::o;28442:113::-;28512:4;28544;28539:3;28535:14;28527:22;;28442:113;;;:::o;28591:732::-;28710:3;28739:54;28787:5;28739:54;:::i;:::-;28809:86;28888:6;28883:3;28809:86;:::i;:::-;28802:93;;28919:56;28969:5;28919:56;:::i;:::-;28998:7;29029:1;29014:284;29039:6;29036:1;29033:13;29014:284;;;29115:6;29109:13;29142:63;29201:3;29186:13;29142:63;:::i;:::-;29135:70;;29228:60;29281:6;29228:60;:::i;:::-;29218:70;;29074:224;29061:1;29058;29054:9;29049:14;;29014:284;;;29018:14;29314:3;29307:10;;28715:608;;;28591:732;;;;:::o;29329:831::-;29592:4;29630:3;29619:9;29615:19;29607:27;;29644:71;29712:1;29701:9;29697:17;29688:6;29644:71;:::i;:::-;29725:80;29801:2;29790:9;29786:18;29777:6;29725:80;:::i;:::-;29852:9;29846:4;29842:20;29837:2;29826:9;29822:18;29815:48;29880:108;29983:4;29974:6;29880:108;:::i;:::-;29872:116;;29998:72;30066:2;30055:9;30051:18;30042:6;29998:72;:::i;:::-;30080:73;30148:3;30137:9;30133:19;30124:6;30080:73;:::i;:::-;29329:831;;;;;;;;:::o;30166:807::-;30415:4;30453:3;30442:9;30438:19;30430:27;;30467:71;30535:1;30524:9;30520:17;30511:6;30467:71;:::i;:::-;30548:72;30616:2;30605:9;30601:18;30592:6;30548:72;:::i;:::-;30630:80;30706:2;30695:9;30691:18;30682:6;30630:80;:::i;:::-;30720;30796:2;30785:9;30781:18;30772:6;30720:80;:::i;:::-;30810:73;30878:3;30867:9;30863:19;30854:6;30810:73;:::i;:::-;30893;30961:3;30950:9;30946:19;30937:6;30893:73;:::i;:::-;30166:807;;;;;;;;;:::o;30979:663::-;31067:6;31075;31083;31132:2;31120:9;31111:7;31107:23;31103:32;31100:119;;;31138:79;;:::i;:::-;31100:119;31258:1;31283:64;31339:7;31330:6;31319:9;31315:22;31283:64;:::i;:::-;31273:74;;31229:128;31396:2;31422:64;31478:7;31469:6;31458:9;31454:22;31422:64;:::i;:::-;31412:74;;31367:129;31535:2;31561:64;31617:7;31608:6;31597:9;31593:22;31561:64;:::i;:::-;31551:74;;31506:129;30979:663;;;;;:::o;31648:191::-;31688:4;31708:20;31726:1;31708:20;:::i;:::-;31703:25;;31742:20;31760:1;31742:20;:::i;:::-;31737:25;;31781:1;31778;31775:8;31772:34;;;31786:18;;:::i;:::-;31772:34;31831:1;31828;31824:9;31816:17;;31648:191;;;;:::o

Swarm Source

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