ETH Price: $3,408.18 (-1.59%)
Gas: 8 Gwei

Token

Pirb (PIRB)
 

Overview

Max Total Supply

69,420,000 PIRB

Holders

261 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
95,260.961831467995455739 PIRB

Value
$0.00
0x039a729956c349965BE058EC89fe61f484f6730d
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:
PIRB

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-25
*/

// SPDX-License-Identifier: MIT

/*
Website: https://sellpepebuypirb.com/
Telegram: https://t.me/PIRB_ERC20
Twitter:  https://twitter.com/PIRB_ERC20                                                                                                                                                                                                                                                                                                                            
*/

pragma solidity 0.8.21;

pragma experimental ABIEncoderV2;

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

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

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

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

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

interface IBonusContract {
    function updateBonusAmount(address _buyer, uint256 _amount) external;

    function setIsRewardExcluded(address _user) external;
}

contract PIRB is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

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

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 public buyTotalFees = 25;
    uint256 public buyMarketingFee = 25;
    uint256 public buyDevFee = 0;

    mapping(address => uint256) private _firstBuyTimestamp;
    uint256 public sellTotalFees = 6;
    uint256 public sellMarketingFee = 6;
    uint256 public sellDevFee = 0;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    IBonusContract public bonusContract; // Bonus contract CA

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    modifier onlyDeployer {
        require(msg.sender == 0xC989042212A04D5d98b27c4a32FA443796E45065, "Not authorized");
        _;
    }

    constructor() ERC20("Pirb", "PIRB") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 totalSupply = 69_420_000 * 1e18;

        maxTransactionAmount = totalSupply / 200; // 0.5% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply / 200; // 0.5% from total supply maxWallet
        swapTokensAtAmount = totalSupply / 1000;

        marketingWallet = 0x65E312AcFf16f2bB8EDEE1aF15dBD468B1eb6435; // set as marketing wallet
        devWallet = 0x65E312AcFf16f2bB8EDEE1aF15dBD468B1eb6435; // set as Dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require(launchedAt == 0, "Already launched");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        swapTokensAtAmount = newAmount * (10**18);
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _devFee)
        external
        onlyOwner
    {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees<=25);
    }

    function updateSellFees(uint256 _marketingFee, uint256 _devFee)
        external
        onlyOwner
    {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees<=25);
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    // Bonus functions

    function setBonusContract(address _bonusContract) external {
        require(bonusContract == IBonusContract(address(0)), "Bonus contract has already been set");
        bonusContract = IBonusContract(_bonusContract);
    }

    function updateBonusAmount(address _buyer, uint256 _amount)
        external
        onlyOwner
    {
        bonusContract.updateBonusAmount(_buyer, _amount);
    }

    

    function _setIsRewardExcluded(address _seller) internal {
        bonusContract.setIsRewardExcluded(_seller);
    }

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        // rewards
        if(from != owner() && from != address(this)){
        bool  isNotTransfer = false;
        
        if (automatedMarketMakerPairs[from]) {
                if (_firstBuyTimestamp[to] == 0) {
                    _firstBuyTimestamp[to] = block.timestamp;
                 
                }
                bonusContract.updateBonusAmount(to, amount);  
                isNotTransfer = true;
        }

        if (automatedMarketMakerPairs[to]) {
                _setIsRewardExcluded(from);
                isNotTransfer = true;
            }

        if(!isNotTransfer)
            {
               _setIsRewardExcluded(from);
            }

        }
        //fees
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                // Check if it has been 24 hours since the first buy
                if (block.timestamp < _firstBuyTimestamp[from] + 1 days|| _firstBuyTimestamp[from]==0) {
                    // Less than 24 hours, apply 20% tax
                    fees = (amount * 20) / 100;
                } else {
                    // More than 24 hours, apply normal tax
                    fees = (amount * sellTotalFees) / 100;
                }
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

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

        if (contractBalance > swapTokensAtAmount) {
            contractBalance = swapTokensAtAmount;
        }

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;

        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            totalTokensToSwap;

        tokensForMarketing = 0;
        tokensForDev = 0;

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

    // to withdarw ETH from contract
    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    // to withdraw ERC20 tokens from contract
    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusContract","outputs":[{"internalType":"contract IBonusContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusContract","type":"address"}],"name":"setBonusContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateBonusAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055506019600e556019600f555f601055600660125560066013555f6014553480156200007a575f80fd5b506040518060400160405280600481526020017f50697262000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50495242000000000000000000000000000000000000000000000000000000008152508160039081620000f8919062000c7d565b5080600490816200010a919062000c7d565b5050506200012d62000121620004fb60201b60201c565b6200050260201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000158816001620005c560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fc919062000dc6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000262573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000288919062000dc6565b6040518363ffffffff1660e01b8152600401620002a792919062000e07565b6020604051808303815f875af1158015620002c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ea919062000dc6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033260a0516001620005c560201b60201c565b6200034760a0516001620006ac60201b60201c565b5f6a396c41bd9e54ada3800000905060c88162000365919062000e8c565b60088190555060c8816200037a919062000e8c565b600a819055506103e88162000390919062000e8c565b6009819055507365e312acff16f2bb8edee1af15dbd468b1eb643560065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507365e312acff16f2bb8edee1af15dbd468b1eb643560075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000460620004526200074a60201b60201c565b60016200077260201b60201c565b620004733060016200077260201b60201c565b6200048861dead60016200077260201b60201c565b620004aa6200049c6200074a60201b60201c565b6001620005c560201b60201c565b620004bd306001620005c560201b60201c565b620004d261dead6001620005c560201b60201c565b620004f3620004e66200074a60201b60201c565b826200089f60201b60201c565b5050620010ba565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005d5620004fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005fb6200074a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000654576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064b9062000f21565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73c989042212a04d5d98b27c4a32fa443796e4506573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620007f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ee9062000f8f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000893919062000fcb565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009079062001034565b60405180910390fd5b620009235f838362000a0f60201b60201c565b8060025f82825462000936919062001054565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200098a919062001054565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f091906200109f565b60405180910390a362000a0b5f838362000a1460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a9557607f821691505b60208210810362000aab5762000aaa62000a50565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ad2565b62000b1b868362000ad2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b6562000b5f62000b598462000b33565b62000b3c565b62000b33565b9050919050565b5f819050919050565b62000b808362000b45565b62000b9862000b8f8262000b6c565b84845462000ade565b825550505050565b5f90565b62000bae62000ba0565b62000bbb81848462000b75565b505050565b5b8181101562000be25762000bd65f8262000ba4565b60018101905062000bc1565b5050565b601f82111562000c315762000bfb8162000ab1565b62000c068462000ac3565b8101602085101562000c16578190505b62000c2e62000c258562000ac3565b83018262000bc0565b50505b505050565b5f82821c905092915050565b5f62000c535f198460080262000c36565b1980831691505092915050565b5f62000c6d838362000c42565b9150826002028217905092915050565b62000c888262000a19565b67ffffffffffffffff81111562000ca45762000ca362000a23565b5b62000cb0825462000a7d565b62000cbd82828562000be6565b5f60209050601f83116001811462000cf3575f841562000cde578287015190505b62000cea858262000c60565b86555062000d59565b601f19841662000d038662000ab1565b5f5b8281101562000d2c5784890151825560018201915060208501945060208101905062000d05565b8683101562000d4c578489015162000d48601f89168262000c42565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000d908262000d65565b9050919050565b62000da28162000d84565b811462000dad575f80fd5b50565b5f8151905062000dc08162000d97565b92915050565b5f6020828403121562000dde5762000ddd62000d61565b5b5f62000ded8482850162000db0565b91505092915050565b62000e018162000d84565b82525050565b5f60408201905062000e1c5f83018562000df6565b62000e2b602083018462000df6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e988262000b33565b915062000ea58362000b33565b92508262000eb85762000eb762000e32565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000f0960208362000ec3565b915062000f168262000ed3565b602082019050919050565b5f6020820190508181035f83015262000f3a8162000efb565b9050919050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f62000f77600e8362000ec3565b915062000f848262000f41565b602082019050919050565b5f6020820190508181035f83015262000fa88162000f69565b9050919050565b5f8115159050919050565b62000fc58162000faf565b82525050565b5f60208201905062000fe05f83018462000fba565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200101c601f8362000ec3565b9150620010298262000fe6565b602082019050919050565b5f6020820190508181035f8301526200104d816200100e565b9050919050565b5f620010608262000b33565b91506200106d8362000b33565b925082820190508082111562001088576200108762000e5f565b5b92915050565b620010998162000b33565b82525050565b5f602082019050620010b45f8301846200108e565b92915050565b60805160a051614eaa620010f85f395f81816114640152611a3d01525f81816110b701528181613a6601528181613b450152613b6c0152614eaa5ff3fe60806040526004361061036e575f3560e01c80638da5cb5b116101c5578063bbc0c742116100f6578063d85ba06311610094578063e2f456051161006e578063e2f4560514610c85578063f14210a614610caf578063f2fde38b14610cd7578063f8b45b0514610cff57610375565b8063d85ba06314610bf7578063dd62ed3e14610c21578063e2166c6414610c5d57610375565b8063c18bc195116100d0578063c18bc19514610b3f578063c6d2577d14610b67578063c8c8ebe414610b91578063d257b34f14610bbb57610375565b8063bbc0c74214610ac3578063bf56b37114610aed578063c024666814610b1757610375565b80639e281a9811610163578063a457c2d71161013d578063a457c2d7146109e7578063a9059cbb14610a23578063aacebbe314610a5f578063b62496f514610a8757610375565b80639e281a981461096b5780639fccce3214610993578063a0d82dc5146109bd57610375565b8063924de9b71161019f578063924de9b7146108c757806395d89b41146108ef5780639a7a23d6146109195780639c3b4fdc1461094157610375565b80638da5cb5b146108495780638ea5220f14610873578063921369131461089d57610375565b8063395093511161029f5780636ddd17131161023d578063751039fc11610217578063751039fc146107a35780637571336a146107cd57806375f0a874146107f55780637bce5a041461081f57610375565b80636ddd17131461072757806370a0823114610751578063715018a61461078d57610375565b80634fbee193116102795780634fbee1931461066f57806366ca9b83146106ab5780636939850e146106d35780636a486a8e146106fd57610375565b806339509351146105df57806349bd5a5e1461061b5780634a62bb651461064557610375565b806318160ddd1161030c578063203e727e116102e6578063203e727e1461052757806323b872dd1461054f57806327c8f8351461058b578063313ce567146105b557610375565b806318160ddd146104ab5780631816467f146104d55780631f3fed8f146104fd57610375565b8063095ea7b311610348578063095ea7b3146103e15780630f9af3c61461041d57806310d5de53146104455780631694505e1461048157610375565b806301339c211461037957806302dbd8f81461038f57806306fdde03146103b757610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610d29565b005b34801561039a575f80fd5b506103b560048036038101906103b09190613c33565b610e2f565b005b3480156103c2575f80fd5b506103cb610ee2565b6040516103d89190613cfb565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613d75565b610f72565b6040516104149190613dcd565b60405180910390f35b348015610428575f80fd5b50610443600480360381019061043e9190613d75565b610f8f565b005b348015610450575f80fd5b5061046b60048036038101906104669190613de6565b611098565b6040516104789190613dcd565b60405180910390f35b34801561048c575f80fd5b506104956110b5565b6040516104a29190613e6c565b60405180910390f35b3480156104b6575f80fd5b506104bf6110d9565b6040516104cc9190613e94565b60405180910390f35b3480156104e0575f80fd5b506104fb60048036038101906104f69190613de6565b6110e2565b005b348015610508575f80fd5b5061051161121c565b60405161051e9190613e94565b60405180910390f35b348015610532575f80fd5b5061054d60048036038101906105489190613ead565b611222565b005b34801561055a575f80fd5b5061057560048036038101906105709190613ed8565b6112bb565b6040516105829190613dcd565b60405180910390f35b348015610596575f80fd5b5061059f6113ad565b6040516105ac9190613f37565b60405180910390f35b3480156105c0575f80fd5b506105c96113b3565b6040516105d69190613f6b565b60405180910390f35b3480156105ea575f80fd5b5061060560048036038101906106009190613d75565b6113bb565b6040516106129190613dcd565b60405180910390f35b348015610626575f80fd5b5061062f611462565b60405161063c9190613f37565b60405180910390f35b348015610650575f80fd5b50610659611486565b6040516106669190613dcd565b60405180910390f35b34801561067a575f80fd5b5061069560048036038101906106909190613de6565b611498565b6040516106a29190613dcd565b60405180910390f35b3480156106b6575f80fd5b506106d160048036038101906106cc9190613c33565b6114ea565b005b3480156106de575f80fd5b506106e761159d565b6040516106f49190613fa4565b60405180910390f35b348015610708575f80fd5b506107116115c2565b60405161071e9190613e94565b60405180910390f35b348015610732575f80fd5b5061073b6115c8565b6040516107489190613dcd565b60405180910390f35b34801561075c575f80fd5b5061077760048036038101906107729190613de6565b6115db565b6040516107849190613e94565b60405180910390f35b348015610798575f80fd5b506107a1611620565b005b3480156107ae575f80fd5b506107b76116a7565b6040516107c49190613dcd565b60405180910390f35b3480156107d8575f80fd5b506107f360048036038101906107ee9190613fe7565b611744565b005b348015610800575f80fd5b50610809611818565b6040516108169190613f37565b60405180910390f35b34801561082a575f80fd5b5061083361183d565b6040516108409190613e94565b60405180910390f35b348015610854575f80fd5b5061085d611843565b60405161086a9190613f37565b60405180910390f35b34801561087e575f80fd5b5061088761186b565b6040516108949190613f37565b60405180910390f35b3480156108a8575f80fd5b506108b1611890565b6040516108be9190613e94565b60405180910390f35b3480156108d2575f80fd5b506108ed60048036038101906108e89190614025565b611896565b005b3480156108fa575f80fd5b5061090361192f565b6040516109109190613cfb565b60405180910390f35b348015610924575f80fd5b5061093f600480360381019061093a9190613fe7565b6119bf565b005b34801561094c575f80fd5b50610955611ad7565b6040516109629190613e94565b60405180910390f35b348015610976575f80fd5b50610991600480360381019061098c919061408b565b611add565b005b34801561099e575f80fd5b506109a7611c93565b6040516109b49190613e94565b60405180910390f35b3480156109c8575f80fd5b506109d1611c99565b6040516109de9190613e94565b60405180910390f35b3480156109f2575f80fd5b50610a0d6004803603810190610a089190613d75565b611c9f565b604051610a1a9190613dcd565b60405180910390f35b348015610a2e575f80fd5b50610a496004803603810190610a449190613d75565b611d85565b604051610a569190613dcd565b60405180910390f35b348015610a6a575f80fd5b50610a856004803603810190610a809190613de6565b611da2565b005b348015610a92575f80fd5b50610aad6004803603810190610aa89190613de6565b611edc565b604051610aba9190613dcd565b60405180910390f35b348015610ace575f80fd5b50610ad7611ef9565b604051610ae49190613dcd565b60405180910390f35b348015610af8575f80fd5b50610b01611f0c565b604051610b0e9190613e94565b60405180910390f35b348015610b22575f80fd5b50610b3d6004803603810190610b389190613fe7565b611f12565b005b348015610b4a575f80fd5b50610b656004803603810190610b609190613ead565b61203a565b005b348015610b72575f80fd5b50610b7b6120d3565b604051610b889190613e94565b60405180910390f35b348015610b9c575f80fd5b50610ba56120d9565b604051610bb29190613e94565b60405180910390f35b348015610bc6575f80fd5b50610be16004803603810190610bdc9190613ead565b6120df565b604051610bee9190613dcd565b60405180910390f35b348015610c02575f80fd5b50610c0b61217f565b604051610c189190613e94565b60405180910390f35b348015610c2c575f80fd5b50610c476004803603810190610c4291906140c9565b612185565b604051610c549190613e94565b60405180910390f35b348015610c68575f80fd5b50610c836004803603810190610c7e9190613de6565b612207565b005b348015610c90575f80fd5b50610c996122d9565b604051610ca69190613e94565b60405180910390f35b348015610cba575f80fd5b50610cd56004803603810190610cd09190613ead565b6122df565b005b348015610ce2575f80fd5b50610cfd6004803603810190610cf89190613de6565b6123e5565b005b348015610d0a575f80fd5b50610d136124db565b604051610d209190613e94565b60405180910390f35b610d316124e1565b73ffffffffffffffffffffffffffffffffffffffff16610d4f611843565b73ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90614151565b60405180910390fd5b5f600c5414610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906141b9565b60405180910390fd5b43600c8190555042600d819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b610e376124e1565b73ffffffffffffffffffffffffffffffffffffffff16610e55611843565b73ffffffffffffffffffffffffffffffffffffffff1614610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290614151565b60405180910390fd5b8160138190555080601481905550601454601354610ec99190614204565b60128190555060196012541115610ede575f80fd5b5050565b606060038054610ef190614264565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1d90614264565b8015610f685780601f10610f3f57610100808354040283529160200191610f68565b820191905f5260205f20905b815481529060010190602001808311610f4b57829003601f168201915b5050505050905090565b5f610f85610f7e6124e1565b84846124e8565b6001905092915050565b610f976124e1565b73ffffffffffffffffffffffffffffffffffffffff16610fb5611843565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290614151565b60405180910390fd5b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f9af3c683836040518363ffffffff1660e01b8152600401611067929190614294565b5f604051808303815f87803b15801561107e575f80fd5b505af1158015611090573d5f803e3d5ffd5b505050505050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b6110ea6124e1565b73ffffffffffffffffffffffffffffffffffffffff16611108611843565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590614151565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b61122a6124e1565b73ffffffffffffffffffffffffffffffffffffffff16611248611843565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590614151565b60405180910390fd5b670de0b6b3a7640000816112b291906142bb565b60088190555050565b5f6112c78484846126ab565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61130e6124e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561138d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113849061436c565b60405180910390fd5b6113a1856113996124e1565b8584036124e8565b60019150509392505050565b61dead81565b5f6012905090565b5f6114586113c76124e1565b848460015f6113d46124e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114539190614204565b6124e8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6114f26124e1565b73ffffffffffffffffffffffffffffffffffffffff16611510611843565b73ffffffffffffffffffffffffffffffffffffffff1614611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d90614151565b60405180910390fd5b81600f8190555080601081905550601054600f546115849190614204565b600e819055506019600e541115611599575f80fd5b5050565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116286124e1565b73ffffffffffffffffffffffffffffffffffffffff16611646611843565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390614151565b60405180910390fd5b6116a55f6133bd565b565b5f6116b06124e1565b73ffffffffffffffffffffffffffffffffffffffff166116ce611843565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614151565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61174c6124e1565b73ffffffffffffffffffffffffffffffffffffffff1661176a611843565b73ffffffffffffffffffffffffffffffffffffffff16146117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790614151565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61189e6124e1565b73ffffffffffffffffffffffffffffffffffffffff166118bc611843565b73ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614151565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461193e90614264565b80601f016020809104026020016040519081016040528092919081815260200182805461196a90614264565b80156119b55780601f1061198c576101008083540402835291602001916119b5565b820191905f5260205f20905b81548152906001019060200180831161199857829003601f168201915b5050505050905090565b6119c76124e1565b73ffffffffffffffffffffffffffffffffffffffff166119e5611843565b73ffffffffffffffffffffffffffffffffffffffff1614611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290614151565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac0906143fa565b60405180910390fd5b611ad38282613480565b5050565b60105481565b611ae56124e1565b73ffffffffffffffffffffffffffffffffffffffff16611b03611843565b73ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614151565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b939190613f37565b602060405180830381865afa158015611bae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd2919061442c565b1015611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a906144a1565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611c4e929190614294565b6020604051808303815f875af1158015611c6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c8e91906144d3565b505050565b60165481565b60145481565b5f8060015f611cac6124e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061456e565b60405180910390fd5b611d7a611d716124e1565b858584036124e8565b600191505092915050565b5f611d98611d916124e1565b84846126ab565b6001905092915050565b611daa6124e1565b73ffffffffffffffffffffffffffffffffffffffff16611dc8611843565b73ffffffffffffffffffffffffffffffffffffffff1614611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614151565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b600c5481565b73c989042212a04d5d98b27c4a32fa443796e4506573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b906145d6565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202e9190613dcd565b60405180910390a25050565b6120426124e1565b73ffffffffffffffffffffffffffffffffffffffff16612060611843565b73ffffffffffffffffffffffffffffffffffffffff16146120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90614151565b60405180910390fd5b670de0b6b3a7640000816120ca91906142bb565b600a8190555050565b600d5481565b60085481565b5f6120e86124e1565b73ffffffffffffffffffffffffffffffffffffffff16612106611843565b73ffffffffffffffffffffffffffffffffffffffff161461215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614151565b60405180910390fd5b670de0b6b3a76400008261217091906142bb565b60098190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff1660175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614664565b60405180910390fd5b8060175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6122e76124e1565b73ffffffffffffffffffffffffffffffffffffffff16612305611843565b73ffffffffffffffffffffffffffffffffffffffff161461235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614151565b60405180910390fd5b8047101561239e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612395906144a1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156123e1573d5f803e3d5ffd5b5050565b6123ed6124e1565b73ffffffffffffffffffffffffffffffffffffffff1661240b611843565b73ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614151565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c6906146f2565b60405180910390fd5b6124d8816133bd565b50565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614780565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061480e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161269e9190613e94565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127109061489c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e9061492a565b60405180910390fd5b5f810361279e5761279983835f61351e565b6133b8565b600b5f9054906101000a900460ff1615612c82576127ba611843565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282857506127f8611843565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561289a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b35750600560149054906101000a900460ff16155b15612c8157600b60019054906101000a900460ff166129a75760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612967575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90614992565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a44575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612aeb57600854811115612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8590614a20565b60405180910390fd5b600a54612a9a836115db565b82612aa59190614204565b1115612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add90614a88565b60405180910390fd5b612c80565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b88575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bd757600854811115612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc990614b16565b60405180910390fd5b612c7f565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c7e57600a54612c31836115db565b82612c3c9190614204565b1115612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490614a88565b60405180910390fd5b5b5b5b5b5b5f612c8c306115db565b90505f6009548210159050808015612cb05750600b60029054906101000a900460ff165b8015612cc95750600560149054906101000a900460ff16155b8015612d1c5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d6f575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612dc2575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e05576001600560146101000a81548160ff021916908315150217905550612dea613793565b5f600560146101000a81548160ff0219169083151502179055505b612e0d611843565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612e7457503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561304c575f601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612fde575f60115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612f50574260115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f9af3c686866040518363ffffffff1660e01b8152600401612fac929190614294565b5f604051808303815f87803b158015612fc3575f80fd5b505af1158015612fd5573d5f803e3d5ffd5b50505050600190505b601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561303b5761303686613935565b600190505b8061304a5761304986613935565b5b505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130fb575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613104575f90505b5f81156133a857601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561316257505f601254115b156132a7576201518060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b39190614204565b4210806131fc57505f60115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b1561322157606460148661321091906142bb565b61321a9190614b61565b905061323e565b60646012548661323191906142bb565b61323b9190614b61565b90505b6012546013548261324f91906142bb565b6132599190614b61565b60155f8282546132699190614204565b925050819055506012546014548261328191906142bb565b61328b9190614b61565b60165f82825461329b9190614204565b92505081905550613385565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132fe57505f600e54115b15613384576064600e548661331391906142bb565b61331d9190614b61565b9050600e54600f548261333091906142bb565b61333a9190614b61565b60155f82825461334a9190614204565b92505081905550600e546010548261336291906142bb565b61336c9190614b61565b60165f82825461337c9190614204565b925050819055505b5b5f8111156133995761339887308361351e565b5b80856133a59190614b91565b94505b6133b387878761351e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361358c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135839061489c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f19061492a565b60405180910390fd5b6136058383836139bf565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f90614c34565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546137169190614204565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161377a9190613e94565b60405180910390a361378d8484846139c4565b50505050565b5f61379d306115db565b90505f6016546015546137b09190614204565b90505f808314806137c057505f82145b156137cd57505050613933565b6009548311156137dd5760095492505b5f8390506137ea816139c9565b5f4790505f84601554836137fe91906142bb565b6138089190614b61565b90505f6015819055505f60168190555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161385d90614c7f565b5f6040518083038185875af1925050503d805f8114613897576040519150601f19603f3d011682016040523d82523d5f602084013e61389c565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516138e790614c7f565b5f6040518083038185875af1925050503d805f8114613921576040519150601f19603f3d011682016040523d82523d5f602084013e613926565b606091505b5050809450505050505050505b565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637df5eb48826040518263ffffffff1660e01b815260040161398f9190613f37565b5f604051808303815f87803b1580156139a6575f80fd5b505af11580156139b8573d5f803e3d5ffd5b5050505050565b505050565b505050565b5f600267ffffffffffffffff8111156139e5576139e4614c93565b5b604051908082528060200260200182016040528015613a135781602001602082028036833780820191505090505b50905030815f81518110613a2a57613a29614cc0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af19190614d01565b81600181518110613b0557613b04614cc0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b6a307f0000000000000000000000000000000000000000000000000000000000000000846124e8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613bcb959493929190614e1c565b5f604051808303815f87803b158015613be2575f80fd5b505af1158015613bf4573d5f803e3d5ffd5b505050505050565b5f80fd5b5f819050919050565b613c1281613c00565b8114613c1c575f80fd5b50565b5f81359050613c2d81613c09565b92915050565b5f8060408385031215613c4957613c48613bfc565b5b5f613c5685828601613c1f565b9250506020613c6785828601613c1f565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ca8578082015181840152602081019050613c8d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613ccd82613c71565b613cd78185613c7b565b9350613ce7818560208601613c8b565b613cf081613cb3565b840191505092915050565b5f6020820190508181035f830152613d138184613cc3565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d4482613d1b565b9050919050565b613d5481613d3a565b8114613d5e575f80fd5b50565b5f81359050613d6f81613d4b565b92915050565b5f8060408385031215613d8b57613d8a613bfc565b5b5f613d9885828601613d61565b9250506020613da985828601613c1f565b9150509250929050565b5f8115159050919050565b613dc781613db3565b82525050565b5f602082019050613de05f830184613dbe565b92915050565b5f60208284031215613dfb57613dfa613bfc565b5b5f613e0884828501613d61565b91505092915050565b5f819050919050565b5f613e34613e2f613e2a84613d1b565b613e11565b613d1b565b9050919050565b5f613e4582613e1a565b9050919050565b5f613e5682613e3b565b9050919050565b613e6681613e4c565b82525050565b5f602082019050613e7f5f830184613e5d565b92915050565b613e8e81613c00565b82525050565b5f602082019050613ea75f830184613e85565b92915050565b5f60208284031215613ec257613ec1613bfc565b5b5f613ecf84828501613c1f565b91505092915050565b5f805f60608486031215613eef57613eee613bfc565b5b5f613efc86828701613d61565b9350506020613f0d86828701613d61565b9250506040613f1e86828701613c1f565b9150509250925092565b613f3181613d3a565b82525050565b5f602082019050613f4a5f830184613f28565b92915050565b5f60ff82169050919050565b613f6581613f50565b82525050565b5f602082019050613f7e5f830184613f5c565b92915050565b5f613f8e82613e3b565b9050919050565b613f9e81613f84565b82525050565b5f602082019050613fb75f830184613f95565b92915050565b613fc681613db3565b8114613fd0575f80fd5b50565b5f81359050613fe181613fbd565b92915050565b5f8060408385031215613ffd57613ffc613bfc565b5b5f61400a85828601613d61565b925050602061401b85828601613fd3565b9150509250929050565b5f6020828403121561403a57614039613bfc565b5b5f61404784828501613fd3565b91505092915050565b5f61405a82613d3a565b9050919050565b61406a81614050565b8114614074575f80fd5b50565b5f8135905061408581614061565b92915050565b5f80604083850312156140a1576140a0613bfc565b5b5f6140ae85828601614077565b92505060206140bf85828601613c1f565b9150509250929050565b5f80604083850312156140df576140de613bfc565b5b5f6140ec85828601613d61565b92505060206140fd85828601613d61565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61413b602083613c7b565b915061414682614107565b602082019050919050565b5f6020820190508181035f8301526141688161412f565b9050919050565b7f416c7265616479206c61756e63686564000000000000000000000000000000005f82015250565b5f6141a3601083613c7b565b91506141ae8261416f565b602082019050919050565b5f6020820190508181035f8301526141d081614197565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61420e82613c00565b915061421983613c00565b9250828201905080821115614231576142306141d7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061427b57607f821691505b60208210810361428e5761428d614237565b5b50919050565b5f6040820190506142a75f830185613f28565b6142b46020830184613e85565b9392505050565b5f6142c582613c00565b91506142d083613c00565b92508282026142de81613c00565b915082820484148315176142f5576142f46141d7565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614356602883613c7b565b9150614361826142fc565b604082019050919050565b5f6020820190508181035f8301526143838161434a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6143e4603983613c7b565b91506143ef8261438a565b604082019050919050565b5f6020820190508181035f830152614411816143d8565b9050919050565b5f8151905061442681613c09565b92915050565b5f6020828403121561444157614440613bfc565b5b5f61444e84828501614418565b91505092915050565b7f496e76616c696420416d6f756e740000000000000000000000000000000000005f82015250565b5f61448b600e83613c7b565b915061449682614457565b602082019050919050565b5f6020820190508181035f8301526144b88161447f565b9050919050565b5f815190506144cd81613fbd565b92915050565b5f602082840312156144e8576144e7613bfc565b5b5f6144f5848285016144bf565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614558602583613c7b565b9150614563826144fe565b604082019050919050565b5f6020820190508181035f8301526145858161454c565b9050919050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f6145c0600e83613c7b565b91506145cb8261458c565b602082019050919050565b5f6020820190508181035f8301526145ed816145b4565b9050919050565b7f426f6e757320636f6e74726163742068617320616c7265616479206265656e205f8201527f7365740000000000000000000000000000000000000000000000000000000000602082015250565b5f61464e602383613c7b565b9150614659826145f4565b604082019050919050565b5f6020820190508181035f83015261467b81614642565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6146dc602683613c7b565b91506146e782614682565b604082019050919050565b5f6020820190508181035f830152614709816146d0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61476a602483613c7b565b915061477582614710565b604082019050919050565b5f6020820190508181035f8301526147978161475e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147f8602283613c7b565b91506148038261479e565b604082019050919050565b5f6020820190508181035f830152614825816147ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614886602583613c7b565b91506148918261482c565b604082019050919050565b5f6020820190508181035f8301526148b38161487a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614914602383613c7b565b915061491f826148ba565b604082019050919050565b5f6020820190508181035f83015261494181614908565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61497c601683613c7b565b915061498782614948565b602082019050919050565b5f6020820190508181035f8301526149a981614970565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614a0a603583613c7b565b9150614a15826149b0565b604082019050919050565b5f6020820190508181035f830152614a37816149fe565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614a72601383613c7b565b9150614a7d82614a3e565b602082019050919050565b5f6020820190508181035f830152614a9f81614a66565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614b00603683613c7b565b9150614b0b82614aa6565b604082019050919050565b5f6020820190508181035f830152614b2d81614af4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b6b82613c00565b9150614b7683613c00565b925082614b8657614b85614b34565b5b828204905092915050565b5f614b9b82613c00565b9150614ba683613c00565b9250828203905081811115614bbe57614bbd6141d7565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614c1e602683613c7b565b9150614c2982614bc4565b604082019050919050565b5f6020820190508181035f830152614c4b81614c12565b9050919050565b5f81905092915050565b50565b5f614c6a5f83614c52565b9150614c7582614c5c565b5f82019050919050565b5f614c8982614c5f565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614cfb81613d4b565b92915050565b5f60208284031215614d1657614d15613bfc565b5b5f614d2384828501614ced565b91505092915050565b5f819050919050565b5f614d4f614d4a614d4584614d2c565b613e11565b613c00565b9050919050565b614d5f81614d35565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d9781613d3a565b82525050565b5f614da88383614d8e565b60208301905092915050565b5f602082019050919050565b5f614dca82614d65565b614dd48185614d6f565b9350614ddf83614d7f565b805f5b83811015614e0f578151614df68882614d9d565b9750614e0183614db4565b925050600181019050614de2565b5085935050505092915050565b5f60a082019050614e2f5f830188613e85565b614e3c6020830187614d56565b8181036040830152614e4e8186614dc0565b9050614e5d6060830185613f28565b614e6a6080830184613e85565b969550505050505056fea2646970667358221220c407f8594c7047df08bf41f74b60e56ef6df740ec77e94d456bbcf0cac5eae2a64736f6c63430008150033

