ETH Price: $3,176.73 (+2.34%)

Token

SuperMarket (SUPER)
 

Overview

Max Total Supply

100,000,000 SUPER

Holders

614

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SUPER

Value
$0.00
0xed6a768fb6e7f10079e1b5a465ba7ea6920a8726
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:
SuperMarket

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-04
*/

// SPDX-License-Identifier: MIT
/**
* https://supermarket.gg 
* 
**/
pragma solidity >=0.8.7;

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

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

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

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

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

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

    /**
     * @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 {
        _transferOwnership(address(0));
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
interface ISFwd {
function distributeFromSuper() external payable;
}
contract SuperMarket is ERC20, Ownable {
    event SwapBackSuccess(
        uint256 tokenAmount,
        uint256 ethAmountReceived,
        bool success
    );
    bool private swapping;

    ISFwd public teamWallet=ISFwd(0xfDa1A408c470a8e60230A1D752c47D862a6AbB81);//ADD Team Wallet FWD

    uint256 _totalSupply = 100_000_000 * 1e18; 
    uint256 _lp = (_totalSupply* 450)/1000; // lp 45%

    uint256 public maxTransactionAmount = (_totalSupply * 10) / 1000; // 1% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 5) / 100000; // 0.005% swap tokens at this amount. (10_000_000 * 10) / 10000 = 0.1%(10000 tokens) of the total supply
    uint256 public maxWallet = (_totalSupply * 10) / 1000; // 1% from total supply maxWallet

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

    uint256 public buyFees = 50; //init 5% buy tax
    uint256 public sellFees = 50; //init 5% sell tax
    uint256 public launchBlock;

    using SafeMath for uint256;

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

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

    constructor() ERC20("SuperMarket", "SUPER") {
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
  
        excludeFromFees(address(teamWallet), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(teamWallet), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(address(this), _lp);
        _mint(owner(),(_totalSupply-_lp));

    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchBlock = block.number;
    }

    // remove limits after token is stable (sets sell fees to 5%)
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        sellFees = 50;
        buyFees = 50;
        return true;
    }

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

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

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

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

    function addLiquidity() external payable onlyOwner {
        // approve token transfer to cover all possible scenarios
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _approve(address(this), address(uniswapV2Router), balanceOf(address(this)));
        // add the liquidity
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this), //token address
            balanceOf(address(this)), // liquidity amount
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(), // LP tokens are sent to the owner
            block.timestamp
        );
        limitsInEffect=true;
    }

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

    function updateFeeWallet(
        address devWallet_
    ) public onlyOwner {
        teamWallet = ISFwd(devWallet_);

    }

    function updateMaxTransaction(uint amount) external onlyOwner{
        maxTransactionAmount = amount;
    }

    function updateSwapTokenTreshold(uint amount) external onlyOwner{
        swapTokensAtAmount = amount;
    }

    function updateMaxWallet(uint amount) external onlyOwner{
        maxWallet = amount;
    }

    function updateLimits(bool value) external onlyOwner{
        limitsInEffect = value;
    }


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

    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");
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not enabled yet."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                    
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );

                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;


        if (canSwap &&
            swapEnabled && //if this is true
            !swapping && //if this is false
            !automatedMarketMakerPairs[from] && //if this is false
            !_isExcludedFromFees[from] && //if this is false
            !_isExcludedFromFees[to] //if this is false
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(1000);
            }
            // on buy
                      
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                // DEAD BLOCKS
                if (block.number - launchBlock == 0){
                    fees = amount.mul(900).div(1000);
                } else if (block.number - launchBlock <= 3) {
                    fees = amount.mul(690).div(1000);
                } else {
                    fees = amount.mul(buyFees).div(1000);
                }
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        /** */
        
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
    
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = swapTokensAtAmount;
            swapTokensForEth(amountToSwapForETH);
            uint256 amountEthToSend = address(this).balance;

            //(success, ) = address(teamWallet).call{value: amountEthToSend}("");
            if(amountEthToSend>0){
                teamWallet.distributeFromSuper{value:amountEthToSend}();
            }
            
            emit SwapBackSuccess(amountToSwapForETH, amountEthToSend, true);
        }

    

    }

    function blacklist(address[] memory _address) external onlyOwner {
        for(uint8 i=0;i<_address.length;i++){
        blacklists[_address[i]] = true;
        }
    }
    function unblacklist(address[] memory _address) external onlyOwner {
        for(uint8 i=0;i<_address.length;i++){
        blacklists[_address[i]] = false;
        }
    }


    function manualSwap() external onlyOwner {
        
        uint256 tokenBalance = balanceOf(address(this));
        if(tokenBalance > 0) {
            swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance = address(this).balance;
        if(ethBalance > 0) {
            
            teamWallet.distributeFromSuper{value:ethBalance}();
        }
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","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":"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":"addressToExclude","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"contract ISFwd","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"devWallet_","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokenTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273fda1a408c470a8e60230a1d752c47d862a6abb81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e40000006008556103e86101c26008546200007d9190620008a1565b62000089919062000931565b6009556103e8600a600854620000a09190620008a1565b620000ac919062000931565b600a55620186a06005600854620000c49190620008a1565b620000d0919062000931565b600b556103e8600a600854620000e79190620008a1565b620000f3919062000931565b600c556000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506032600e556032600f553480156200015e57600080fd5b506040518060400160405280600b81526020017f53757065724d61726b65740000000000000000000000000000000000000000008152506040518060400160405280600581526020017f53555045520000000000000000000000000000000000000000000000000000008152508160039080519060200190620001e3929190620007b8565b508060049080519060200190620001fc929190620007b8565b5050506200021f620002136200036960201b60201c565b6200037160201b60201c565b62000241620002336200043760201b60201c565b60016200046160201b60201c565b62000276600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200046160201b60201c565b620002893060016200046160201b60201c565b6200029e61dead60016200046160201b60201c565b620002c0620002b26200043760201b60201c565b60016200054b60201b60201c565b620002f5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200054b60201b60201c565b620003083060016200054b60201b60201c565b6200031d61dead60016200054b60201b60201c565b62000331306009546200063560201b60201c565b62000363620003456200043760201b60201c565b60095460085462000357919062000969565b6200063560201b60201c565b62000b89565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004716200036960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004976200043760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e79062000a05565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200055b6200036960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005816200043760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d19062000a05565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069f9062000a77565b60405180910390fd5b620006bc60008383620007ae60201b60201c565b8060026000828254620006d0919062000a99565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000727919062000a99565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200078e919062000b07565b60405180910390a3620007aa60008383620007b360201b60201c565b5050565b505050565b505050565b828054620007c69062000b53565b90600052602060002090601f016020900481019282620007ea576000855562000836565b82601f106200080557805160ff191683800117855562000836565b8280016001018555821562000836579182015b828111156200083557825182559160200191906001019062000818565b5b50905062000845919062000849565b5090565b5b80821115620008645760008160009055506001016200084a565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008ae8262000868565b9150620008bb8362000868565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008f757620008f662000872565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200093e8262000868565b91506200094b8362000868565b9250826200095e576200095d62000902565b5b828204905092915050565b6000620009768262000868565b9150620009838362000868565b92508282101562000999576200099862000872565b5b828203905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620009ed602083620009a4565b9150620009fa82620009b5565b602082019050919050565b6000602082019050818103600083015262000a2081620009de565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a5f601f83620009a4565b915062000a6c8262000a27565b602082019050919050565b6000602082019050818103600083015262000a928162000a50565b9050919050565b600062000aa68262000868565b915062000ab38362000868565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000aeb5762000aea62000872565b5b828201905092915050565b62000b018162000868565b82525050565b600060208201905062000b1e600083018462000af6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6c57607f821691505b6020821081141562000b835762000b8262000b24565b5b50919050565b6148cf8062000b996000396000f3fe6080604052600436106102765760003560e01c8063751039fc1161014f578063bbc0c742116100c1578063e0f3ccf51161007a578063e0f3ccf514610971578063e2f456051461099c578063e4748b9e146109c7578063e8078d94146109f2578063f2fde38b146109fc578063f8b45b0514610a255761027d565b8063bbc0c74214610861578063bfab65351461088c578063c0246668146108b5578063c8c8ebe4146108de578063d00efb2f14610909578063dd62ed3e146109345761027d565b806395d89b411161011357806395d89b411461072d5780639a7a23d6146107585780639bed058914610781578063a457c2d7146107aa578063a9059cbb146107e7578063b62496f5146108245761027d565b8063751039fc1461066e5780637571336a146106995780638a8c523c146106c25780638da5cb5b146106d9578063924de9b7146107045761027d565b806339509351116101e857806359927044116101ac5780635992704414610572578063667185241461059d5780636ddd1713146105c657806370a08231146105f1578063715018a61461062e57806374326f53146106455761027d565b8063395093511461048b57806349bd5a5e146104c85780634a62bb65146104f35780634fbee1931461051e57806351bc3c851461055b5761027d565b80631694505e1161023a5780631694505e1461037957806318160ddd146103a45780631c499ab0146103cf57806323b872dd146103f857806327c8f83514610435578063313ce567146104605761027d565b8063041f173f146102825780630517d13d146102ab57806306fdde03146102d4578063095ea7b3146102ff57806310d5de531461033c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613752565b610a50565b005b3480156102b757600080fd5b506102d260048036038101906102cd91906137d1565b610b67565b005b3480156102e057600080fd5b506102e9610bed565b6040516102f69190613886565b60405180910390f35b34801561030b57600080fd5b50610326600480360381019061032191906138a8565b610c7f565b6040516103339190613903565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061391e565b610c9d565b6040516103709190613903565b60405180910390f35b34801561038557600080fd5b5061038e610cbd565b60405161039b91906139aa565b60405180910390f35b3480156103b057600080fd5b506103b9610ce3565b6040516103c691906139d4565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f191906137d1565b610ced565b005b34801561040457600080fd5b5061041f600480360381019061041a91906139ef565b610d73565b60405161042c9190613903565b60405180910390f35b34801561044157600080fd5b5061044a610e6b565b6040516104579190613a51565b60405180910390f35b34801561046c57600080fd5b50610475610e71565b6040516104829190613a88565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906138a8565b610e7a565b6040516104bf9190613903565b60405180910390f35b3480156104d457600080fd5b506104dd610f26565b6040516104ea9190613a51565b60405180910390f35b3480156104ff57600080fd5b50610508610f4c565b6040516105159190613903565b60405180910390f35b34801561052a57600080fd5b506105456004803603810190610540919061391e565b610f5f565b6040516105529190613903565b60405180910390f35b34801561056757600080fd5b50610570610fb5565b005b34801561057e57600080fd5b506105876110e7565b6040516105949190613ac4565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf919061391e565b61110d565b005b3480156105d257600080fd5b506105db6111cd565b6040516105e89190613903565b60405180910390f35b3480156105fd57600080fd5b506106186004803603810190610613919061391e565b6111e0565b60405161062591906139d4565b60405180910390f35b34801561063a57600080fd5b50610643611228565b005b34801561065157600080fd5b5061066c60048036038101906106679190613b0b565b6112b0565b005b34801561067a57600080fd5b50610683611349565b6040516106909190613903565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613b38565b6113f9565b005b3480156106ce57600080fd5b506106d76114d0565b005b3480156106e557600080fd5b506106ee61158b565b6040516106fb9190613a51565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613b0b565b6115b5565b005b34801561073957600080fd5b5061074261164e565b60405161074f9190613886565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190613b38565b6116e0565b005b34801561078d57600080fd5b506107a860048036038101906107a391906137d1565b6117fb565b005b3480156107b657600080fd5b506107d160048036038101906107cc91906138a8565b611881565b6040516107de9190613903565b60405180910390f35b3480156107f357600080fd5b5061080e600480360381019061080991906138a8565b61196c565b60405161081b9190613903565b60405180910390f35b34801561083057600080fd5b5061084b6004803603810190610846919061391e565b61198a565b6040516108589190613903565b60405180910390f35b34801561086d57600080fd5b506108766119aa565b6040516108839190613903565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190613752565b6119bd565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613b38565b611ad4565b005b3480156108ea57600080fd5b506108f3611bab565b60405161090091906139d4565b60405180910390f35b34801561091557600080fd5b5061091e611bb1565b60405161092b91906139d4565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190613b78565b611bb7565b60405161096891906139d4565b60405180910390f35b34801561097d57600080fd5b50610986611c3e565b60405161099391906139d4565b60405180910390f35b3480156109a857600080fd5b506109b1611c44565b6040516109be91906139d4565b60405180910390f35b3480156109d357600080fd5b506109dc611c4a565b6040516109e991906139d4565b60405180910390f35b6109fa611c50565b005b348015610a0857600080fd5b50610a236004803603810190610a1e919061391e565b612070565b005b348015610a3157600080fd5b50610a3a612168565b604051610a4791906139d4565b60405180910390f35b610a5861216e565b73ffffffffffffffffffffffffffffffffffffffff16610a7661158b565b73ffffffffffffffffffffffffffffffffffffffff1614610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390613c04565b60405180910390fd5b60005b81518160ff161015610b6357600160166000848460ff1681518110610af757610af6613c24565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b5b90613c82565b915050610acf565b5050565b610b6f61216e565b73ffffffffffffffffffffffffffffffffffffffff16610b8d61158b565b73ffffffffffffffffffffffffffffffffffffffff1614610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90613c04565b60405180910390fd5b80600a8190555050565b606060038054610bfc90613cdb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2890613cdb565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b5050505050905090565b6000610c93610c8c61216e565b8484612176565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610cf561216e565b73ffffffffffffffffffffffffffffffffffffffff16610d1361158b565b73ffffffffffffffffffffffffffffffffffffffff1614610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613c04565b60405180910390fd5b80600c8190555050565b6000610d80848484612341565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dcb61216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4290613d7f565b60405180910390fd5b610e5f85610e5761216e565b858403612176565b60019150509392505050565b61dead81565b60006012905090565b6000610f1c610e8761216e565b848460016000610e9561216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f179190613d9f565b612176565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fbd61216e565b73ffffffffffffffffffffffffffffffffffffffff16610fdb61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890613c04565b60405180910390fd5b600061103c306111e0565b905060008111156110515761105081612e53565b5b600047905060008111156110e357600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636377649f826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b50505050505b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61111561216e565b73ffffffffffffffffffffffffffffffffffffffff1661113361158b565b73ffffffffffffffffffffffffffffffffffffffff1614611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090613c04565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61123061216e565b73ffffffffffffffffffffffffffffffffffffffff1661124e61158b565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613c04565b60405180910390fd5b6112ae60006130a5565b565b6112b861216e565b73ffffffffffffffffffffffffffffffffffffffff166112d661158b565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613c04565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600061135361216e565b73ffffffffffffffffffffffffffffffffffffffff1661137161158b565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613c04565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506032600f819055506032600e819055506001905090565b61140161216e565b73ffffffffffffffffffffffffffffffffffffffff1661141f61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90613c04565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114d861216e565b73ffffffffffffffffffffffffffffffffffffffff166114f661158b565b73ffffffffffffffffffffffffffffffffffffffff161461154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390613c04565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043601081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115bd61216e565b73ffffffffffffffffffffffffffffffffffffffff166115db61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613c04565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461165d90613cdb565b80601f016020809104026020016040519081016040528092919081815260200182805461168990613cdb565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b5050505050905090565b6116e861216e565b73ffffffffffffffffffffffffffffffffffffffff1661170661158b565b73ffffffffffffffffffffffffffffffffffffffff161461175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613c04565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613e67565b60405180910390fd5b6117f7828261316b565b5050565b61180361216e565b73ffffffffffffffffffffffffffffffffffffffff1661182161158b565b73ffffffffffffffffffffffffffffffffffffffff1614611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90613c04565b60405180910390fd5b80600b8190555050565b6000806001600061189061216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490613ef9565b60405180910390fd5b61196161195861216e565b85858403612176565b600191505092915050565b600061198061197961216e565b8484612341565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b6119c561216e565b73ffffffffffffffffffffffffffffffffffffffff166119e361158b565b73ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090613c04565b60405180910390fd5b60005b81518160ff161015611ad057600060166000848460ff1681518110611a6457611a63613c24565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ac890613c82565b915050611a3c565b5050565b611adc61216e565b73ffffffffffffffffffffffffffffffffffffffff16611afa61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790613c04565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b600b5481565b600e5481565b611c5861216e565b73ffffffffffffffffffffffffffffffffffffffff16611c7661158b565b73ffffffffffffffffffffffffffffffffffffffff1614611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc390613c04565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d318160016113f9565b611d6630601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d61306111e0565b612176565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611dac57600080fd5b505afa158015611dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de49190613f2e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4657600080fd5b505afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e9190613f2e565b6040518363ffffffff1660e01b8152600401611e9b929190613f5b565b602060405180830381600087803b158015611eb557600080fd5b505af1158015611ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eed9190613f2e565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f5a601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016113f9565b611f87601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161316b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611fd0306111e0565b600080611fdb61158b565b426040518863ffffffff1660e01b8152600401611ffd96959493929190613fbf565b6060604051808303818588803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061204f9190614035565b5050506001600d60006101000a81548160ff02191690831515021790555050565b61207861216e565b73ffffffffffffffffffffffffffffffffffffffff1661209661158b565b73ffffffffffffffffffffffffffffffffffffffff16146120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390613c04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561215c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612153906140fa565b60405180910390fd5b612165816130a5565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd9061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d9061421e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161233491906139d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a8906142b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614342565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124c55750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb906143ae565b60405180910390fd5b600081141561251e57612519838360006131c6565b612e4e565b600d60009054906101000a900460ff1615612a195761253b61158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125a9575061257961158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125e25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561261c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126355750600660149054906101000a900460ff16155b15612a1857600d60019054906101000a900460ff1661272f57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ef5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127259061441a565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127d25750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561287957600a5481111561281c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612813906144ac565b60405180910390fd5b600c54612828836111e0565b826128339190613d9f565b1115612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614518565b60405180910390fd5b612a17565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561291c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561296b57600a54811115612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d906145aa565b60405180910390fd5b612a16565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a1557600c546129c8836111e0565b826129d39190613d9f565b1115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90614518565b60405180910390fd5b5b5b5b5b5b6000612a24306111e0565b90506000600b548210159050808015612a495750600d60029054906101000a900460ff165b8015612a625750600660149054906101000a900460ff16155b8015612ab85750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b0e5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b645750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba8576001600660146101000a81548160ff021916908315150217905550612b8c613447565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c5e5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c6857600090505b60008115612e3e57601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ccb57506000600f54115b15612d0057612cf96103e8612ceb600f548861355190919063ffffffff16565b61356790919063ffffffff16565b9050612e1a565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5b57506000600e54115b15612e1957600060105443612d7091906145ca565b1415612da657612d9f6103e8612d916103848861355190919063ffffffff16565b61356790919063ffffffff16565b9050612e18565b600360105443612db691906145ca565b11612deb57612de46103e8612dd66102b28861355190919063ffffffff16565b61356790919063ffffffff16565b9050612e17565b612e146103e8612e06600e548861355190919063ffffffff16565b61356790919063ffffffff16565b90505b5b5b5b6000811115612e2f57612e2e8730836131c6565b5b8085612e3b91906145ca565b94505b612e498787876131c6565b505050505b505050565b6000600267ffffffffffffffff811115612e7057612e6f6135b1565b5b604051908082528060200260200182016040528015612e9e5781602001602082028036833780820191505090505b5090503081600081518110612eb657612eb5613c24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f5857600080fd5b505afa158015612f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f909190613f2e565b81600181518110612fa457612fa3613c24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061300b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612176565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161306f9594939291906146bc565b600060405180830381600087803b15801561308957600080fd5b505af115801561309d573d6000803e3d6000fd5b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d906142b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614342565b60405180910390fd5b6132b183838361357d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e90614788565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133ca9190613d9f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342e91906139d4565b60405180910390a3613441848484613582565b50505050565b6000613452306111e0565b90506000811415613463575061354f565b600b54811061354d576000600b54905061347c81612e53565b6000479050600081111561350e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636377649f826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134f457600080fd5b505af1158015613508573d6000803e3d6000fd5b50505050505b7fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff82826001604051613542939291906147a8565b60405180910390a150505b505b565b6000818361355f91906147df565b905092915050565b600081836135759190614868565b905092915050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135e9826135a0565b810181811067ffffffffffffffff82111715613608576136076135b1565b5b80604052505050565b600061361b613587565b905061362782826135e0565b919050565b600067ffffffffffffffff821115613647576136466135b1565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136888261365d565b9050919050565b6136988161367d565b81146136a357600080fd5b50565b6000813590506136b58161368f565b92915050565b60006136ce6136c98461362c565b613611565b905080838252602082019050602084028301858111156136f1576136f0613658565b5b835b8181101561371a578061370688826136a6565b8452602084019350506020810190506136f3565b5050509392505050565b600082601f8301126137395761373861359b565b5b81356137498482602086016136bb565b91505092915050565b60006020828403121561376857613767613591565b5b600082013567ffffffffffffffff81111561378657613785613596565b5b61379284828501613724565b91505092915050565b6000819050919050565b6137ae8161379b565b81146137b957600080fd5b50565b6000813590506137cb816137a5565b92915050565b6000602082840312156137e7576137e6613591565b5b60006137f5848285016137bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561383857808201518184015260208101905061381d565b83811115613847576000848401525b50505050565b6000613858826137fe565b6138628185613809565b935061387281856020860161381a565b61387b816135a0565b840191505092915050565b600060208201905081810360008301526138a0818461384d565b905092915050565b600080604083850312156138bf576138be613591565b5b60006138cd858286016136a6565b92505060206138de858286016137bc565b9150509250929050565b60008115159050919050565b6138fd816138e8565b82525050565b600060208201905061391860008301846138f4565b92915050565b60006020828403121561393457613933613591565b5b6000613942848285016136a6565b91505092915050565b6000819050919050565b600061397061396b6139668461365d565b61394b565b61365d565b9050919050565b600061398282613955565b9050919050565b600061399482613977565b9050919050565b6139a481613989565b82525050565b60006020820190506139bf600083018461399b565b92915050565b6139ce8161379b565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600080600060608486031215613a0857613a07613591565b5b6000613a16868287016136a6565b9350506020613a27868287016136a6565b9250506040613a38868287016137bc565b9150509250925092565b613a4b8161367d565b82525050565b6000602082019050613a666000830184613a42565b92915050565b600060ff82169050919050565b613a8281613a6c565b82525050565b6000602082019050613a9d6000830184613a79565b92915050565b6000613aae82613977565b9050919050565b613abe81613aa3565b82525050565b6000602082019050613ad96000830184613ab5565b92915050565b613ae8816138e8565b8114613af357600080fd5b50565b600081359050613b0581613adf565b92915050565b600060208284031215613b2157613b20613591565b5b6000613b2f84828501613af6565b91505092915050565b60008060408385031215613b4f57613b4e613591565b5b6000613b5d858286016136a6565b9250506020613b6e85828601613af6565b9150509250929050565b60008060408385031215613b8f57613b8e613591565b5b6000613b9d858286016136a6565b9250506020613bae858286016136a6565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bee602083613809565b9150613bf982613bb8565b602082019050919050565b60006020820190508181036000830152613c1d81613be1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c8d82613a6c565b915060ff821415613ca157613ca0613c53565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cf357607f821691505b60208210811415613d0757613d06613cac565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613d69602883613809565b9150613d7482613d0d565b604082019050919050565b60006020820190508181036000830152613d9881613d5c565b9050919050565b6000613daa8261379b565b9150613db58361379b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dea57613de9613c53565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e51603983613809565b9150613e5c82613df5565b604082019050919050565b60006020820190508181036000830152613e8081613e44565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613ee3602583613809565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b600081519050613f288161368f565b92915050565b600060208284031215613f4457613f43613591565b5b6000613f5284828501613f19565b91505092915050565b6000604082019050613f706000830185613a42565b613f7d6020830184613a42565b9392505050565b6000819050919050565b6000613fa9613fa4613f9f84613f84565b61394b565b61379b565b9050919050565b613fb981613f8e565b82525050565b600060c082019050613fd46000830189613a42565b613fe160208301886139c5565b613fee6040830187613fb0565b613ffb6060830186613fb0565b6140086080830185613a42565b61401560a08301846139c5565b979650505050505050565b60008151905061402f816137a5565b92915050565b60008060006060848603121561404e5761404d613591565b5b600061405c86828701614020565b935050602061406d86828701614020565b925050604061407e86828701614020565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140e4602683613809565b91506140ef82614088565b604082019050919050565b60006020820190508181036000830152614113816140d7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614176602483613809565b91506141818261411a565b604082019050919050565b600060208201905081810360008301526141a581614169565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614208602283613809565b9150614213826141ac565b604082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061429a602583613809565b91506142a58261423e565b604082019050919050565b600060208201905081810360008301526142c98161428d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061432c602383613809565b9150614337826142d0565b604082019050919050565b6000602082019050818103600083015261435b8161431f565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614398600b83613809565b91506143a382614362565b602082019050919050565b600060208201905081810360008301526143c78161438b565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b6000614404601b83613809565b915061440f826143ce565b602082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614496603583613809565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614502601383613809565b915061450d826144cc565b602082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614594603683613809565b915061459f82614538565b604082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b60006145d58261379b565b91506145e08361379b565b9250828210156145f3576145f2613c53565b5b828203905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146338161367d565b82525050565b6000614645838361462a565b60208301905092915050565b6000602082019050919050565b6000614669826145fe565b6146738185614609565b935061467e8361461a565b8060005b838110156146af5781516146968882614639565b97506146a183614651565b925050600181019050614682565b5085935050505092915050565b600060a0820190506146d160008301886139c5565b6146de6020830187613fb0565b81810360408301526146f0818661465e565b90506146ff6060830185613a42565b61470c60808301846139c5565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614772602683613809565b915061477d82614716565b604082019050919050565b600060208201905081810360008301526147a181614765565b9050919050565b60006060820190506147bd60008301866139c5565b6147ca60208301856139c5565b6147d760408301846138f4565b949350505050565b60006147ea8261379b565b91506147f58361379b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561482e5761482d613c53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148738261379b565b915061487e8361379b565b92508261488e5761488d614839565b5b82820490509291505056fea26469706673582212207dacfde8f621724a75ee7005b557fde51c92a685c8abd18ab575d37794d7eb3664736f6c63430008080033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063751039fc1161014f578063bbc0c742116100c1578063e0f3ccf51161007a578063e0f3ccf514610971578063e2f456051461099c578063e4748b9e146109c7578063e8078d94146109f2578063f2fde38b146109fc578063f8b45b0514610a255761027d565b8063bbc0c74214610861578063bfab65351461088c578063c0246668146108b5578063c8c8ebe4146108de578063d00efb2f14610909578063dd62ed3e146109345761027d565b806395d89b411161011357806395d89b411461072d5780639a7a23d6146107585780639bed058914610781578063a457c2d7146107aa578063a9059cbb146107e7578063b62496f5146108245761027d565b8063751039fc1461066e5780637571336a146106995780638a8c523c146106c25780638da5cb5b146106d9578063924de9b7146107045761027d565b806339509351116101e857806359927044116101ac5780635992704414610572578063667185241461059d5780636ddd1713146105c657806370a08231146105f1578063715018a61461062e57806374326f53146106455761027d565b8063395093511461048b57806349bd5a5e146104c85780634a62bb65146104f35780634fbee1931461051e57806351bc3c851461055b5761027d565b80631694505e1161023a5780631694505e1461037957806318160ddd146103a45780631c499ab0146103cf57806323b872dd146103f857806327c8f83514610435578063313ce567146104605761027d565b8063041f173f146102825780630517d13d146102ab57806306fdde03146102d4578063095ea7b3146102ff57806310d5de531461033c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613752565b610a50565b005b3480156102b757600080fd5b506102d260048036038101906102cd91906137d1565b610b67565b005b3480156102e057600080fd5b506102e9610bed565b6040516102f69190613886565b60405180910390f35b34801561030b57600080fd5b50610326600480360381019061032191906138a8565b610c7f565b6040516103339190613903565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061391e565b610c9d565b6040516103709190613903565b60405180910390f35b34801561038557600080fd5b5061038e610cbd565b60405161039b91906139aa565b60405180910390f35b3480156103b057600080fd5b506103b9610ce3565b6040516103c691906139d4565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f191906137d1565b610ced565b005b34801561040457600080fd5b5061041f600480360381019061041a91906139ef565b610d73565b60405161042c9190613903565b60405180910390f35b34801561044157600080fd5b5061044a610e6b565b6040516104579190613a51565b60405180910390f35b34801561046c57600080fd5b50610475610e71565b6040516104829190613a88565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906138a8565b610e7a565b6040516104bf9190613903565b60405180910390f35b3480156104d457600080fd5b506104dd610f26565b6040516104ea9190613a51565b60405180910390f35b3480156104ff57600080fd5b50610508610f4c565b6040516105159190613903565b60405180910390f35b34801561052a57600080fd5b506105456004803603810190610540919061391e565b610f5f565b6040516105529190613903565b60405180910390f35b34801561056757600080fd5b50610570610fb5565b005b34801561057e57600080fd5b506105876110e7565b6040516105949190613ac4565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf919061391e565b61110d565b005b3480156105d257600080fd5b506105db6111cd565b6040516105e89190613903565b60405180910390f35b3480156105fd57600080fd5b506106186004803603810190610613919061391e565b6111e0565b60405161062591906139d4565b60405180910390f35b34801561063a57600080fd5b50610643611228565b005b34801561065157600080fd5b5061066c60048036038101906106679190613b0b565b6112b0565b005b34801561067a57600080fd5b50610683611349565b6040516106909190613903565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613b38565b6113f9565b005b3480156106ce57600080fd5b506106d76114d0565b005b3480156106e557600080fd5b506106ee61158b565b6040516106fb9190613a51565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613b0b565b6115b5565b005b34801561073957600080fd5b5061074261164e565b60405161074f9190613886565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190613b38565b6116e0565b005b34801561078d57600080fd5b506107a860048036038101906107a391906137d1565b6117fb565b005b3480156107b657600080fd5b506107d160048036038101906107cc91906138a8565b611881565b6040516107de9190613903565b60405180910390f35b3480156107f357600080fd5b5061080e600480360381019061080991906138a8565b61196c565b60405161081b9190613903565b60405180910390f35b34801561083057600080fd5b5061084b6004803603810190610846919061391e565b61198a565b6040516108589190613903565b60405180910390f35b34801561086d57600080fd5b506108766119aa565b6040516108839190613903565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190613752565b6119bd565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613b38565b611ad4565b005b3480156108ea57600080fd5b506108f3611bab565b60405161090091906139d4565b60405180910390f35b34801561091557600080fd5b5061091e611bb1565b60405161092b91906139d4565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190613b78565b611bb7565b60405161096891906139d4565b60405180910390f35b34801561097d57600080fd5b50610986611c3e565b60405161099391906139d4565b60405180910390f35b3480156109a857600080fd5b506109b1611c44565b6040516109be91906139d4565b60405180910390f35b3480156109d357600080fd5b506109dc611c4a565b6040516109e991906139d4565b60405180910390f35b6109fa611c50565b005b348015610a0857600080fd5b50610a236004803603810190610a1e919061391e565b612070565b005b348015610a3157600080fd5b50610a3a612168565b604051610a4791906139d4565b60405180910390f35b610a5861216e565b73ffffffffffffffffffffffffffffffffffffffff16610a7661158b565b73ffffffffffffffffffffffffffffffffffffffff1614610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390613c04565b60405180910390fd5b60005b81518160ff161015610b6357600160166000848460ff1681518110610af757610af6613c24565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b5b90613c82565b915050610acf565b5050565b610b6f61216e565b73ffffffffffffffffffffffffffffffffffffffff16610b8d61158b565b73ffffffffffffffffffffffffffffffffffffffff1614610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90613c04565b60405180910390fd5b80600a8190555050565b606060038054610bfc90613cdb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2890613cdb565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b5050505050905090565b6000610c93610c8c61216e565b8484612176565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610cf561216e565b73ffffffffffffffffffffffffffffffffffffffff16610d1361158b565b73ffffffffffffffffffffffffffffffffffffffff1614610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613c04565b60405180910390fd5b80600c8190555050565b6000610d80848484612341565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dcb61216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4290613d7f565b60405180910390fd5b610e5f85610e5761216e565b858403612176565b60019150509392505050565b61dead81565b60006012905090565b6000610f1c610e8761216e565b848460016000610e9561216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f179190613d9f565b612176565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fbd61216e565b73ffffffffffffffffffffffffffffffffffffffff16610fdb61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890613c04565b60405180910390fd5b600061103c306111e0565b905060008111156110515761105081612e53565b5b600047905060008111156110e357600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636377649f826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b50505050505b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61111561216e565b73ffffffffffffffffffffffffffffffffffffffff1661113361158b565b73ffffffffffffffffffffffffffffffffffffffff1614611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090613c04565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61123061216e565b73ffffffffffffffffffffffffffffffffffffffff1661124e61158b565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613c04565b60405180910390fd5b6112ae60006130a5565b565b6112b861216e565b73ffffffffffffffffffffffffffffffffffffffff166112d661158b565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613c04565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600061135361216e565b73ffffffffffffffffffffffffffffffffffffffff1661137161158b565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613c04565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506032600f819055506032600e819055506001905090565b61140161216e565b73ffffffffffffffffffffffffffffffffffffffff1661141f61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90613c04565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114d861216e565b73ffffffffffffffffffffffffffffffffffffffff166114f661158b565b73ffffffffffffffffffffffffffffffffffffffff161461154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390613c04565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043601081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115bd61216e565b73ffffffffffffffffffffffffffffffffffffffff166115db61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613c04565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461165d90613cdb565b80601f016020809104026020016040519081016040528092919081815260200182805461168990613cdb565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b5050505050905090565b6116e861216e565b73ffffffffffffffffffffffffffffffffffffffff1661170661158b565b73ffffffffffffffffffffffffffffffffffffffff161461175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613c04565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613e67565b60405180910390fd5b6117f7828261316b565b5050565b61180361216e565b73ffffffffffffffffffffffffffffffffffffffff1661182161158b565b73ffffffffffffffffffffffffffffffffffffffff1614611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90613c04565b60405180910390fd5b80600b8190555050565b6000806001600061189061216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490613ef9565b60405180910390fd5b61196161195861216e565b85858403612176565b600191505092915050565b600061198061197961216e565b8484612341565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b6119c561216e565b73ffffffffffffffffffffffffffffffffffffffff166119e361158b565b73ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090613c04565b60405180910390fd5b60005b81518160ff161015611ad057600060166000848460ff1681518110611a6457611a63613c24565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ac890613c82565b915050611a3c565b5050565b611adc61216e565b73ffffffffffffffffffffffffffffffffffffffff16611afa61158b565b73ffffffffffffffffffffffffffffffffffffffff1614611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790613c04565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b600b5481565b600e5481565b611c5861216e565b73ffffffffffffffffffffffffffffffffffffffff16611c7661158b565b73ffffffffffffffffffffffffffffffffffffffff1614611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc390613c04565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d318160016113f9565b611d6630601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d61306111e0565b612176565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611dac57600080fd5b505afa158015611dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de49190613f2e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4657600080fd5b505afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e9190613f2e565b6040518363ffffffff1660e01b8152600401611e9b929190613f5b565b602060405180830381600087803b158015611eb557600080fd5b505af1158015611ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eed9190613f2e565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f5a601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016113f9565b611f87601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161316b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611fd0306111e0565b600080611fdb61158b565b426040518863ffffffff1660e01b8152600401611ffd96959493929190613fbf565b6060604051808303818588803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061204f9190614035565b5050506001600d60006101000a81548160ff02191690831515021790555050565b61207861216e565b73ffffffffffffffffffffffffffffffffffffffff1661209661158b565b73ffffffffffffffffffffffffffffffffffffffff16146120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390613c04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561215c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612153906140fa565b60405180910390fd5b612165816130a5565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd9061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d9061421e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161233491906139d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a8906142b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614342565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124c55750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb906143ae565b60405180910390fd5b600081141561251e57612519838360006131c6565b612e4e565b600d60009054906101000a900460ff1615612a195761253b61158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125a9575061257961158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125e25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561261c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126355750600660149054906101000a900460ff16155b15612a1857600d60019054906101000a900460ff1661272f57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ef5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127259061441a565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127d25750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561287957600a5481111561281c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612813906144ac565b60405180910390fd5b600c54612828836111e0565b826128339190613d9f565b1115612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614518565b60405180910390fd5b612a17565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561291c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561296b57600a54811115612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d906145aa565b60405180910390fd5b612a16565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a1557600c546129c8836111e0565b826129d39190613d9f565b1115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90614518565b60405180910390fd5b5b5b5b5b5b6000612a24306111e0565b90506000600b548210159050808015612a495750600d60029054906101000a900460ff165b8015612a625750600660149054906101000a900460ff16155b8015612ab85750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b0e5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b645750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba8576001600660146101000a81548160ff021916908315150217905550612b8c613447565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c5e5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c6857600090505b60008115612e3e57601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ccb57506000600f54115b15612d0057612cf96103e8612ceb600f548861355190919063ffffffff16565b61356790919063ffffffff16565b9050612e1a565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5b57506000600e54115b15612e1957600060105443612d7091906145ca565b1415612da657612d9f6103e8612d916103848861355190919063ffffffff16565b61356790919063ffffffff16565b9050612e18565b600360105443612db691906145ca565b11612deb57612de46103e8612dd66102b28861355190919063ffffffff16565b61356790919063ffffffff16565b9050612e17565b612e146103e8612e06600e548861355190919063ffffffff16565b61356790919063ffffffff16565b90505b5b5b5b6000811115612e2f57612e2e8730836131c6565b5b8085612e3b91906145ca565b94505b612e498787876131c6565b505050505b505050565b6000600267ffffffffffffffff811115612e7057612e6f6135b1565b5b604051908082528060200260200182016040528015612e9e5781602001602082028036833780820191505090505b5090503081600081518110612eb657612eb5613c24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f5857600080fd5b505afa158015612f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f909190613f2e565b81600181518110612fa457612fa3613c24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061300b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612176565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161306f9594939291906146bc565b600060405180830381600087803b15801561308957600080fd5b505af115801561309d573d6000803e3d6000fd5b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d906142b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614342565b60405180910390fd5b6132b183838361357d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e90614788565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133ca9190613d9f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342e91906139d4565b60405180910390a3613441848484613582565b50505050565b6000613452306111e0565b90506000811415613463575061354f565b600b54811061354d576000600b54905061347c81612e53565b6000479050600081111561350e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636377649f826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134f457600080fd5b505af1158015613508573d6000803e3d6000fd5b50505050505b7fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff82826001604051613542939291906147a8565b60405180910390a150505b505b565b6000818361355f91906147df565b905092915050565b600081836135759190614868565b905092915050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135e9826135a0565b810181811067ffffffffffffffff82111715613608576136076135b1565b5b80604052505050565b600061361b613587565b905061362782826135e0565b919050565b600067ffffffffffffffff821115613647576136466135b1565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136888261365d565b9050919050565b6136988161367d565b81146136a357600080fd5b50565b6000813590506136b58161368f565b92915050565b60006136ce6136c98461362c565b613611565b905080838252602082019050602084028301858111156136f1576136f0613658565b5b835b8181101561371a578061370688826136a6565b8452602084019350506020810190506136f3565b5050509392505050565b600082601f8301126137395761373861359b565b5b81356137498482602086016136bb565b91505092915050565b60006020828403121561376857613767613591565b5b600082013567ffffffffffffffff81111561378657613785613596565b5b61379284828501613724565b91505092915050565b6000819050919050565b6137ae8161379b565b81146137b957600080fd5b50565b6000813590506137cb816137a5565b92915050565b6000602082840312156137e7576137e6613591565b5b60006137f5848285016137bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561383857808201518184015260208101905061381d565b83811115613847576000848401525b50505050565b6000613858826137fe565b6138628185613809565b935061387281856020860161381a565b61387b816135a0565b840191505092915050565b600060208201905081810360008301526138a0818461384d565b905092915050565b600080604083850312156138bf576138be613591565b5b60006138cd858286016136a6565b92505060206138de858286016137bc565b9150509250929050565b60008115159050919050565b6138fd816138e8565b82525050565b600060208201905061391860008301846138f4565b92915050565b60006020828403121561393457613933613591565b5b6000613942848285016136a6565b91505092915050565b6000819050919050565b600061397061396b6139668461365d565b61394b565b61365d565b9050919050565b600061398282613955565b9050919050565b600061399482613977565b9050919050565b6139a481613989565b82525050565b60006020820190506139bf600083018461399b565b92915050565b6139ce8161379b565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600080600060608486031215613a0857613a07613591565b5b6000613a16868287016136a6565b9350506020613a27868287016136a6565b9250506040613a38868287016137bc565b9150509250925092565b613a4b8161367d565b82525050565b6000602082019050613a666000830184613a42565b92915050565b600060ff82169050919050565b613a8281613a6c565b82525050565b6000602082019050613a9d6000830184613a79565b92915050565b6000613aae82613977565b9050919050565b613abe81613aa3565b82525050565b6000602082019050613ad96000830184613ab5565b92915050565b613ae8816138e8565b8114613af357600080fd5b50565b600081359050613b0581613adf565b92915050565b600060208284031215613b2157613b20613591565b5b6000613b2f84828501613af6565b91505092915050565b60008060408385031215613b4f57613b4e613591565b5b6000613b5d858286016136a6565b9250506020613b6e85828601613af6565b9150509250929050565b60008060408385031215613b8f57613b8e613591565b5b6000613b9d858286016136a6565b9250506020613bae858286016136a6565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bee602083613809565b9150613bf982613bb8565b602082019050919050565b60006020820190508181036000830152613c1d81613be1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c8d82613a6c565b915060ff821415613ca157613ca0613c53565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cf357607f821691505b60208210811415613d0757613d06613cac565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613d69602883613809565b9150613d7482613d0d565b604082019050919050565b60006020820190508181036000830152613d9881613d5c565b9050919050565b6000613daa8261379b565b9150613db58361379b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dea57613de9613c53565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e51603983613809565b9150613e5c82613df5565b604082019050919050565b60006020820190508181036000830152613e8081613e44565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613ee3602583613809565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b600081519050613f288161368f565b92915050565b600060208284031215613f4457613f43613591565b5b6000613f5284828501613f19565b91505092915050565b6000604082019050613f706000830185613a42565b613f7d6020830184613a42565b9392505050565b6000819050919050565b6000613fa9613fa4613f9f84613f84565b61394b565b61379b565b9050919050565b613fb981613f8e565b82525050565b600060c082019050613fd46000830189613a42565b613fe160208301886139c5565b613fee6040830187613fb0565b613ffb6060830186613fb0565b6140086080830185613a42565b61401560a08301846139c5565b979650505050505050565b60008151905061402f816137a5565b92915050565b60008060006060848603121561404e5761404d613591565b5b600061405c86828701614020565b935050602061406d86828701614020565b925050604061407e86828701614020565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140e4602683613809565b91506140ef82614088565b604082019050919050565b60006020820190508181036000830152614113816140d7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614176602483613809565b91506141818261411a565b604082019050919050565b600060208201905081810360008301526141a581614169565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614208602283613809565b9150614213826141ac565b604082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061429a602583613809565b91506142a58261423e565b604082019050919050565b600060208201905081810360008301526142c98161428d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061432c602383613809565b9150614337826142d0565b604082019050919050565b6000602082019050818103600083015261435b8161431f565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614398600b83613809565b91506143a382614362565b602082019050919050565b600060208201905081810360008301526143c78161438b565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b6000614404601b83613809565b915061440f826143ce565b602082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614496603583613809565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614502601383613809565b915061450d826144cc565b602082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614594603683613809565b915061459f82614538565b604082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b60006145d58261379b565b91506145e08361379b565b9250828210156145f3576145f2613c53565b5b828203905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146338161367d565b82525050565b6000614645838361462a565b60208301905092915050565b6000602082019050919050565b6000614669826145fe565b6146738185614609565b935061467e8361461a565b8060005b838110156146af5781516146968882614639565b97506146a183614651565b925050600181019050614682565b5085935050505092915050565b600060a0820190506146d160008301886139c5565b6146de6020830187613fb0565b81810360408301526146f0818661465e565b90506146ff6060830185613a42565b61470c60808301846139c5565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614772602683613809565b915061477d82614716565b604082019050919050565b600060208201905081810360008301526147a181614765565b9050919050565b60006060820190506147bd60008301866139c5565b6147ca60208301856139c5565b6147d760408301846138f4565b949350505050565b60006147ea8261379b565b91506147f58361379b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561482e5761482d613c53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148738261379b565b915061487e8361379b565b92508261488e5761488d614839565b5b82820490509291505056fea26469706673582212207dacfde8f621724a75ee7005b557fde51c92a685c8abd18ab575d37794d7eb3664736f6c63430008080033

Deployed Bytecode Sourcemap

18416:11604:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29272:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23391:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4717:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6319:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19770:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19513:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5206:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23626:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6521:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19596:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5048:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7058:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19561:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19216:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23830:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29635:378;;;;;;;;;;;;;:::i;:::-;;18616:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23254:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19297:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5377:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1465:103;;;;;;;;;;;;;:::i;:::-;;23727:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20931:168;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21107:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20707:149;;;;;;;;;;;;;:::i;:::-;;814:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21404:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4936:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21652:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23508:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7356:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5733:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19840:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19257:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29450:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21512:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18825:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19443:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5996:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19389:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18945:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19337:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21964:1144;;;:::i;:::-;;1723:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19120:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29272:172;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29352:7:::1;29348:89;29364:8;:15;29362:1;:17;;;29348:89;;;29421:4;29395:10;:23;29406:8;29415:1;29406:11;;;;;;;;;;:::i;:::-;;;;;;;;29395:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;29380:3;;;;;:::i;:::-;;;;29348:89;;;;29272:172:::0;:::o;23391:109::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:6:::1;23463:20;:29;;;;23391:109:::0;:::o;4717:100::-;4771:13;4804:5;4797:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4717:100;:::o;6319:194::-;6427:4;6444:39;6453:12;:10;:12::i;:::-;6467:7;6476:6;6444:8;:39::i;:::-;6501:4;6494:11;;6319:194;;;;:::o;19770:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19513:41::-;;;;;;;;;;;;;:::o;5206:108::-;5267:7;5294:12;;5287:19;;5206:108;:::o;23626:93::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23705:6:::1;23693:9;:18;;;;23626:93:::0;:::o;6521:529::-;6661:4;6678:36;6688:6;6696:9;6707:6;6678:9;:36::i;:::-;6727:24;6754:11;:19;6766:6;6754:19;;;;;;;;;;;;;;;:33;6774:12;:10;:12::i;:::-;6754:33;;;;;;;;;;;;;;;;6727:60;;6840:6;6820:16;:26;;6798:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6950:57;6959:6;6967:12;:10;:12::i;:::-;7000:6;6981:16;:25;6950:8;:57::i;:::-;7038:4;7031:11;;;6521:529;;;;;:::o;19596:53::-;19642:6;19596:53;:::o;5048:93::-;5106:5;5131:2;5124:9;;5048:93;:::o;7058:290::-;7171:4;7188:130;7211:12;:10;:12::i;:::-;7238:7;7297:10;7260:11;:25;7272:12;:10;:12::i;:::-;7260:25;;;;;;;;;;;;;;;:34;7286:7;7260:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7188:8;:130::i;:::-;7336:4;7329:11;;7058:290;;;;:::o;19561:28::-;;;;;;;;;;;;;:::o;19216:34::-;;;;;;;;;;;;;:::o;23830:126::-;23896:4;23920:19;:28;23940:7;23920:28;;;;;;;;;;;;;;;;;;;;;;;;;23913:35;;23830:126;;;:::o;29635:378::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29697:20:::1;29720:24;29738:4;29720:9;:24::i;:::-;29697:47;;29773:1;29758:12;:16;29755:78;;;29791:30;29808:12;29791:16;:30::i;:::-;29755:78;29843:18;29864:21;29843:42;;29912:1;29899:10;:14;29896:110;;;29944:10;;;;;;;;;;;:30;;;29981:10;29944:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29896:110;29676:337;;29635:378::o:0;18616:73::-;;;;;;;;;;;;;:::o;23254:129::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23362:10:::1;23343;;:30;;;;;;;;;;;;;;;;;;23254:129:::0;:::o;19297:31::-;;;;;;;;;;;;;:::o;5377:143::-;5467:7;5494:9;:18;5504:7;5494:18;;;;;;;;;;;;;;;;5487:25;;5377:143;;;:::o;1465:103::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1530:30:::1;1557:1;1530:18;:30::i;:::-;1465:103::o:0;23727:93::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23807:5:::1;23790:14;;:22;;;;;;;;;;;;;;;;;;23727:93:::0;:::o;20931:168::-;20983:4;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21017:5:::1;21000:14;;:22;;;;;;;;;;;;;;;;;;21044:2;21033:8;:13;;;;21067:2;21057:7;:12;;;;21087:4;21080:11;;20931:168:::0;:::o;21107:201::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21290:10:::1;21238:31;:49;21270:16;21238:49;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21107:201:::0;;:::o;20707:149::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20778:4:::1;20762:13;;:20;;;;;;;;;;;;;;;;;;20807:4;20793:11;;:18;;;;;;;;;;;;;;;;;;20836:12;20822:11;:26;;;;20707:149::o:0;814:87::-;860:7;887:6;;;;;;;;;;;880:13;;814:87;:::o;21404:100::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21489:7:::1;21475:11;;:21;;;;;;;;;;;;;;;;;;21404:100:::0;:::o;4936:104::-;4992:13;5025:7;5018:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4936:104;:::o;21652:304::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21798:13:::1;;;;;;;;;;;21790:21;;:4;:21;;;;21768:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;21907:41;21936:4;21942:5;21907:28;:41::i;:::-;21652:304:::0;;:::o;23508:110::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:6:::1;23583:18;:27;;;;23508:110:::0;:::o;7356:475::-;7474:4;7491:24;7518:11;:25;7530:12;:10;:12::i;:::-;7518:25;;;;;;;;;;;;;;;:34;7544:7;7518:34;;;;;;;;;;;;;;;;7491:61;;7605:15;7585:16;:35;;7563:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7721:67;7730:12;:10;:12::i;:::-;7744:7;7772:15;7753:16;:34;7721:8;:67::i;:::-;7819:4;7812:11;;;7356:475;;;;:::o;5733:200::-;5844:4;5861:42;5871:12;:10;:12::i;:::-;5885:9;5896:6;5861:9;:42::i;:::-;5921:4;5914:11;;5733:200;;;;:::o;19840:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19257:33::-;;;;;;;;;;;;;:::o;29450:175::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29532:7:::1;29528:90;29544:8;:15;29542:1;:17;;;29528:90;;;29601:5;29575:10;:23;29586:8;29595:1;29586:11;;;;;;;;;;:::i;:::-;;;;;;;;29575:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29560:3;;;;;:::i;:::-;;;;29528:90;;;;29450:175:::0;:::o;21512:132::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21628:8:::1;21597:19;:28;21617:7;21597:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21512:132:::0;;:::o;18825:64::-;;;;:::o;19443:26::-;;;;:::o;5996:176::-;6110:7;6137:11;:18;6149:5;6137:18;;;;;;;;;;;;;;;:27;6156:7;6137:27;;;;;;;;;;;;;;;;6130:34;;5996:176;;;;:::o;19389:28::-;;;;:::o;18945:63::-;;;;:::o;19337:27::-;;;;:::o;21964:1144::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22093:35:::1;22164:42;22093:124;;22248:16;22230:15;;:34;;;;;;;;;;;;;;;;;;22275:58;22309:16;22328:4;22275:25;:58::i;:::-;22344:75;22361:4;22376:15;;;;;;;;;;;22394:24;22412:4;22394:9;:24::i;:::-;22344:8;:75::i;:::-;22494:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22476:70;;;22555:4;22562:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22476:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22460:13;;:126;;;;;;;;;;;;;;;;;;22597:55;22631:13;;;;;;;;;;;22647:4;22597:25;:55::i;:::-;22663:58;22700:13;;;;;;;;;;;22716:4;22663:28;:58::i;:::-;22734:15;;;;;;;;;;;:31;;;22773:9;22806:4;22842:24;22860:4;22842:9;:24::i;:::-;22901:1;22944::::0;22987:7:::1;:5;:7::i;:::-;23044:15;22734:336;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23096:4;23081:14;;:19;;;;;;;;;;;;;;;;;;22015:1093;21964:1144::o:0;1723:238::-;1045:12;:10;:12::i;:::-;1034:23;;:7;:5;:7::i;:::-;:23;;;1026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1846:1:::1;1826:22;;:8;:22;;;;1804:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;1925:28;1944:8;1925:18;:28::i;:::-;1723:238:::0;:::o;19120:53::-;;;;:::o;135:98::-;188:7;215:10;208:17;;135:98;:::o;9623:380::-;9776:1;9759:19;;:5;:19;;;;9751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9857:1;9838:21;;:7;:21;;;;9830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9941:6;9911:11;:18;9923:5;9911:18;;;;;;;;;;;;;;;:27;9930:7;9911:27;;;;;;;;;;;;;;;:36;;;;9979:7;9963:32;;9972:5;9963:32;;;9988:6;9963:32;;;;;;:::i;:::-;;;;;;;;9623:380;;;:::o;23964:3949::-;24112:1;24096:18;;:4;:18;;;;24088:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24189:1;24175:16;;:2;:16;;;;24167:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24251:10;:14;24262:2;24251:14;;;;;;;;;;;;;;;;;;;;;;;;;24250:15;:36;;;;;24270:10;:16;24281:4;24270:16;;;;;;;;;;;;;;;;;;;;;;;;;24269:17;24250:36;24242:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24329:1;24319:6;:11;24315:93;;;24347:28;24363:4;24369:2;24373:1;24347:15;:28::i;:::-;24390:7;;24315:93;24424:14;;;;;;;;;;;24420:1723;;;24485:7;:5;:7::i;:::-;24477:15;;:4;:15;;;;:49;;;;;24519:7;:5;:7::i;:::-;24513:13;;:2;:13;;;;24477:49;:86;;;;;24561:1;24547:16;;:2;:16;;;;24477:86;:128;;;;;24598:6;24584:21;;:2;:21;;;;24477:128;:158;;;;;24627:8;;;;;;;;;;;24626:9;24477:158;24455:1677;;;24675:13;;;;;;;;;;;24670:228;;24747:19;:25;24767:4;24747:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24776:19;:23;24796:2;24776:23;;;;;;;;;;;;;;;;;;;;;;;;;24747:52;24713:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;24670:228;24972:25;:31;24998:4;24972:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25029:31;:35;25061:2;25029:35;;;;;;;;;;;;;;;;;;;;;;;;;25028:36;24972:92;24946:1171;;;25151:20;;25141:6;:30;;25107:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25359:9;;25342:13;25352:2;25342:9;:13::i;:::-;25333:6;:22;;;;:::i;:::-;:35;;25299:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24946:1171;;;25537:25;:29;25563:2;25537:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25592:31;:37;25624:4;25592:37;;;;;;;;;;;;;;;;;;;;;;;;;25591:38;25537:92;25511:606;;;25716:20;;25706:6;:30;;25672:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25511:606;;;25895:31;:35;25927:2;25895:35;;;;;;;;;;;;;;;;;;;;;;;;;25890:227;;26015:9;;25998:13;26008:2;25998:9;:13::i;:::-;25989:6;:22;;;;:::i;:::-;:35;;25955:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25890:227;25511:606;24946:1171;24455:1677;24420:1723;26153:28;26184:24;26202:4;26184:9;:24::i;:::-;26153:55;;26221:12;26260:18;;26236:20;:42;;26221:57;;26297:7;:35;;;;;26321:11;;;;;;;;;;;26297:35;:79;;;;;26368:8;;;;;;;;;;;26367:9;26297:79;:147;;;;;26413:25;:31;26439:4;26413:31;;;;;;;;;;;;;;;;;;;;;;;;;26412:32;26297:147;:209;;;;;26481:19;:25;26501:4;26481:25;;;;;;;;;;;;;;;;;;;;;;;;;26480:26;26297:209;:269;;;;;26543:19;:23;26563:2;26543:23;;;;;;;;;;;;;;;;;;;;;;;;;26542:24;26297:269;26293:402;;;26623:4;26612:8;;:15;;;;;;;;;;;;;;;;;;26642:10;:8;:10::i;:::-;26678:5;26667:8;;:16;;;;;;;;;;;;;;;;;;26293:402;26707:12;26723:8;;;;;;;;;;;26722:9;26707:24;;26833:19;:25;26853:4;26833:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26862:19;:23;26882:2;26862:23;;;;;;;;;;;;;;;;;;;;;;;;;26833:52;26829:100;;;26912:5;26902:15;;26829:100;26941:12;27046:7;27042:820;;;27098:25;:29;27124:2;27098:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;27142:1;27131:8;;:12;27098:45;27094:621;;;27171:30;27196:4;27171:20;27182:8;;27171:6;:10;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;27164:37;;27094:621;;;27287:25;:31;27313:4;27287:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27332:1;27322:7;;:11;27287:46;27283:432;;;27420:1;27405:11;;27390:12;:26;;;;:::i;:::-;:31;27386:314;;;27452:25;27472:4;27452:15;27463:3;27452:6;:10;;:15;;;;:::i;:::-;:19;;:25;;;;:::i;:::-;27445:32;;27386:314;;;27537:1;27522:11;;27507:12;:26;;;;:::i;:::-;:31;27503:197;;27570:25;27590:4;27570:15;27581:3;27570:6;:10;;:15;;;;:::i;:::-;:19;;:25;;;;:::i;:::-;27563:32;;27503:197;;;27651:29;27675:4;27651:19;27662:7;;27651:6;:10;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;27644:36;;27503:197;27386:314;27283:432;27094:621;27742:1;27735:4;:8;27731:91;;;27764:42;27780:4;27794;27801;27764:15;:42::i;:::-;27731:91;27846:4;27836:14;;;;;:::i;:::-;;;27042:820;27872:33;27888:4;27894:2;27898:6;27872:15;:33::i;:::-;24077:3836;;;;23964:3949;;;;:::o;27921:611::-;28047:21;28085:1;28071:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28047:40;;28116:4;28098;28103:1;28098:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28142:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28132:4;28137:1;28132:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28175:62;28192:4;28207:15;;;;;;;;;;;28225:11;28175:8;:62::i;:::-;28274:15;;;;;;;;;;;:66;;;28355:11;28381:1;28425:4;28452;28472:15;28274:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27976:556;27921:611;:::o;2121:191::-;2195:16;2214:6;;;;;;;;;;;2195:25;;2240:8;2231:6;;:17;;;;;;;;;;;;;;;;;;2295:8;2264:40;;2285:8;2264:40;;;;;;;;;;;;2184:128;2121:191;:::o;23116:130::-;23233:5;23199:25;:31;23225:4;23199:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23116:130;;:::o;7839:770::-;7997:1;7979:20;;:6;:20;;;;7971:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8081:1;8060:23;;:9;:23;;;;8052:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8136:47;8157:6;8165:9;8176:6;8136:20;:47::i;:::-;8196:21;8220:9;:17;8230:6;8220:17;;;;;;;;;;;;;;;;8196:41;;8287:6;8270:13;:23;;8248:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8431:6;8415:13;:22;8395:9;:17;8405:6;8395:17;;;;;;;;;;;;;;;:42;;;;8483:6;8459:9;:20;8469:9;8459:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8524:9;8507:35;;8516:6;8507:35;;;8535:6;8507:35;;;;;;:::i;:::-;;;;;;;;8555:46;8575:6;8583:9;8594:6;8555:19;:46::i;:::-;7960:649;7839:770;;;:::o;28540:724::-;28579:23;28605:24;28623:4;28605:9;:24::i;:::-;28579:50;;28669:1;28650:15;:20;28646:59;;;28687:7;;;28646:59;28738:18;;28719:15;:37;28715:532;;28773:26;28802:18;;28773:47;;28835:36;28852:18;28835:16;:36::i;:::-;28886:23;28912:21;28886:47;;29052:1;29036:15;:17;29033:111;;;29073:10;;;;;;;;;;;:30;;;29110:15;29073:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29033:111;29177:58;29193:18;29213:15;29230:4;29177:58;;;;;;;;:::i;:::-;;;;;;;;28758:489;;28715:532;28568:696;28540:724;:::o;11985:98::-;12043:7;12074:1;12070;:5;;;;:::i;:::-;12063:12;;11985:98;;;;:::o;12091:::-;12149:7;12180:1;12176;:5;;;;:::i;:::-;12169:12;;12091:98;;;;:::o;10011:125::-;;;;:::o;10144:124::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:77::-;3828:7;3857:5;3846:16;;3791:77;;;:::o;3874:122::-;3947:24;3965:5;3947:24;:::i;:::-;3940:5;3937:35;3927:63;;3986:1;3983;3976:12;3927:63;3874:122;:::o;4002:139::-;4048:5;4086:6;4073:20;4064:29;;4102:33;4129:5;4102:33;:::i;:::-;4002:139;;;;:::o;4147:329::-;4206:6;4255:2;4243:9;4234:7;4230:23;4226:32;4223:119;;;4261:79;;:::i;:::-;4223:119;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4147:329;;;;:::o;4482:99::-;4534:6;4568:5;4562:12;4552:22;;4482:99;;;:::o;4587:169::-;4671:11;4705:6;4700:3;4693:19;4745:4;4740:3;4736:14;4721:29;;4587:169;;;;:::o;4762:307::-;4830:1;4840:113;4854:6;4851:1;4848:13;4840:113;;;4939:1;4934:3;4930:11;4924:18;4920:1;4915:3;4911:11;4904:39;4876:2;4873:1;4869:10;4864:15;;4840:113;;;4971:6;4968:1;4965:13;4962:101;;;5051:1;5042:6;5037:3;5033:16;5026:27;4962:101;4811:258;4762:307;;;:::o;5075:364::-;5163:3;5191:39;5224:5;5191:39;:::i;:::-;5246:71;5310:6;5305:3;5246:71;:::i;:::-;5239:78;;5326:52;5371:6;5366:3;5359:4;5352:5;5348:16;5326:52;:::i;:::-;5403:29;5425:6;5403:29;:::i;:::-;5398:3;5394:39;5387:46;;5167:272;5075:364;;;;:::o;5445:313::-;5558:4;5596:2;5585:9;5581:18;5573:26;;5645:9;5639:4;5635:20;5631:1;5620:9;5616:17;5609:47;5673:78;5746:4;5737:6;5673:78;:::i;:::-;5665:86;;5445:313;;;;:::o;5764:474::-;5832:6;5840;5889:2;5877:9;5868:7;5864:23;5860:32;5857:119;;;5895:79;;:::i;:::-;5857:119;6015:1;6040:53;6085:7;6076:6;6065:9;6061:22;6040:53;:::i;:::-;6030:63;;5986:117;6142:2;6168:53;6213:7;6204:6;6193:9;6189:22;6168:53;:::i;:::-;6158:63;;6113:118;5764:474;;;;;:::o;6244:90::-;6278:7;6321:5;6314:13;6307:21;6296:32;;6244:90;;;:::o;6340:109::-;6421:21;6436:5;6421:21;:::i;:::-;6416:3;6409:34;6340:109;;:::o;6455:210::-;6542:4;6580:2;6569:9;6565:18;6557:26;;6593:65;6655:1;6644:9;6640:17;6631:6;6593:65;:::i;:::-;6455:210;;;;:::o;6671:329::-;6730:6;6779:2;6767:9;6758:7;6754:23;6750:32;6747:119;;;6785:79;;:::i;:::-;6747:119;6905:1;6930:53;6975:7;6966:6;6955:9;6951:22;6930:53;:::i;:::-;6920:63;;6876:117;6671:329;;;;:::o;7006:60::-;7034:3;7055:5;7048:12;;7006:60;;;:::o;7072:142::-;7122:9;7155:53;7173:34;7182:24;7200:5;7182:24;:::i;:::-;7173:34;:::i;:::-;7155:53;:::i;:::-;7142:66;;7072:142;;;:::o;7220:126::-;7270:9;7303:37;7334:5;7303:37;:::i;:::-;7290:50;;7220:126;;;:::o;7352:153::-;7429:9;7462:37;7493:5;7462:37;:::i;:::-;7449:50;;7352:153;;;:::o;7511:185::-;7625:64;7683:5;7625:64;:::i;:::-;7620:3;7613:77;7511:185;;:::o;7702:276::-;7822:4;7860:2;7849:9;7845:18;7837:26;;7873:98;7968:1;7957:9;7953:17;7944:6;7873:98;:::i;:::-;7702:276;;;;:::o;7984:118::-;8071:24;8089:5;8071:24;:::i;:::-;8066:3;8059:37;7984:118;;:::o;8108:222::-;8201:4;8239:2;8228:9;8224:18;8216:26;;8252:71;8320:1;8309:9;8305:17;8296:6;8252:71;:::i;:::-;8108:222;;;;:::o;8336:619::-;8413:6;8421;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8859:2;8885:53;8930:7;8921:6;8910:9;8906:22;8885:53;:::i;:::-;8875:63;;8830:118;8336:619;;;;;:::o;8961:118::-;9048:24;9066:5;9048:24;:::i;:::-;9043:3;9036:37;8961:118;;:::o;9085:222::-;9178:4;9216:2;9205:9;9201:18;9193:26;;9229:71;9297:1;9286:9;9282:17;9273:6;9229:71;:::i;:::-;9085:222;;;;:::o;9313:86::-;9348:7;9388:4;9381:5;9377:16;9366:27;;9313:86;;;:::o;9405:112::-;9488:22;9504:5;9488:22;:::i;:::-;9483:3;9476:35;9405:112;;:::o;9523:214::-;9612:4;9650:2;9639:9;9635:18;9627:26;;9663:67;9727:1;9716:9;9712:17;9703:6;9663:67;:::i;:::-;9523:214;;;;:::o;9743:140::-;9807:9;9840:37;9871:5;9840:37;:::i;:::-;9827:50;;9743:140;;;:::o;9889:159::-;9990:51;10035:5;9990:51;:::i;:::-;9985:3;9978:64;9889:159;;:::o;10054:250::-;10161:4;10199:2;10188:9;10184:18;10176:26;;10212:85;10294:1;10283:9;10279:17;10270:6;10212:85;:::i;:::-;10054:250;;;;:::o;10310:116::-;10380:21;10395:5;10380:21;:::i;:::-;10373:5;10370:32;10360:60;;10416:1;10413;10406:12;10360:60;10310:116;:::o;10432:133::-;10475:5;10513:6;10500:20;10491:29;;10529:30;10553:5;10529:30;:::i;:::-;10432:133;;;;:::o;10571:323::-;10627:6;10676:2;10664:9;10655:7;10651:23;10647:32;10644:119;;;10682:79;;:::i;:::-;10644:119;10802:1;10827:50;10869:7;10860:6;10849:9;10845:22;10827:50;:::i;:::-;10817:60;;10773:114;10571:323;;;;:::o;10900:468::-;10965:6;10973;11022:2;11010:9;11001:7;10997:23;10993:32;10990:119;;;11028:79;;:::i;:::-;10990:119;11148:1;11173:53;11218:7;11209:6;11198:9;11194:22;11173:53;:::i;:::-;11163:63;;11119:117;11275:2;11301:50;11343:7;11334:6;11323:9;11319:22;11301:50;:::i;:::-;11291:60;;11246:115;10900:468;;;;;:::o;11374:474::-;11442:6;11450;11499:2;11487:9;11478:7;11474:23;11470:32;11467:119;;;11505:79;;:::i;:::-;11467:119;11625:1;11650:53;11695:7;11686:6;11675:9;11671:22;11650:53;:::i;:::-;11640:63;;11596:117;11752:2;11778:53;11823:7;11814:6;11803:9;11799:22;11778:53;:::i;:::-;11768:63;;11723:118;11374:474;;;;;:::o;11854:182::-;11994:34;11990:1;11982:6;11978:14;11971:58;11854:182;:::o;12042:366::-;12184:3;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12281:93;12370:3;12281:93;:::i;:::-;12399:2;12394:3;12390:12;12383:19;;12042:366;;;:::o;12414:419::-;12580:4;12618:2;12607:9;12603:18;12595:26;;12667:9;12661:4;12657:20;12653:1;12642:9;12638:17;12631:47;12695:131;12821:4;12695:131;:::i;:::-;12687:139;;12414:419;;;:::o;12839:180::-;12887:77;12884:1;12877:88;12984:4;12981:1;12974:15;13008:4;13005:1;12998:15;13025:180;13073:77;13070:1;13063:88;13170:4;13167:1;13160:15;13194:4;13191:1;13184:15;13211:167;13248:3;13271:22;13287:5;13271:22;:::i;:::-;13262:31;;13315:4;13308:5;13305:15;13302:41;;;13323:18;;:::i;:::-;13302:41;13370:1;13363:5;13359:13;13352:20;;13211:167;;;:::o;13384:180::-;13432:77;13429:1;13422:88;13529:4;13526:1;13519:15;13553:4;13550:1;13543:15;13570:320;13614:6;13651:1;13645:4;13641:12;13631:22;;13698:1;13692:4;13688:12;13719:18;13709:81;;13775:4;13767:6;13763:17;13753:27;;13709:81;13837:2;13829:6;13826:14;13806:18;13803:38;13800:84;;;13856:18;;:::i;:::-;13800:84;13621:269;13570:320;;;:::o;13896:227::-;14036:34;14032:1;14024:6;14020:14;14013:58;14105:10;14100:2;14092:6;14088:15;14081:35;13896:227;:::o;14129:366::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:419::-;14667:4;14705:2;14694:9;14690:18;14682:26;;14754:9;14748:4;14744:20;14740:1;14729:9;14725:17;14718:47;14782:131;14908:4;14782:131;:::i;:::-;14774:139;;14501:419;;;:::o;14926:305::-;14966:3;14985:20;15003:1;14985:20;:::i;:::-;14980:25;;15019:20;15037:1;15019:20;:::i;:::-;15014:25;;15173:1;15105:66;15101:74;15098:1;15095:81;15092:107;;;15179:18;;:::i;:::-;15092:107;15223:1;15220;15216:9;15209:16;;14926:305;;;;:::o;15237:244::-;15377:34;15373:1;15365:6;15361:14;15354:58;15446:27;15441:2;15433:6;15429:15;15422:52;15237:244;:::o;15487:366::-;15629:3;15650:67;15714:2;15709:3;15650:67;:::i;:::-;15643:74;;15726:93;15815:3;15726:93;:::i;:::-;15844:2;15839:3;15835:12;15828:19;;15487:366;;;:::o;15859:419::-;16025:4;16063:2;16052:9;16048:18;16040:26;;16112:9;16106:4;16102:20;16098:1;16087:9;16083:17;16076:47;16140:131;16266:4;16140:131;:::i;:::-;16132:139;;15859:419;;;:::o;16284:224::-;16424:34;16420:1;16412:6;16408:14;16401:58;16493:7;16488:2;16480:6;16476:15;16469:32;16284:224;:::o;16514:366::-;16656:3;16677:67;16741:2;16736:3;16677:67;:::i;:::-;16670:74;;16753:93;16842:3;16753:93;:::i;:::-;16871:2;16866:3;16862:12;16855:19;;16514:366;;;:::o;16886:419::-;17052:4;17090:2;17079:9;17075:18;17067:26;;17139:9;17133:4;17129:20;17125:1;17114:9;17110:17;17103:47;17167:131;17293:4;17167:131;:::i;:::-;17159:139;;16886:419;;;:::o;17311:143::-;17368:5;17399:6;17393:13;17384:22;;17415:33;17442:5;17415:33;:::i;:::-;17311:143;;;;:::o;17460:351::-;17530:6;17579:2;17567:9;17558:7;17554:23;17550:32;17547:119;;;17585:79;;:::i;:::-;17547:119;17705:1;17730:64;17786:7;17777:6;17766:9;17762:22;17730:64;:::i;:::-;17720:74;;17676:128;17460:351;;;;:::o;17817:332::-;17938:4;17976:2;17965:9;17961:18;17953:26;;17989:71;18057:1;18046:9;18042:17;18033:6;17989:71;:::i;:::-;18070:72;18138:2;18127:9;18123:18;18114:6;18070:72;:::i;:::-;17817:332;;;;;:::o;18155:85::-;18200:7;18229:5;18218:16;;18155:85;;;:::o;18246:158::-;18304:9;18337:61;18355:42;18364:32;18390:5;18364:32;:::i;:::-;18355:42;:::i;:::-;18337:61;:::i;:::-;18324:74;;18246:158;;;:::o;18410:147::-;18505:45;18544:5;18505:45;:::i;:::-;18500:3;18493:58;18410:147;;:::o;18563:807::-;18812:4;18850:3;18839:9;18835:19;18827:27;;18864:71;18932:1;18921:9;18917:17;18908:6;18864:71;:::i;:::-;18945:72;19013:2;19002:9;18998:18;18989:6;18945:72;:::i;:::-;19027:80;19103:2;19092:9;19088:18;19079:6;19027:80;:::i;:::-;19117;19193:2;19182:9;19178:18;19169:6;19117:80;:::i;:::-;19207:73;19275:3;19264:9;19260:19;19251:6;19207:73;:::i;:::-;19290;19358:3;19347:9;19343:19;19334:6;19290:73;:::i;:::-;18563:807;;;;;;;;;:::o;19376:143::-;19433:5;19464:6;19458:13;19449:22;;19480:33;19507:5;19480:33;:::i;:::-;19376:143;;;;:::o;19525:663::-;19613:6;19621;19629;19678:2;19666:9;19657:7;19653:23;19649:32;19646:119;;;19684:79;;:::i;:::-;19646:119;19804:1;19829:64;19885:7;19876:6;19865:9;19861:22;19829:64;:::i;:::-;19819:74;;19775:128;19942:2;19968:64;20024:7;20015:6;20004:9;20000:22;19968:64;:::i;:::-;19958:74;;19913:129;20081:2;20107:64;20163:7;20154:6;20143:9;20139:22;20107:64;:::i;:::-;20097:74;;20052:129;19525:663;;;;;:::o;20194:225::-;20334:34;20330:1;20322:6;20318:14;20311:58;20403:8;20398:2;20390:6;20386:15;20379:33;20194:225;:::o;20425:366::-;20567:3;20588:67;20652:2;20647:3;20588:67;:::i;:::-;20581:74;;20664:93;20753:3;20664:93;:::i;:::-;20782:2;20777:3;20773:12;20766:19;;20425:366;;;:::o;20797:419::-;20963:4;21001:2;20990:9;20986:18;20978:26;;21050:9;21044:4;21040:20;21036:1;21025:9;21021:17;21014:47;21078:131;21204:4;21078:131;:::i;:::-;21070:139;;20797:419;;;:::o;21222:223::-;21362:34;21358:1;21350:6;21346:14;21339:58;21431:6;21426:2;21418:6;21414:15;21407:31;21222:223;:::o;21451:366::-;21593:3;21614:67;21678:2;21673:3;21614:67;:::i;:::-;21607:74;;21690:93;21779:3;21690:93;:::i;:::-;21808:2;21803:3;21799:12;21792:19;;21451:366;;;:::o;21823:419::-;21989:4;22027:2;22016:9;22012:18;22004:26;;22076:9;22070:4;22066:20;22062:1;22051:9;22047:17;22040:47;22104:131;22230:4;22104:131;:::i;:::-;22096:139;;21823:419;;;:::o;22248:221::-;22388:34;22384:1;22376:6;22372:14;22365:58;22457:4;22452:2;22444:6;22440:15;22433:29;22248:221;:::o;22475:366::-;22617:3;22638:67;22702:2;22697:3;22638:67;:::i;:::-;22631:74;;22714:93;22803:3;22714:93;:::i;:::-;22832:2;22827:3;22823:12;22816:19;;22475:366;;;:::o;22847:419::-;23013:4;23051:2;23040:9;23036:18;23028:26;;23100:9;23094:4;23090:20;23086:1;23075:9;23071:17;23064:47;23128:131;23254:4;23128:131;:::i;:::-;23120:139;;22847:419;;;:::o;23272:224::-;23412:34;23408:1;23400:6;23396:14;23389:58;23481:7;23476:2;23468:6;23464:15;23457:32;23272:224;:::o;23502:366::-;23644:3;23665:67;23729:2;23724:3;23665:67;:::i;:::-;23658:74;;23741:93;23830:3;23741:93;:::i;:::-;23859:2;23854:3;23850:12;23843:19;;23502:366;;;:::o;23874:419::-;24040:4;24078:2;24067:9;24063:18;24055:26;;24127:9;24121:4;24117:20;24113:1;24102:9;24098:17;24091:47;24155:131;24281:4;24155:131;:::i;:::-;24147:139;;23874:419;;;:::o;24299:222::-;24439:34;24435:1;24427:6;24423:14;24416:58;24508:5;24503:2;24495:6;24491:15;24484:30;24299:222;:::o;24527:366::-;24669:3;24690:67;24754:2;24749:3;24690:67;:::i;:::-;24683:74;;24766:93;24855:3;24766:93;:::i;:::-;24884:2;24879:3;24875:12;24868:19;;24527:366;;;:::o;24899:419::-;25065:4;25103:2;25092:9;25088:18;25080:26;;25152:9;25146:4;25142:20;25138:1;25127:9;25123:17;25116:47;25180:131;25306:4;25180:131;:::i;:::-;25172:139;;24899:419;;;:::o;25324:161::-;25464:13;25460:1;25452:6;25448:14;25441:37;25324:161;:::o;25491:366::-;25633:3;25654:67;25718:2;25713:3;25654:67;:::i;:::-;25647:74;;25730:93;25819:3;25730:93;:::i;:::-;25848:2;25843:3;25839:12;25832:19;;25491:366;;;:::o;25863:419::-;26029:4;26067:2;26056:9;26052:18;26044:26;;26116:9;26110:4;26106:20;26102:1;26091:9;26087:17;26080:47;26144:131;26270:4;26144:131;:::i;:::-;26136:139;;25863:419;;;:::o;26288:177::-;26428:29;26424:1;26416:6;26412:14;26405:53;26288:177;:::o;26471:366::-;26613:3;26634:67;26698:2;26693:3;26634:67;:::i;:::-;26627:74;;26710:93;26799:3;26710:93;:::i;:::-;26828:2;26823:3;26819:12;26812:19;;26471:366;;;:::o;26843:419::-;27009:4;27047:2;27036:9;27032:18;27024:26;;27096:9;27090:4;27086:20;27082:1;27071:9;27067:17;27060:47;27124:131;27250:4;27124:131;:::i;:::-;27116:139;;26843:419;;;:::o;27268:240::-;27408:34;27404:1;27396:6;27392:14;27385:58;27477:23;27472:2;27464:6;27460:15;27453:48;27268:240;:::o;27514:366::-;27656:3;27677:67;27741:2;27736:3;27677:67;:::i;:::-;27670:74;;27753:93;27842:3;27753:93;:::i;:::-;27871:2;27866:3;27862:12;27855:19;;27514:366;;;:::o;27886:419::-;28052:4;28090:2;28079:9;28075:18;28067:26;;28139:9;28133:4;28129:20;28125:1;28114:9;28110:17;28103:47;28167:131;28293:4;28167:131;:::i;:::-;28159:139;;27886:419;;;:::o;28311:169::-;28451:21;28447:1;28439:6;28435:14;28428:45;28311:169;:::o;28486:366::-;28628:3;28649:67;28713:2;28708:3;28649:67;:::i;:::-;28642:74;;28725:93;28814:3;28725:93;:::i;:::-;28843:2;28838:3;28834:12;28827:19;;28486:366;;;:::o;28858:419::-;29024:4;29062:2;29051:9;29047:18;29039:26;;29111:9;29105:4;29101:20;29097:1;29086:9;29082:17;29075:47;29139:131;29265:4;29139:131;:::i;:::-;29131:139;;28858:419;;;:::o;29283:241::-;29423:34;29419:1;29411:6;29407:14;29400:58;29492:24;29487:2;29479:6;29475:15;29468:49;29283:241;:::o;29530:366::-;29672:3;29693:67;29757:2;29752:3;29693:67;:::i;:::-;29686:74;;29769:93;29858:3;29769:93;:::i;:::-;29887:2;29882:3;29878:12;29871:19;;29530:366;;;:::o;29902:419::-;30068:4;30106:2;30095:9;30091:18;30083:26;;30155:9;30149:4;30145:20;30141:1;30130:9;30126:17;30119:47;30183:131;30309:4;30183:131;:::i;:::-;30175:139;;29902:419;;;:::o;30327:191::-;30367:4;30387:20;30405:1;30387:20;:::i;:::-;30382:25;;30421:20;30439:1;30421:20;:::i;:::-;30416:25;;30460:1;30457;30454:8;30451:34;;;30465:18;;:::i;:::-;30451:34;30510:1;30507;30503:9;30495:17;;30327:191;;;;:::o;30524:114::-;30591:6;30625:5;30619:12;30609:22;;30524:114;;;:::o;30644:184::-;30743:11;30777:6;30772:3;30765:19;30817:4;30812:3;30808:14;30793:29;;30644:184;;;;:::o;30834:132::-;30901:4;30924:3;30916:11;;30954:4;30949:3;30945:14;30937:22;;30834:132;;;:::o;30972:108::-;31049:24;31067:5;31049:24;:::i;:::-;31044:3;31037:37;30972:108;;:::o;31086:179::-;31155:10;31176:46;31218:3;31210:6;31176:46;:::i;:::-;31254:4;31249:3;31245:14;31231:28;;31086:179;;;;:::o;31271:113::-;31341:4;31373;31368:3;31364:14;31356:22;;31271:113;;;:::o;31420:732::-;31539:3;31568:54;31616:5;31568:54;:::i;:::-;31638:86;31717:6;31712:3;31638:86;:::i;:::-;31631:93;;31748:56;31798:5;31748:56;:::i;:::-;31827:7;31858:1;31843:284;31868:6;31865:1;31862:13;31843:284;;;31944:6;31938:13;31971:63;32030:3;32015:13;31971:63;:::i;:::-;31964:70;;32057:60;32110:6;32057:60;:::i;:::-;32047:70;;31903:224;31890:1;31887;31883:9;31878:14;;31843:284;;;31847:14;32143:3;32136:10;;31544:608;;;31420:732;;;;:::o;32158:831::-;32421:4;32459:3;32448:9;32444:19;32436:27;;32473:71;32541:1;32530:9;32526:17;32517:6;32473:71;:::i;:::-;32554:80;32630:2;32619:9;32615:18;32606:6;32554:80;:::i;:::-;32681:9;32675:4;32671:20;32666:2;32655:9;32651:18;32644:48;32709:108;32812:4;32803:6;32709:108;:::i;:::-;32701:116;;32827:72;32895:2;32884:9;32880:18;32871:6;32827:72;:::i;:::-;32909:73;32977:3;32966:9;32962:19;32953:6;32909:73;:::i;:::-;32158:831;;;;;;;;:::o;32995:225::-;33135:34;33131:1;33123:6;33119:14;33112:58;33204:8;33199:2;33191:6;33187:15;33180:33;32995:225;:::o;33226:366::-;33368:3;33389:67;33453:2;33448:3;33389:67;:::i;:::-;33382:74;;33465:93;33554:3;33465:93;:::i;:::-;33583:2;33578:3;33574:12;33567:19;;33226:366;;;:::o;33598:419::-;33764:4;33802:2;33791:9;33787:18;33779:26;;33851:9;33845:4;33841:20;33837:1;33826:9;33822:17;33815:47;33879:131;34005:4;33879:131;:::i;:::-;33871:139;;33598:419;;;:::o;34023:430::-;34166:4;34204:2;34193:9;34189:18;34181:26;;34217:71;34285:1;34274:9;34270:17;34261:6;34217:71;:::i;:::-;34298:72;34366:2;34355:9;34351:18;34342:6;34298:72;:::i;:::-;34380:66;34442:2;34431:9;34427:18;34418:6;34380:66;:::i;:::-;34023:430;;;;;;:::o;34459:348::-;34499:7;34522:20;34540:1;34522:20;:::i;:::-;34517:25;;34556:20;34574:1;34556:20;:::i;:::-;34551:25;;34744:1;34676:66;34672:74;34669:1;34666:81;34661:1;34654:9;34647:17;34643:105;34640:131;;;34751:18;;:::i;:::-;34640:131;34799:1;34796;34792:9;34781:20;;34459:348;;;;:::o;34813:180::-;34861:77;34858:1;34851:88;34958:4;34955:1;34948:15;34982:4;34979:1;34972:15;34999:185;35039:1;35056:20;35074:1;35056:20;:::i;:::-;35051:25;;35090:20;35108:1;35090:20;:::i;:::-;35085:25;;35129:1;35119:35;;35134:18;;:::i;:::-;35119:35;35176:1;35173;35169:9;35164:14;;34999:185;;;;:::o

Swarm Source

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