ETH Price: $3,088.18 (-0.01%)
Gas: 4 Gwei

Token

MoonCloud.ai (MCLOUD)
 

Overview

Max Total Supply

100,000,000 MCLOUD

Holders

292

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.95759497 MCLOUD

Value
$0.00
0xa2f0d9bbfaefaf69178f77e856ce4202dbada99a
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:
MoonCloud

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-10
*/

/*
Website: https://mooncloud.ai
Docs: https://docs.mooncloud.ai
X: https://twitter.com/mooncloud_ai
Telegram : https://t.me/mooncloud_ai
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.18;

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

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

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

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

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

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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;
    }
}

contract MoonCloud is Context, IERC20, Ownable {
    using SafeMath for uint256;

    mapping(address => uint256) private _rOwned;

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

    uint8 private constant _decimals = 9;
    string private constant _name = "MoonCloud.ai";
    string private constant _symbol = "MCLOUD";

    uint256 private _rTotal = (MAX - (MAX % _totalSupply));
    uint256 private constant MAX = ~uint256(0);

    uint256 private _feeOnBuy = 5;
    uint256 private _feeOnSell = 5;

    uint256 private _backedUpFee = _fee;
    uint256 private _fee = _feeOnSell;

    address payable private _treasuryAddress =
        payable(0x834b77c5df6689DA44cCF2a6c6070d005884f6d6);

    bool private _maxTxn = false;
    bool private _maxWallet = false;

    uint256 private constant _totalSupply = 100_000_000 * 10**9;
    uint256 public _maxTxnSize = 1_000_000 * 10**9;
    uint256 public _maxHoldSize = 2_000_000 * 10**9;
    uint256 public _minSwappableAmount = totalSupply() / 2_000;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private autoSwapEnabled = true;
    bool private swapping = false;

    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_treasuryAddress] = true;
        _isExcludedFromFee[address(0xdead)] = true;

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

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

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

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

    function _getTValues(uint256 tAmount, uint256 fee)
        private
        pure
        returns (uint256, uint256)
    {
        uint256 tTeam = tAmount.mul(fee).div(100);
        uint256 tTransferAmount = tAmount.sub(tTeam);
        return (tTransferAmount, tTeam);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        return (_rTotal, _totalSupply);
    }

    function toggleautoSwapEnabled(bool _autoSwapEnabled) public onlyOwner {
        autoSwapEnabled = _autoSwapEnabled;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount has to be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    event TradingEnabled(bool tradingEnabled);

    bool public tradingEnabled;
    
    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;

        emit TradingEnabled(tradingEnabled);
    }

    function dropFee() private {
        if (_fee == 0) return;

        _backedUpFee = _fee;

        _fee = 0;
    }

    function restoreFee() private {
        _fee = _backedUpFee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "Can't approve from zero address");
        require(spender != address(0), "Can't approve to zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "Cant transfer from address zero");
        require(to != address(0), "Cant transfer to address zero");
        require(amount > 0, "Amount should be above zero");

        if (from != owner() && to != owner()) {
            //Trade start check
            if (!tradingEnabled) {
                require(
                    from == owner(),
                    "Only owner can trade before trading activation"
                );
            }

            require(amount <= _maxTxnSize, "Exceeded max transaction limit");

            if (to != uniswapV2Pair) {
                require(
                    balanceOf(to) + amount < _maxHoldSize,
                    "Exceeds max hold balance"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool swapAllowed = contractTokenBalance >= _minSwappableAmount;

            if (contractTokenBalance >= _maxTxnSize) {
                contractTokenBalance = _maxTxnSize;
            }

            if (
                swapAllowed &&
                !swapping &&
                from != uniswapV2Pair &&
                autoSwapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                covertToNative(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    transferEthToDev(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _fee = _feeOnBuy;
            }

            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _fee = _feeOnSell;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function covertToNative(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function transferEthToDev(uint256 amount) private {
        _treasuryAddress.transfer(amount);
    }

    function forceSwap() external {
        require(_msgSender() == _treasuryAddress);
        uint256 contractETHBalance = address(this).balance;
        transferEthToDev(contractETHBalance);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) dropFee();
        _transferApplyingFees(sender, recipient, amount);
        if (!takeFee) restoreFee();
    }


    function recover(address token) external {
        require(_msgSender() == _treasuryAddress);
        require(token != address(this));
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        
        IERC20(token).transfer(msg.sender, IERC20(token).balanceOf(address(this)));
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "the transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function setMinSwapTokensThreshold(uint256 minSwappableAmount)
        public
        onlyOwner
    {
        _minSwappableAmount = minSwappableAmount;
    }

    function _transferApplyingFees(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 tTransferAmount,
            uint256 tTeam
        ) = _getFeeValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _transferFeeDev(tTeam);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFeeDev(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _getFeeValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tTeam) = _getTValues(tAmount, _fee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount) = _getRValues(
            tAmount,
            tTeam,
            currentRate
        );
        return (rAmount, rTransferAmount, tTransferAmount, tTeam);
    }

    function updateFee(uint256 feeOnBuy, uint256 feeOnSell) public onlyOwner {
        require(
            feeOnBuy >= 0 && feeOnBuy <= 30,
            "Buy tax must be between 0% and 30%"
        );
        require(
            feeOnSell >= 0 && feeOnSell <= 30,
            "Sell tax must be between 0% and 30%"
        );

        _feeOnBuy = feeOnBuy;
        _feeOnSell = feeOnSell;
    }

    //Set maximum transaction
    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
    require(
        maxTxAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max Transaction limit cannot be lower than 1% of total supply");
        
        _maxTxnSize = maxTxAmount;
    }

    receive() external payable {}

    function setMaxHoldSize(uint256 maxHoldSize) public onlyOwner {
        require(maxHoldSize >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
    
        _maxHoldSize = maxHoldSize;
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tTeam,
        uint256 currentRate
    ) private pure returns (uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rTeam);
        return (rAmount, rTransferAmount);
    }
}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"tradingEnabled","type":"bool"}],"name":"TradingEnabled","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":"_maxHoldSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxnSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minSwappableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"recover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHoldSize","type":"uint256"}],"name":"setMaxHoldSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minSwappableAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoSwapEnabled","type":"bool"}],"name":"toggleautoSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeOnBuy","type":"uint256"},{"internalType":"uint256","name":"feeOnSell","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405267016345785d8a00005f196200001b9190620006b7565b5f196200002991906200071b565b6005556005600655600560075560095460085560075460095573834b77c5df6689da44ccf2a6c6070d005884f6d6600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600a60146101000a81548160ff0219169083151502179055505f600a60156101000a81548160ff02191690831515021790555066038d7ea4c68000600b5566071afd498d0000600c556107d0620000f36200064460201b60201c565b620000ff919062000755565b600d556001600f60146101000a81548160ff0219169083151502179055505f600f60156101000a81548160ff02191690831515021790555034801562000143575f80fd5b505f620001556200065360201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060055460025f620002076200065360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f737a250d5630b4cf539739df2c5dacb4c659f2488d905080600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200030c9190620007f1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000372573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003989190620007f1565b6040518363ffffffff1660e01b8152600401620003b792919062000832565b6020604051808303815f875af1158015620003d4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003fa9190620007f1565b600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f620004a36200065a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005cf6200065360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a00006040516200063591906200086e565b60405180910390a35062000889565b5f67016345785d8a0000905090565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620006c38262000681565b9150620006d08362000681565b925082620006e357620006e26200068a565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620007278262000681565b9150620007348362000681565b92508282039050818111156200074f576200074e620006ee565b5b92915050565b5f620007618262000681565b91506200076e8362000681565b9250826200078157620007806200068a565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620007bb8262000790565b9050919050565b620007cd81620007af565b8114620007d8575f80fd5b50565b5f81519050620007eb81620007c2565b92915050565b5f602082840312156200080957620008086200078c565b5b5f6200081884828501620007db565b91505092915050565b6200082c81620007af565b82525050565b5f604082019050620008475f83018562000821565b62000856602083018462000821565b9392505050565b620008688162000681565b82525050565b5f602082019050620008835f8301846200085d565b92915050565b613b9f80620008975f395ff3fe60806040526004361061019f575f3560e01c8063715018a6116100eb5780639e0ba25d11610089578063dd62ed3e11610063578063dd62ed3e14610582578063df778d26146105be578063e5c43633146105d4578063f2fde38b146105fe576101a6565b80639e0ba25d146104f4578063a9059cbb1461051e578063c492f0461461055a576101a6565b80638a8c523c116100c55780638a8c523c146104625780638da5cb5b1461047857806395d89b41146104a257806398a5c315146104cc576101a6565b8063715018a6146103fc57806374010ece14610412578063874949c91461043a576101a6565b80632740c197116101585780634ada218b116101325780634ada218b14610344578063577009e41461036e5780636279c6941461039657806370a08231146103c0576101a6565b80632740c197146102c8578063313ce567146102f057806349bd5a5e1461031a576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630cd865ec146102105780631694505e1461023857806318160ddd1461026257806323b872dd1461028c576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be610626565b6040516101cb91906128fa565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906129af565b610663565b6040516102079190612a07565b60405180910390f35b34801561021b575f80fd5b5061023660048036038101906102319190612a20565b610680565b005b348015610243575f80fd5b5061024c610889565b6040516102599190612aa6565b60405180910390f35b34801561026d575f80fd5b506102766108ae565b6040516102839190612ace565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612ae7565b6108bd565b6040516102bf9190612a07565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612b37565b610991565b005b3480156102fb575f80fd5b50610304610ad7565b6040516103119190612b90565b60405180910390f35b348015610325575f80fd5b5061032e610adf565b60405161033b9190612bb8565b60405180910390f35b34801561034f575f80fd5b50610358610b04565b6040516103659190612a07565b60405180910390f35b348015610379575f80fd5b50610394600480360381019061038f9190612bd1565b610b17565b005b3480156103a1575f80fd5b506103aa610c29565b6040516103b79190612ace565b60405180910390f35b3480156103cb575f80fd5b506103e660048036038101906103e19190612a20565b610c2f565b6040516103f39190612ace565b60405180910390f35b348015610407575f80fd5b50610410610c7d565b005b34801561041d575f80fd5b5061043860048036038101906104339190612bd1565b610dcb565b005b348015610445575f80fd5b50610460600480360381019061045b9190612c26565b610edd565b005b34801561046d575f80fd5b50610476610f8e565b005b348015610483575f80fd5b5061048c6110d5565b6040516104999190612bb8565b60405180910390f35b3480156104ad575f80fd5b506104b66110fc565b6040516104c391906128fa565b60405180910390f35b3480156104d7575f80fd5b506104f260048036038101906104ed9190612bd1565b611139565b005b3480156104ff575f80fd5b506105086111d7565b6040516105159190612ace565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f91906129af565b6111dd565b6040516105519190612a07565b60405180910390f35b348015610565575f80fd5b50610580600480360381019061057b9190612cb2565b6111fa565b005b34801561058d575f80fd5b506105a860048036038101906105a39190612d0f565b61132f565b6040516105b59190612ace565b60405180910390f35b3480156105c9575f80fd5b506105d26113b1565b005b3480156105df575f80fd5b506105e8611420565b6040516105f59190612ace565b60405180910390f35b348015610609575f80fd5b50610624600480360381019061061f9190612a20565b611426565b005b60606040518060400160405280600c81526020017f4d6f6f6e436c6f75642e61690000000000000000000000000000000000000000815250905090565b5f61067661066f6115e3565b84846115ea565b6001905092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106c06115e3565b73ffffffffffffffffffffffffffffffffffffffff16146106df575f80fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610716575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610792573373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561078c573d5f803e3d5ffd5b50610886565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107e89190612bb8565b602060405180830381865afa158015610803573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108279190612d61565b6040518363ffffffff1660e01b8152600401610844929190612d8c565b6020604051808303815f875af1158015610860573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108849190612dc7565b505b50565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f67016345785d8a0000905090565b5f6108c98484846117ad565b610986846108d56115e3565b61098185604051806060016040528060258152602001613b456025913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6109386115e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f209092919063ffffffff16565b6115ea565b600190509392505050565b6109996115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90612e3c565b60405180910390fd5b5f8210158015610a365750601e8211155b610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90612eca565b60405180910390fd5b5f8110158015610a865750601e8111155b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612f58565b60405180910390fd5b81600681905550806007819055505050565b5f6009905090565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60169054906101000a900460ff1681565b610b1f6115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290612e3c565b60405180910390fd5b6064610bb5610ad7565b600a610bc191906130d2565b610bc96108ae565b610bd39190613149565b610bdd9190613149565b811015610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906131e9565b60405180910390fd5b80600c8190555050565b600c5481565b5f610c7660025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f82565b9050919050565b610c856115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612e3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610dd36115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690612e3c565b60405180910390fd5b6064610e69610ad7565b600a610e7591906130d2565b610e7d6108ae565b610e879190613149565b610e919190613149565b811015610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613277565b60405180910390fd5b80600b8190555050565b610ee56115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890612e3c565b60405180910390fd5b80600f60146101000a81548160ff02191690831515021790555050565b610f966115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990612e3c565b60405180910390fd5b600f60169054906101000a900460ff1615611072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611069906132df565b60405180910390fd5b6001600f60166101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a600f60169054906101000a900460ff166040516110cb9190612a07565b60405180910390a1565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4d434c4f55440000000000000000000000000000000000000000000000000000815250905090565b6111416115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490612e3c565b60405180910390fd5b80600d8190555050565b600b5481565b5f6111f06111e96115e3565b84846117ad565b6001905092915050565b6112026115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590612e3c565b60405180910390fd5b5f5b83839050811015611329578160045f8686858181106112b2576112b16132fd565b5b90506020020160208101906112c79190612a20565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806113219061332a565b915050611290565b50505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113f16115e3565b73ffffffffffffffffffffffffffffffffffffffff1614611410575f80fd5b5f47905061141d81611fee565b50565b600d5481565b61142e6115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190612e3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f906133e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613449565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd906134b1565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117a09190612ace565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290613519565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613581565b60405180910390fd5b5f81116118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c2906135e9565b60405180910390fd5b6118d36110d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561194157506119116110d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3f57600f60169054906101000a900460ff166119d0576119626110d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613677565b60405180910390fd5b5b600b54811115611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c906136df565b60405180910390fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ac157600c5481611a7684610c2f565b611a8091906136fd565b10611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab79061377a565b60405180910390fd5b5b5f611acb30610c2f565b90505f600d548210159050600b548210611ae557600b5491505b808015611aff5750600f60159054906101000a900460ff16155b8015611b585750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611b705750600f60149054906101000a900460ff165b8015611bc3575060045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611c16575060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c3c57611c2482612056565b5f4790505f811115611c3a57611c3947611fee565b5b505b50505b5f6001905060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611cdf575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611d905750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611d8f5750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611d9d575f9050611f0e565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611e465750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611e55576006546009819055505b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611efe5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611f0d576007546009819055505b5b611f1a848484846122c1565b50505050565b5f838311158290611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e91906128fa565b60405180910390fd5b505f8385611f759190613798565b9050809150509392505050565b5f600554821115611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061383b565b60405180910390fd5b5f611fd16122ee565b9050611fe6818461231790919063ffffffff16565b915050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612052573d5f803e3d5ffd5b5050565b6001600f60156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff81111561208d5761208c613859565b5b6040519080825280602002602001820160405280156120bb5781602001602082028036833780820191505090505b50905030815f815181106120d2576120d16132fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219a919061389a565b816001815181106121ae576121ad6132fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061221430600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115ea565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016122769594939291906139b5565b5f604051808303815f87803b15801561228d575f80fd5b505af115801561229f573d5f803e3d5ffd5b50505050505f600f60156101000a81548160ff02191690831515021790555050565b806122cf576122ce612360565b5b6122da84848461237d565b806122e8576122e761252b565b5b50505050565b5f805f6122f9612536565b91509150612310818361231790919063ffffffff16565b9250505090565b5f61235883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061254c565b905092915050565b5f600954031561237b576009546008819055505f6009819055505b565b5f805f8061238a856125ad565b93509350935093506123e28460025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125f790919063ffffffff16565b60025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124738360025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461264090919063ffffffff16565b60025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124bd8161269d565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251a9190612ace565b60405180910390a350505050505050565b600854600981905550565b5f8060055467016345785d8a0000915091509091565b5f8083118290612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258991906128fa565b60405180910390fd5b505f83856125a09190613149565b9050809150509392505050565b5f805f805f806125bf87600954612754565b915091505f6125cc6122ee565b90505f806125db8a85856127a4565b9150915081818686985098509850985050505050509193509193565b5f61263883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f20565b905092915050565b5f80828461264e91906136fd565b905083811015612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a90613a57565b60405180910390fd5b8091505092915050565b5f6126a66122ee565b90505f6126bc82846127f990919063ffffffff16565b905061270e8160025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461264090919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b5f805f61277d606461276f86886127f990919063ffffffff16565b61231790919063ffffffff16565b90505f61279382876125f790919063ffffffff16565b905080829350935050509250929050565b5f805f6127ba84876127f990919063ffffffff16565b90505f6127d085876127f990919063ffffffff16565b90505f6127e682846125f790919063ffffffff16565b9050828194509450505050935093915050565b5f808303612809575f905061286a565b5f82846128169190613a75565b90508284826128259190613149565b14612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90613b26565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156128a757808201518184015260208101905061288c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6128cc82612870565b6128d6818561287a565b93506128e681856020860161288a565b6128ef816128b2565b840191505092915050565b5f6020820190508181035f83015261291281846128c2565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61294b82612922565b9050919050565b61295b81612941565b8114612965575f80fd5b50565b5f8135905061297681612952565b92915050565b5f819050919050565b61298e8161297c565b8114612998575f80fd5b50565b5f813590506129a981612985565b92915050565b5f80604083850312156129c5576129c461291a565b5b5f6129d285828601612968565b92505060206129e38582860161299b565b9150509250929050565b5f8115159050919050565b612a01816129ed565b82525050565b5f602082019050612a1a5f8301846129f8565b92915050565b5f60208284031215612a3557612a3461291a565b5b5f612a4284828501612968565b91505092915050565b5f819050919050565b5f612a6e612a69612a6484612922565b612a4b565b612922565b9050919050565b5f612a7f82612a54565b9050919050565b5f612a9082612a75565b9050919050565b612aa081612a86565b82525050565b5f602082019050612ab95f830184612a97565b92915050565b612ac88161297c565b82525050565b5f602082019050612ae15f830184612abf565b92915050565b5f805f60608486031215612afe57612afd61291a565b5b5f612b0b86828701612968565b9350506020612b1c86828701612968565b9250506040612b2d8682870161299b565b9150509250925092565b5f8060408385031215612b4d57612b4c61291a565b5b5f612b5a8582860161299b565b9250506020612b6b8582860161299b565b9150509250929050565b5f60ff82169050919050565b612b8a81612b75565b82525050565b5f602082019050612ba35f830184612b81565b92915050565b612bb281612941565b82525050565b5f602082019050612bcb5f830184612ba9565b92915050565b5f60208284031215612be657612be561291a565b5b5f612bf38482850161299b565b91505092915050565b612c05816129ed565b8114612c0f575f80fd5b50565b5f81359050612c2081612bfc565b92915050565b5f60208284031215612c3b57612c3a61291a565b5b5f612c4884828501612c12565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c7257612c71612c51565b5b8235905067ffffffffffffffff811115612c8f57612c8e612c55565b5b602083019150836020820283011115612cab57612caa612c59565b5b9250929050565b5f805f60408486031215612cc957612cc861291a565b5b5f84013567ffffffffffffffff811115612ce657612ce561291e565b5b612cf286828701612c5d565b93509350506020612d0586828701612c12565b9150509250925092565b5f8060408385031215612d2557612d2461291a565b5b5f612d3285828601612968565b9250506020612d4385828601612968565b9150509250929050565b5f81519050612d5b81612985565b92915050565b5f60208284031215612d7657612d7561291a565b5b5f612d8384828501612d4d565b91505092915050565b5f604082019050612d9f5f830185612ba9565b612dac6020830184612abf565b9392505050565b5f81519050612dc181612bfc565b92915050565b5f60208284031215612ddc57612ddb61291a565b5b5f612de984828501612db3565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612e2660208361287a565b9150612e3182612df2565b602082019050919050565b5f6020820190508181035f830152612e5381612e1a565b9050919050565b7f42757920746178206d757374206265206265747765656e20302520616e6420335f8201527f3025000000000000000000000000000000000000000000000000000000000000602082015250565b5f612eb460228361287a565b9150612ebf82612e5a565b604082019050919050565b5f6020820190508181035f830152612ee181612ea8565b9050919050565b7f53656c6c20746178206d757374206265206265747765656e20302520616e64205f8201527f3330250000000000000000000000000000000000000000000000000000000000602082015250565b5f612f4260238361287a565b9150612f4d82612ee8565b604082019050919050565b5f6020820190508181035f830152612f6f81612f36565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115612ff857808604811115612fd457612fd3612f76565b5b6001851615612fe35780820291505b8081029050612ff185612fa3565b9450612fb8565b94509492505050565b5f8261301057600190506130cb565b8161301d575f90506130cb565b8160018114613033576002811461303d5761306c565b60019150506130cb565b60ff84111561304f5761304e612f76565b5b8360020a91508482111561306657613065612f76565b5b506130cb565b5060208310610133831016604e8410600b84101617156130a15782820a90508381111561309c5761309b612f76565b5b6130cb565b6130ae8484846001612faf565b925090508184048111156130c5576130c4612f76565b5b81810290505b9392505050565b5f6130dc8261297c565b91506130e783612b75565b92506131147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613001565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131538261297c565b915061315e8361297c565b92508261316e5761316d61311c565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f6131d3602d8361287a565b91506131de82613179565b604082019050919050565b5f6020820190508181035f830152613200816131c7565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69742063616e6e6f74206265205f8201527f6c6f776572207468616e203125206f6620746f74616c20737570706c79000000602082015250565b5f613261603d8361287a565b915061326c82613207565b604082019050919050565b5f6020820190508181035f83015261328e81613255565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e00000000000000005f82015250565b5f6132c960188361287a565b91506132d482613295565b602082019050919050565b5f6020820190508181035f8301526132f6816132bd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6133348261297c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361336657613365612f76565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6133cb60268361287a565b91506133d682613371565b604082019050919050565b5f6020820190508181035f8301526133f8816133bf565b9050919050565b7f43616e277420617070726f76652066726f6d207a65726f2061646472657373005f82015250565b5f613433601f8361287a565b915061343e826133ff565b602082019050919050565b5f6020820190508181035f83015261346081613427565b9050919050565b7f43616e277420617070726f766520746f207a65726f20616464726573730000005f82015250565b5f61349b601d8361287a565b91506134a682613467565b602082019050919050565b5f6020820190508181035f8301526134c88161348f565b9050919050565b7f43616e74207472616e736665722066726f6d2061646472657373207a65726f005f82015250565b5f613503601f8361287a565b915061350e826134cf565b602082019050919050565b5f6020820190508181035f830152613530816134f7565b9050919050565b7f43616e74207472616e7366657220746f2061646472657373207a65726f0000005f82015250565b5f61356b601d8361287a565b915061357682613537565b602082019050919050565b5f6020820190508181035f8301526135988161355f565b9050919050565b7f416d6f756e742073686f756c642062652061626f7665207a65726f00000000005f82015250565b5f6135d3601b8361287a565b91506135de8261359f565b602082019050919050565b5f6020820190508181035f830152613600816135c7565b9050919050565b7f4f6e6c79206f776e65722063616e207472616465206265666f726520747261645f8201527f696e672061637469766174696f6e000000000000000000000000000000000000602082015250565b5f613661602e8361287a565b915061366c82613607565b604082019050919050565b5f6020820190508181035f83015261368e81613655565b9050919050565b7f4578636565646564206d6178207472616e73616374696f6e206c696d697400005f82015250565b5f6136c9601e8361287a565b91506136d482613695565b602082019050919050565b5f6020820190508181035f8301526136f6816136bd565b9050919050565b5f6137078261297c565b91506137128361297c565b925082820190508082111561372a57613729612f76565b5b92915050565b7f45786365656473206d617820686f6c642062616c616e636500000000000000005f82015250565b5f61376460188361287a565b915061376f82613730565b602082019050919050565b5f6020820190508181035f83015261379181613758565b9050919050565b5f6137a28261297c565b91506137ad8361297c565b92508282039050818111156137c5576137c4612f76565b5b92915050565b7f416d6f756e742068617320746f206265206c657373207468616e20746f74616c5f8201527f207265666c656374696f6e730000000000000000000000000000000000000000602082015250565b5f613825602c8361287a565b9150613830826137cb565b604082019050919050565b5f6020820190508181035f83015261385281613819565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061389481612952565b92915050565b5f602082840312156138af576138ae61291a565b5b5f6138bc84828501613886565b91505092915050565b5f819050919050565b5f6138e86138e36138de846138c5565b612a4b565b61297c565b9050919050565b6138f8816138ce565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61393081612941565b82525050565b5f6139418383613927565b60208301905092915050565b5f602082019050919050565b5f613963826138fe565b61396d8185613908565b935061397883613918565b805f5b838110156139a857815161398f8882613936565b975061399a8361394d565b92505060018101905061397b565b5085935050505092915050565b5f60a0820190506139c85f830188612abf565b6139d560208301876138ef565b81810360408301526139e78186613959565b90506139f66060830185612ba9565b613a036080830184612abf565b9695505050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613a41601b8361287a565b9150613a4c82613a0d565b602082019050919050565b5f6020820190508181035f830152613a6e81613a35565b9050919050565b5f613a7f8261297c565b9150613a8a8361297c565b9250828202613a988161297c565b91508282048414831517613aaf57613aae612f76565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b1060218361287a565b9150613b1b82613ab6565b604082019050919050565b5f6020820190508181035f830152613b3d81613b04565b905091905056fe746865207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e9a09da32f9afea188b79e290f04b569ed4437bee81a5c155e14d5ab5ff02a3a64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061019f575f3560e01c8063715018a6116100eb5780639e0ba25d11610089578063dd62ed3e11610063578063dd62ed3e14610582578063df778d26146105be578063e5c43633146105d4578063f2fde38b146105fe576101a6565b80639e0ba25d146104f4578063a9059cbb1461051e578063c492f0461461055a576101a6565b80638a8c523c116100c55780638a8c523c146104625780638da5cb5b1461047857806395d89b41146104a257806398a5c315146104cc576101a6565b8063715018a6146103fc57806374010ece14610412578063874949c91461043a576101a6565b80632740c197116101585780634ada218b116101325780634ada218b14610344578063577009e41461036e5780636279c6941461039657806370a08231146103c0576101a6565b80632740c197146102c8578063313ce567146102f057806349bd5a5e1461031a576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630cd865ec146102105780631694505e1461023857806318160ddd1461026257806323b872dd1461028c576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be610626565b6040516101cb91906128fa565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906129af565b610663565b6040516102079190612a07565b60405180910390f35b34801561021b575f80fd5b5061023660048036038101906102319190612a20565b610680565b005b348015610243575f80fd5b5061024c610889565b6040516102599190612aa6565b60405180910390f35b34801561026d575f80fd5b506102766108ae565b6040516102839190612ace565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612ae7565b6108bd565b6040516102bf9190612a07565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612b37565b610991565b005b3480156102fb575f80fd5b50610304610ad7565b6040516103119190612b90565b60405180910390f35b348015610325575f80fd5b5061032e610adf565b60405161033b9190612bb8565b60405180910390f35b34801561034f575f80fd5b50610358610b04565b6040516103659190612a07565b60405180910390f35b348015610379575f80fd5b50610394600480360381019061038f9190612bd1565b610b17565b005b3480156103a1575f80fd5b506103aa610c29565b6040516103b79190612ace565b60405180910390f35b3480156103cb575f80fd5b506103e660048036038101906103e19190612a20565b610c2f565b6040516103f39190612ace565b60405180910390f35b348015610407575f80fd5b50610410610c7d565b005b34801561041d575f80fd5b5061043860048036038101906104339190612bd1565b610dcb565b005b348015610445575f80fd5b50610460600480360381019061045b9190612c26565b610edd565b005b34801561046d575f80fd5b50610476610f8e565b005b348015610483575f80fd5b5061048c6110d5565b6040516104999190612bb8565b60405180910390f35b3480156104ad575f80fd5b506104b66110fc565b6040516104c391906128fa565b60405180910390f35b3480156104d7575f80fd5b506104f260048036038101906104ed9190612bd1565b611139565b005b3480156104ff575f80fd5b506105086111d7565b6040516105159190612ace565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f91906129af565b6111dd565b6040516105519190612a07565b60405180910390f35b348015610565575f80fd5b50610580600480360381019061057b9190612cb2565b6111fa565b005b34801561058d575f80fd5b506105a860048036038101906105a39190612d0f565b61132f565b6040516105b59190612ace565b60405180910390f35b3480156105c9575f80fd5b506105d26113b1565b005b3480156105df575f80fd5b506105e8611420565b6040516105f59190612ace565b60405180910390f35b348015610609575f80fd5b50610624600480360381019061061f9190612a20565b611426565b005b60606040518060400160405280600c81526020017f4d6f6f6e436c6f75642e61690000000000000000000000000000000000000000815250905090565b5f61067661066f6115e3565b84846115ea565b6001905092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106c06115e3565b73ffffffffffffffffffffffffffffffffffffffff16146106df575f80fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610716575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610792573373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561078c573d5f803e3d5ffd5b50610886565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107e89190612bb8565b602060405180830381865afa158015610803573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108279190612d61565b6040518363ffffffff1660e01b8152600401610844929190612d8c565b6020604051808303815f875af1158015610860573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108849190612dc7565b505b50565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f67016345785d8a0000905090565b5f6108c98484846117ad565b610986846108d56115e3565b61098185604051806060016040528060258152602001613b456025913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6109386115e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f209092919063ffffffff16565b6115ea565b600190509392505050565b6109996115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90612e3c565b60405180910390fd5b5f8210158015610a365750601e8211155b610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90612eca565b60405180910390fd5b5f8110158015610a865750601e8111155b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612f58565b60405180910390fd5b81600681905550806007819055505050565b5f6009905090565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60169054906101000a900460ff1681565b610b1f6115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290612e3c565b60405180910390fd5b6064610bb5610ad7565b600a610bc191906130d2565b610bc96108ae565b610bd39190613149565b610bdd9190613149565b811015610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906131e9565b60405180910390fd5b80600c8190555050565b600c5481565b5f610c7660025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f82565b9050919050565b610c856115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890612e3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610dd36115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690612e3c565b60405180910390fd5b6064610e69610ad7565b600a610e7591906130d2565b610e7d6108ae565b610e879190613149565b610e919190613149565b811015610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613277565b60405180910390fd5b80600b8190555050565b610ee56115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890612e3c565b60405180910390fd5b80600f60146101000a81548160ff02191690831515021790555050565b610f966115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990612e3c565b60405180910390fd5b600f60169054906101000a900460ff1615611072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611069906132df565b60405180910390fd5b6001600f60166101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a600f60169054906101000a900460ff166040516110cb9190612a07565b60405180910390a1565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4d434c4f55440000000000000000000000000000000000000000000000000000815250905090565b6111416115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490612e3c565b60405180910390fd5b80600d8190555050565b600b5481565b5f6111f06111e96115e3565b84846117ad565b6001905092915050565b6112026115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590612e3c565b60405180910390fd5b5f5b83839050811015611329578160045f8686858181106112b2576112b16132fd565b5b90506020020160208101906112c79190612a20565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806113219061332a565b915050611290565b50505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113f16115e3565b73ffffffffffffffffffffffffffffffffffffffff1614611410575f80fd5b5f47905061141d81611fee565b50565b600d5481565b61142e6115e3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190612e3c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f906133e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613449565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd906134b1565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117a09190612ace565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290613519565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613581565b60405180910390fd5b5f81116118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c2906135e9565b60405180910390fd5b6118d36110d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561194157506119116110d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3f57600f60169054906101000a900460ff166119d0576119626110d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613677565b60405180910390fd5b5b600b54811115611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c906136df565b60405180910390fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ac157600c5481611a7684610c2f565b611a8091906136fd565b10611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab79061377a565b60405180910390fd5b5b5f611acb30610c2f565b90505f600d548210159050600b548210611ae557600b5491505b808015611aff5750600f60159054906101000a900460ff16155b8015611b585750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611b705750600f60149054906101000a900460ff165b8015611bc3575060045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611c16575060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c3c57611c2482612056565b5f4790505f811115611c3a57611c3947611fee565b5b505b50505b5f6001905060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611cdf575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611d905750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611d8f5750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611d9d575f9050611f0e565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611e465750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611e55576006546009819055505b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611efe5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611f0d576007546009819055505b5b611f1a848484846122c1565b50505050565b5f838311158290611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e91906128fa565b60405180910390fd5b505f8385611f759190613798565b9050809150509392505050565b5f600554821115611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061383b565b60405180910390fd5b5f611fd16122ee565b9050611fe6818461231790919063ffffffff16565b915050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612052573d5f803e3d5ffd5b5050565b6001600f60156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff81111561208d5761208c613859565b5b6040519080825280602002602001820160405280156120bb5781602001602082028036833780820191505090505b50905030815f815181106120d2576120d16132fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219a919061389a565b816001815181106121ae576121ad6132fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061221430600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115ea565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016122769594939291906139b5565b5f604051808303815f87803b15801561228d575f80fd5b505af115801561229f573d5f803e3d5ffd5b50505050505f600f60156101000a81548160ff02191690831515021790555050565b806122cf576122ce612360565b5b6122da84848461237d565b806122e8576122e761252b565b5b50505050565b5f805f6122f9612536565b91509150612310818361231790919063ffffffff16565b9250505090565b5f61235883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061254c565b905092915050565b5f600954031561237b576009546008819055505f6009819055505b565b5f805f8061238a856125ad565b93509350935093506123e28460025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125f790919063ffffffff16565b60025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124738360025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461264090919063ffffffff16565b60025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124bd8161269d565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251a9190612ace565b60405180910390a350505050505050565b600854600981905550565b5f8060055467016345785d8a0000915091509091565b5f8083118290612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258991906128fa565b60405180910390fd5b505f83856125a09190613149565b9050809150509392505050565b5f805f805f806125bf87600954612754565b915091505f6125cc6122ee565b90505f806125db8a85856127a4565b9150915081818686985098509850985050505050509193509193565b5f61263883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f20565b905092915050565b5f80828461264e91906136fd565b905083811015612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a90613a57565b60405180910390fd5b8091505092915050565b5f6126a66122ee565b90505f6126bc82846127f990919063ffffffff16565b905061270e8160025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461264090919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b5f805f61277d606461276f86886127f990919063ffffffff16565b61231790919063ffffffff16565b90505f61279382876125f790919063ffffffff16565b905080829350935050509250929050565b5f805f6127ba84876127f990919063ffffffff16565b90505f6127d085876127f990919063ffffffff16565b90505f6127e682846125f790919063ffffffff16565b9050828194509450505050935093915050565b5f808303612809575f905061286a565b5f82846128169190613a75565b90508284826128259190613149565b14612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90613b26565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156128a757808201518184015260208101905061288c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6128cc82612870565b6128d6818561287a565b93506128e681856020860161288a565b6128ef816128b2565b840191505092915050565b5f6020820190508181035f83015261291281846128c2565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61294b82612922565b9050919050565b61295b81612941565b8114612965575f80fd5b50565b5f8135905061297681612952565b92915050565b5f819050919050565b61298e8161297c565b8114612998575f80fd5b50565b5f813590506129a981612985565b92915050565b5f80604083850312156129c5576129c461291a565b5b5f6129d285828601612968565b92505060206129e38582860161299b565b9150509250929050565b5f8115159050919050565b612a01816129ed565b82525050565b5f602082019050612a1a5f8301846129f8565b92915050565b5f60208284031215612a3557612a3461291a565b5b5f612a4284828501612968565b91505092915050565b5f819050919050565b5f612a6e612a69612a6484612922565b612a4b565b612922565b9050919050565b5f612a7f82612a54565b9050919050565b5f612a9082612a75565b9050919050565b612aa081612a86565b82525050565b5f602082019050612ab95f830184612a97565b92915050565b612ac88161297c565b82525050565b5f602082019050612ae15f830184612abf565b92915050565b5f805f60608486031215612afe57612afd61291a565b5b5f612b0b86828701612968565b9350506020612b1c86828701612968565b9250506040612b2d8682870161299b565b9150509250925092565b5f8060408385031215612b4d57612b4c61291a565b5b5f612b5a8582860161299b565b9250506020612b6b8582860161299b565b9150509250929050565b5f60ff82169050919050565b612b8a81612b75565b82525050565b5f602082019050612ba35f830184612b81565b92915050565b612bb281612941565b82525050565b5f602082019050612bcb5f830184612ba9565b92915050565b5f60208284031215612be657612be561291a565b5b5f612bf38482850161299b565b91505092915050565b612c05816129ed565b8114612c0f575f80fd5b50565b5f81359050612c2081612bfc565b92915050565b5f60208284031215612c3b57612c3a61291a565b5b5f612c4884828501612c12565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c7257612c71612c51565b5b8235905067ffffffffffffffff811115612c8f57612c8e612c55565b5b602083019150836020820283011115612cab57612caa612c59565b5b9250929050565b5f805f60408486031215612cc957612cc861291a565b5b5f84013567ffffffffffffffff811115612ce657612ce561291e565b5b612cf286828701612c5d565b93509350506020612d0586828701612c12565b9150509250925092565b5f8060408385031215612d2557612d2461291a565b5b5f612d3285828601612968565b9250506020612d4385828601612968565b9150509250929050565b5f81519050612d5b81612985565b92915050565b5f60208284031215612d7657612d7561291a565b5b5f612d8384828501612d4d565b91505092915050565b5f604082019050612d9f5f830185612ba9565b612dac6020830184612abf565b9392505050565b5f81519050612dc181612bfc565b92915050565b5f60208284031215612ddc57612ddb61291a565b5b5f612de984828501612db3565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612e2660208361287a565b9150612e3182612df2565b602082019050919050565b5f6020820190508181035f830152612e5381612e1a565b9050919050565b7f42757920746178206d757374206265206265747765656e20302520616e6420335f8201527f3025000000000000000000000000000000000000000000000000000000000000602082015250565b5f612eb460228361287a565b9150612ebf82612e5a565b604082019050919050565b5f6020820190508181035f830152612ee181612ea8565b9050919050565b7f53656c6c20746178206d757374206265206265747765656e20302520616e64205f8201527f3330250000000000000000000000000000000000000000000000000000000000602082015250565b5f612f4260238361287a565b9150612f4d82612ee8565b604082019050919050565b5f6020820190508181035f830152612f6f81612f36565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115612ff857808604811115612fd457612fd3612f76565b5b6001851615612fe35780820291505b8081029050612ff185612fa3565b9450612fb8565b94509492505050565b5f8261301057600190506130cb565b8161301d575f90506130cb565b8160018114613033576002811461303d5761306c565b60019150506130cb565b60ff84111561304f5761304e612f76565b5b8360020a91508482111561306657613065612f76565b5b506130cb565b5060208310610133831016604e8410600b84101617156130a15782820a90508381111561309c5761309b612f76565b5b6130cb565b6130ae8484846001612faf565b925090508184048111156130c5576130c4612f76565b5b81810290505b9392505050565b5f6130dc8261297c565b91506130e783612b75565b92506131147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613001565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131538261297c565b915061315e8361297c565b92508261316e5761316d61311c565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f6131d3602d8361287a565b91506131de82613179565b604082019050919050565b5f6020820190508181035f830152613200816131c7565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69742063616e6e6f74206265205f8201527f6c6f776572207468616e203125206f6620746f74616c20737570706c79000000602082015250565b5f613261603d8361287a565b915061326c82613207565b604082019050919050565b5f6020820190508181035f83015261328e81613255565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e00000000000000005f82015250565b5f6132c960188361287a565b91506132d482613295565b602082019050919050565b5f6020820190508181035f8301526132f6816132bd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6133348261297c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361336657613365612f76565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6133cb60268361287a565b91506133d682613371565b604082019050919050565b5f6020820190508181035f8301526133f8816133bf565b9050919050565b7f43616e277420617070726f76652066726f6d207a65726f2061646472657373005f82015250565b5f613433601f8361287a565b915061343e826133ff565b602082019050919050565b5f6020820190508181035f83015261346081613427565b9050919050565b7f43616e277420617070726f766520746f207a65726f20616464726573730000005f82015250565b5f61349b601d8361287a565b91506134a682613467565b602082019050919050565b5f6020820190508181035f8301526134c88161348f565b9050919050565b7f43616e74207472616e736665722066726f6d2061646472657373207a65726f005f82015250565b5f613503601f8361287a565b915061350e826134cf565b602082019050919050565b5f6020820190508181035f830152613530816134f7565b9050919050565b7f43616e74207472616e7366657220746f2061646472657373207a65726f0000005f82015250565b5f61356b601d8361287a565b915061357682613537565b602082019050919050565b5f6020820190508181035f8301526135988161355f565b9050919050565b7f416d6f756e742073686f756c642062652061626f7665207a65726f00000000005f82015250565b5f6135d3601b8361287a565b91506135de8261359f565b602082019050919050565b5f6020820190508181035f830152613600816135c7565b9050919050565b7f4f6e6c79206f776e65722063616e207472616465206265666f726520747261645f8201527f696e672061637469766174696f6e000000000000000000000000000000000000602082015250565b5f613661602e8361287a565b915061366c82613607565b604082019050919050565b5f6020820190508181035f83015261368e81613655565b9050919050565b7f4578636565646564206d6178207472616e73616374696f6e206c696d697400005f82015250565b5f6136c9601e8361287a565b91506136d482613695565b602082019050919050565b5f6020820190508181035f8301526136f6816136bd565b9050919050565b5f6137078261297c565b91506137128361297c565b925082820190508082111561372a57613729612f76565b5b92915050565b7f45786365656473206d617820686f6c642062616c616e636500000000000000005f82015250565b5f61376460188361287a565b915061376f82613730565b602082019050919050565b5f6020820190508181035f83015261379181613758565b9050919050565b5f6137a28261297c565b91506137ad8361297c565b92508282039050818111156137c5576137c4612f76565b5b92915050565b7f416d6f756e742068617320746f206265206c657373207468616e20746f74616c5f8201527f207265666c656374696f6e730000000000000000000000000000000000000000602082015250565b5f613825602c8361287a565b9150613830826137cb565b604082019050919050565b5f6020820190508181035f83015261385281613819565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061389481612952565b92915050565b5f602082840312156138af576138ae61291a565b5b5f6138bc84828501613886565b91505092915050565b5f819050919050565b5f6138e86138e36138de846138c5565b612a4b565b61297c565b9050919050565b6138f8816138ce565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61393081612941565b82525050565b5f6139418383613927565b60208301905092915050565b5f602082019050919050565b5f613963826138fe565b61396d8185613908565b935061397883613918565b805f5b838110156139a857815161398f8882613936565b975061399a8361394d565b92505060018101905061397b565b5085935050505092915050565b5f60a0820190506139c85f830188612abf565b6139d560208301876138ef565b81810360408301526139e78186613959565b90506139f66060830185612ba9565b613a036080830184612abf565b9695505050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613a41601b8361287a565b9150613a4c82613a0d565b602082019050919050565b5f6020820190508181035f830152613a6e81613a35565b9050919050565b5f613a7f8261297c565b9150613a8a8361297c565b9250828202613a988161297c565b91508282048414831517613aaf57613aae612f76565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b1060218361287a565b9150613b1b82613ab6565b604082019050919050565b5f6020820190508181035f830152613b3d81613b04565b905091905056fe746865207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e9a09da32f9afea188b79e290f04b569ed4437bee81a5c155e14d5ab5ff02a3a64736f6c63430008140033

Deployed Bytecode Sourcemap

4300:12411:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6966:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7890:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12829:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5420:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6353:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13418:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15353:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6875:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5468:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8472:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16104:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5299:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6461:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3856:148;;;;;;;;;;;;;:::i;:::-;;15794:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7566:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8511:194;;;;;;;;;;;;;:::i;:::-;;3769:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7057:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13869:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5246:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13211:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6607:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7698:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12163:198;;;;;;;;;;;;;:::i;:::-;;5353:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4012:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6966:83;7003:13;7036:5;;;;;;;;;;;;;;;;;7029:12;;6966:83;:::o;7890:193::-;7992:4;8014:39;8023:12;:10;:12::i;:::-;8037:7;8046:6;8014:8;:39::i;:::-;8071:4;8064:11;;7890:193;;;;:::o;12829:374::-;12905:16;;;;;;;;;;;12889:32;;:12;:10;:12::i;:::-;:32;;;12881:41;;;;;;12958:4;12941:22;;:5;:22;;;12933:31;;;;;;12996:3;12979:21;;:5;:21;;;12975:126;;13025:10;13017:28;;:51;13046:21;13017:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13083:7;;12975:126;13128:5;13121:22;;;13144:10;13163:5;13156:23;;;13188:4;13156:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13121:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12829:374;;:::o;5420:41::-;;;;;;;;;;;;;:::o;6353:100::-;6406:7;5220:19;6426;;6353:100;:::o;13418:443::-;13550:4;13567:36;13577:6;13585:9;13596:6;13567:9;:36::i;:::-;13614:217;13637:6;13658:12;:10;:12::i;:::-;13685:135;13741:6;13685:135;;;;;;;;;;;;;;;;;:11;:19;13697:6;13685:19;;;;;;;;;;;;;;;:33;13705:12;:10;:12::i;:::-;13685:33;;;;;;;;;;;;;;;;:37;;:135;;;;;:::i;:::-;13614:8;:217::i;:::-;13849:4;13842:11;;13418:443;;;;;:::o;15353:402::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15471:1:::1;15459:8;:13;;:31;;;;;15488:2;15476:8;:14;;15459:31;15437:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;15598:1;15585:9;:14;;:33;;;;;15616:2;15603:9;:15;;15585:33;15563:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;15706:8;15694:9;:20;;;;15738:9;15725:10;:22;;;;15353:402:::0;;:::o;6875:83::-;6916:5;4610:1;6934:16;;6875:83;:::o;5468:28::-;;;;;;;;;;;;;:::o;8472:26::-;;;;;;;;;;;;;:::o;16104:239::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16239:3:::1;16224:10;:8;:10::i;:::-;16218:2;:16;;;;:::i;:::-;16201:13;:11;:13::i;:::-;:34;;;;:::i;:::-;16200:42;;;;:::i;:::-;16185:11;:57;;16177:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;16324:11;16309:12;:26;;;;16104:239:::0;:::o;5299:47::-;;;;:::o;6461:138::-;6527:7;6554:37;6574:7;:16;6582:7;6574:16;;;;;;;;;;;;;;;;6554:19;:37::i;:::-;6547:44;;6461:138;;;:::o;3856:148::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3963:1:::1;3926:40;;3947:6;::::0;::::1;;;;;;;;3926:40;;;;;;;;;;;;3994:1;3977:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3856:148::o:0;15794:265::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15936:3:::1;15921:10;:8;:10::i;:::-;15915:2;:16;;;;:::i;:::-;15898:13;:11;:13::i;:::-;:34;;;;:::i;:::-;15897:42;;;;:::i;:::-;15882:11;:57;;15864:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;16040:11;16026;:25;;;;15794:265:::0;:::o;7566:124::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7666:16:::1;7648:15;;:34;;;;;;;;;;;;;;;;;;7566:124:::0;:::o;8511:194::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8574:14:::1;;;;;;;;;;;8573:15;8565:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;8645:4;8628:14;;:21;;;;;;;;;;;;;;;;;;8667:30;8682:14;;;;;;;;;;;8667:30;;;;;;:::i;:::-;;;;;;;;8511:194::o:0;3769:79::-;3807:7;3834:6;;;;;;;;;;;3827:13;;3769:79;:::o;7057:87::-;7096:13;7129:7;;;;;;;;;;;;;;;;;7122:14;;7057:87;:::o;13869:162::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14005:18:::1;13983:19;:40;;;;13869:162:::0;:::o;5246:46::-;;;;:::o;13211:199::-;13316:4;13338:42;13348:12;:10;:12::i;:::-;13362:9;13373:6;13338:9;:42::i;:::-;13398:4;13391:11;;13211:199;;;;:::o;6607:260::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6750:9:::1;6745:115;6769:8;;:15;;6765:1;:19;6745:115;;;6840:8;6806:18;:31;6825:8;;6834:1;6825:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6806:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;6786:3;;;;;:::i;:::-;;;;6745:115;;;;6607:260:::0;;;:::o;7698:184::-;7815:7;7847:11;:18;7859:5;7847:18;;;;;;;;;;;;;;;:27;7866:7;7847:27;;;;;;;;;;;;;;;;7840:34;;7698:184;;;;:::o;12163:198::-;12228:16;;;;;;;;;;;12212:32;;:12;:10;:12::i;:::-;:32;;;12204:41;;;;;;12256:26;12285:21;12256:50;;12317:36;12334:18;12317:16;:36::i;:::-;12193:168;12163:198::o;5353:58::-;;;;:::o;4012:281::-;3692:12;:10;:12::i;:::-;3682:22;;:6;;;;;;;;;;:22;;;3674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4135:1:::1;4115:22;;:8;:22;;::::0;4093:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4248:8;4219:38;;4240:6;::::0;::::1;;;;;;;;4219:38;;;;;;;;;;;;4277:8;4268:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4012:281:::0;:::o;1001:98::-;1054:7;1081:10;1074:17;;1001:98;:::o;8917:361::-;9061:1;9044:19;;:5;:19;;;9036:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9137:1;9118:21;;:7;:21;;;9110:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9216:6;9186:11;:18;9198:5;9186:18;;;;;;;;;;;;;;;:27;9205:7;9186:27;;;;;;;;;;;;;;;:36;;;;9254:7;9238:32;;9247:5;9238:32;;;9263:6;9238:32;;;;;;:::i;:::-;;;;;;;;8917:361;;;:::o;9286:2270::-;9424:1;9408:18;;:4;:18;;;9400:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9495:1;9481:16;;:2;:16;;;9473:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9559:1;9550:6;:10;9542:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;9617:7;:5;:7::i;:::-;9609:15;;:4;:15;;;;:32;;;;;9634:7;:5;:7::i;:::-;9628:13;;:2;:13;;;;9609:32;9605:1386;;;9696:14;;;;;;;;;;;9691:191;;9769:7;:5;:7::i;:::-;9761:15;;:4;:15;;;9731:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;9691:191;9916:11;;9906:6;:21;;9898:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:13;;;;;;;;;;;9983:19;;:2;:19;;;9979:195;;10078:12;;10069:6;10053:13;10063:2;10053:9;:13::i;:::-;:22;;;;:::i;:::-;:37;10023:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;9979:195;10190:28;10221:24;10239:4;10221:9;:24::i;:::-;10190:55;;10260:16;10303:19;;10279:20;:43;;10260:62;;10367:11;;10343:20;:35;10339:110;;10422:11;;10399:34;;10339:110;10487:11;:41;;;;;10520:8;;;;;;;;;;;10519:9;10487:41;:83;;;;;10557:13;;;;;;;;;;;10549:21;;:4;:21;;;;10487:83;:119;;;;;10591:15;;;;;;;;;;;10487:119;:165;;;;;10628:18;:24;10647:4;10628:24;;;;;;;;;;;;;;;;;;;;;;;;;10627:25;10487:165;:209;;;;;10674:18;:22;10693:2;10674:22;;;;;;;;;;;;;;;;;;;;;;;;;10673:23;10487:209;10465:515;;;10731:36;10746:20;10731:14;:36::i;:::-;10786:26;10815:21;10786:50;;10880:1;10859:18;:22;10855:110;;;10906:39;10923:21;10906:16;:39::i;:::-;10855:110;10712:268;10465:515;9643:1348;;9605:1386;11003:12;11018:4;11003:19;;11054:18;:24;11073:4;11054:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;11082:18;:22;11101:2;11082:22;;;;;;;;;;;;;;;;;;;;;;;;;11054:50;11053:115;;;;11131:13;;;;;;;;;;;11123:21;;:4;:21;;;;:44;;;;;11154:13;;;;;;;;;;;11148:19;;:2;:19;;;;11123:44;11053:115;11035:460;;;11205:5;11195:15;;11035:460;;;11255:13;;;;;;;;;;;11247:21;;:4;:21;;;:55;;;;;11286:15;;;;;;;;;;;11272:30;;:2;:30;;;;11247:55;11243:112;;;11330:9;;11323:4;:16;;;;11243:112;11381:13;;;;;;;;;;;11375:19;;:2;:19;;;:55;;;;;11414:15;;;;;;;;;;;11398:32;;:4;:32;;;;11375:55;11371:113;;;11458:10;;11451:4;:17;;;;11371:113;11035:460;11507:41;11522:4;11528:2;11532:6;11540:7;11507:14;:41::i;:::-;9389:2167;9286:2270;;;:::o;2494:224::-;2614:7;2647:1;2642;:6;;2650:12;2634:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2674:9;2690:1;2686;:5;;;;:::i;:::-;2674:17;;2709:1;2702:8;;;2494:224;;;;;:::o;8091:325::-;8186:7;8244;;8233;:18;;8211:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;8334:19;8356:10;:8;:10::i;:::-;8334:32;;8384:24;8396:11;8384:7;:11;;:24;;;;:::i;:::-;8377:31;;;8091:325;;;:::o;12053:102::-;12114:16;;;;;;;;;;;:25;;:33;12140:6;12114:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12053:102;:::o;11564:481::-;5630:4;5619:8;;:15;;;;;;;;;;;;;;;;;;11640:21:::1;11678:1;11664:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11640:40;;11709:4;11691;11696:1;11691:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;11735:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11725:4;11730:1;11725:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;11768:62;11785:4;11800:15;;;;;;;;;;;11818:11;11768:8;:62::i;:::-;11841:15;;;;;;;;;;;:66;;;11922:11;11948:1;11964:4;11991;12011:15;11841:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11629:416;5668:5:::0;5657:8;;:16;;;;;;;;;;;;;;;;;;11564:481;:::o;12541:278::-;12697:7;12692:23;;12706:9;:7;:9::i;:::-;12692:23;12726:48;12748:6;12756:9;12767:6;12726:21;:48::i;:::-;12790:7;12785:26;;12799:12;:10;:12::i;:::-;12785:26;12541:278;;;;:::o;12369:164::-;12411:7;12432:15;12449;12468:19;:17;:19::i;:::-;12431:56;;;;12505:20;12517:7;12505;:11;;:20;;;;:::i;:::-;12498:27;;;;12369:164;:::o;2726:132::-;2784:7;2811:39;2815:1;2818;2811:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2804:46;;2726:132;;;;:::o;8713:120::-;8763:1;8755:4;;:9;8751:22;8766:7;8751:22;8800:4;;8785:12;:19;;;;8824:1;8817:4;:8;;;;8713:120;:::o;14039:535::-;14190:15;14220:23;14258;14296:13;14323:22;14337:7;14323:13;:22::i;:::-;14175:170;;;;;;;;14374:28;14394:7;14374;:15;14382:6;14374:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;14356:7;:15;14364:6;14356:15;;;;;;;;;;;;;;;:46;;;;14434:39;14457:15;14434:7;:18;14442:9;14434:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;14413:7;:18;14421:9;14413:18;;;;;;;;;;;;;;;:60;;;;14484:22;14500:5;14484:15;:22::i;:::-;14539:9;14522:44;;14531:6;14522:44;;;14550:15;14522:44;;;;;;:::i;:::-;;;;;;;;14164:410;;;;14039:535;;;:::o;8841:68::-;8889:12;;8882:4;:19;;;;8841:68::o;7440:118::-;7491:7;7500;7528;;5220:19;7520:30;;;;7440:118;;:::o;2263:223::-;2383:7;2415:1;2411;:5;2418:12;2403:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2442:9;2458:1;2454;:5;;;;:::i;:::-;2442:17;;2477:1;2470:8;;;2263:223;;;;;:::o;14807:538::-;14910:7;14932;14954;14976;15012:23;15037:13;15054:26;15066:7;15075:4;;15054:11;:26::i;:::-;15011:69;;;;15091:19;15113:10;:8;:10::i;:::-;15091:32;;15135:15;15152:23;15179:90;15205:7;15227:5;15247:11;15179;:90::i;:::-;15134:135;;;;15288:7;15297:15;15314;15331:5;15280:57;;;;;;;;;;;;;14807:538;;;;;:::o;2119:136::-;2177:7;2204:43;2208:1;2211;2204:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2197:50;;2119:136;;;;:::o;1932:179::-;1990:7;2010:9;2026:1;2022;:5;;;;:::i;:::-;2010:17;;2051:1;2046;:6;;2038:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2102:1;2095:8;;;1932:179;;;;:::o;14582:217::-;14641:19;14663:10;:8;:10::i;:::-;14641:32;;14684:13;14700:22;14710:11;14700:5;:9;;:22;;;;:::i;:::-;14684:38;;14758:33;14785:5;14758:7;:22;14774:4;14758:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;14733:7;:22;14749:4;14733:22;;;;;;;;;;;;;;;:58;;;;14630:169;;14582:217;:::o;7152:280::-;7252:7;7261;7286:13;7302:25;7323:3;7302:16;7314:3;7302:7;:11;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;7286:41;;7338:23;7364:18;7376:5;7364:7;:11;;:18;;;;:::i;:::-;7338:44;;7401:15;7418:5;7393:31;;;;;;7152:280;;;;;:::o;16351:357::-;16481:7;16490;16510:15;16528:24;16540:11;16528:7;:11;;:24;;;;:::i;:::-;16510:42;;16563:13;16579:22;16589:11;16579:5;:9;;:22;;;;:::i;:::-;16563:38;;16612:23;16638:18;16650:5;16638:7;:11;;:18;;;;:::i;:::-;16612:44;;16675:7;16684:15;16667:33;;;;;;;16351:357;;;;;;:::o;2866:246::-;2924:7;2953:1;2948;:6;2944:47;;2978:1;2971:8;;;;2944:47;3001:9;3017:1;3013;:5;;;;:::i;:::-;3001:17;;3046:1;3041;3037;:5;;;;:::i;:::-;:10;3029:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3103:1;3096:8;;;2866:246;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:151::-;4202:9;4235:37;4266:5;4235:37;:::i;:::-;4222:50;;4127:151;;;:::o;4284:181::-;4396:62;4452:5;4396:62;:::i;:::-;4391:3;4384:75;4284:181;;:::o;4471:272::-;4589:4;4627:2;4616:9;4612:18;4604:26;;4640:96;4733:1;4722:9;4718:17;4709:6;4640:96;:::i;:::-;4471:272;;;;:::o;4749:118::-;4836:24;4854:5;4836:24;:::i;:::-;4831:3;4824:37;4749:118;;:::o;4873:222::-;4966:4;5004:2;4993:9;4989:18;4981:26;;5017:71;5085:1;5074:9;5070:17;5061:6;5017:71;:::i;:::-;4873:222;;;;:::o;5101:619::-;5178:6;5186;5194;5243:2;5231:9;5222:7;5218:23;5214:32;5211:119;;;5249:79;;:::i;:::-;5211:119;5369:1;5394:53;5439:7;5430:6;5419:9;5415:22;5394:53;:::i;:::-;5384:63;;5340:117;5496:2;5522:53;5567:7;5558:6;5547:9;5543:22;5522:53;:::i;:::-;5512:63;;5467:118;5624:2;5650:53;5695:7;5686:6;5675:9;5671:22;5650:53;:::i;:::-;5640:63;;5595:118;5101:619;;;;;:::o;5726:474::-;5794:6;5802;5851:2;5839:9;5830:7;5826:23;5822:32;5819:119;;;5857:79;;:::i;:::-;5819:119;5977:1;6002:53;6047:7;6038:6;6027:9;6023:22;6002:53;:::i;:::-;5992:63;;5948:117;6104:2;6130:53;6175:7;6166:6;6155:9;6151:22;6130:53;:::i;:::-;6120:63;;6075:118;5726:474;;;;;:::o;6206:86::-;6241:7;6281:4;6274:5;6270:16;6259:27;;6206:86;;;:::o;6298:112::-;6381:22;6397:5;6381:22;:::i;:::-;6376:3;6369:35;6298:112;;:::o;6416:214::-;6505:4;6543:2;6532:9;6528:18;6520:26;;6556:67;6620:1;6609:9;6605:17;6596:6;6556:67;:::i;:::-;6416:214;;;;:::o;6636:118::-;6723:24;6741:5;6723:24;:::i;:::-;6718:3;6711:37;6636:118;;:::o;6760:222::-;6853:4;6891:2;6880:9;6876:18;6868:26;;6904:71;6972:1;6961:9;6957:17;6948:6;6904:71;:::i;:::-;6760:222;;;;:::o;6988:329::-;7047:6;7096:2;7084:9;7075:7;7071:23;7067:32;7064:119;;;7102:79;;:::i;:::-;7064:119;7222:1;7247:53;7292:7;7283:6;7272:9;7268:22;7247:53;:::i;:::-;7237:63;;7193:117;6988:329;;;;:::o;7323:116::-;7393:21;7408:5;7393:21;:::i;:::-;7386:5;7383:32;7373:60;;7429:1;7426;7419:12;7373:60;7323:116;:::o;7445:133::-;7488:5;7526:6;7513:20;7504:29;;7542:30;7566:5;7542:30;:::i;:::-;7445:133;;;;:::o;7584:323::-;7640:6;7689:2;7677:9;7668:7;7664:23;7660:32;7657:119;;;7695:79;;:::i;:::-;7657:119;7815:1;7840:50;7882:7;7873:6;7862:9;7858:22;7840:50;:::i;:::-;7830:60;;7786:114;7584:323;;;;:::o;7913:117::-;8022:1;8019;8012:12;8036:117;8145:1;8142;8135:12;8159:117;8268:1;8265;8258:12;8299:568;8372:8;8382:6;8432:3;8425:4;8417:6;8413:17;8409:27;8399:122;;8440:79;;:::i;:::-;8399:122;8553:6;8540:20;8530:30;;8583:18;8575:6;8572:30;8569:117;;;8605:79;;:::i;:::-;8569:117;8719:4;8711:6;8707:17;8695:29;;8773:3;8765:4;8757:6;8753:17;8743:8;8739:32;8736:41;8733:128;;;8780:79;;:::i;:::-;8733:128;8299:568;;;;;:::o;8873:698::-;8965:6;8973;8981;9030:2;9018:9;9009:7;9005:23;9001:32;8998:119;;;9036:79;;:::i;:::-;8998:119;9184:1;9173:9;9169:17;9156:31;9214:18;9206:6;9203:30;9200:117;;;9236:79;;:::i;:::-;9200:117;9349:80;9421:7;9412:6;9401:9;9397:22;9349:80;:::i;:::-;9331:98;;;;9127:312;9478:2;9504:50;9546:7;9537:6;9526:9;9522:22;9504:50;:::i;:::-;9494:60;;9449:115;8873:698;;;;;:::o;9577:474::-;9645:6;9653;9702:2;9690:9;9681:7;9677:23;9673:32;9670:119;;;9708:79;;:::i;:::-;9670:119;9828:1;9853:53;9898:7;9889:6;9878:9;9874:22;9853:53;:::i;:::-;9843:63;;9799:117;9955:2;9981:53;10026:7;10017:6;10006:9;10002:22;9981:53;:::i;:::-;9971:63;;9926:118;9577:474;;;;;:::o;10057:143::-;10114:5;10145:6;10139:13;10130:22;;10161:33;10188:5;10161:33;:::i;:::-;10057:143;;;;:::o;10206:351::-;10276:6;10325:2;10313:9;10304:7;10300:23;10296:32;10293:119;;;10331:79;;:::i;:::-;10293:119;10451:1;10476:64;10532:7;10523:6;10512:9;10508:22;10476:64;:::i;:::-;10466:74;;10422:128;10206:351;;;;:::o;10563:332::-;10684:4;10722:2;10711:9;10707:18;10699:26;;10735:71;10803:1;10792:9;10788:17;10779:6;10735:71;:::i;:::-;10816:72;10884:2;10873:9;10869:18;10860:6;10816:72;:::i;:::-;10563:332;;;;;:::o;10901:137::-;10955:5;10986:6;10980:13;10971:22;;11002:30;11026:5;11002:30;:::i;:::-;10901:137;;;;:::o;11044:345::-;11111:6;11160:2;11148:9;11139:7;11135:23;11131:32;11128:119;;;11166:79;;:::i;:::-;11128:119;11286:1;11311:61;11364:7;11355:6;11344:9;11340:22;11311:61;:::i;:::-;11301:71;;11257:125;11044:345;;;;:::o;11395:182::-;11535:34;11531:1;11523:6;11519:14;11512:58;11395:182;:::o;11583:366::-;11725:3;11746:67;11810:2;11805:3;11746:67;:::i;:::-;11739:74;;11822:93;11911:3;11822:93;:::i;:::-;11940:2;11935:3;11931:12;11924:19;;11583:366;;;:::o;11955:419::-;12121:4;12159:2;12148:9;12144:18;12136:26;;12208:9;12202:4;12198:20;12194:1;12183:9;12179:17;12172:47;12236:131;12362:4;12236:131;:::i;:::-;12228:139;;11955:419;;;:::o;12380:221::-;12520:34;12516:1;12508:6;12504:14;12497:58;12589:4;12584:2;12576:6;12572:15;12565:29;12380:221;:::o;12607:366::-;12749:3;12770:67;12834:2;12829:3;12770:67;:::i;:::-;12763:74;;12846:93;12935:3;12846:93;:::i;:::-;12964:2;12959:3;12955:12;12948:19;;12607:366;;;:::o;12979:419::-;13145:4;13183:2;13172:9;13168:18;13160:26;;13232:9;13226:4;13222:20;13218:1;13207:9;13203:17;13196:47;13260:131;13386:4;13260:131;:::i;:::-;13252:139;;12979:419;;;:::o;13404:222::-;13544:34;13540:1;13532:6;13528:14;13521:58;13613:5;13608:2;13600:6;13596:15;13589:30;13404:222;:::o;13632:366::-;13774:3;13795:67;13859:2;13854:3;13795:67;:::i;:::-;13788:74;;13871:93;13960:3;13871:93;:::i;:::-;13989:2;13984:3;13980:12;13973:19;;13632:366;;;:::o;14004:419::-;14170:4;14208:2;14197:9;14193:18;14185:26;;14257:9;14251:4;14247:20;14243:1;14232:9;14228:17;14221:47;14285:131;14411:4;14285:131;:::i;:::-;14277:139;;14004:419;;;:::o;14429:180::-;14477:77;14474:1;14467:88;14574:4;14571:1;14564:15;14598:4;14595:1;14588:15;14615:102;14657:8;14704:5;14701:1;14697:13;14676:34;;14615:102;;;:::o;14723:848::-;14784:5;14791:4;14815:6;14806:15;;14839:5;14830:14;;14853:712;14874:1;14864:8;14861:15;14853:712;;;14969:4;14964:3;14960:14;14954:4;14951:24;14948:50;;;14978:18;;:::i;:::-;14948:50;15028:1;15018:8;15014:16;15011:451;;;15443:4;15436:5;15432:16;15423:25;;15011:451;15493:4;15487;15483:15;15475:23;;15523:32;15546:8;15523:32;:::i;:::-;15511:44;;14853:712;;;14723:848;;;;;;;:::o;15577:1073::-;15631:5;15822:8;15812:40;;15843:1;15834:10;;15845:5;;15812:40;15871:4;15861:36;;15888:1;15879:10;;15890:5;;15861:36;15957:4;16005:1;16000:27;;;;16041:1;16036:191;;;;15950:277;;16000:27;16018:1;16009:10;;16020:5;;;16036:191;16081:3;16071:8;16068:17;16065:43;;;16088:18;;:::i;:::-;16065:43;16137:8;16134:1;16130:16;16121:25;;16172:3;16165:5;16162:14;16159:40;;;16179:18;;:::i;:::-;16159:40;16212:5;;;15950:277;;16336:2;16326:8;16323:16;16317:3;16311:4;16308:13;16304:36;16286:2;16276:8;16273:16;16268:2;16262:4;16259:12;16255:35;16239:111;16236:246;;;16392:8;16386:4;16382:19;16373:28;;16427:3;16420:5;16417:14;16414:40;;;16434:18;;:::i;:::-;16414:40;16467:5;;16236:246;16507:42;16545:3;16535:8;16529:4;16526:1;16507:42;:::i;:::-;16492:57;;;;16581:4;16576:3;16572:14;16565:5;16562:25;16559:51;;;16590:18;;:::i;:::-;16559:51;16639:4;16632:5;16628:16;16619:25;;15577:1073;;;;;;:::o;16656:281::-;16714:5;16738:23;16756:4;16738:23;:::i;:::-;16730:31;;16782:25;16798:8;16782:25;:::i;:::-;16770:37;;16826:104;16863:66;16853:8;16847:4;16826:104;:::i;:::-;16817:113;;16656:281;;;;:::o;16943:180::-;16991:77;16988:1;16981:88;17088:4;17085:1;17078:15;17112:4;17109:1;17102:15;17129:185;17169:1;17186:20;17204:1;17186:20;:::i;:::-;17181:25;;17220:20;17238:1;17220:20;:::i;:::-;17215:25;;17259:1;17249:35;;17264:18;;:::i;:::-;17249:35;17306:1;17303;17299:9;17294:14;;17129:185;;;;:::o;17320:232::-;17460:34;17456:1;17448:6;17444:14;17437:58;17529:15;17524:2;17516:6;17512:15;17505:40;17320:232;:::o;17558:366::-;17700:3;17721:67;17785:2;17780:3;17721:67;:::i;:::-;17714:74;;17797:93;17886:3;17797:93;:::i;:::-;17915:2;17910:3;17906:12;17899:19;;17558:366;;;:::o;17930:419::-;18096:4;18134:2;18123:9;18119:18;18111:26;;18183:9;18177:4;18173:20;18169:1;18158:9;18154:17;18147:47;18211:131;18337:4;18211:131;:::i;:::-;18203:139;;17930:419;;;:::o;18355:248::-;18495:34;18491:1;18483:6;18479:14;18472:58;18564:31;18559:2;18551:6;18547:15;18540:56;18355:248;:::o;18609:366::-;18751:3;18772:67;18836:2;18831:3;18772:67;:::i;:::-;18765:74;;18848:93;18937:3;18848:93;:::i;:::-;18966:2;18961:3;18957:12;18950:19;;18609:366;;;:::o;18981:419::-;19147:4;19185:2;19174:9;19170:18;19162:26;;19234:9;19228:4;19224:20;19220:1;19209:9;19205:17;19198:47;19262:131;19388:4;19262:131;:::i;:::-;19254:139;;18981:419;;;:::o;19406:174::-;19546:26;19542:1;19534:6;19530:14;19523:50;19406:174;:::o;19586:366::-;19728:3;19749:67;19813:2;19808:3;19749:67;:::i;:::-;19742:74;;19825:93;19914:3;19825:93;:::i;:::-;19943:2;19938:3;19934:12;19927:19;;19586:366;;;:::o;19958:419::-;20124:4;20162:2;20151:9;20147:18;20139:26;;20211:9;20205:4;20201:20;20197:1;20186:9;20182:17;20175:47;20239:131;20365:4;20239:131;:::i;:::-;20231:139;;19958:419;;;:::o;20383:180::-;20431:77;20428:1;20421:88;20528:4;20525:1;20518:15;20552:4;20549:1;20542:15;20569:233;20608:3;20631:24;20649:5;20631:24;:::i;:::-;20622:33;;20677:66;20670:5;20667:77;20664:103;;20747:18;;:::i;:::-;20664:103;20794:1;20787:5;20783:13;20776:20;;20569:233;;;:::o;20808:225::-;20948:34;20944:1;20936:6;20932:14;20925:58;21017:8;21012:2;21004:6;21000:15;20993:33;20808:225;:::o;21039:366::-;21181:3;21202:67;21266:2;21261:3;21202:67;:::i;:::-;21195:74;;21278:93;21367:3;21278:93;:::i;:::-;21396:2;21391:3;21387:12;21380:19;;21039:366;;;:::o;21411:419::-;21577:4;21615:2;21604:9;21600:18;21592:26;;21664:9;21658:4;21654:20;21650:1;21639:9;21635:17;21628:47;21692:131;21818:4;21692:131;:::i;:::-;21684:139;;21411:419;;;:::o;21836:181::-;21976:33;21972:1;21964:6;21960:14;21953:57;21836:181;:::o;22023:366::-;22165:3;22186:67;22250:2;22245:3;22186:67;:::i;:::-;22179:74;;22262:93;22351:3;22262:93;:::i;:::-;22380:2;22375:3;22371:12;22364:19;;22023:366;;;:::o;22395:419::-;22561:4;22599:2;22588:9;22584:18;22576:26;;22648:9;22642:4;22638:20;22634:1;22623:9;22619:17;22612:47;22676:131;22802:4;22676:131;:::i;:::-;22668:139;;22395:419;;;:::o;22820:179::-;22960:31;22956:1;22948:6;22944:14;22937:55;22820:179;:::o;23005:366::-;23147:3;23168:67;23232:2;23227:3;23168:67;:::i;:::-;23161:74;;23244:93;23333:3;23244:93;:::i;:::-;23362:2;23357:3;23353:12;23346:19;;23005:366;;;:::o;23377:419::-;23543:4;23581:2;23570:9;23566:18;23558:26;;23630:9;23624:4;23620:20;23616:1;23605:9;23601:17;23594:47;23658:131;23784:4;23658:131;:::i;:::-;23650:139;;23377:419;;;:::o;23802:181::-;23942:33;23938:1;23930:6;23926:14;23919:57;23802:181;:::o;23989:366::-;24131:3;24152:67;24216:2;24211:3;24152:67;:::i;:::-;24145:74;;24228:93;24317:3;24228:93;:::i;:::-;24346:2;24341:3;24337:12;24330:19;;23989:366;;;:::o;24361:419::-;24527:4;24565:2;24554:9;24550:18;24542:26;;24614:9;24608:4;24604:20;24600:1;24589:9;24585:17;24578:47;24642:131;24768:4;24642:131;:::i;:::-;24634:139;;24361:419;;;:::o;24786:179::-;24926:31;24922:1;24914:6;24910:14;24903:55;24786:179;:::o;24971:366::-;25113:3;25134:67;25198:2;25193:3;25134:67;:::i;:::-;25127:74;;25210:93;25299:3;25210:93;:::i;:::-;25328:2;25323:3;25319:12;25312:19;;24971:366;;;:::o;25343:419::-;25509:4;25547:2;25536:9;25532:18;25524:26;;25596:9;25590:4;25586:20;25582:1;25571:9;25567:17;25560:47;25624:131;25750:4;25624:131;:::i;:::-;25616:139;;25343:419;;;:::o;25768:177::-;25908:29;25904:1;25896:6;25892:14;25885:53;25768:177;:::o;25951:366::-;26093:3;26114:67;26178:2;26173:3;26114:67;:::i;:::-;26107:74;;26190:93;26279:3;26190:93;:::i;:::-;26308:2;26303:3;26299:12;26292:19;;25951:366;;;:::o;26323:419::-;26489:4;26527:2;26516:9;26512:18;26504:26;;26576:9;26570:4;26566:20;26562:1;26551:9;26547:17;26540:47;26604:131;26730:4;26604:131;:::i;:::-;26596:139;;26323:419;;;:::o;26748:233::-;26888:34;26884:1;26876:6;26872:14;26865:58;26957:16;26952:2;26944:6;26940:15;26933:41;26748:233;:::o;26987:366::-;27129:3;27150:67;27214:2;27209:3;27150:67;:::i;:::-;27143:74;;27226:93;27315:3;27226:93;:::i;:::-;27344:2;27339:3;27335:12;27328:19;;26987:366;;;:::o;27359:419::-;27525:4;27563:2;27552:9;27548:18;27540:26;;27612:9;27606:4;27602:20;27598:1;27587:9;27583:17;27576:47;27640:131;27766:4;27640:131;:::i;:::-;27632:139;;27359:419;;;:::o;27784:180::-;27924:32;27920:1;27912:6;27908:14;27901:56;27784:180;:::o;27970:366::-;28112:3;28133:67;28197:2;28192:3;28133:67;:::i;:::-;28126:74;;28209:93;28298:3;28209:93;:::i;:::-;28327:2;28322:3;28318:12;28311:19;;27970:366;;;:::o;28342:419::-;28508:4;28546:2;28535:9;28531:18;28523:26;;28595:9;28589:4;28585:20;28581:1;28570:9;28566:17;28559:47;28623:131;28749:4;28623:131;:::i;:::-;28615:139;;28342:419;;;:::o;28767:191::-;28807:3;28826:20;28844:1;28826:20;:::i;:::-;28821:25;;28860:20;28878:1;28860:20;:::i;:::-;28855:25;;28903:1;28900;28896:9;28889:16;;28924:3;28921:1;28918:10;28915:36;;;28931:18;;:::i;:::-;28915:36;28767:191;;;;:::o;28964:174::-;29104:26;29100:1;29092:6;29088:14;29081:50;28964:174;:::o;29144:366::-;29286:3;29307:67;29371:2;29366:3;29307:67;:::i;:::-;29300:74;;29383:93;29472:3;29383:93;:::i;:::-;29501:2;29496:3;29492:12;29485:19;;29144:366;;;:::o;29516:419::-;29682:4;29720:2;29709:9;29705:18;29697:26;;29769:9;29763:4;29759:20;29755:1;29744:9;29740:17;29733:47;29797:131;29923:4;29797:131;:::i;:::-;29789:139;;29516:419;;;:::o;29941:194::-;29981:4;30001:20;30019:1;30001:20;:::i;:::-;29996:25;;30035:20;30053:1;30035:20;:::i;:::-;30030:25;;30079:1;30076;30072:9;30064:17;;30103:1;30097:4;30094:11;30091:37;;;30108:18;;:::i;:::-;30091:37;29941:194;;;;:::o;30141:231::-;30281:34;30277:1;30269:6;30265:14;30258:58;30350:14;30345:2;30337:6;30333:15;30326:39;30141:231;:::o;30378:366::-;30520:3;30541:67;30605:2;30600:3;30541:67;:::i;:::-;30534:74;;30617:93;30706:3;30617:93;:::i;:::-;30735:2;30730:3;30726:12;30719:19;;30378:366;;;:::o;30750:419::-;30916:4;30954:2;30943:9;30939:18;30931:26;;31003:9;30997:4;30993:20;30989:1;30978:9;30974:17;30967:47;31031:131;31157:4;31031:131;:::i;:::-;31023:139;;30750:419;;;:::o;31175:180::-;31223:77;31220:1;31213:88;31320:4;31317:1;31310:15;31344:4;31341:1;31334:15;31361:143;31418:5;31449:6;31443:13;31434:22;;31465:33;31492:5;31465:33;:::i;:::-;31361:143;;;;:::o;31510:351::-;31580:6;31629:2;31617:9;31608:7;31604:23;31600:32;31597:119;;;31635:79;;:::i;:::-;31597:119;31755:1;31780:64;31836:7;31827:6;31816:9;31812:22;31780:64;:::i;:::-;31770:74;;31726:128;31510:351;;;;:::o;31867:85::-;31912:7;31941:5;31930:16;;31867:85;;;:::o;31958:158::-;32016:9;32049:61;32067:42;32076:32;32102:5;32076:32;:::i;:::-;32067:42;:::i;:::-;32049:61;:::i;:::-;32036:74;;31958:158;;;:::o;32122:147::-;32217:45;32256:5;32217:45;:::i;:::-;32212:3;32205:58;32122:147;;:::o;32275:114::-;32342:6;32376:5;32370:12;32360:22;;32275:114;;;:::o;32395:184::-;32494:11;32528:6;32523:3;32516:19;32568:4;32563:3;32559:14;32544:29;;32395:184;;;;:::o;32585:132::-;32652:4;32675:3;32667:11;;32705:4;32700:3;32696:14;32688:22;;32585:132;;;:::o;32723:108::-;32800:24;32818:5;32800:24;:::i;:::-;32795:3;32788:37;32723:108;;:::o;32837:179::-;32906:10;32927:46;32969:3;32961:6;32927:46;:::i;:::-;33005:4;33000:3;32996:14;32982:28;;32837:179;;;;:::o;33022:113::-;33092:4;33124;33119:3;33115:14;33107:22;;33022:113;;;:::o;33171:732::-;33290:3;33319:54;33367:5;33319:54;:::i;:::-;33389:86;33468:6;33463:3;33389:86;:::i;:::-;33382:93;;33499:56;33549:5;33499:56;:::i;:::-;33578:7;33609:1;33594:284;33619:6;33616:1;33613:13;33594:284;;;33695:6;33689:13;33722:63;33781:3;33766:13;33722:63;:::i;:::-;33715:70;;33808:60;33861:6;33808:60;:::i;:::-;33798:70;;33654:224;33641:1;33638;33634:9;33629:14;;33594:284;;;33598:14;33894:3;33887:10;;33295:608;;;33171:732;;;;:::o;33909:831::-;34172:4;34210:3;34199:9;34195:19;34187:27;;34224:71;34292:1;34281:9;34277:17;34268:6;34224:71;:::i;:::-;34305:80;34381:2;34370:9;34366:18;34357:6;34305:80;:::i;:::-;34432:9;34426:4;34422:20;34417:2;34406:9;34402:18;34395:48;34460:108;34563:4;34554:6;34460:108;:::i;:::-;34452:116;;34578:72;34646:2;34635:9;34631:18;34622:6;34578:72;:::i;:::-;34660:73;34728:3;34717:9;34713:19;34704:6;34660:73;:::i;:::-;33909:831;;;;;;;;:::o;34746:177::-;34886:29;34882:1;34874:6;34870:14;34863:53;34746:177;:::o;34929:366::-;35071:3;35092:67;35156:2;35151:3;35092:67;:::i;:::-;35085:74;;35168:93;35257:3;35168:93;:::i;:::-;35286:2;35281:3;35277:12;35270:19;;34929:366;;;:::o;35301:419::-;35467:4;35505:2;35494:9;35490:18;35482:26;;35554:9;35548:4;35544:20;35540:1;35529:9;35525:17;35518:47;35582:131;35708:4;35582:131;:::i;:::-;35574:139;;35301:419;;;:::o;35726:410::-;35766:7;35789:20;35807:1;35789:20;:::i;:::-;35784:25;;35823:20;35841:1;35823:20;:::i;:::-;35818:25;;35878:1;35875;35871:9;35900:30;35918:11;35900:30;:::i;:::-;35889:41;;36079:1;36070:7;36066:15;36063:1;36060:22;36040:1;36033:9;36013:83;35990:139;;36109:18;;:::i;:::-;35990:139;35774:362;35726:410;;;;:::o;36142:220::-;36282:34;36278:1;36270:6;36266:14;36259:58;36351:3;36346:2;36338:6;36334:15;36327:28;36142:220;:::o;36368:366::-;36510:3;36531:67;36595:2;36590:3;36531:67;:::i;:::-;36524:74;;36607:93;36696:3;36607:93;:::i;:::-;36725:2;36720:3;36716:12;36709:19;;36368:366;;;:::o;36740:419::-;36906:4;36944:2;36933:9;36929:18;36921:26;;36993:9;36987:4;36983:20;36979:1;36968:9;36964:17;36957:47;37021:131;37147:4;37021:131;:::i;:::-;37013:139;;36740:419;;;:::o

Swarm Source

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