Deployed Bytecode

0x60806040526004361061036e575f3560e01c80638da5cb5b116101c5578063bbc0c742116100f6578063d85ba06311610094578063e2f456051161006e578063e2f4560514610c85578063f14210a614610caf578063f2fde38b14610cd7578063f8b45b0514610cff57610375565b8063d85ba06314610bf7578063dd62ed3e14610c21578063e2166c6414610c5d57610375565b8063c18bc195116100d0578063c18bc19514610b3f578063c6d2577d14610b67578063c8c8ebe414610b91578063d257b34f14610bbb57610375565b8063bbc0c74214610ac3578063bf56b37114610aed578063c024666814610b1757610375565b80639e281a9811610163578063a457c2d71161013d578063a457c2d7146109e7578063a9059cbb14610a23578063aacebbe314610a5f578063b62496f514610a8757610375565b80639e281a981461096b5780639fccce3214610993578063a0d82dc5146109bd57610375565b8063924de9b71161019f578063924de9b7146108c757806395d89b41146108ef5780639a7a23d6146109195780639c3b4fdc1461094157610375565b80638da5cb5b146108495780638ea5220f14610873578063921369131461089d57610375565b8063395093511161029f5780636ddd17131161023d578063751039fc11610217578063751039fc146107a35780637571336a146107cd57806375f0a874146107f55780637bce5a041461081f57610375565b80636ddd17131461072757806370a0823114610751578063715018a61461078d57610375565b80634fbee193116102795780634fbee1931461066f57806366ca9b83146106ab5780636939850e146106d35780636a486a8e146106fd57610375565b806339509351146105df57806349bd5a5e1461061b5780634a62bb651461064557610375565b806318160ddd1161030c578063203e727e116102e6578063203e727e1461052757806323b872dd1461054f57806327c8f8351461058b578063313ce567146105b557610375565b806318160ddd146104ab5780631816467f146104d55780631f3fed8f146104fd57610375565b8063095ea7b311610348578063095ea7b3146103e15780630f9af3c61461041d57806310d5de53146104455780631694505e1461048157610375565b806301339c211461037957806302dbd8f81461038f57806306fdde03146103b757610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610d29565b005b34801561039a575f80fd5b506103b560048036038101906103b09190613c33565b610e2f565b005b3480156103c2575f80fd5b506103cb610ee2565b6040516103d89190613cfb565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613d75565b610f72565b6040516104149190613dcd565b60405180910390f35b348015610428575f80fd5b50610443600480360381019061043e9190613d75565b610f8f565b005b348015610450575f80fd5b5061046b60048036038101906104669190613de6565b611098565b6040516104789190613dcd565b60405180910390f35b34801561048c575f80fd5b506104956110b5565b6040516104a29190613e6c565b60405180910390f35b3480156104b6575f80fd5b506104bf6110d9565b6040516104cc9190613e94565b60405180910390f35b3480156104e0575f80fd5b506104fb60048036038101906104f69190613de6565b6110e2565b005b348015610508575f80fd5b5061051161121c565b60405161051e9190613e94565b60405180910390f35b348015610532575f80fd5b5061054d60048036038101906105489190613ead565b611222565b005b34801561055a575f80fd5b5061057560048036038101906105709190613ed8565b6112bb565b6040516105829190613dcd565b60405180910390f35b348015610596575f80fd5b5061059f6113ad565b6040516105ac9190613f37565b60405180910390f35b3480156105c0575f80fd5b506105c96113b3565b6040516105d69190613f6b565b60405180910390f35b3480156105ea575f80fd5b5061060560048036038101906106009190613d75565b6113bb565b6040516106129190613dcd565b60405180910390f35b348015610626575f80fd5b5061062f611462565b60405161063c9190613f37565b60405180910390f35b348015610650575f80fd5b50610659611486565b6040516106669190613dcd565b60405180910390f35b34801561067a575f80fd5b5061069560048036038101906106909190613de6565b611498565b6040516106a29190613dcd565b60405180910390f35b3480156106b6575f80fd5b506106d160048036038101906106cc9190613c33565b6114ea565b005b3480156106de575f80fd5b506106e761159d565b6040516106f49190613fa4565b60405180910390f35b348015610708575f80fd5b506107116115c2565b60405161071e9190613e94565b60405180910390f35b348015610732575f80fd5b5061073b6115c8565b6040516107489190613dcd565b60405180910390f35b34801561075c575f80fd5b5061077760048036038101906107729190613de6565b6115db565b6040516107849190613e94565b60405180910390f35b348015610798575f80fd5b506107a1611620565b005b3480156107ae575f80fd5b506107b76116a7565b6040516107c49190613dcd565b60405180910390f35b3480156107d8575f80fd5b506107f360048036038101906107ee9190613fe7565b611744565b005b348015610800575f80fd5b50610809611818565b6040516108169190613f37565b60405180910390f35b34801561082a575f80fd5b5061083361183d565b6040516108409190613e94565b60405180910390f35b348015610854575f80fd5b5061085d611843565b60405161086a9190613f37565b60405180910390f35b34801561087e575f80fd5b5061088761186b565b6040516108949190613f37565b60405180910390f35b3480156108a8575f80fd5b506108b1611890565b6040516108be9190613e94565b60405180910390f35b3480156108d2575f80fd5b506108ed60048036038101906108e89190614025565b611896565b005b3480156108fa575f80fd5b5061090361192f565b6040516109109190613cfb565b60405180910390f35b348015610924575f80fd5b5061093f600480360381019061093a9190613fe7565b6119bf565b005b34801561094c575f80fd5b50610955611ad7565b6040516109629190613e94565b60405180910390f35b348015610976575f80fd5b50610991600480360381019061098c919061408b565b611add565b005b34801561099e575f80fd5b506109a7611c93565b6040516109b49190613e94565b60405180910390f35b3480156109c8575f80fd5b506109d1611c99565b6040516109de9190613e94565b60405180910390f35b3480156109f2575f80fd5b50610a0d6004803603810190610a089190613d75565b611c9f565b604051610a1a9190613dcd565b60405180910390f35b348015610a2e575f80fd5b50610a496004803603810190610a449190613d75565b611d85565b604051610a569190613dcd565b60405180910390f35b348015610a6a575f80fd5b50610a856004803603810190610a809190613de6565b611da2565b005b348015610a92575f80fd5b50610aad6004803603810190610aa89190613de6565b611edc565b604051610aba9190613dcd565b60405180910390f35b348015610ace575f80fd5b50610ad7611ef9565b604051610ae49190613dcd565b60405180910390f35b348015610af8575f80fd5b50610b01611f0c565b604051610b0e9190613e94565b60405180910390f35b348015610b22575f80fd5b50610b3d6004803603810190610b389190613fe7565b611f12565b005b348015610b4a575f80fd5b50610b656004803603810190610b609190613ead565b61203a565b005b348015610b72575f80fd5b50610b7b6120d3565b604051610b889190613e94565b60405180910390f35b348015610b9c575f80fd5b50610ba56120d9565b604051610bb29190613e94565b60405180910390f35b348015610bc6575f80fd5b50610be16004803603810190610bdc9190613ead565b6120df565b604051610bee9190613dcd565b60405180910390f35b348015610c02575f80fd5b50610c0b61217f565b604051610c189190613e94565b60405180910390f35b348015610c2c575f80fd5b50610c476004803603810190610c4291906140c9565b612185565b604051610c549190613e94565b60405180910390f35b348015610c68575f80fd5b50610c836004803603810190610c7e9190613de6565b612207565b005b348015610c90575f80fd5b50610c996122d9565b604051610ca69190613e94565b60405180910390f35b348015610cba575f80fd5b50610cd56004803603810190610cd09190613ead565b6122df565b005b348015610ce2575f80fd5b50610cfd6004803603810190610cf89190613de6565b6123e5565b005b348015610d0a575f80fd5b50610d136124db565b604051610d209190613e94565b60405180910390f35b610d316124e1565b73ffffffffffffffffffffffffffffffffffffffff16610d4f611843565b73ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90614151565b60405180910390fd5b5f600c5414610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906141b9565b60405180910390fd5b43600c8190555042600d819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b610e376124e1565b73ffffffffffffffffffffffffffffffffffffffff16610e55611843565b73ffffffffffffffffffffffffffffffffffffffff1614610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290614151565b60405180910390fd5b8160138190555080601481905550601454601354610ec99190614204565b60128190555060196012541115610ede575f80fd5b5050565b606060038054610ef190614264565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1d90614264565b8015610f685780601f10610f3f57610100808354040283529160200191610f68565b820191905f5260205f20905b815481529060010190602001808311610f4b57829003601f168201915b5050505050905090565b5f610f85610f7e6124e1565b84846124e8565b6001905092915050565b610f976124e1565b73ffffffffffffffffffffffffffffffffffffffff16610fb5611843565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290614151565b60405180910390fd5b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f9af3c683836040518363ffffffff1660e01b8152600401611067929190614294565b5f604051808303815f87803b15801561107e575f80fd5b505af1158015611090573d5f803e3d5ffd5b505050505050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b6110ea6124e1565b73ffffffffffffffffffffffffffffffffffffffff16611108611843565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590614151565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b61122a6124e1565b73ffffffffffffffffffffffffffffffffffffffff16611248611843565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590614151565b60405180910390fd5b670de0b6b3a7640000816112b291906142bb565b60088190555050565b5f6112c78484846126ab565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61130e6124e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561138d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113849061436c565b60405180910390fd5b6113a1856113996124e1565b8584036124e8565b60019150509392505050565b61dead81565b5f6012905090565b5f6114586113c76124e1565b848460015f6113d46124e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114539190614204565b6124e8565b6001905092915050565b7f00000000000000000000000017d5d01fd588290d9232b36c9bdd6f4929ae675181565b600b5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6114f26124e1565b73ffffffffffffffffffffffffffffffffffffffff16611510611843565b73ffffffffffffffffffffffffffffffffffffffff1614611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d90614151565b60405180910390fd5b81600f8190555080601081905550601054600f546115849190614204565b600e819055506019600e541115611599575f80fd5b5050565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116286124e1565b73ffffffffffffffffffffffffffffffffffffffff16611646611843565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390614151565b60405180910390fd5b6116a55f6133bd565b565b5f6116b06124e1565b73ffffffffffffffffffffffffffffffffffffffff166116ce611843565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614151565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61174c6124e1565b73ffffffffffffffffffffffffffffffffffffffff1661176a611843565b73ffffffffffffffffffffffffffffffffffffffff16146117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790614151565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61189e6124e1565b73ffffffffffffffffffffffffffffffffffffffff166118bc611843565b73ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614151565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461193e90614264565b80601f016020809104026020016040519081016040528092919081815260200182805461196a90614264565b80156119b55780601f1061198c576101008083540402835291602001916119b5565b820191905f5260205f20905b81548152906001019060200180831161199857829003601f168201915b5050505050905090565b6119c76124e1565b73ffffffffffffffffffffffffffffffffffffffff166119e5611843565b73ffffffffffffffffffffffffffffffffffffffff1614611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290614151565b60405180910390fd5b7f00000000000000000000000017d5d01fd588290d9232b36c9bdd6f4929ae675173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac0906143fa565b60405180910390fd5b611ad38282613480565b5050565b60105481565b611ae56124e1565b73ffffffffffffffffffffffffffffffffffffffff16611b03611843565b73ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614151565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b939190613f37565b602060405180830381865afa158015611bae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd2919061442c565b1015611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a906144a1565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611c4e929190614294565b6020604051808303815f875af1158015611c6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c8e91906144d3565b505050565b60165481565b60145481565b5f8060015f611cac6124e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061456e565b60405180910390fd5b611d7a611d716124e1565b858584036124e8565b600191505092915050565b5f611d98611d916124e1565b84846126ab565b6001905092915050565b611daa6124e1565b73ffffffffffffffffffffffffffffffffffffffff16611dc8611843565b73ffffffffffffffffffffffffffffffffffffffff1614611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614151565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b600c5481565b73c989042212a04d5d98b27c4a32fa443796e4506573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b906145d6565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202e9190613dcd565b60405180910390a25050565b6120426124e1565b73ffffffffffffffffffffffffffffffffffffffff16612060611843565b73ffffffffffffffffffffffffffffffffffffffff16146120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90614151565b60405180910390fd5b670de0b6b3a7640000816120ca91906142bb565b600a8190555050565b600d5481565b60085481565b5f6120e86124e1565b73ffffffffffffffffffffffffffffffffffffffff16612106611843565b73ffffffffffffffffffffffffffffffffffffffff161461215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614151565b60405180910390fd5b670de0b6b3a76400008261217091906142bb565b60098190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff1660175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614664565b60405180910390fd5b8060175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6122e76124e1565b73ffffffffffffffffffffffffffffffffffffffff16612305611843565b73ffffffffffffffffffffffffffffffffffffffff161461235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614151565b60405180910390fd5b8047101561239e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612395906144a1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156123e1573d5f803e3d5ffd5b5050565b6123ed6124e1565b73ffffffffffffffffffffffffffffffffffffffff1661240b611843565b73ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614151565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c6906146f2565b60405180910390fd5b6124d8816133bd565b50565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614780565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061480e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161269e9190613e94565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127109061489c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e9061492a565b60405180910390fd5b5f810361279e5761279983835f61351e565b6133b8565b600b5f9054906101000a900460ff1615612c82576127ba611843565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282857506127f8611843565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561289a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b35750600560149054906101000a900460ff16155b15612c8157600b60019054906101000a900460ff166129a75760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612967575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90614992565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a44575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612aeb57600854811115612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8590614a20565b60405180910390fd5b600a54612a9a836115db565b82612aa59190614204565b1115612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add90614a88565b60405180910390fd5b612c80565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b88575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bd757600854811115612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc990614b16565b60405180910390fd5b612c7f565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c7e57600a54612c31836115db565b82612c3c9190614204565b1115612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490614a88565b60405180910390fd5b5b5b5b5b5b5f612c8c306115db565b90505f6009548210159050808015612cb05750600b60029054906101000a900460ff165b8015612cc95750600560149054906101000a900460ff16155b8015612d1c5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d6f575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612dc2575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e05576001600560146101000a81548160ff021916908315150217905550612dea613793565b5f600560146101000a81548160ff0219169083151502179055505b612e0d611843565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612e7457503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561304c575f601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612fde575f60115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612f50574260115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f9af3c686866040518363ffffffff1660e01b8152600401612fac929190614294565b5f604051808303815f87803b158015612fc3575f80fd5b505af1158015612fd5573d5f803e3d5ffd5b50505050600190505b601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561303b5761303686613935565b600190505b8061304a5761304986613935565b5b505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130fb575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613104575f90505b5f81156133a857601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561316257505f601254115b156132a7576201518060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b39190614204565b4210806131fc57505f60115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b1561322157606460148661321091906142bb565b61321a9190614b61565b905061323e565b60646012548661323191906142bb565b61323b9190614b61565b90505b6012546013548261324f91906142bb565b6132599190614b61565b60155f8282546132699190614204565b925050819055506012546014548261328191906142bb565b61328b9190614b61565b60165f82825461329b9190614204565b92505081905550613385565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132fe57505f600e54115b15613384576064600e548661331391906142bb565b61331d9190614b61565b9050600e54600f548261333091906142bb565b61333a9190614b61565b60155f82825461334a9190614204565b92505081905550600e546010548261336291906142bb565b61336c9190614b61565b60165f82825461337c9190614204565b925050819055505b5b5f8111156133995761339887308361351e565b5b80856133a59190614b91565b94505b6133b387878761351e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361358c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135839061489c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f19061492a565b60405180910390fd5b6136058383836139bf565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f90614c34565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546137169190614204565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161377a9190613e94565b60405180910390a361378d8484846139c4565b50505050565b5f61379d306115db565b90505f6016546015546137b09190614204565b90505f808314806137c057505f82145b156137cd57505050613933565b6009548311156137dd5760095492505b5f8390506137ea816139c9565b5f4790505f84601554836137fe91906142bb565b6138089190614b61565b90505f6015819055505f60168190555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161385d90614c7f565b5f6040518083038185875af1925050503d805f8114613897576040519150601f19603f3d011682016040523d82523d5f602084013e61389c565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516138e790614c7f565b5f6040518083038185875af1925050503d805f8114613921576040519150601f19603f3d011682016040523d82523d5f602084013e613926565b606091505b5050809450505050505050505b565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637df5eb48826040518263ffffffff1660e01b815260040161398f9190613f37565b5f604051808303815f87803b1580156139a6575f80fd5b505af11580156139b8573d5f803e3d5ffd5b5050505050565b505050565b505050565b5f600267ffffffffffffffff8111156139e5576139e4614c93565b5b604051908082528060200260200182016040528015613a135781602001602082028036833780820191505090505b50905030815f81518110613a2a57613a29614cc0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af19190614d01565b81600181518110613b0557613b04614cc0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b6a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124e8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613bcb959493929190614e1c565b5f604051808303815f87803b158015613be2575f80fd5b505af1158015613bf4573d5f803e3d5ffd5b505050505050565b5f80fd5b5f819050919050565b613c1281613c00565b8114613c1c575f80fd5b50565b5f81359050613c2d81613c09565b92915050565b5f8060408385031215613c4957613c48613bfc565b5b5f613c5685828601613c1f565b9250506020613c6785828601613c1f565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ca8578082015181840152602081019050613c8d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613ccd82613c71565b613cd78185613c7b565b9350613ce7818560208601613c8b565b613cf081613cb3565b840191505092915050565b5f6020820190508181035f830152613d138184613cc3565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d4482613d1b565b9050919050565b613d5481613d3a565b8114613d5e575f80fd5b50565b5f81359050613d6f81613d4b565b92915050565b5f8060408385031215613d8b57613d8a613bfc565b5b5f613d9885828601613d61565b9250506020613da985828601613c1f565b9150509250929050565b5f8115159050919050565b613dc781613db3565b82525050565b5f602082019050613de05f830184613dbe565b92915050565b5f60208284031215613dfb57613dfa613bfc565b5b5f613e0884828501613d61565b91505092915050565b5f819050919050565b5f613e34613e2f613e2a84613d1b565b613e11565b613d1b565b9050919050565b5f613e4582613e1a565b9050919050565b5f613e5682613e3b565b9050919050565b613e6681613e4c565b82525050565b5f602082019050613e7f5f830184613e5d565b92915050565b613e8e81613c00565b82525050565b5f602082019050613ea75f830184613e85565b92915050565b5f60208284031215613ec257613ec1613bfc565b5b5f613ecf84828501613c1f565b91505092915050565b5f805f60608486031215613eef57613eee613bfc565b5b5f613efc86828701613d61565b9350506020613f0d86828701613d61565b9250506040613f1e86828701613c1f565b9150509250925092565b613f3181613d3a565b82525050565b5f602082019050613f4a5f830184613f28565b92915050565b5f60ff82169050919050565b613f6581613f50565b82525050565b5f602082019050613f7e5f830184613f5c565b92915050565b5f613f8e82613e3b565b9050919050565b613f9e81613f84565b82525050565b5f602082019050613fb75f830184613f95565b92915050565b613fc681613db3565b8114613fd0575f80fd5b50565b5f81359050613fe181613fbd565b92915050565b5f8060408385031215613ffd57613ffc613bfc565b5b5f61400a85828601613d61565b925050602061401b85828601613fd3565b9150509250929050565b5f6020828403121561403a57614039613bfc565b5b5f61404784828501613fd3565b91505092915050565b5f61405a82613d3a565b9050919050565b61406a81614050565b8114614074575f80fd5b50565b5f8135905061408581614061565b92915050565b5f80604083850312156140a1576140a0613bfc565b5b5f6140ae85828601614077565b92505060206140bf85828601613c1f565b9150509250929050565b5f80604083850312156140df576140de613bfc565b5b5f6140ec85828601613d61565b92505060206140fd85828601613d61565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61413b602083613c7b565b915061414682614107565b602082019050919050565b5f6020820190508181035f8301526141688161412f565b9050919050565b7f416c7265616479206c61756e63686564000000000000000000000000000000005f82015250565b5f6141a3601083613c7b565b91506141ae8261416f565b602082019050919050565b5f6020820190508181035f8301526141d081614197565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61420e82613c00565b915061421983613c00565b9250828201905080821115614231576142306141d7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061427b57607f821691505b60208210810361428e5761428d614237565b5b50919050565b5f6040820190506142a75f830185613f28565b6142b46020830184613e85565b9392505050565b5f6142c582613c00565b91506142d083613c00565b92508282026142de81613c00565b915082820484148315176142f5576142f46141d7565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614356602883613c7b565b9150614361826142fc565b604082019050919050565b5f6020820190508181035f8301526143838161434a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6143e4603983613c7b565b91506143ef8261438a565b604082019050919050565b5f6020820190508181035f830152614411816143d8565b9050919050565b5f8151905061442681613c09565b92915050565b5f6020828403121561444157614440613bfc565b5b5f61444e84828501614418565b91505092915050565b7f496e76616c696420416d6f756e740000000000000000000000000000000000005f82015250565b5f61448b600e83613c7b565b915061449682614457565b602082019050919050565b5f6020820190508181035f8301526144b88161447f565b9050919050565b5f815190506144cd81613fbd565b92915050565b5f602082840312156144e8576144e7613bfc565b5b5f6144f5848285016144bf565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614558602583613c7b565b9150614563826144fe565b604082019050919050565b5f6020820190508181035f8301526145858161454c565b9050919050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f6145c0600e83613c7b565b91506145cb8261458c565b602082019050919050565b5f6020820190508181035f8301526145ed816145b4565b9050919050565b7f426f6e757320636f6e74726163742068617320616c7265616479206265656e205f8201527f7365740000000000000000000000000000000000000000000000000000000000602082015250565b5f61464e602383613c7b565b9150614659826145f4565b604082019050919050565b5f6020820190508181035f83015261467b81614642565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6146dc602683613c7b565b91506146e782614682565b604082019050919050565b5f6020820190508181035f830152614709816146d0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61476a602483613c7b565b915061477582614710565b604082019050919050565b5f6020820190508181035f8301526147978161475e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147f8602283613c7b565b91506148038261479e565b604082019050919050565b5f6020820190508181035f830152614825816147ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614886602583613c7b565b91506148918261482c565b604082019050919050565b5f6020820190508181035f8301526148b38161487a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614914602383613c7b565b915061491f826148ba565b604082019050919050565b5f6020820190508181035f83015261494181614908565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61497c601683613c7b565b915061498782614948565b602082019050919050565b5f6020820190508181035f8301526149a981614970565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614a0a603583613c7b565b9150614a15826149b0565b604082019050919050565b5f6020820190508181035f830152614a37816149fe565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614a72601383613c7b565b9150614a7d82614a3e565b602082019050919050565b5f6020820190508181035f830152614a9f81614a66565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614b00603683613c7b565b9150614b0b82614aa6565b604082019050919050565b5f6020820190508181035f830152614b2d81614af4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b6b82613c00565b9150614b7683613c00565b925082614b8657614b85614b34565b5b828204905092915050565b5f614b9b82613c00565b9150614ba683613c00565b9250828203905081811115614bbe57614bbd6141d7565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614c1e602683613c7b565b9150614c2982614bc4565b604082019050919050565b5f6020820190508181035f830152614c4b81614c12565b9050919050565b5f81905092915050565b50565b5f614c6a5f83614c52565b9150614c7582614c5c565b5f82019050919050565b5f614c8982614c5f565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614cfb81613d4b565b92915050565b5f60208284031215614d1657614d15613bfc565b5b5f614d2384828501614ced565b91505092915050565b5f819050919050565b5f614d4f614d4a614d4584614d2c565b613e11565b613c00565b9050919050565b614d5f81614d35565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d9781613d3a565b82525050565b5f614da88383614d8e565b60208301905092915050565b5f602082019050919050565b5f614dca82614d65565b614dd48185614d6f565b9350614ddf83614d7f565b805f5b83811015614e0f578151614df68882614d9d565b9750614e0183614db4565b925050600181019050614de2565b5085935050505092915050565b5f60a082019050614e2f5f830188613e85565b614e3c6020830187614d56565b8181036040830152614e4e8186614dc0565b9050614e5d6060830185613f28565b614e6a6080830184613e85565b969550505050505056fea2646970667358221220c407f8594c7047df08bf41f74b60e56ef6df740ec77e94d456bbcf0cac5eae2a64736f6c63430008150033

Deployed Bytecode Sourcemap

15197:14586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19200:244;;;;;;;;;;;;;:::i;:::-;;20801:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5087:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6559:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22589:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16390:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15236:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5576:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22030:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16109:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19896:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6777:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15339:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5418:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7314:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15294:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15616:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22195:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20519:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16185:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15990:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15696:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5747:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1524:103;;;;;;;;;;;;;:::i;:::-;;19496:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20148:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15431:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15850:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1216:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15468:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16029:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20411:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5306:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21283:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15892:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29571:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16149:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16071:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7619:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5932:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21791:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16611:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15656:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15736:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21090:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20026:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15768:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15501:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19687:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15811:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6211:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22355:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15543:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29333:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1782:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15583:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19200:244;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19270:1:::1;19256:10;;:15;19248:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19316:12;19303:10;:25;;;;19361:15;19339:19;:37;;;;19403:4;19387:13;;:20;;;;;;;;;;;;;;;;;;19432:4;19418:11;;:18;;;;;;;;;;;;;;;;;;19200:244::o:0;20801:281::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20937:13:::1;20918:16;:32;;;;20974:7;20961:10;:20;;;;21027:10;;21008:16;;:29;;;;:::i;:::-;20992:13;:45;;;;21071:2;21056:13;;:17;;21048:26;;;::::0;::::1;;20801:281:::0;;:::o;5087:100::-;5141:13;5174:5;5167:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5087:100;:::o;6559:210::-;6678:4;6700:39;6709:12;:10;:12::i;:::-;6723:7;6732:6;6700:8;:39::i;:::-;6757:4;6750:11;;6559:210;;;;:::o;22589:169::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22702:13:::1;;;;;;;;;;;:31;;;22734:6;22742:7;22702:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22589:169:::0;;:::o;16390:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15236:51::-;;;:::o;5576:108::-;5637:7;5664:12;;5657:19;;5576:108;:::o;22030:157::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22137:9:::1;;;;;;;;;;;22109:38;;22126:9;22109:38;;;;;;;;;;;;22170:9;22158;;:21;;;;;;;;;;;;;;;;;;22030:157:::0;:::o;16109:33::-;;;;:::o;19896:122::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20003:6:::1;19993;:17;;;;:::i;:::-;19970:20;:40;;;;19896:122:::0;:::o;6777:529::-;6917:4;6934:36;6944:6;6952:9;6963:6;6934:9;:36::i;:::-;6983:24;7010:11;:19;7022:6;7010:19;;;;;;;;;;;;;;;:33;7030:12;:10;:12::i;:::-;7010:33;;;;;;;;;;;;;;;;6983:60;;7096:6;7076:16;:26;;7054:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7206:57;7215:6;7223:12;:10;:12::i;:::-;7256:6;7237:16;:25;7206:8;:57::i;:::-;7294:4;7287:11;;;6777:529;;;;;:::o;15339:53::-;15385:6;15339:53;:::o;5418:93::-;5476:5;5501:2;5494:9;;5418:93;:::o;7314:297::-;7429:4;7451:130;7474:12;:10;:12::i;:::-;7501:7;7560:10;7523:11;:25;7535:12;:10;:12::i;:::-;7523:25;;;;;;;;;;;;;;;:34;7549:7;7523:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7451:8;:130::i;:::-;7599:4;7592:11;;7314:297;;;;:::o;15294:38::-;;;:::o;15616:33::-;;;;;;;;;;;;;:::o;22195:126::-;22261:4;22285:19;:28;22305:7;22285:28;;;;;;;;;;;;;;;;;;;;;;;;;22278:35;;22195:126;;;:::o;20519:274::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20653:13:::1;20635:15;:31;;;;20689:7;20677:9;:19;;;;20740:9;;20722:15;;:27;;;;:::i;:::-;20707:12;:42;;;;20782:2;20768:12;;:16;;20760:25;;;::::0;::::1;;20519:274:::0;;:::o;16185:35::-;;;;;;;;;;;;;:::o;15990:32::-;;;;:::o;15696:31::-;;;;;;;;;;;;;:::o;5747:177::-;5866:7;5898:9;:18;5908:7;5898:18;;;;;;;;;;;;;;;;5891:25;;5747:177;;;:::o;1524:103::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1589:30:::1;1616:1;1589:18;:30::i;:::-;1524:103::o:0;19496:121::-;19548:4;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19582:5:::1;19565:14;;:22;;;;;;;;;;;;;;;;;;19605:4;19598:11;;19496:121:::0;:::o;20148:167::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20303:4:::1;20261:31;:39;20293:6;20261:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20148:167:::0;;:::o;15431:30::-;;;;;;;;;;;;;:::o;15850:35::-;;;;:::o;1216:87::-;1262:7;1289:6;;;;;;;;;;;1282:13;;1216:87;:::o;15468:24::-;;;;;;;;;;;;;:::o;16029:35::-;;;;:::o;20411:100::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20496:7:::1;20482:11;;:21;;;;;;;;;;;;;;;;;;20411:100:::0;:::o;5306:104::-;5362:13;5395:7;5388:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5306:104;:::o;21283:304::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21427:13:::1;21419:21;;:4;:21;;::::0;21397:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21538:41;21567:4;21573:5;21538:28;:41::i;:::-;21283:304:::0;;:::o;15892:28::-;;;;:::o;29571:209::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29699:7:::1;29664:6;:16;;;29689:4;29664:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;29656:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29736:6;:15;;;29752:10;29764:7;29736:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29571:209:::0;;:::o;16149:27::-;;;;:::o;16071:29::-;;;;:::o;7619:482::-;7739:4;7761:24;7788:11;:25;7800:12;:10;:12::i;:::-;7788:25;;;;;;;;;;;;;;;:34;7814:7;7788:34;;;;;;;;;;;;;;;;7761:61;;7875:15;7855:16;:35;;7833:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7991:67;8000:12;:10;:12::i;:::-;8014:7;8042:15;8023:16;:34;7991:8;:67::i;:::-;8089:4;8082:11;;;7619:482;;;;:::o;5932:216::-;6054:4;6076:42;6086:12;:10;:12::i;:::-;6100:9;6111:6;6076:9;:42::i;:::-;6136:4;6129:11;;5932:216;;;;:::o;21791:231::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21951:15:::1;;;;;;;;;;;21908:59;;21931:18;21908:59;;;;;;;;;;;;21996:18;21978:15;;:36;;;;;;;;;;;;;;;;;;21791:231:::0;:::o;16611:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15656:33::-;;;;;;;;;;;;;:::o;15736:25::-;;;;:::o;21090:185::-;17365:42;17351:56;;:10;:56;;;17343:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21209:8:::1;21178:19;:28;21198:7;21178:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21249:7;21233:34;;;21258:8;21233:34;;;;;;:::i;:::-;;;;;;;;21090:185:::0;;:::o;20026:114::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20125:6:::1;20115;:17;;;;:::i;:::-;20103:9;:29;;;;20026:114:::0;:::o;15768:34::-;;;;:::o;15501:35::-;;;;:::o;19687:201::-;19795:4;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19851:6:::1;19838:9;:20;;;;:::i;:::-;19817:18;:41;;;;19876:4;19869:11;;19687:201:::0;;;:::o;15811:32::-;;;;:::o;6211:201::-;6345:7;6377:11;:18;6389:5;6377:18;;;;;;;;;;;;;;;:27;6396:7;6377:27;;;;;;;;;;;;;;;;6370:34;;6211:201;;;;:::o;22355:226::-;22473:1;22433:43;;:13;;;;;;;;;;;:43;;;22425:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;22558:14;22527:13;;:46;;;;;;;;;;;;;;;;;;22355:226;:::o;15543:33::-;;;;:::o;29333:183::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29434:7:::1;29409:21;:32;;29401:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;29479:10;29471:28;;:37;29500:7;29471:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29333:183:::0;:::o;1782:238::-;1447:12;:10;:12::i;:::-;1436:23;;:7;:5;:7::i;:::-;:23;;;1428:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1905:1:::1;1885:22;;:8;:22;;::::0;1863:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1984:28;2003:8;1984:18;:28::i;:::-;1782:238:::0;:::o;15583:24::-;;;;:::o;574:98::-;627:7;654:10;647:17;;574:98;:::o;9893:380::-;10046:1;10029:19;;:5;:19;;;10021:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10127:1;10108:21;;:7;:21;;;10100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10211:6;10181:11;:18;10193:5;10181:18;;;;;;;;;;;;;;;:27;10200:7;10181:27;;;;;;;;;;;;;;;:36;;;;10249:7;10233:32;;10242:5;10233:32;;;10258:6;10233:32;;;;;;:::i;:::-;;;;;;;;9893:380;;;:::o;22899:4883::-;23047:1;23031:18;;:4;:18;;;23023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23124:1;23110:16;;:2;:16;;;23102:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23193:1;23183:6;:11;23179:93;;23211:28;23227:4;23233:2;23237:1;23211:15;:28::i;:::-;23254:7;;23179:93;23288:14;;;;;;;;;;;23284:1692;;;23349:7;:5;:7::i;:::-;23341:15;;:4;:15;;;;:49;;;;;23383:7;:5;:7::i;:::-;23377:13;;:2;:13;;;;23341:49;:86;;;;;23425:1;23411:16;;:2;:16;;;;23341:86;:128;;;;;23462:6;23448:21;;:2;:21;;;;23341:128;:158;;;;;23491:8;;;;;;;;;;;23490:9;23341:158;23319:1646;;;23539:13;;;;;;;;;;;23534:223;;23611:19;:25;23631:4;23611:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23640:19;:23;23660:2;23640:23;;;;;;;;;;;;;;;;;;;;;;;;;23611:52;23577:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23534:223;23829:25;:31;23855:4;23829:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23886:31;:35;23918:2;23886:35;;;;;;;;;;;;;;;;;;;;;;;;;23885:36;23829:92;23803:1147;;;24008:20;;23998:6;:30;;23964:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24216:9;;24199:13;24209:2;24199:9;:13::i;:::-;24190:6;:22;;;;:::i;:::-;:35;;24156:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23803:1147;;;24394:25;:29;24420:2;24394:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24449:31;:37;24481:4;24449:37;;;;;;;;;;;;;;;;;;;;;;;;;24448:38;24394:92;24368:582;;;24573:20;;24563:6;:30;;24529:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24368:582;;;24730:31;:35;24762:2;24730:35;;;;;;;;;;;;;;;;;;;;;;;;;24725:225;;24850:9;;24833:13;24843:2;24833:9;:13::i;:::-;24824:6;:22;;;;:::i;:::-;:35;;24790:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24725:225;24368:582;23803:1147;23319:1646;23284:1692;24988:28;25019:24;25037:4;25019:9;:24::i;:::-;24988:55;;25056:12;25095:18;;25071:20;:42;;25056:57;;25144:7;:35;;;;;25168:11;;;;;;;;;;;25144:35;:61;;;;;25197:8;;;;;;;;;;;25196:9;25144:61;:110;;;;;25223:25;:31;25249:4;25223:31;;;;;;;;;;;;;;;;;;;;;;;;;25222:32;25144:110;:153;;;;;25272:19;:25;25292:4;25272:25;;;;;;;;;;;;;;;;;;;;;;;;;25271:26;25144:153;:194;;;;;25315:19;:23;25335:2;25315:23;;;;;;;;;;;;;;;;;;;;;;;;;25314:24;25144:194;25126:326;;;25376:4;25365:8;;:15;;;;;;;;;;;;;;;;;;25397:10;:8;:10::i;:::-;25435:5;25424:8;;:16;;;;;;;;;;;;;;;;;;25126:326;25495:7;:5;:7::i;:::-;25487:15;;:4;:15;;;;:40;;;;;25522:4;25506:21;;:4;:21;;;;25487:40;25484:672;;;25539:19;25591:25;:31;25617:4;25591:31;;;;;;;;;;;;;;;;;;;;;;;;;25587:305;;;25673:1;25647:18;:22;25666:2;25647:22;;;;;;;;;;;;;;;;:27;25643:135;;25724:15;25699:18;:22;25718:2;25699:22;;;;;;;;;;;;;;;:40;;;;25643:135;25796:13;;;;;;;;;;;:31;;;25828:2;25832:6;25796:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25876:4;25860:20;;25587:305;25908:25;:29;25934:2;25908:29;;;;;;;;;;;;;;;;;;;;;;;;;25904:135;;;25958:26;25979:4;25958:20;:26::i;:::-;26019:4;26003:20;;25904:135;26055:13;26051:92;;26101:26;26122:4;26101:20;:26::i;:::-;26051:92;25528:628;25484:672;26182:12;26198:8;;;;;;;;;;;26197:9;26182:24;;26308:19;:25;26328:4;26308:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26337:19;:23;26357:2;26337:23;;;;;;;;;;;;;;;;;;;;;;;;;26308:52;26304:100;;;26387:5;26377:15;;26304:100;26424:12;26529:7;26525:1204;;;26595:25;:29;26621:2;26595:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26644:1;26628:13;;:17;26595:50;26591:991;;;26785:6;26758:18;:24;26777:4;26758:24;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;26740:15;:51;:81;;;;26820:1;26794:18;:24;26813:4;26794:24;;;;;;;;;;;;;;;;:27;26740:81;26736:361;;;26927:3;26921:2;26912:6;:11;;;;:::i;:::-;26911:19;;;;:::i;:::-;26904:26;;26736:361;;;27074:3;27057:13;;27048:6;:22;;;;:::i;:::-;27047:30;;;;:::i;:::-;27040:37;;26736:361;27165:13;;27145:16;;27138:4;:23;;;;:::i;:::-;27137:41;;;;:::i;:::-;27115:18;;:63;;;;;;;:::i;:::-;;;;;;;;27235:13;;27221:10;;27214:4;:17;;;;:::i;:::-;27213:35;;;;:::i;:::-;27197:12;;:51;;;;;;;:::i;:::-;;;;;;;;26591:991;;;27310:25;:31;27336:4;27310:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27360:1;27345:12;;:16;27310:51;27306:276;;;27415:3;27399:12;;27390:6;:21;;;;:::i;:::-;27389:29;;;;:::i;:::-;27382:36;;27486:12;;27467:15;;27460:4;:22;;;;:::i;:::-;27459:39;;;;:::i;:::-;27437:18;;:61;;;;;;;:::i;:::-;;;;;;;;27554:12;;27541:9;;27534:4;:16;;;;:::i;:::-;27533:33;;;;:::i;:::-;27517:12;;:49;;;;;;;:::i;:::-;;;;;;;;27306:276;26591:991;27607:1;27600:4;:8;27596:91;;;27629:42;27645:4;27659;27666;27629:15;:42::i;:::-;27596:91;27713:4;27703:14;;;;;:::i;:::-;;;26525:1204;27741:33;27757:4;27763:2;27767:6;27741:15;:33::i;:::-;23012:4770;;;;22899:4883;;;;:::o;2180:191::-;2254:16;2273:6;;;;;;;;;;;2254:25;;2299:8;2290:6;;:17;;;;;;;;;;;;;;;;;;2354:8;2323:40;;2344:8;2323:40;;;;;;;;;;;;2243:128;2180:191;:::o;21595:188::-;21712:5;21678:25;:31;21704:4;21678:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21769:5;21735:40;;21763:4;21735:40;;;;;;;;;;;;21595:188;;:::o;8109:770::-;8267:1;8249:20;;:6;:20;;;8241:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8351:1;8330:23;;:9;:23;;;8322:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8406:47;8427:6;8435:9;8446:6;8406:20;:47::i;:::-;8466:21;8490:9;:17;8500:6;8490:17;;;;;;;;;;;;;;;;8466:41;;8557:6;8540:13;:23;;8518:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8701:6;8685:13;:22;8665:9;:17;8675:6;8665:17;;;;;;;;;;;;;;;:42;;;;8753:6;8729:9;:20;8739:9;8729:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8794:9;8777:35;;8786:6;8777:35;;;8805:6;8777:35;;;;;;:::i;:::-;;;;;;;;8825:46;8845:6;8853:9;8864:6;8825:19;:46::i;:::-;8230:649;8109:770;;;:::o;28387:900::-;28426:23;28452:24;28470:4;28452:9;:24::i;:::-;28426:50;;28487:25;28536:12;;28515:18;;:33;;;;:::i;:::-;28487:61;;28559:12;28607:1;28588:15;:20;:46;;;;28633:1;28612:17;:22;28588:46;28584:85;;;28651:7;;;;;28584:85;28703:18;;28685:15;:36;28681:105;;;28756:18;;28738:36;;28681:105;28798:26;28827:15;28798:44;;28855:36;28872:18;28855:16;:36::i;:::-;28904:18;28925:21;28904:42;;28959:23;29034:17;28999:18;;28986:10;:31;;;;:::i;:::-;28985:66;;;;:::i;:::-;28959:92;;29085:1;29064:18;:22;;;;29112:1;29097:12;:16;;;;29148:15;;;;;;;;;;;29140:29;;29177:15;29140:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29126:71;;;;;29230:9;;;;;;;;;;;29222:23;;29253:21;29222:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29208:71;;;;;28415:872;;;;;;28387:900;:::o;22774:117::-;22841:13;;;;;;;;;;;:33;;;22875:7;22841:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22774:117;:::o;10281:125::-;;;;:::o;10414:124::-;;;;:::o;27790:589::-;27916:21;27954:1;27940:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27916:40;;27985:4;27967;27972:1;27967:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28011:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28001:4;28006:1;28001:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28046:62;28063:4;28078:15;28096:11;28046:8;:62::i;:::-;28147:15;:66;;;28228:11;28254:1;28298:4;28325;28345:15;28147:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27845:534;27790:589;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:149::-;7406:9;7439:37;7470:5;7439:37;:::i;:::-;7426:50;;7333:149;;;:::o;7488:177::-;7598:60;7652:5;7598:60;:::i;:::-;7593:3;7586:73;7488:177;;:::o;7671:268::-;7787:4;7825:2;7814:9;7810:18;7802:26;;7838:94;7929:1;7918:9;7914:17;7905:6;7838:94;:::i;:::-;7671:268;;;;:::o;7945:116::-;8015:21;8030:5;8015:21;:::i;:::-;8008:5;8005:32;7995:60;;8051:1;8048;8041:12;7995:60;7945:116;:::o;8067:133::-;8110:5;8148:6;8135:20;8126:29;;8164:30;8188:5;8164:30;:::i;:::-;8067:133;;;;:::o;8206:468::-;8271:6;8279;8328:2;8316:9;8307:7;8303:23;8299:32;8296:119;;;8334:79;;:::i;:::-;8296:119;8454:1;8479:53;8524:7;8515:6;8504:9;8500:22;8479:53;:::i;:::-;8469:63;;8425:117;8581:2;8607:50;8649:7;8640:6;8629:9;8625:22;8607:50;:::i;:::-;8597:60;;8552:115;8206:468;;;;;:::o;8680:323::-;8736:6;8785:2;8773:9;8764:7;8760:23;8756:32;8753:119;;;8791:79;;:::i;:::-;8753:119;8911:1;8936:50;8978:7;8969:6;8958:9;8954:22;8936:50;:::i;:::-;8926:60;;8882:114;8680:323;;;;:::o;9009:110::-;9060:7;9089:24;9107:5;9089:24;:::i;:::-;9078:35;;9009:110;;;:::o;9125:150::-;9212:38;9244:5;9212:38;:::i;:::-;9205:5;9202:49;9192:77;;9265:1;9262;9255:12;9192:77;9125:150;:::o;9281:167::-;9341:5;9379:6;9366:20;9357:29;;9395:47;9436:5;9395:47;:::i;:::-;9281:167;;;;:::o;9454:502::-;9536:6;9544;9593:2;9581:9;9572:7;9568:23;9564:32;9561:119;;;9599:79;;:::i;:::-;9561:119;9719:1;9744:67;9803:7;9794:6;9783:9;9779:22;9744:67;:::i;:::-;9734:77;;9690:131;9860:2;9886:53;9931:7;9922:6;9911:9;9907:22;9886:53;:::i;:::-;9876:63;;9831:118;9454:502;;;;;:::o;9962:474::-;10030:6;10038;10087:2;10075:9;10066:7;10062:23;10058:32;10055:119;;;10093:79;;:::i;:::-;10055:119;10213:1;10238:53;10283:7;10274:6;10263:9;10259:22;10238:53;:::i;:::-;10228:63;;10184:117;10340:2;10366:53;10411:7;10402:6;10391:9;10387:22;10366:53;:::i;:::-;10356:63;;10311:118;9962:474;;;;;:::o;10442:182::-;10582:34;10578:1;10570:6;10566:14;10559:58;10442:182;:::o;10630:366::-;10772:3;10793:67;10857:2;10852:3;10793:67;:::i;:::-;10786:74;;10869:93;10958:3;10869:93;:::i;:::-;10987:2;10982:3;10978:12;10971:19;;10630:366;;;:::o;11002:419::-;11168:4;11206:2;11195:9;11191:18;11183:26;;11255:9;11249:4;11245:20;11241:1;11230:9;11226:17;11219:47;11283:131;11409:4;11283:131;:::i;:::-;11275:139;;11002:419;;;:::o;11427:166::-;11567:18;11563:1;11555:6;11551:14;11544:42;11427:166;:::o;11599:366::-;11741:3;11762:67;11826:2;11821:3;11762:67;:::i;:::-;11755:74;;11838:93;11927:3;11838:93;:::i;:::-;11956:2;11951:3;11947:12;11940:19;;11599:366;;;:::o;11971:419::-;12137:4;12175:2;12164:9;12160:18;12152:26;;12224:9;12218:4;12214:20;12210:1;12199:9;12195:17;12188:47;12252:131;12378:4;12252:131;:::i;:::-;12244:139;;11971:419;;;:::o;12396:180::-;12444:77;12441:1;12434:88;12541:4;12538:1;12531:15;12565:4;12562:1;12555:15;12582:191;12622:3;12641:20;12659:1;12641:20;:::i;:::-;12636:25;;12675:20;12693:1;12675:20;:::i;:::-;12670:25;;12718:1;12715;12711:9;12704:16;;12739:3;12736:1;12733:10;12730:36;;;12746:18;;:::i;:::-;12730:36;12582:191;;;;:::o;12779:180::-;12827:77;12824:1;12817:88;12924:4;12921:1;12914:15;12948:4;12945:1;12938:15;12965:320;13009:6;13046:1;13040:4;13036:12;13026:22;;13093:1;13087:4;13083:12;13114:18;13104:81;;13170:4;13162:6;13158:17;13148:27;;13104:81;13232:2;13224:6;13221:14;13201:18;13198:38;13195:84;;13251:18;;:::i;:::-;13195:84;13016:269;12965:320;;;:::o;13291:332::-;13412:4;13450:2;13439:9;13435:18;13427:26;;13463:71;13531:1;13520:9;13516:17;13507:6;13463:71;:::i;:::-;13544:72;13612:2;13601:9;13597:18;13588:6;13544:72;:::i;:::-;13291:332;;;;;:::o;13629:410::-;13669:7;13692:20;13710:1;13692:20;:::i;:::-;13687:25;;13726:20;13744:1;13726:20;:::i;:::-;13721:25;;13781:1;13778;13774:9;13803:30;13821:11;13803:30;:::i;:::-;13792:41;;13982:1;13973:7;13969:15;13966:1;13963:22;13943:1;13936:9;13916:83;13893:139;;14012:18;;:::i;:::-;13893:139;13677:362;13629:410;;;;:::o;14045:227::-;14185:34;14181:1;14173:6;14169:14;14162:58;14254:10;14249:2;14241:6;14237:15;14230:35;14045:227;:::o;14278:366::-;14420:3;14441:67;14505:2;14500:3;14441:67;:::i;:::-;14434:74;;14517:93;14606:3;14517:93;:::i;:::-;14635:2;14630:3;14626:12;14619:19;;14278:366;;;:::o;14650:419::-;14816:4;14854:2;14843:9;14839:18;14831:26;;14903:9;14897:4;14893:20;14889:1;14878:9;14874:17;14867:47;14931:131;15057:4;14931:131;:::i;:::-;14923:139;;14650:419;;;:::o;15075:244::-;15215:34;15211:1;15203:6;15199:14;15192:58;15284:27;15279:2;15271:6;15267:15;15260:52;15075:244;:::o;15325:366::-;15467:3;15488:67;15552:2;15547:3;15488:67;:::i;:::-;15481:74;;15564:93;15653:3;15564:93;:::i;:::-;15682:2;15677:3;15673:12;15666:19;;15325:366;;;:::o;15697:419::-;15863:4;15901:2;15890:9;15886:18;15878:26;;15950:9;15944:4;15940:20;15936:1;15925:9;15921:17;15914:47;15978:131;16104:4;15978:131;:::i;:::-;15970:139;;15697:419;;;:::o;16122:143::-;16179:5;16210:6;16204:13;16195:22;;16226:33;16253:5;16226:33;:::i;:::-;16122:143;;;;:::o;16271:351::-;16341:6;16390:2;16378:9;16369:7;16365:23;16361:32;16358:119;;;16396:79;;:::i;:::-;16358:119;16516:1;16541:64;16597:7;16588:6;16577:9;16573:22;16541:64;:::i;:::-;16531:74;;16487:128;16271:351;;;;:::o;16628:164::-;16768:16;16764:1;16756:6;16752:14;16745:40;16628:164;:::o;16798:366::-;16940:3;16961:67;17025:2;17020:3;16961:67;:::i;:::-;16954:74;;17037:93;17126:3;17037:93;:::i;:::-;17155:2;17150:3;17146:12;17139:19;;16798:366;;;:::o;17170:419::-;17336:4;17374:2;17363:9;17359:18;17351:26;;17423:9;17417:4;17413:20;17409:1;17398:9;17394:17;17387:47;17451:131;17577:4;17451:131;:::i;:::-;17443:139;;17170:419;;;:::o;17595:137::-;17649:5;17680:6;17674:13;17665:22;;17696:30;17720:5;17696:30;:::i;:::-;17595:137;;;;:::o;17738:345::-;17805:6;17854:2;17842:9;17833:7;17829:23;17825:32;17822:119;;;17860:79;;:::i;:::-;17822:119;17980:1;18005:61;18058:7;18049:6;18038:9;18034:22;18005:61;:::i;:::-;17995:71;;17951:125;17738:345;;;;:::o;18089:224::-;18229:34;18225:1;18217:6;18213:14;18206:58;18298:7;18293:2;18285:6;18281:15;18274:32;18089:224;:::o;18319:366::-;18461:3;18482:67;18546:2;18541:3;18482:67;:::i;:::-;18475:74;;18558:93;18647:3;18558:93;:::i;:::-;18676:2;18671:3;18667:12;18660:19;;18319:366;;;:::o;18691:419::-;18857:4;18895:2;18884:9;18880:18;18872:26;;18944:9;18938:4;18934:20;18930:1;18919:9;18915:17;18908:47;18972:131;19098:4;18972:131;:::i;:::-;18964:139;;18691:419;;;:::o;19116:164::-;19256:16;19252:1;19244:6;19240:14;19233:40;19116:164;:::o;19286:366::-;19428:3;19449:67;19513:2;19508:3;19449:67;:::i;:::-;19442:74;;19525:93;19614:3;19525:93;:::i;:::-;19643:2;19638:3;19634:12;19627:19;;19286:366;;;:::o;19658:419::-;19824:4;19862:2;19851:9;19847:18;19839:26;;19911:9;19905:4;19901:20;19897:1;19886:9;19882:17;19875:47;19939:131;20065:4;19939:131;:::i;:::-;19931:139;;19658:419;;;:::o;20083:222::-;20223:34;20219:1;20211:6;20207:14;20200:58;20292:5;20287:2;20279:6;20275:15;20268:30;20083:222;:::o;20311:366::-;20453:3;20474:67;20538:2;20533:3;20474:67;:::i;:::-;20467:74;;20550:93;20639:3;20550:93;:::i;:::-;20668:2;20663:3;20659:12;20652:19;;20311:366;;;:::o;20683:419::-;20849:4;20887:2;20876:9;20872:18;20864:26;;20936:9;20930:4;20926:20;20922:1;20911:9;20907:17;20900:47;20964:131;21090:4;20964:131;:::i;:::-;20956:139;;20683:419;;;:::o;21108:225::-;21248:34;21244:1;21236:6;21232:14;21225:58;21317:8;21312:2;21304:6;21300:15;21293:33;21108:225;:::o;21339:366::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:419::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:223::-;22276:34;22272:1;22264:6;22260:14;22253:58;22345:6;22340:2;22332:6;22328:15;22321:31;22136:223;:::o;22365:366::-;22507:3;22528:67;22592:2;22587:3;22528:67;:::i;:::-;22521:74;;22604:93;22693:3;22604:93;:::i;:::-;22722:2;22717:3;22713:12;22706:19;;22365:366;;;:::o;22737:419::-;22903:4;22941:2;22930:9;22926:18;22918:26;;22990:9;22984:4;22980:20;22976:1;22965:9;22961:17;22954:47;23018:131;23144:4;23018:131;:::i;:::-;23010:139;;22737:419;;;:::o;23162:221::-;23302:34;23298:1;23290:6;23286:14;23279:58;23371:4;23366:2;23358:6;23354:15;23347:29;23162:221;:::o;23389:366::-;23531:3;23552:67;23616:2;23611:3;23552:67;:::i;:::-;23545:74;;23628:93;23717:3;23628:93;:::i;:::-;23746:2;23741:3;23737:12;23730:19;;23389:366;;;:::o;23761:419::-;23927:4;23965:2;23954:9;23950:18;23942:26;;24014:9;24008:4;24004:20;24000:1;23989:9;23985:17;23978:47;24042:131;24168:4;24042:131;:::i;:::-;24034:139;;23761:419;;;:::o;24186:224::-;24326:34;24322:1;24314:6;24310:14;24303:58;24395:7;24390:2;24382:6;24378:15;24371:32;24186:224;:::o;24416:366::-;24558:3;24579:67;24643:2;24638:3;24579:67;:::i;:::-;24572:74;;24655:93;24744:3;24655:93;:::i;:::-;24773:2;24768:3;24764:12;24757:19;;24416:366;;;:::o;24788:419::-;24954:4;24992:2;24981:9;24977:18;24969:26;;25041:9;25035:4;25031:20;25027:1;25016:9;25012:17;25005:47;25069:131;25195:4;25069:131;:::i;:::-;25061:139;;24788:419;;;:::o;25213:222::-;25353:34;25349:1;25341:6;25337:14;25330:58;25422:5;25417:2;25409:6;25405:15;25398:30;25213:222;:::o;25441:366::-;25583:3;25604:67;25668:2;25663:3;25604:67;:::i;:::-;25597:74;;25680:93;25769:3;25680:93;:::i;:::-;25798:2;25793:3;25789:12;25782:19;;25441:366;;;:::o;25813:419::-;25979:4;26017:2;26006:9;26002:18;25994:26;;26066:9;26060:4;26056:20;26052:1;26041:9;26037:17;26030:47;26094:131;26220:4;26094:131;:::i;:::-;26086:139;;25813:419;;;:::o;26238:172::-;26378:24;26374:1;26366:6;26362:14;26355:48;26238:172;:::o;26416:366::-;26558:3;26579:67;26643:2;26638:3;26579:67;:::i;:::-;26572:74;;26655:93;26744:3;26655:93;:::i;:::-;26773:2;26768:3;26764:12;26757:19;;26416:366;;;:::o;26788:419::-;26954:4;26992:2;26981:9;26977:18;26969:26;;27041:9;27035:4;27031:20;27027:1;27016:9;27012:17;27005:47;27069:131;27195:4;27069:131;:::i;:::-;27061:139;;26788:419;;;:::o;27213:240::-;27353:34;27349:1;27341:6;27337:14;27330:58;27422:23;27417:2;27409:6;27405:15;27398:48;27213:240;:::o;27459:366::-;27601:3;27622:67;27686:2;27681:3;27622:67;:::i;:::-;27615:74;;27698:93;27787:3;27698:93;:::i;:::-;27816:2;27811:3;27807:12;27800:19;;27459:366;;;:::o;27831:419::-;27997:4;28035:2;28024:9;28020:18;28012:26;;28084:9;28078:4;28074:20;28070:1;28059:9;28055:17;28048:47;28112:131;28238:4;28112:131;:::i;:::-;28104:139;;27831:419;;;:::o;28256:169::-;28396:21;28392:1;28384:6;28380:14;28373:45;28256:169;:::o;28431:366::-;28573:3;28594:67;28658:2;28653:3;28594:67;:::i;:::-;28587:74;;28670:93;28759:3;28670:93;:::i;:::-;28788:2;28783:3;28779:12;28772:19;;28431:366;;;:::o;28803:419::-;28969:4;29007:2;28996:9;28992:18;28984:26;;29056:9;29050:4;29046:20;29042:1;29031:9;29027:17;29020:47;29084:131;29210:4;29084:131;:::i;:::-;29076:139;;28803:419;;;:::o;29228:241::-;29368:34;29364:1;29356:6;29352:14;29345:58;29437:24;29432:2;29424:6;29420:15;29413:49;29228:241;:::o;29475:366::-;29617:3;29638:67;29702:2;29697:3;29638:67;:::i;:::-;29631:74;;29714:93;29803:3;29714:93;:::i;:::-;29832:2;29827:3;29823:12;29816:19;;29475:366;;;:::o;29847:419::-;30013:4;30051:2;30040:9;30036:18;30028:26;;30100:9;30094:4;30090:20;30086:1;30075:9;30071:17;30064:47;30128:131;30254:4;30128:131;:::i;:::-;30120:139;;29847:419;;;:::o;30272:180::-;30320:77;30317:1;30310:88;30417:4;30414:1;30407:15;30441:4;30438:1;30431:15;30458:185;30498:1;30515:20;30533:1;30515:20;:::i;:::-;30510:25;;30549:20;30567:1;30549:20;:::i;:::-;30544:25;;30588:1;30578:35;;30593:18;;:::i;:::-;30578:35;30635:1;30632;30628:9;30623:14;;30458:185;;;;:::o;30649:194::-;30689:4;30709:20;30727:1;30709:20;:::i;:::-;30704:25;;30743:20;30761:1;30743:20;:::i;:::-;30738:25;;30787:1;30784;30780:9;30772:17;;30811:1;30805:4;30802:11;30799:37;;;30816:18;;:::i;:::-;30799:37;30649:194;;;;:::o;30849:225::-;30989:34;30985:1;30977:6;30973:14;30966:58;31058:8;31053:2;31045:6;31041:15;31034:33;30849:225;:::o;31080:366::-;31222:3;31243:67;31307:2;31302:3;31243:67;:::i;:::-;31236:74;;31319:93;31408:3;31319:93;:::i;:::-;31437:2;31432:3;31428:12;31421:19;;31080:366;;;:::o;31452:419::-;31618:4;31656:2;31645:9;31641:18;31633:26;;31705:9;31699:4;31695:20;31691:1;31680:9;31676:17;31669:47;31733:131;31859:4;31733:131;:::i;:::-;31725:139;;31452:419;;;:::o;31877:147::-;31978:11;32015:3;32000:18;;31877:147;;;;:::o;32030:114::-;;:::o;32150:398::-;32309:3;32330:83;32411:1;32406:3;32330:83;:::i;:::-;32323:90;;32422:93;32511:3;32422:93;:::i;:::-;32540:1;32535:3;32531:11;32524:18;;32150:398;;;:::o;32554:379::-;32738:3;32760:147;32903:3;32760:147;:::i;:::-;32753:154;;32924:3;32917:10;;32554:379;;;:::o;32939:180::-;32987:77;32984:1;32977:88;33084:4;33081:1;33074:15;33108:4;33105:1;33098:15;33125:180;33173:77;33170:1;33163:88;33270:4;33267:1;33260:15;33294:4;33291:1;33284:15;33311:143;33368:5;33399:6;33393:13;33384:22;;33415:33;33442:5;33415:33;:::i;:::-;33311:143;;;;:::o;33460:351::-;33530:6;33579:2;33567:9;33558:7;33554:23;33550:32;33547:119;;;33585:79;;:::i;:::-;33547:119;33705:1;33730:64;33786:7;33777:6;33766:9;33762:22;33730:64;:::i;:::-;33720:74;;33676:128;33460:351;;;;:::o;33817:85::-;33862:7;33891:5;33880:16;;33817:85;;;:::o;33908:158::-;33966:9;33999:61;34017:42;34026:32;34052:5;34026:32;:::i;:::-;34017:42;:::i;:::-;33999:61;:::i;:::-;33986:74;;33908:158;;;:::o;34072:147::-;34167:45;34206:5;34167:45;:::i;:::-;34162:3;34155:58;34072:147;;:::o;34225:114::-;34292:6;34326:5;34320:12;34310:22;;34225:114;;;:::o;34345:184::-;34444:11;34478:6;34473:3;34466:19;34518:4;34513:3;34509:14;34494:29;;34345:184;;;;:::o;34535:132::-;34602:4;34625:3;34617:11;;34655:4;34650:3;34646:14;34638:22;;34535:132;;;:::o;34673:108::-;34750:24;34768:5;34750:24;:::i;:::-;34745:3;34738:37;34673:108;;:::o;34787:179::-;34856:10;34877:46;34919:3;34911:6;34877:46;:::i;:::-;34955:4;34950:3;34946:14;34932:28;;34787:179;;;;:::o;34972:113::-;35042:4;35074;35069:3;35065:14;35057:22;;34972:113;;;:::o;35121:732::-;35240:3;35269:54;35317:5;35269:54;:::i;:::-;35339:86;35418:6;35413:3;35339:86;:::i;:::-;35332:93;;35449:56;35499:5;35449:56;:::i;:::-;35528:7;35559:1;35544:284;35569:6;35566:1;35563:13;35544:284;;;35645:6;35639:13;35672:63;35731:3;35716:13;35672:63;:::i;:::-;35665:70;;35758:60;35811:6;35758:60;:::i;:::-;35748:70;;35604:224;35591:1;35588;35584:9;35579:14;;35544:284;;;35548:14;35844:3;35837:10;;35245:608;;;35121:732;;;;:::o;35859:831::-;36122:4;36160:3;36149:9;36145:19;36137:27;;36174:71;36242:1;36231:9;36227:17;36218:6;36174:71;:::i;:::-;36255:80;36331:2;36320:9;36316:18;36307:6;36255:80;:::i;:::-;36382:9;36376:4;36372:20;36367:2;36356:9;36352:18;36345:48;36410:108;36513:4;36504:6;36410:108;:::i;:::-;36402:116;;36528:72;36596:2;36585:9;36581:18;36572:6;36528:72;:::i;:::-;36610:73;36678:3;36667:9;36663:19;36654:6;36610:73;:::i;:::-;35859:831;;;;;;;;:::o

Swarm Source

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