ETH Price: $2,461.31 (+1.99%)
 

Overview

Max Total Supply

1,000,000,000 TMAI

Holders

5

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,221,380.339864514914832881 TMAI

Value
$0.00
0x15e43d57900f469b5b8fee2a16c72afe91832221
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TMAI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**
 * @title Token Mind Ai 
 * @dev ERC20 for Token Mind Ai 
 * Website: https://tokenmindai.com
 * TG: https://t.me/TokenMindAi
 * Twitter: https://x.com/TokenMindAi
 */

pragma solidity 0.8.7;

contract ReentrancyGuard {
    bool internal locked = false;

    modifier nonReentrant() {
        require(!locked, "Reentrant call");
        locked = true;
        _;
        locked = false;
    }
}

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/token/ERC20/IERC20.sol

/**
 * @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/token/ERC20/extensions/IERC20Metadata.sol

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor ()  {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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


contract TMAI is ERC20, Ownable, ReentrancyGuard {

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    uint256 private constant TOKEN_DECIMALS = 10**18;
    uint8 private constant percentageOfMaximumTokensToAccumate = 10;
    
    bool private swapping;

    uint256 public swapTokensAtAmount = 10 ** 5 * TOKEN_DECIMALS;
    uint256 public balanceLimit = 10 ** 7 * TOKEN_DECIMALS;
    address public adminWallet = 0xc3EaDf0eF86832be99f278482d21357c3fD9Bc82;
    address public fundWallet = 0x795fB6DDF160C72D95e22dff419Aca59f8e6e8b5;

    uint16 public liquidityFee = 500;
    uint16 public adminFee = 1000;
    uint16 public fundFee = 1000;

    mapping (address => bool) public isExcluded;
    mapping (address => bool) public isLimitExcluded;

    event TransferFailed(address _recipient, uint256 _amount);
    event SetFee(uint16 liquidityFee, uint16 adminFee, uint16 fundFee);
    event SetSwapAtAmount(uint256 amount);
    event SetLimit(uint256 limit);



    constructor()  ERC20("Token Mind AI", "TMAI") {
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _UniswapV2Pair = IUniswapV2Factory(_UniswapV2Router.factory())
            .createPair(address(this), _UniswapV2Router.WETH());
        uniswapV2Router = _UniswapV2Router;
        uniswapV2Pair = _UniswapV2Pair;
        isExcluded[owner()] = true;
        isExcluded[address(this)] = true;
        isExcluded[adminWallet] = true;
        isExcluded[fundWallet] = true;

        isLimitExcluded[owner()] = true;
        isLimitExcluded[address(this)] = true;
        isLimitExcluded[adminWallet] = true;
        isLimitExcluded[fundWallet] = true;
        isLimitExcluded[_UniswapV2Pair] = true;
        
        _mint(owner(),  10 ** 9 * TOKEN_DECIMALS);

    }

    receive() external payable {
    }

    function setUniswapV2Router(address _uniswapV2Router) external onlyOwner {
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(_uniswapV2Router);
        IUniswapV2Factory factory = IUniswapV2Factory(_UniswapV2Router.factory());

        // Check if pair already exists
        address existingPair = factory.getPair(address(this), _UniswapV2Router.WETH());

        address _UniswapV2Pair;
        if (existingPair == address(0)) { // If pair does not exist, create it
            _UniswapV2Pair = factory.createPair(address(this), _UniswapV2Router.WETH());
        } else { // If pair exists, use existing pair address
            _UniswapV2Pair = existingPair;
        }
        require(_UniswapV2Pair != address(0), "Pair address set to zero");
        uniswapV2Router = _UniswapV2Router;
        uniswapV2Pair = _UniswapV2Pair;
        isLimitExcluded[_UniswapV2Pair] = true;
    }


    function _burnToken (uint256 _amount) external onlyOwner{
        _burn(owner(), _amount);
    }

    function _transfer(address from,  address to,  uint256 amount) internal override {


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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if(
            canSwap &&
            !swapping &&
            from != uniswapV2Pair &&
            from != owner() &&
            to != owner()
        ) {
            swapping = true;
            
            swapAndLiquify(contractTokenBalance);
            sendDividends();
            swapping = false;
        }

        if(!swapping){        
            bool takeFee = false;

            if(!isExcluded[from] && (from == uniswapV2Pair || to == uniswapV2Pair)){
                takeFee = true;
            }

            if (takeFee){
                uint256 fees = amount * (liquidityFee + adminFee + fundFee) / 10000;
                amount = amount - fees;
                super._transfer(from, address(this), fees);
            }
        }
        if (!isLimitExcluded[to]){
            require((balanceOf(to) + amount) <= balanceLimit, "maxlimit");
        }
        super._transfer(from, to, amount);

    }

    function swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 tokens = (contractTokenBalance * liquidityFee) / (liquidityFee + fundFee + adminFee);
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;
        
        uint256 initialBalance = address(this).balance;
        uint256 halfPlusDividents = contractTokenBalance-otherHalf;
        swapTokensForEth(halfPlusDividents);
        uint256 newBalance = address(this).balance - initialBalance;
        addLiquidity(otherHalf, (newBalance*half)/halfPlusDividents);
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp + 200
        );
    }

    function sendDividends() private nonReentrant {
        uint256 ethBalance = address(this).balance;
        uint256 adminETH = (ethBalance * adminFee) / (adminFee + fundFee);
        uint256 fundETH  = ethBalance - adminETH;
        bool successAdmin = payable(adminWallet).send(adminETH);
        bool successFund = payable(fundWallet).send(fundETH);

        if (!successAdmin) {
            emit TransferFailed(adminWallet, adminETH);
        }
        if (!successFund) {
            emit TransferFailed(fundWallet, fundETH);
        }
    }


    function setSwapAtAmount (uint256 amount) external onlyOwner {
        require(amount <= (percentageOfMaximumTokensToAccumate * totalSupply()) / 100, "Amount greater than max accumulated percentage");
        require(swapTokensAtAmount != amount, "Same value provided");
        swapTokensAtAmount = amount;

        emit SetSwapAtAmount(amount);
    }

    function setAdminWallet (address _address) external onlyOwner {
        require(_address != address(0) && adminWallet != _address, "Invalid or same address provided");
        isExcluded[adminWallet] = false;
        adminWallet = _address;
        isExcluded[adminWallet] = true;
    }

    function setFundWAllet (address _address) external onlyOwner {
        require(_address != address(0) && fundWallet != _address, "Invalid or same address provided");
        isExcluded[fundWallet] = false;
        fundWallet = _address;
        isExcluded[fundWallet] = true;
    }

//should never be mixed with the direct transferOwnership unless owner doesn't want to be excluded
    function changeOwner (address _address) external onlyOwner {
        require(_address != address(0) && owner() != _address, "Invalid or same address provided");
        isExcluded[owner()] = false;
        transferOwnership(_address);
        isExcluded[_address] = true;
    }

    function setExcludeWallet (address _address, bool _value) external onlyOwner{
        require(isExcluded[_address] != _value, "Same exclusion value provided");
        isExcluded[_address] = _value;
    }

    function setExcludeLimitWallet (address _address, bool _value) external onlyOwner{
        require(isLimitExcluded[_address] != _value, "Same limit exclusion value provided");
        isLimitExcluded[_address] = _value;
    }

    function setLimit (uint256 _limit) external onlyOwner {
        require(_limit > 10 ** 6 * TOKEN_DECIMALS && balanceLimit != _limit, "Limit is too small or same value provided");
        
        balanceLimit = _limit;

        emit SetLimit(_limit);
    }

    function setFee (uint16 _newLPFee, uint16 _newadminFee, uint16 _newfundFee) external onlyOwner{
        require (0 < _newLPFee + _newadminFee + _newfundFee &&  _newLPFee + _newadminFee + _newfundFee< 3000, "need to be strictly positive and smaller than 30%");
        liquidityFee = _newLPFee;
        adminFee = _newadminFee;
        fundFee = _newfundFee;

        emit SetFee(liquidityFee, adminFee, fundFee);
    }
}

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":"uint16","name":"liquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"adminFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"fundFee","type":"uint16"}],"name":"SetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SetLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetSwapAtAmount","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":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferFailed","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"_burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"changeOwner","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":[],"name":"fundFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setExcludeLimitWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setExcludeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newLPFee","type":"uint16"},{"internalType":"uint16","name":"_newadminFee","type":"uint16"},{"internalType":"uint16","name":"_newfundFee","type":"uint16"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setFundWAllet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Router","type":"address"}],"name":"setUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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"}]

60806040526000600560146101000a81548160ff021916908315150217905550670de0b6b3a7640000620186a062000038919062000ca9565b600855670de0b6b3a76400006298968062000054919062000ca9565b60095573c3eadf0ef86832be99f278482d21357c3fd9bc82600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073795fb6ddf160c72d95e22dff419aca59f8e6e8b5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f4600b60146101000a81548161ffff021916908361ffff1602179055506103e8600b60166101000a81548161ffff021916908361ffff1602179055506103e8600b60186101000a81548161ffff021916908361ffff1602179055503480156200016b57600080fd5b506040518060400160405280600d81526020017f546f6b656e204d696e64204149000000000000000000000000000000000000008152506040518060400160405280600481526020017f544d4149000000000000000000000000000000000000000000000000000000008152508160039080519060200190620001f092919062000a8d565b5080600490805190602001906200020992919062000a8d565b50505060006200021e620008f160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031f57600080fd5b505afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a919062000b54565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bd57600080fd5b505afa158015620003d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f8919062000b54565b6040518363ffffffff1660e01b81526004016200041792919062000bcf565b602060405180830381600087803b1580156200043257600080fd5b505af115801562000447573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046d919062000b54565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c600062000507620008f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620006ba620008f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008e9620008c3620008f960201b60201c565b670de0b6b3a7640000633b9aca00620008dd919062000ca9565b6200092360201b60201c565b505062000e24565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000996576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098d9062000bfc565b60405180910390fd5b620009aa6000838362000a8860201b60201c565b8060026000828254620009be919062000c4c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a15919062000c4c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7c919062000c1e565b60405180910390a35050565b505050565b82805462000a9b9062000d48565b90600052602060002090601f01602090048101928262000abf576000855562000b0b565b82601f1062000ada57805160ff191683800117855562000b0b565b8280016001018555821562000b0b579182015b8281111562000b0a57825182559160200191906001019062000aed565b5b50905062000b1a919062000b1e565b5090565b5b8082111562000b3957600081600090555060010162000b1f565b5090565b60008151905062000b4e8162000e0a565b92915050565b60006020828403121562000b6d5762000b6c62000ddc565b5b600062000b7d8482850162000b3d565b91505092915050565b62000b918162000d0a565b82525050565b600062000ba6601f8362000c3b565b915062000bb38262000de1565b602082019050919050565b62000bc98162000d3e565b82525050565b600060408201905062000be6600083018562000b86565b62000bf5602083018462000b86565b9392505050565b6000602082019050818103600083015262000c178162000b97565b9050919050565b600060208201905062000c35600083018462000bbe565b92915050565b600082825260208201905092915050565b600062000c598262000d3e565b915062000c668362000d3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c9e5762000c9d62000d7e565b5b828201905092915050565b600062000cb68262000d3e565b915062000cc38362000d3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cff5762000cfe62000d7e565b5b828202905092915050565b600062000d178262000d1e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000d6157607f821691505b6020821081141562000d785762000d7762000dad565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000e158162000d0a565b811462000e2157600080fd5b50565b614bfb8062000e346000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063a457c2d7116100a0578063cba0e9961161006f578063cba0e99614610776578063d9e2b9f6146107b3578063dd62ed3e146107dc578063e2f4560514610819578063f2fde38b146108445761020f565b8063a457c2d7146106aa578063a6f9dae1146106e7578063a9059cbb14610710578063b374e1c61461074d5761020f565b80638da5cb5b116100e75780638da5cb5b146105d557806395d89b411461060057806397b4e10a1461062b57806398118cb414610654578063a0be06f91461067f5761020f565b806370a082311461052d578063715018a61461056a57806373ece43514610581578063762bb282146105aa5761020f565b806327ea6f2b1161019b57806336b19cd71161016a57806336b19cd714610446578063395093511461047157806349bd5a5e146104ae5780636402511e146104d9578063664a1ad6146105025761020f565b806327ea6f2b1461039e578063313ce567146103c757806333abd028146103f2578063350829331461041d5761020f565b80631419841d116101d75780631419841d146102e25780631694505e1461030b57806318160ddd1461033657806323b872dd146103615761020f565b806306fdde0314610214578063095ea7b31461023f5780630996f4ea1461027c57806309c58ac1146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086d565b6040516102369190613ea1565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613884565b6108ff565b6040516102739190613e6b565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613757565b61091d565b005b3480156102b157600080fd5b506102cc60048036038101906102c79190613757565b610bb6565b6040516102d99190613e6b565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613757565b610bd6565b005b34801561031757600080fd5b5061032061109c565b60405161032d9190613e86565b60405180910390f35b34801561034257600080fd5b5061034b6110c2565b60405161035891906141b5565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906137f1565b6110cc565b6040516103959190613e6b565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613917565b6111cd565b005b3480156103d357600080fd5b506103dc61130b565b6040516103e9919061422a565b60405180910390f35b3480156103fe57600080fd5b50610407611314565b6040516104149190614163565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613757565b611328565b005b34801561045257600080fd5b5061045b6115c1565b6040516104689190613d9d565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613884565b6115e7565b6040516104a59190613e6b565b60405180910390f35b3480156104ba57600080fd5b506104c3611693565b6040516104d09190613d9d565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613917565b6116b9565b005b34801561050e57600080fd5b5061051761183b565b6040516105249190613d9d565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613757565b611861565b60405161056191906141b5565b60405180910390f35b34801561057657600080fd5b5061057f6118a9565b005b34801561058d57600080fd5b506105a860048036038101906105a391906138c4565b611a01565b005b3480156105b657600080fd5b506105bf611be3565b6040516105cc91906141b5565b60405180910390f35b3480156105e157600080fd5b506105ea611be9565b6040516105f79190613d9d565b60405180910390f35b34801561060c57600080fd5b50610615611c13565b6040516106229190613ea1565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613917565b611ca5565b005b34801561066057600080fd5b50610669611d50565b6040516106769190614163565b60405180910390f35b34801561068b57600080fd5b50610694611d64565b6040516106a19190614163565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613884565b611d78565b6040516106de9190613e6b565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613757565b611e6c565b005b34801561071c57600080fd5b5061073760048036038101906107329190613884565b612075565b6040516107449190613e6b565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613844565b612093565b005b34801561078257600080fd5b5061079d60048036038101906107989190613757565b612218565b6040516107aa9190613e6b565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613844565b612238565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906137b1565b6123bd565b60405161081091906141b5565b60405180910390f35b34801561082557600080fd5b5061082e612444565b60405161083b91906141b5565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613757565b61244a565b005b60606003805461087c906144c5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a8906144c5565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061091361090c612611565b8484612619565b6001905092915050565b610925612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610a3f57508073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590614063565b60405180910390fd5b6000600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b610bde612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614023565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cba57600080fd5b505afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613784565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a43905308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190613784565b6040518363ffffffff1660e01b8152600401610dae929190613db8565b60206040518083038186803b158015610dc657600080fd5b505afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190613784565b905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f47578273ffffffffffffffffffffffffffffffffffffffff1663c9c65396308673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190613784565b6040518363ffffffff1660e01b8152600401610eee929190613db8565b602060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f409190613784565b9050610f4b565b8190505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613f03565b60405180910390fd5b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006110d98484846127e4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611124612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90614003565b60405180910390fd5b6111c1856111b0612611565b85846111bc91906143b3565b612619565b60019150509392505050565b6111d5612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614023565b60405180910390fd5b670de0b6b3a7640000620f424061127b9190614359565b8111801561128b57508060095414155b6112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613f23565b60405180910390fd5b806009819055507f479881bf41e329f328c21c2cbb11514b05a021cd33ea4e5a576ea6bc03874fd68160405161130091906141b5565b60405180910390a150565b60006012905090565b600b60189054906101000a900461ffff1681565b611330612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561144a57508073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090614063565b60405180910390fd5b6000600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116896115f4612611565b848460016000611602612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168491906142d2565b612619565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614023565b60405180910390fd5b606461175a6110c2565b600a60ff166117699190614359565b6117739190614328565b8111156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613fe3565b60405180910390fd5b8060085414156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613fc3565b60405180910390fd5b806008819055507f52c7826ed27bfb18ed3130f9306befb9572f2333e36e104330587d66b2f0d6c68160405161183091906141b5565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118b1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a09612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614023565b60405180910390fd5b808284611aa5919061429a565b611aaf919061429a565b61ffff166000108015611add5750610bb8818385611acd919061429a565b611ad7919061429a565b61ffff16105b611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613f83565b60405180910390fd5b82600b60146101000a81548161ffff021916908361ffff16021790555081600b60166101000a81548161ffff021916908361ffff16021790555080600b60186101000a81548161ffff021916908361ffff1602179055507f749c1e19e7730253c4c79e5dd6cf9f440f959897930d2d7afbb230284ec7711c600b60149054906101000a900461ffff16600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16604051611bd69392919061417e565b60405180910390a1505050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611c22906144c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4e906144c5565b8015611c9b5780601f10611c7057610100808354040283529160200191611c9b565b820191906000526020600020905b815481529060010190602001808311611c7e57829003601f168201915b5050505050905090565b611cad612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390614023565b60405180910390fd5b611d4d611d47611be9565b82612bba565b50565b600b60149054906101000a900461ffff1681565b600b60169054906101000a900461ffff1681565b60008060016000611d87612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614143565b60405180910390fd5b611e61611e4f612611565b858584611e5c91906143b3565b612619565b600191505092915050565b611e74612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611f7357508073ffffffffffffffffffffffffffffffffffffffff16611f5a611be9565b73ffffffffffffffffffffffffffffffffffffffff1614155b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990614063565b60405180910390fd5b6000600c6000611fc0611be9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061201a8161244a565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000612089612082612611565b84846127e4565b6001905092915050565b61209b612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614023565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906140c3565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b612240612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614023565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906140e3565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b612452612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890613f43565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614103565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613f63565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127d791906141b5565b60405180910390a3505050565b60008114156127fe576127f983836000612d8e565b612bb5565b600061280930611861565b90506000600854821015905080801561282f5750600760149054906101000a900460ff16155b80156128895750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128c85750612898611be9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561290757506128d7611be9565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612954576001600760146101000a81548160ff0219169083151502179055506129308261300d565b6129386130fe565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff16612afd576000600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a695750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612a685750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b5b15612a7357600190505b8015612afb576000612710600b60189054906101000a900461ffff16600b60169054906101000a900461ffff16600b60149054906101000a900461ffff16612abb919061429a565b612ac5919061429a565b61ffff1686612ad49190614359565b612ade9190614328565b90508085612aec91906143b3565b9450612af9873083612d8e565b505b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ba75760095483612b5b86611861565b612b6591906142d2565b1115612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d90614123565b60405180910390fd5b5b612bb2858585612d8e565b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190614043565b60405180910390fd5b612c3682600083613376565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb390613ee3565b60405180910390fd5b8181612cc891906143b3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d1c91906143b3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d8191906141b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906140a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590613ec3565b60405180910390fd5b612e79838383613376565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613fa3565b60405180910390fd5b8181612f0b91906143b3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9b91906142d2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fff91906141b5565b60405180910390a350505050565b6000600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16600b60149054906101000a900461ffff1661304c919061429a565b613056919061429a565b61ffff16600b60149054906101000a900461ffff1661ffff168361307a9190614359565b6130849190614328565b905060006002826130959190614328565b9050600081836130a591906143b3565b90506000479050600082866130ba91906143b3565b90506130c58161337b565b600082476130d391906143b3565b90506130f5848387846130e69190614359565b6130f09190614328565b6135d9565b50505050505050565b600560149054906101000a900460ff161561314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314590614083565b60405180910390fd5b6001600560146101000a81548160ff02191690831515021790555060004790506000600b60189054906101000a900461ffff16600b60169054906101000a900461ffff1661319c919061429a565b61ffff16600b60169054906101000a900461ffff1661ffff16836131c09190614359565b6131ca9190614328565b9050600081836131da91906143b3565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050509050816132f3577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040516132ea929190613de1565b60405180910390a15b80613354577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460405161334b929190613de1565b60405180910390a15b50505050506000600560146101000a81548160ff021916908315150217905550565b505050565b6000600267ffffffffffffffff811115613398576133976145b3565b5b6040519080825280602002602001820160405280156133c65781602001602082028036833780820191505090505b50905030816000815181106133de576133dd614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561348057600080fd5b505afa158015613494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b89190613784565b816001815181106134cc576134cb614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843060c84261358391906142d2565b6040518663ffffffff1660e01b81526004016135a39594939291906141d0565b600060405180830381600087803b1580156135bd57600080fd5b505af11580156135d1573d6000803e3d6000fd5b505050505050565b61360630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613652611be9565b60c84261365f91906142d2565b6040518863ffffffff1660e01b815260040161368096959493929190613e0a565b6060604051808303818588803b15801561369957600080fd5b505af11580156136ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d29190613944565b5050505050565b6000813590506136e881614b69565b92915050565b6000815190506136fd81614b69565b92915050565b60008135905061371281614b80565b92915050565b60008135905061372781614b97565b92915050565b60008135905061373c81614bae565b92915050565b60008151905061375181614bae565b92915050565b60006020828403121561376d5761376c6145e2565b5b600061377b848285016136d9565b91505092915050565b60006020828403121561379a576137996145e2565b5b60006137a8848285016136ee565b91505092915050565b600080604083850312156137c8576137c76145e2565b5b60006137d6858286016136d9565b92505060206137e7858286016136d9565b9150509250929050565b60008060006060848603121561380a576138096145e2565b5b6000613818868287016136d9565b9350506020613829868287016136d9565b925050604061383a8682870161372d565b9150509250925092565b6000806040838503121561385b5761385a6145e2565b5b6000613869858286016136d9565b925050602061387a85828601613703565b9150509250929050565b6000806040838503121561389b5761389a6145e2565b5b60006138a9858286016136d9565b92505060206138ba8582860161372d565b9150509250929050565b6000806000606084860312156138dd576138dc6145e2565b5b60006138eb86828701613718565b93505060206138fc86828701613718565b925050604061390d86828701613718565b9150509250925092565b60006020828403121561392d5761392c6145e2565b5b600061393b8482850161372d565b91505092915050565b60008060006060848603121561395d5761395c6145e2565b5b600061396b86828701613742565b935050602061397c86828701613742565b925050604061398d86828701613742565b9150509250925092565b60006139a383836139af565b60208301905092915050565b6139b8816143e7565b82525050565b6139c7816143e7565b82525050565b60006139d882614255565b6139e28185614278565b93506139ed83614245565b8060005b83811015613a1e578151613a058882613997565b9750613a108361426b565b9250506001810190506139f1565b5085935050505092915050565b613a34816143f9565b82525050565b613a438161444a565b82525050565b613a528161445c565b82525050565b6000613a6382614260565b613a6d8185614289565b9350613a7d818560208601614492565b613a86816145e7565b840191505092915050565b6000613a9e602383614289565b9150613aa9826145f8565b604082019050919050565b6000613ac1602283614289565b9150613acc82614647565b604082019050919050565b6000613ae4601883614289565b9150613aef82614696565b602082019050919050565b6000613b07602983614289565b9150613b12826146bf565b604082019050919050565b6000613b2a602683614289565b9150613b358261470e565b604082019050919050565b6000613b4d602283614289565b9150613b588261475d565b604082019050919050565b6000613b70603183614289565b9150613b7b826147ac565b604082019050919050565b6000613b93602683614289565b9150613b9e826147fb565b604082019050919050565b6000613bb6601383614289565b9150613bc18261484a565b602082019050919050565b6000613bd9602e83614289565b9150613be482614873565b604082019050919050565b6000613bfc602883614289565b9150613c07826148c2565b604082019050919050565b6000613c1f602083614289565b9150613c2a82614911565b602082019050919050565b6000613c42602183614289565b9150613c4d8261493a565b604082019050919050565b6000613c65602083614289565b9150613c7082614989565b602082019050919050565b6000613c88600e83614289565b9150613c93826149b2565b602082019050919050565b6000613cab602583614289565b9150613cb6826149db565b604082019050919050565b6000613cce602383614289565b9150613cd982614a2a565b604082019050919050565b6000613cf1601d83614289565b9150613cfc82614a79565b602082019050919050565b6000613d14602483614289565b9150613d1f82614aa2565b604082019050919050565b6000613d37600883614289565b9150613d4282614af1565b602082019050919050565b6000613d5a602583614289565b9150613d6582614b1a565b604082019050919050565b613d7981614405565b82525050565b613d8881614433565b82525050565b613d978161443d565b82525050565b6000602082019050613db260008301846139be565b92915050565b6000604082019050613dcd60008301856139be565b613dda60208301846139be565b9392505050565b6000604082019050613df660008301856139be565b613e036020830184613d7f565b9392505050565b600060c082019050613e1f60008301896139be565b613e2c6020830188613d7f565b613e396040830187613a49565b613e466060830186613a49565b613e5360808301856139be565b613e6060a0830184613d7f565b979650505050505050565b6000602082019050613e806000830184613a2b565b92915050565b6000602082019050613e9b6000830184613a3a565b92915050565b60006020820190508181036000830152613ebb8184613a58565b905092915050565b60006020820190508181036000830152613edc81613a91565b9050919050565b60006020820190508181036000830152613efc81613ab4565b9050919050565b60006020820190508181036000830152613f1c81613ad7565b9050919050565b60006020820190508181036000830152613f3c81613afa565b9050919050565b60006020820190508181036000830152613f5c81613b1d565b9050919050565b60006020820190508181036000830152613f7c81613b40565b9050919050565b60006020820190508181036000830152613f9c81613b63565b9050919050565b60006020820190508181036000830152613fbc81613b86565b9050919050565b60006020820190508181036000830152613fdc81613ba9565b9050919050565b60006020820190508181036000830152613ffc81613bcc565b9050919050565b6000602082019050818103600083015261401c81613bef565b9050919050565b6000602082019050818103600083015261403c81613c12565b9050919050565b6000602082019050818103600083015261405c81613c35565b9050919050565b6000602082019050818103600083015261407c81613c58565b9050919050565b6000602082019050818103600083015261409c81613c7b565b9050919050565b600060208201905081810360008301526140bc81613c9e565b9050919050565b600060208201905081810360008301526140dc81613cc1565b9050919050565b600060208201905081810360008301526140fc81613ce4565b9050919050565b6000602082019050818103600083015261411c81613d07565b9050919050565b6000602082019050818103600083015261413c81613d2a565b9050919050565b6000602082019050818103600083015261415c81613d4d565b9050919050565b60006020820190506141786000830184613d70565b92915050565b60006060820190506141936000830186613d70565b6141a06020830185613d70565b6141ad6040830184613d70565b949350505050565b60006020820190506141ca6000830184613d7f565b92915050565b600060a0820190506141e56000830188613d7f565b6141f26020830187613a49565b818103604083015261420481866139cd565b905061421360608301856139be565b6142206080830184613d7f565b9695505050505050565b600060208201905061423f6000830184613d8e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142a582614405565b91506142b083614405565b92508261ffff038211156142c7576142c66144f7565b5b828201905092915050565b60006142dd82614433565b91506142e883614433565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431d5761431c6144f7565b5b828201905092915050565b600061433382614433565b915061433e83614433565b92508261434e5761434d614526565b5b828204905092915050565b600061436482614433565b915061436f83614433565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a8576143a76144f7565b5b828202905092915050565b60006143be82614433565b91506143c983614433565b9250828210156143dc576143db6144f7565b5b828203905092915050565b60006143f282614413565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144558261446e565b9050919050565b600061446782614433565b9050919050565b600061447982614480565b9050919050565b600061448b82614413565b9050919050565b60005b838110156144b0578082015181840152602081019050614495565b838111156144bf576000848401525b50505050565b600060028204905060018216806144dd57607f821691505b602082108114156144f1576144f0614555565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061697220616464726573732073657420746f207a65726f0000000000000000600082015250565b7f4c696d697420697320746f6f20736d616c6c206f722073616d652076616c756560008201527f2070726f76696465640000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e65656420746f206265207374726963746c7920706f73697469766520616e6460008201527f20736d616c6c6572207468616e20333025000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53616d652076616c75652070726f766964656400000000000000000000000000600082015250565b7f416d6f756e742067726561746572207468616e206d617820616363756d756c6160008201527f7465642070657263656e74616765000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206f722073616d6520616464726573732070726f7669646564600082015250565b7f5265656e7472616e742063616c6c000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206c696d6974206578636c7573696f6e2076616c75652070726f766960008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206578636c7573696f6e2076616c75652070726f7669646564000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d61786c696d6974000000000000000000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614b72816143e7565b8114614b7d57600080fd5b50565b614b89816143f9565b8114614b9457600080fd5b50565b614ba081614405565b8114614bab57600080fd5b50565b614bb781614433565b8114614bc257600080fd5b5056fea2646970667358221220797a0955e63542528b3ac940eb65b91e1bbb6f0071e7383a0c9ec4f3449457e464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063a457c2d7116100a0578063cba0e9961161006f578063cba0e99614610776578063d9e2b9f6146107b3578063dd62ed3e146107dc578063e2f4560514610819578063f2fde38b146108445761020f565b8063a457c2d7146106aa578063a6f9dae1146106e7578063a9059cbb14610710578063b374e1c61461074d5761020f565b80638da5cb5b116100e75780638da5cb5b146105d557806395d89b411461060057806397b4e10a1461062b57806398118cb414610654578063a0be06f91461067f5761020f565b806370a082311461052d578063715018a61461056a57806373ece43514610581578063762bb282146105aa5761020f565b806327ea6f2b1161019b57806336b19cd71161016a57806336b19cd714610446578063395093511461047157806349bd5a5e146104ae5780636402511e146104d9578063664a1ad6146105025761020f565b806327ea6f2b1461039e578063313ce567146103c757806333abd028146103f2578063350829331461041d5761020f565b80631419841d116101d75780631419841d146102e25780631694505e1461030b57806318160ddd1461033657806323b872dd146103615761020f565b806306fdde0314610214578063095ea7b31461023f5780630996f4ea1461027c57806309c58ac1146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086d565b6040516102369190613ea1565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613884565b6108ff565b6040516102739190613e6b565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613757565b61091d565b005b3480156102b157600080fd5b506102cc60048036038101906102c79190613757565b610bb6565b6040516102d99190613e6b565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613757565b610bd6565b005b34801561031757600080fd5b5061032061109c565b60405161032d9190613e86565b60405180910390f35b34801561034257600080fd5b5061034b6110c2565b60405161035891906141b5565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906137f1565b6110cc565b6040516103959190613e6b565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613917565b6111cd565b005b3480156103d357600080fd5b506103dc61130b565b6040516103e9919061422a565b60405180910390f35b3480156103fe57600080fd5b50610407611314565b6040516104149190614163565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613757565b611328565b005b34801561045257600080fd5b5061045b6115c1565b6040516104689190613d9d565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613884565b6115e7565b6040516104a59190613e6b565b60405180910390f35b3480156104ba57600080fd5b506104c3611693565b6040516104d09190613d9d565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613917565b6116b9565b005b34801561050e57600080fd5b5061051761183b565b6040516105249190613d9d565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613757565b611861565b60405161056191906141b5565b60405180910390f35b34801561057657600080fd5b5061057f6118a9565b005b34801561058d57600080fd5b506105a860048036038101906105a391906138c4565b611a01565b005b3480156105b657600080fd5b506105bf611be3565b6040516105cc91906141b5565b60405180910390f35b3480156105e157600080fd5b506105ea611be9565b6040516105f79190613d9d565b60405180910390f35b34801561060c57600080fd5b50610615611c13565b6040516106229190613ea1565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613917565b611ca5565b005b34801561066057600080fd5b50610669611d50565b6040516106769190614163565b60405180910390f35b34801561068b57600080fd5b50610694611d64565b6040516106a19190614163565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613884565b611d78565b6040516106de9190613e6b565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613757565b611e6c565b005b34801561071c57600080fd5b5061073760048036038101906107329190613884565b612075565b6040516107449190613e6b565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613844565b612093565b005b34801561078257600080fd5b5061079d60048036038101906107989190613757565b612218565b6040516107aa9190613e6b565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613844565b612238565b005b3480156107e857600080fd5b5061080360048036038101906107fe91906137b1565b6123bd565b60405161081091906141b5565b60405180910390f35b34801561082557600080fd5b5061082e612444565b60405161083b91906141b5565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613757565b61244a565b005b60606003805461087c906144c5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a8906144c5565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061091361090c612611565b8484612619565b6001905092915050565b610925612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610a3f57508073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590614063565b60405180910390fd5b6000600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b610bde612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614023565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cba57600080fd5b505afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613784565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a43905308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190613784565b6040518363ffffffff1660e01b8152600401610dae929190613db8565b60206040518083038186803b158015610dc657600080fd5b505afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe9190613784565b905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f47578273ffffffffffffffffffffffffffffffffffffffff1663c9c65396308673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190613784565b6040518363ffffffff1660e01b8152600401610eee929190613db8565b602060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f409190613784565b9050610f4b565b8190505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613f03565b60405180910390fd5b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006110d98484846127e4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611124612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b90614003565b60405180910390fd5b6111c1856111b0612611565b85846111bc91906143b3565b612619565b60019150509392505050565b6111d5612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614023565b60405180910390fd5b670de0b6b3a7640000620f424061127b9190614359565b8111801561128b57508060095414155b6112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613f23565b60405180910390fd5b806009819055507f479881bf41e329f328c21c2cbb11514b05a021cd33ea4e5a576ea6bc03874fd68160405161130091906141b5565b60405180910390a150565b60006012905090565b600b60189054906101000a900461ffff1681565b611330612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561144a57508073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090614063565b60405180910390fd5b6000600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116896115f4612611565b848460016000611602612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168491906142d2565b612619565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614023565b60405180910390fd5b606461175a6110c2565b600a60ff166117699190614359565b6117739190614328565b8111156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613fe3565b60405180910390fd5b8060085414156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613fc3565b60405180910390fd5b806008819055507f52c7826ed27bfb18ed3130f9306befb9572f2333e36e104330587d66b2f0d6c68160405161183091906141b5565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118b1612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a09612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614023565b60405180910390fd5b808284611aa5919061429a565b611aaf919061429a565b61ffff166000108015611add5750610bb8818385611acd919061429a565b611ad7919061429a565b61ffff16105b611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613f83565b60405180910390fd5b82600b60146101000a81548161ffff021916908361ffff16021790555081600b60166101000a81548161ffff021916908361ffff16021790555080600b60186101000a81548161ffff021916908361ffff1602179055507f749c1e19e7730253c4c79e5dd6cf9f440f959897930d2d7afbb230284ec7711c600b60149054906101000a900461ffff16600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16604051611bd69392919061417e565b60405180910390a1505050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611c22906144c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4e906144c5565b8015611c9b5780601f10611c7057610100808354040283529160200191611c9b565b820191906000526020600020905b815481529060010190602001808311611c7e57829003601f168201915b5050505050905090565b611cad612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390614023565b60405180910390fd5b611d4d611d47611be9565b82612bba565b50565b600b60149054906101000a900461ffff1681565b600b60169054906101000a900461ffff1681565b60008060016000611d87612611565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614143565b60405180910390fd5b611e61611e4f612611565b858584611e5c91906143b3565b612619565b600191505092915050565b611e74612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611f7357508073ffffffffffffffffffffffffffffffffffffffff16611f5a611be9565b73ffffffffffffffffffffffffffffffffffffffff1614155b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990614063565b60405180910390fd5b6000600c6000611fc0611be9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061201a8161244a565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000612089612082612611565b84846127e4565b6001905092915050565b61209b612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614023565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906140c3565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b612240612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614023565b60405180910390fd5b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612359906140e3565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b612452612611565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890613f43565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614103565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613f63565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127d791906141b5565b60405180910390a3505050565b60008114156127fe576127f983836000612d8e565b612bb5565b600061280930611861565b90506000600854821015905080801561282f5750600760149054906101000a900460ff16155b80156128895750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128c85750612898611be9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561290757506128d7611be9565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612954576001600760146101000a81548160ff0219169083151502179055506129308261300d565b6129386130fe565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff16612afd576000600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a695750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612a685750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b5b15612a7357600190505b8015612afb576000612710600b60189054906101000a900461ffff16600b60169054906101000a900461ffff16600b60149054906101000a900461ffff16612abb919061429a565b612ac5919061429a565b61ffff1686612ad49190614359565b612ade9190614328565b90508085612aec91906143b3565b9450612af9873083612d8e565b505b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ba75760095483612b5b86611861565b612b6591906142d2565b1115612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d90614123565b60405180910390fd5b5b612bb2858585612d8e565b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190614043565b60405180910390fd5b612c3682600083613376565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb390613ee3565b60405180910390fd5b8181612cc891906143b3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d1c91906143b3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d8191906141b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906140a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590613ec3565b60405180910390fd5b612e79838383613376565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613fa3565b60405180910390fd5b8181612f0b91906143b3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9b91906142d2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fff91906141b5565b60405180910390a350505050565b6000600b60169054906101000a900461ffff16600b60189054906101000a900461ffff16600b60149054906101000a900461ffff1661304c919061429a565b613056919061429a565b61ffff16600b60149054906101000a900461ffff1661ffff168361307a9190614359565b6130849190614328565b905060006002826130959190614328565b9050600081836130a591906143b3565b90506000479050600082866130ba91906143b3565b90506130c58161337b565b600082476130d391906143b3565b90506130f5848387846130e69190614359565b6130f09190614328565b6135d9565b50505050505050565b600560149054906101000a900460ff161561314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314590614083565b60405180910390fd5b6001600560146101000a81548160ff02191690831515021790555060004790506000600b60189054906101000a900461ffff16600b60169054906101000a900461ffff1661319c919061429a565b61ffff16600b60169054906101000a900461ffff1661ffff16836131c09190614359565b6131ca9190614328565b9050600081836131da91906143b3565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050509050816132f3577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040516132ea929190613de1565b60405180910390a15b80613354577f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460405161334b929190613de1565b60405180910390a15b50505050506000600560146101000a81548160ff021916908315150217905550565b505050565b6000600267ffffffffffffffff811115613398576133976145b3565b5b6040519080825280602002602001820160405280156133c65781602001602082028036833780820191505090505b50905030816000815181106133de576133dd614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561348057600080fd5b505afa158015613494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b89190613784565b816001815181106134cc576134cb614584565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843060c84261358391906142d2565b6040518663ffffffff1660e01b81526004016135a39594939291906141d0565b600060405180830381600087803b1580156135bd57600080fd5b505af11580156135d1573d6000803e3d6000fd5b505050505050565b61360630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612619565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613652611be9565b60c84261365f91906142d2565b6040518863ffffffff1660e01b815260040161368096959493929190613e0a565b6060604051808303818588803b15801561369957600080fd5b505af11580156136ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d29190613944565b5050505050565b6000813590506136e881614b69565b92915050565b6000815190506136fd81614b69565b92915050565b60008135905061371281614b80565b92915050565b60008135905061372781614b97565b92915050565b60008135905061373c81614bae565b92915050565b60008151905061375181614bae565b92915050565b60006020828403121561376d5761376c6145e2565b5b600061377b848285016136d9565b91505092915050565b60006020828403121561379a576137996145e2565b5b60006137a8848285016136ee565b91505092915050565b600080604083850312156137c8576137c76145e2565b5b60006137d6858286016136d9565b92505060206137e7858286016136d9565b9150509250929050565b60008060006060848603121561380a576138096145e2565b5b6000613818868287016136d9565b9350506020613829868287016136d9565b925050604061383a8682870161372d565b9150509250925092565b6000806040838503121561385b5761385a6145e2565b5b6000613869858286016136d9565b925050602061387a85828601613703565b9150509250929050565b6000806040838503121561389b5761389a6145e2565b5b60006138a9858286016136d9565b92505060206138ba8582860161372d565b9150509250929050565b6000806000606084860312156138dd576138dc6145e2565b5b60006138eb86828701613718565b93505060206138fc86828701613718565b925050604061390d86828701613718565b9150509250925092565b60006020828403121561392d5761392c6145e2565b5b600061393b8482850161372d565b91505092915050565b60008060006060848603121561395d5761395c6145e2565b5b600061396b86828701613742565b935050602061397c86828701613742565b925050604061398d86828701613742565b9150509250925092565b60006139a383836139af565b60208301905092915050565b6139b8816143e7565b82525050565b6139c7816143e7565b82525050565b60006139d882614255565b6139e28185614278565b93506139ed83614245565b8060005b83811015613a1e578151613a058882613997565b9750613a108361426b565b9250506001810190506139f1565b5085935050505092915050565b613a34816143f9565b82525050565b613a438161444a565b82525050565b613a528161445c565b82525050565b6000613a6382614260565b613a6d8185614289565b9350613a7d818560208601614492565b613a86816145e7565b840191505092915050565b6000613a9e602383614289565b9150613aa9826145f8565b604082019050919050565b6000613ac1602283614289565b9150613acc82614647565b604082019050919050565b6000613ae4601883614289565b9150613aef82614696565b602082019050919050565b6000613b07602983614289565b9150613b12826146bf565b604082019050919050565b6000613b2a602683614289565b9150613b358261470e565b604082019050919050565b6000613b4d602283614289565b9150613b588261475d565b604082019050919050565b6000613b70603183614289565b9150613b7b826147ac565b604082019050919050565b6000613b93602683614289565b9150613b9e826147fb565b604082019050919050565b6000613bb6601383614289565b9150613bc18261484a565b602082019050919050565b6000613bd9602e83614289565b9150613be482614873565b604082019050919050565b6000613bfc602883614289565b9150613c07826148c2565b604082019050919050565b6000613c1f602083614289565b9150613c2a82614911565b602082019050919050565b6000613c42602183614289565b9150613c4d8261493a565b604082019050919050565b6000613c65602083614289565b9150613c7082614989565b602082019050919050565b6000613c88600e83614289565b9150613c93826149b2565b602082019050919050565b6000613cab602583614289565b9150613cb6826149db565b604082019050919050565b6000613cce602383614289565b9150613cd982614a2a565b604082019050919050565b6000613cf1601d83614289565b9150613cfc82614a79565b602082019050919050565b6000613d14602483614289565b9150613d1f82614aa2565b604082019050919050565b6000613d37600883614289565b9150613d4282614af1565b602082019050919050565b6000613d5a602583614289565b9150613d6582614b1a565b604082019050919050565b613d7981614405565b82525050565b613d8881614433565b82525050565b613d978161443d565b82525050565b6000602082019050613db260008301846139be565b92915050565b6000604082019050613dcd60008301856139be565b613dda60208301846139be565b9392505050565b6000604082019050613df660008301856139be565b613e036020830184613d7f565b9392505050565b600060c082019050613e1f60008301896139be565b613e2c6020830188613d7f565b613e396040830187613a49565b613e466060830186613a49565b613e5360808301856139be565b613e6060a0830184613d7f565b979650505050505050565b6000602082019050613e806000830184613a2b565b92915050565b6000602082019050613e9b6000830184613a3a565b92915050565b60006020820190508181036000830152613ebb8184613a58565b905092915050565b60006020820190508181036000830152613edc81613a91565b9050919050565b60006020820190508181036000830152613efc81613ab4565b9050919050565b60006020820190508181036000830152613f1c81613ad7565b9050919050565b60006020820190508181036000830152613f3c81613afa565b9050919050565b60006020820190508181036000830152613f5c81613b1d565b9050919050565b60006020820190508181036000830152613f7c81613b40565b9050919050565b60006020820190508181036000830152613f9c81613b63565b9050919050565b60006020820190508181036000830152613fbc81613b86565b9050919050565b60006020820190508181036000830152613fdc81613ba9565b9050919050565b60006020820190508181036000830152613ffc81613bcc565b9050919050565b6000602082019050818103600083015261401c81613bef565b9050919050565b6000602082019050818103600083015261403c81613c12565b9050919050565b6000602082019050818103600083015261405c81613c35565b9050919050565b6000602082019050818103600083015261407c81613c58565b9050919050565b6000602082019050818103600083015261409c81613c7b565b9050919050565b600060208201905081810360008301526140bc81613c9e565b9050919050565b600060208201905081810360008301526140dc81613cc1565b9050919050565b600060208201905081810360008301526140fc81613ce4565b9050919050565b6000602082019050818103600083015261411c81613d07565b9050919050565b6000602082019050818103600083015261413c81613d2a565b9050919050565b6000602082019050818103600083015261415c81613d4d565b9050919050565b60006020820190506141786000830184613d70565b92915050565b60006060820190506141936000830186613d70565b6141a06020830185613d70565b6141ad6040830184613d70565b949350505050565b60006020820190506141ca6000830184613d7f565b92915050565b600060a0820190506141e56000830188613d7f565b6141f26020830187613a49565b818103604083015261420481866139cd565b905061421360608301856139be565b6142206080830184613d7f565b9695505050505050565b600060208201905061423f6000830184613d8e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142a582614405565b91506142b083614405565b92508261ffff038211156142c7576142c66144f7565b5b828201905092915050565b60006142dd82614433565b91506142e883614433565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561431d5761431c6144f7565b5b828201905092915050565b600061433382614433565b915061433e83614433565b92508261434e5761434d614526565b5b828204905092915050565b600061436482614433565b915061436f83614433565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a8576143a76144f7565b5b828202905092915050565b60006143be82614433565b91506143c983614433565b9250828210156143dc576143db6144f7565b5b828203905092915050565b60006143f282614413565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144558261446e565b9050919050565b600061446782614433565b9050919050565b600061447982614480565b9050919050565b600061448b82614413565b9050919050565b60005b838110156144b0578082015181840152602081019050614495565b838111156144bf576000848401525b50505050565b600060028204905060018216806144dd57607f821691505b602082108114156144f1576144f0614555565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061697220616464726573732073657420746f207a65726f0000000000000000600082015250565b7f4c696d697420697320746f6f20736d616c6c206f722073616d652076616c756560008201527f2070726f76696465640000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e65656420746f206265207374726963746c7920706f73697469766520616e6460008201527f20736d616c6c6572207468616e20333025000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53616d652076616c75652070726f766964656400000000000000000000000000600082015250565b7f416d6f756e742067726561746572207468616e206d617820616363756d756c6160008201527f7465642070657263656e74616765000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206f722073616d6520616464726573732070726f7669646564600082015250565b7f5265656e7472616e742063616c6c000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206c696d6974206578636c7573696f6e2076616c75652070726f766960008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f53616d65206578636c7573696f6e2076616c75652070726f7669646564000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d61786c696d6974000000000000000000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614b72816143e7565b8114614b7d57600080fd5b50565b614b89816143f9565b8114614b9457600080fd5b50565b614ba081614405565b8114614bab57600080fd5b50565b614bb781614433565b8114614bc257600080fd5b5056fea2646970667358221220797a0955e63542528b3ac940eb65b91e1bbb6f0071e7383a0c9ec4f3449457e464736f6c63430008070033

Deployed Bytecode Sourcemap

23923:8773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8428:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30863:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24674:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25859:916;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23981:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7381:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9079:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31998:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7223:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24587:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30564:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24355:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9910:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24029:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30198:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24433:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7552:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15557:148;;;;;;;;;;;;;:::i;:::-;;32268:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24294:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15347:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6480:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26785:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24512:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24551:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10628:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31257:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7892:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31762:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24624:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31547:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8130:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24227:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15711:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6261:100;6315:13;6348:5;6341:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:100;:::o;8428:169::-;8511:4;8528:39;8537:12;:10;:12::i;:::-;8551:7;8560:6;8528:8;:39::i;:::-;8585:4;8578:11;;8428:169;;;;:::o;30863:286::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30963:1:::1;30943:22;;:8;:22;;;;:48;;;;;30983:8;30969:22;;:10;;;;;;;;;;;:22;;;;30943:48;30935:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;31064:5;31039:10;:22;31050:10;;;;;;;;;;;31039:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31093:8;31080:10;;:21;;;;;;;;;;;;;;;;;;31137:4;31112:10;:22;31123:10;;;;;;;;;;;31112:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30863:286:::0;:::o;24674:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;25859:916::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25943:35:::1;26000:16;25943:74;;26028:25;26074:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26028:73;;26155:20;26178:7;:15;;;26202:4;26209:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26178:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26155:78;;26246:22;26307:1:::0;26283:26:::1;;:12;:26;;;26279:278;;;26380:7;:18;;;26407:4;26414:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26380:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26363:75;;26279:278;;;26533:12;26516:29;;26279:278;26601:1;26575:28;;:14;:28;;;;26567:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26661:16;26643:15;;:34;;;;;;;;;;;;;;;;;;26704:14;26688:13;;:30;;;;;;;;;;;;;;;;;;26763:4;26729:15;:31;26745:14;26729:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;25932:843;;;;25859:916:::0;:::o;23981:41::-;;;;;;;;;;;;;:::o;7381:108::-;7442:7;7469:12;;7462:19;;7381:108;:::o;9079:422::-;9185:4;9202:36;9212:6;9220:9;9231:6;9202:9;:36::i;:::-;9251:24;9278:11;:19;9290:6;9278:19;;;;;;;;;;;;;;;:33;9298:12;:10;:12::i;:::-;9278:33;;;;;;;;;;;;;;;;9251:60;;9350:6;9330:16;:26;;9322:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9412:57;9421:6;9429:12;:10;:12::i;:::-;9462:6;9443:16;:25;;;;:::i;:::-;9412:8;:57::i;:::-;9489:4;9482:11;;;9079:422;;;;;:::o;31998:262::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24108:6:::1;32080:7;:24;;;;:::i;:::-;32071:6;:33;:59;;;;;32124:6;32108:12;;:22;;32071:59;32063:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;32212:6;32197:12;:21;;;;32236:16;32245:6;32236:16;;;;;;:::i;:::-;;;;;;;;31998:262:::0;:::o;7223:93::-;7281:5;7306:2;7299:9;;7223:93;:::o;24587:28::-;;;;;;;;;;;;;:::o;30564:291::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30665:1:::1;30645:22;;:8;:22;;;;:49;;;;;30686:8;30671:23;;:11;;;;;;;;;;;:23;;;;30645:49;30637:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;30768:5;30742:10;:23;30753:11;;;;;;;;;;;30742:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;30798:8;30784:11;;:22;;;;;;;;;;;;;;;;;;30843:4;30817:10;:23;30828:11;;;;;;;;;;;30817:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30564:291:::0;:::o;24355:71::-;;;;;;;;;;;;;:::o;9910:215::-;9998:4;10015:80;10024:12;:10;:12::i;:::-;10038:7;10084:10;10047:11;:25;10059:12;:10;:12::i;:::-;10047:25;;;;;;;;;;;;;;;:34;10073:7;10047:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10015:8;:80::i;:::-;10113:4;10106:11;;9910:215;;;;:::o;24029:28::-;;;;;;;;;;;;;:::o;30198:358::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30344:3:::1;30327:13;:11;:13::i;:::-;24182:2;30289:51;;;;;;:::i;:::-;30288:59;;;;:::i;:::-;30278:6;:69;;30270:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;30439:6;30417:18;;:28;;30409:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30501:6;30480:18;:27;;;;30525:23;30541:6;30525:23;;;;;;:::i;:::-;;;;;;;;30198:358:::0;:::o;24433:70::-;;;;;;;;;;;;;:::o;7552:127::-;7626:7;7653:9;:18;7663:7;7653:18;;;;;;;;;;;;;;;;7646:25;;7552:127;;;:::o;15557:148::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15664:1:::1;15627:40;;15648:6;;;;;;;;;;;15627:40;;;;;;;;;;;;15695:1;15678:6;;:19;;;;;;;;;;;;;;;;;;15557:148::o:0;32268:425::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32413:11:::1;32398:12;32386:9;:24;;;;:::i;:::-;:38;;;;:::i;:::-;32382:42;;:1;:42;:91;;;;;32469:4;32456:11;32441:12;32429:9;:24;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;;32382:91;32373:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32553:9;32538:12;;:24;;;;;;;;;;;;;;;;;;32584:12;32573:8;;:23;;;;;;;;;;;;;;;;;;32617:11;32607:7;;:21;;;;;;;;;;;;;;;;;;32646:39;32653:12;;;;;;;;;;;32667:8;;;;;;;;;;;32677:7;;;;;;;;;;;32646:39;;;;;;;;:::i;:::-;;;;;;;;32268:425:::0;;;:::o;24294:54::-;;;;:::o;15347:79::-;15385:7;15412:6;;;;;;;;;;;15405:13;;15347:79;:::o;6480:104::-;6536:13;6569:7;6562:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6480:104;:::o;26785:98::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26852:23:::1;26858:7;:5;:7::i;:::-;26867;26852:5;:23::i;:::-;26785:98:::0;:::o;24512:32::-;;;;;;;;;;;;;:::o;24551:29::-;;;;;;;;;;;;;:::o;10628:377::-;10721:4;10738:24;10765:11;:25;10777:12;:10;:12::i;:::-;10765:25;;;;;;;;;;;;;;;:34;10791:7;10765:34;;;;;;;;;;;;;;;;10738:61;;10838:15;10818:16;:35;;10810:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10906:67;10915:12;:10;:12::i;:::-;10929:7;10957:15;10938:16;:34;;;;:::i;:::-;10906:8;:67::i;:::-;10993:4;10986:11;;;10628:377;;;;:::o;31257:282::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31355:1:::1;31335:22;;:8;:22;;;;:45;;;;;31372:8;31361:19;;:7;:5;:7::i;:::-;:19;;;;31335:45;31327:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;31450:5;31428:10;:19;31439:7;:5;:7::i;:::-;31428:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31466;31484:8;31466:17;:27::i;:::-;31527:4;31504:10;:20;31515:8;31504:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31257:282:::0;:::o;7892:175::-;7978:4;7995:42;8005:12;:10;:12::i;:::-;8019:9;8030:6;7995:9;:42::i;:::-;8055:4;8048:11;;7892:175;;;;:::o;31762:228::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31891:6:::1;31862:35;;:15;:25;31878:8;31862:25;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;31854:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;31976:6;31948:15;:25;31964:8;31948:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31762:228:::0;;:::o;24624:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;31547:207::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31666:6:::1;31642:30;;:10;:20;31653:8;31642:20;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;31634:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;31740:6;31717:10;:20;31728:8;31717:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31547:207:::0;;:::o;8130:151::-;8219:7;8246:11;:18;8258:5;8246:18;;;;;;;;;;;;;;;:27;8265:7;8246:27;;;;;;;;;;;;;;;;8239:34;;8130:151;;;;:::o;24227:60::-;;;;:::o;15711:244::-;15482:12;:10;:12::i;:::-;15472:22;;:6;;;;;;;;;;;:22;;;15464:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15820:1:::1;15800:22;;:8;:22;;;;15792:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15910:8;15881:38;;15902:6;;;;;;;;;;;15881:38;;;;;;;;;;;;15939:8;15930:6;;:17;;;;;;;;;;;;;;;;;;15711:244:::0;:::o;489:98::-;542:7;569:10;562:17;;489:98;:::o;13984:346::-;14103:1;14086:19;;:5;:19;;;;14078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14184:1;14165:21;;:7;:21;;;;14157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14268:6;14238:11;:18;14250:5;14238:18;;;;;;;;;;;;;;;:27;14257:7;14238:27;;;;;;;;;;;;;;;:36;;;;14306:7;14290:32;;14299:5;14290:32;;;14315:6;14290:32;;;;;;:::i;:::-;;;;;;;;13984:346;;;:::o;26891:1288::-;27000:1;26990:6;:11;26987:92;;;27018:28;27034:4;27040:2;27044:1;27018:15;:28::i;:::-;27061:7;;26987:92;27091:28;27122:24;27140:4;27122:9;:24::i;:::-;27091:55;;27157:12;27196:18;;27172:20;:42;;27157:57;;27242:7;:33;;;;;27267:8;;;;;;;;;;;27266:9;27242:33;:71;;;;;27300:13;;;;;;;;;;;27292:21;;:4;:21;;;;27242:71;:103;;;;;27338:7;:5;:7::i;:::-;27330:15;;:4;:15;;;;27242:103;:133;;;;;27368:7;:5;:7::i;:::-;27362:13;;:2;:13;;;;27242:133;27225:330;;;27413:4;27402:8;;:15;;;;;;;;;;;;;;;;;;27446:36;27461:20;27446:14;:36::i;:::-;27497:15;:13;:15::i;:::-;27538:5;27527:8;;:16;;;;;;;;;;;;;;;;;;27225:330;27571:8;;;;;;;;;;;27567:436;;27603:12;27644:10;:16;27655:4;27644:16;;;;;;;;;;;;;;;;;;;;;;;;;27643:17;:67;;;;;27673:13;;;;;;;;;;;27665:21;;:4;:21;;;:44;;;;27696:13;;;;;;;;;;;27690:19;;:2;:19;;;27665:44;27643:67;27640:120;;;27740:4;27730:14;;27640:120;27780:7;27776:216;;;27807:12;27869:5;27858:7;;;;;;;;;;;27847:8;;;;;;;;;;;27832:12;;;;;;;;;;;:23;;;;:::i;:::-;:33;;;;:::i;:::-;27822:44;;:6;:44;;;;:::i;:::-;:52;;;;:::i;:::-;27807:67;;27911:4;27902:6;:13;;;;:::i;:::-;27893:22;;27934:42;27950:4;27964;27971;27934:15;:42::i;:::-;27788:204;27776:216;27580:423;27567:436;28018:15;:19;28034:2;28018:19;;;;;;;;;;;;;;;;;;;;;;;;;28013:113;;28089:12;;28078:6;28062:13;28072:2;28062:9;:13::i;:::-;:22;;;;:::i;:::-;28061:40;;28053:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:113;28136:33;28152:4;28158:2;28162:6;28136:15;:33::i;:::-;26972:1207;;26891:1288;;;;:::o;13052:494::-;13155:1;13136:21;;:7;:21;;;;13128:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13208:49;13229:7;13246:1;13250:6;13208:20;:49::i;:::-;13270:22;13295:9;:18;13305:7;13295:18;;;;;;;;;;;;;;;;13270:43;;13350:6;13332:14;:24;;13324:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13444:6;13427:14;:23;;;;:::i;:::-;13406:9;:18;13416:7;13406:18;;;;;;;;;;;;;;;:44;;;;13477:6;13461:12;;:22;;;;;;;:::i;:::-;;;;;;;;13527:1;13501:37;;13510:7;13501:37;;;13531:6;13501:37;;;;;;:::i;:::-;;;;;;;;13117:429;13052:494;;:::o;11495:604::-;11619:1;11601:20;;:6;:20;;;;11593:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11703:1;11682:23;;:9;:23;;;;11674:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11758:47;11779:6;11787:9;11798:6;11758:20;:47::i;:::-;11818:21;11842:9;:17;11852:6;11842:17;;;;;;;;;;;;;;;;11818:41;;11895:6;11878:13;:23;;11870:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11991:6;11975:13;:22;;;;:::i;:::-;11955:9;:17;11965:6;11955:17;;;;;;;;;;;;;;;:42;;;;12032:6;12008:9;:20;12018:9;12008:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12073:9;12056:35;;12065:6;12056:35;;;12084:6;12056:35;;;;;;:::i;:::-;;;;;;;;11582:517;11495:604;;;:::o;28187:576::-;28260:14;28343:8;;;;;;;;;;;28333:7;;;;;;;;;;;28318:12;;;;;;;;;;;:22;;;;:::i;:::-;:33;;;;:::i;:::-;28277:75;;28301:12;;;;;;;;;;;28278:35;;:20;:35;;;;:::i;:::-;28277:75;;;;:::i;:::-;28260:92;;28363:12;28387:1;28378:6;:10;;;;:::i;:::-;28363:25;;28399:17;28428:4;28419:6;:13;;;;:::i;:::-;28399:33;;28453:22;28478:21;28453:46;;28510:25;28559:9;28538:20;:30;;;;:::i;:::-;28510:58;;28579:35;28596:17;28579:16;:35::i;:::-;28625:18;28670:14;28646:21;:38;;;;:::i;:::-;28625:59;;28695:60;28708:9;28737:17;28731:4;28720:10;:15;;;;:::i;:::-;28719:35;;;;:::i;:::-;28695:12;:60::i;:::-;28249:514;;;;;;28187:576;:::o;29630:558::-;355:6;;;;;;;;;;;354:7;346:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;400:4;391:6;;:13;;;;;;;;;;;;;;;;;;29687:18:::1;29708:21;29687:42;;29740:16;29797:7;;;;;;;;;;;29786:8;;;;;;;;;;;:18;;;;:::i;:::-;29759:46;;29773:8;;;;;;;;;;;29760:21;;:10;:21;;;;:::i;:::-;29759:46;;;;:::i;:::-;29740:65;;29816:15;29848:8;29835:10;:21;;;;:::i;:::-;29816:40;;29867:17;29895:11;;;;;;;;;;;29887:25;;:35;29913:8;29887:35;;;;;;;;;;;;;;;;;;;;;;;29867:55;;29933:16;29960:10;;;;;;;;;;;29952:24;;:33;29977:7;29952:33;;;;;;;;;;;;;;;;;;;;;;;29933:52;;30003:12;29998:88;;30037:37;30052:11;;;;;;;;;;;30065:8;30037:37;;;;;;;:::i;:::-;;;;;;;;29998:88;30101:11;30096:85;;30134:35;30149:10;;;;;;;;;;;30161:7;30134:35;;;;;;;:::i;:::-;;;;;;;;30096:85;29676:512;;;;;436:5:::0;427:6;;:14;;;;;;;;;;;;;;;;;;29630:558::o;14933:92::-;;;;:::o;28771:477::-;28837:21;28875:1;28861:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28837:40;;28906:4;28888;28893:1;28888:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28932:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28922:4;28927:1;28922:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28965:62;28982:4;28997:15;;;;;;;;;;;29015:11;28965:8;:62::i;:::-;29038:15;;;;;;;;;;;:66;;;29119:11;29145:1;29161:4;29188;29226:3;29208:15;:21;;;;:::i;:::-;29038:202;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28826:422;28771:477;:::o;29256:366::-;29337:62;29354:4;29369:15;;;;;;;;;;;29387:11;29337:8;:62::i;:::-;29410:15;;;;;;;;;;;:31;;;29449:9;29482:4;29502:11;29528:1;29544;29560:7;:5;:7::i;:::-;29600:3;29582:15;:21;;;;:::i;:::-;29410:204;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29256:366;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;485:5;523:6;510:20;501:29;;539:32;565:5;539:32;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:119;;;2802:79;;:::i;:::-;2764:119;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2674:468;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:119;;;3279:79;;:::i;:::-;3241:119;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3148:474;;;;;:::o;3628:613::-;3702:6;3710;3718;3767:2;3755:9;3746:7;3742:23;3738:32;3735:119;;;3773:79;;:::i;:::-;3735:119;3893:1;3918:52;3962:7;3953:6;3942:9;3938:22;3918:52;:::i;:::-;3908:62;;3864:116;4019:2;4045:52;4089:7;4080:6;4069:9;4065:22;4045:52;:::i;:::-;4035:62;;3990:117;4146:2;4172:52;4216:7;4207:6;4196:9;4192:22;4172:52;:::i;:::-;4162:62;;4117:117;3628:613;;;;;:::o;4247:329::-;4306:6;4355:2;4343:9;4334:7;4330:23;4326:32;4323:119;;;4361:79;;:::i;:::-;4323:119;4481:1;4506:53;4551:7;4542:6;4531:9;4527:22;4506:53;:::i;:::-;4496:63;;4452:117;4247:329;;;;:::o;4582:663::-;4670:6;4678;4686;4735:2;4723:9;4714:7;4710:23;4706:32;4703:119;;;4741:79;;:::i;:::-;4703:119;4861:1;4886:64;4942:7;4933:6;4922:9;4918:22;4886:64;:::i;:::-;4876:74;;4832:128;4999:2;5025:64;5081:7;5072:6;5061:9;5057:22;5025:64;:::i;:::-;5015:74;;4970:129;5138:2;5164:64;5220:7;5211:6;5200:9;5196:22;5164:64;:::i;:::-;5154:74;;5109:129;4582:663;;;;;:::o;5251:179::-;5320:10;5341:46;5383:3;5375:6;5341:46;:::i;:::-;5419:4;5414:3;5410:14;5396:28;;5251:179;;;;:::o;5436:108::-;5513:24;5531:5;5513:24;:::i;:::-;5508:3;5501:37;5436:108;;:::o;5550:118::-;5637:24;5655:5;5637:24;:::i;:::-;5632:3;5625:37;5550:118;;:::o;5704:732::-;5823:3;5852:54;5900:5;5852:54;:::i;:::-;5922:86;6001:6;5996:3;5922:86;:::i;:::-;5915:93;;6032:56;6082:5;6032:56;:::i;:::-;6111:7;6142:1;6127:284;6152:6;6149:1;6146:13;6127:284;;;6228:6;6222:13;6255:63;6314:3;6299:13;6255:63;:::i;:::-;6248:70;;6341:60;6394:6;6341:60;:::i;:::-;6331:70;;6187:224;6174:1;6171;6167:9;6162:14;;6127:284;;;6131:14;6427:3;6420:10;;5828:608;;;5704:732;;;;:::o;6442:109::-;6523:21;6538:5;6523:21;:::i;:::-;6518:3;6511:34;6442:109;;:::o;6557:185::-;6671:64;6729:5;6671:64;:::i;:::-;6666:3;6659:77;6557:185;;:::o;6748:147::-;6843:45;6882:5;6843:45;:::i;:::-;6838:3;6831:58;6748:147;;:::o;6901:364::-;6989:3;7017:39;7050:5;7017:39;:::i;:::-;7072:71;7136:6;7131:3;7072:71;:::i;:::-;7065:78;;7152:52;7197:6;7192:3;7185:4;7178:5;7174:16;7152:52;:::i;:::-;7229:29;7251:6;7229:29;:::i;:::-;7224:3;7220:39;7213:46;;6993:272;6901:364;;;;:::o;7271:366::-;7413:3;7434:67;7498:2;7493:3;7434:67;:::i;:::-;7427:74;;7510:93;7599:3;7510:93;:::i;:::-;7628:2;7623:3;7619:12;7612:19;;7271:366;;;:::o;7643:::-;7785:3;7806:67;7870:2;7865:3;7806:67;:::i;:::-;7799:74;;7882:93;7971:3;7882:93;:::i;:::-;8000:2;7995:3;7991:12;7984:19;;7643:366;;;:::o;8015:::-;8157:3;8178:67;8242:2;8237:3;8178:67;:::i;:::-;8171:74;;8254:93;8343:3;8254:93;:::i;:::-;8372:2;8367:3;8363:12;8356:19;;8015:366;;;:::o;8387:::-;8529:3;8550:67;8614:2;8609:3;8550:67;:::i;:::-;8543:74;;8626:93;8715:3;8626:93;:::i;:::-;8744:2;8739:3;8735:12;8728:19;;8387:366;;;:::o;8759:::-;8901:3;8922:67;8986:2;8981:3;8922:67;:::i;:::-;8915:74;;8998:93;9087:3;8998:93;:::i;:::-;9116:2;9111:3;9107:12;9100:19;;8759:366;;;:::o;9131:::-;9273:3;9294:67;9358:2;9353:3;9294:67;:::i;:::-;9287:74;;9370:93;9459:3;9370:93;:::i;:::-;9488:2;9483:3;9479:12;9472:19;;9131:366;;;:::o;9503:::-;9645:3;9666:67;9730:2;9725:3;9666:67;:::i;:::-;9659:74;;9742:93;9831:3;9742:93;:::i;:::-;9860:2;9855:3;9851:12;9844:19;;9503:366;;;:::o;9875:::-;10017:3;10038:67;10102:2;10097:3;10038:67;:::i;:::-;10031:74;;10114:93;10203:3;10114:93;:::i;:::-;10232:2;10227:3;10223:12;10216:19;;9875:366;;;:::o;10247:::-;10389:3;10410:67;10474:2;10469:3;10410:67;:::i;:::-;10403:74;;10486:93;10575:3;10486:93;:::i;:::-;10604:2;10599:3;10595:12;10588:19;;10247:366;;;:::o;10619:::-;10761:3;10782:67;10846:2;10841:3;10782:67;:::i;:::-;10775:74;;10858:93;10947:3;10858:93;:::i;:::-;10976:2;10971:3;10967:12;10960:19;;10619:366;;;:::o;10991:::-;11133:3;11154:67;11218:2;11213:3;11154:67;:::i;:::-;11147:74;;11230:93;11319:3;11230:93;:::i;:::-;11348:2;11343:3;11339:12;11332:19;;10991:366;;;:::o;11363:::-;11505:3;11526:67;11590:2;11585:3;11526:67;:::i;:::-;11519:74;;11602:93;11691:3;11602:93;:::i;:::-;11720:2;11715:3;11711:12;11704:19;;11363:366;;;:::o;11735:::-;11877:3;11898:67;11962:2;11957:3;11898:67;:::i;:::-;11891:74;;11974:93;12063:3;11974:93;:::i;:::-;12092:2;12087:3;12083:12;12076:19;;11735:366;;;:::o;12107:::-;12249:3;12270:67;12334:2;12329:3;12270:67;:::i;:::-;12263:74;;12346:93;12435:3;12346:93;:::i;:::-;12464:2;12459:3;12455:12;12448:19;;12107:366;;;:::o;12479:::-;12621:3;12642:67;12706:2;12701:3;12642:67;:::i;:::-;12635:74;;12718:93;12807:3;12718:93;:::i;:::-;12836:2;12831:3;12827:12;12820:19;;12479:366;;;:::o;12851:::-;12993:3;13014:67;13078:2;13073:3;13014:67;:::i;:::-;13007:74;;13090:93;13179:3;13090:93;:::i;:::-;13208:2;13203:3;13199:12;13192:19;;12851:366;;;:::o;13223:::-;13365:3;13386:67;13450:2;13445:3;13386:67;:::i;:::-;13379:74;;13462:93;13551:3;13462:93;:::i;:::-;13580:2;13575:3;13571:12;13564:19;;13223:366;;;:::o;13595:::-;13737:3;13758:67;13822:2;13817:3;13758:67;:::i;:::-;13751:74;;13834:93;13923:3;13834:93;:::i;:::-;13952:2;13947:3;13943:12;13936:19;;13595:366;;;:::o;13967:::-;14109:3;14130:67;14194:2;14189:3;14130:67;:::i;:::-;14123:74;;14206:93;14295:3;14206:93;:::i;:::-;14324:2;14319:3;14315:12;14308:19;;13967:366;;;:::o;14339:365::-;14481:3;14502:66;14566:1;14561:3;14502:66;:::i;:::-;14495:73;;14577:93;14666:3;14577:93;:::i;:::-;14695:2;14690:3;14686:12;14679:19;;14339:365;;;:::o;14710:366::-;14852:3;14873:67;14937:2;14932:3;14873:67;:::i;:::-;14866:74;;14949:93;15038:3;14949:93;:::i;:::-;15067:2;15062:3;15058:12;15051:19;;14710:366;;;:::o;15082:115::-;15167:23;15184:5;15167:23;:::i;:::-;15162:3;15155:36;15082:115;;:::o;15203:118::-;15290:24;15308:5;15290:24;:::i;:::-;15285:3;15278:37;15203:118;;:::o;15327:112::-;15410:22;15426:5;15410:22;:::i;:::-;15405:3;15398:35;15327:112;;:::o;15445:222::-;15538:4;15576:2;15565:9;15561:18;15553:26;;15589:71;15657:1;15646:9;15642:17;15633:6;15589:71;:::i;:::-;15445:222;;;;:::o;15673:332::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15845:71;15913:1;15902:9;15898:17;15889:6;15845:71;:::i;:::-;15926:72;15994:2;15983:9;15979:18;15970:6;15926:72;:::i;:::-;15673:332;;;;;:::o;16011:::-;16132:4;16170:2;16159:9;16155:18;16147:26;;16183:71;16251:1;16240:9;16236:17;16227:6;16183:71;:::i;:::-;16264:72;16332:2;16321:9;16317:18;16308:6;16264:72;:::i;:::-;16011:332;;;;;:::o;16349:807::-;16598:4;16636:3;16625:9;16621:19;16613:27;;16650:71;16718:1;16707:9;16703:17;16694:6;16650:71;:::i;:::-;16731:72;16799:2;16788:9;16784:18;16775:6;16731:72;:::i;:::-;16813:80;16889:2;16878:9;16874:18;16865:6;16813:80;:::i;:::-;16903;16979:2;16968:9;16964:18;16955:6;16903:80;:::i;:::-;16993:73;17061:3;17050:9;17046:19;17037:6;16993:73;:::i;:::-;17076;17144:3;17133:9;17129:19;17120:6;17076:73;:::i;:::-;16349:807;;;;;;;;;:::o;17162:210::-;17249:4;17287:2;17276:9;17272:18;17264:26;;17300:65;17362:1;17351:9;17347:17;17338:6;17300:65;:::i;:::-;17162:210;;;;:::o;17378:276::-;17498:4;17536:2;17525:9;17521:18;17513:26;;17549:98;17644:1;17633:9;17629:17;17620:6;17549:98;:::i;:::-;17378:276;;;;:::o;17660:313::-;17773:4;17811:2;17800:9;17796:18;17788:26;;17860:9;17854:4;17850:20;17846:1;17835:9;17831:17;17824:47;17888:78;17961:4;17952:6;17888:78;:::i;:::-;17880:86;;17660:313;;;;:::o;17979:419::-;18145:4;18183:2;18172:9;18168:18;18160:26;;18232:9;18226:4;18222:20;18218:1;18207:9;18203:17;18196:47;18260:131;18386:4;18260:131;:::i;:::-;18252:139;;17979:419;;;:::o;18404:::-;18570:4;18608:2;18597:9;18593:18;18585:26;;18657:9;18651:4;18647:20;18643:1;18632:9;18628:17;18621:47;18685:131;18811:4;18685:131;:::i;:::-;18677:139;;18404:419;;;:::o;18829:::-;18995:4;19033:2;19022:9;19018:18;19010:26;;19082:9;19076:4;19072:20;19068:1;19057:9;19053:17;19046:47;19110:131;19236:4;19110:131;:::i;:::-;19102:139;;18829:419;;;:::o;19254:::-;19420:4;19458:2;19447:9;19443:18;19435:26;;19507:9;19501:4;19497:20;19493:1;19482:9;19478:17;19471:47;19535:131;19661:4;19535:131;:::i;:::-;19527:139;;19254:419;;;:::o;19679:::-;19845:4;19883:2;19872:9;19868:18;19860:26;;19932:9;19926:4;19922:20;19918:1;19907:9;19903:17;19896:47;19960:131;20086:4;19960:131;:::i;:::-;19952:139;;19679:419;;;:::o;20104:::-;20270:4;20308:2;20297:9;20293:18;20285:26;;20357:9;20351:4;20347:20;20343:1;20332:9;20328:17;20321:47;20385:131;20511:4;20385:131;:::i;:::-;20377:139;;20104:419;;;:::o;20529:::-;20695:4;20733:2;20722:9;20718:18;20710:26;;20782:9;20776:4;20772:20;20768:1;20757:9;20753:17;20746:47;20810:131;20936:4;20810:131;:::i;:::-;20802:139;;20529:419;;;:::o;20954:::-;21120:4;21158:2;21147:9;21143:18;21135:26;;21207:9;21201:4;21197:20;21193:1;21182:9;21178:17;21171:47;21235:131;21361:4;21235:131;:::i;:::-;21227:139;;20954:419;;;:::o;21379:::-;21545:4;21583:2;21572:9;21568:18;21560:26;;21632:9;21626:4;21622:20;21618:1;21607:9;21603:17;21596:47;21660:131;21786:4;21660:131;:::i;:::-;21652:139;;21379:419;;;:::o;21804:::-;21970:4;22008:2;21997:9;21993:18;21985:26;;22057:9;22051:4;22047:20;22043:1;22032:9;22028:17;22021:47;22085:131;22211:4;22085:131;:::i;:::-;22077:139;;21804:419;;;:::o;22229:::-;22395:4;22433:2;22422:9;22418:18;22410:26;;22482:9;22476:4;22472:20;22468:1;22457:9;22453:17;22446:47;22510:131;22636:4;22510:131;:::i;:::-;22502:139;;22229:419;;;:::o;22654:::-;22820:4;22858:2;22847:9;22843:18;22835:26;;22907:9;22901:4;22897:20;22893:1;22882:9;22878:17;22871:47;22935:131;23061:4;22935:131;:::i;:::-;22927:139;;22654:419;;;:::o;23079:::-;23245:4;23283:2;23272:9;23268:18;23260:26;;23332:9;23326:4;23322:20;23318:1;23307:9;23303:17;23296:47;23360:131;23486:4;23360:131;:::i;:::-;23352:139;;23079:419;;;:::o;23504:::-;23670:4;23708:2;23697:9;23693:18;23685:26;;23757:9;23751:4;23747:20;23743:1;23732:9;23728:17;23721:47;23785:131;23911:4;23785:131;:::i;:::-;23777:139;;23504:419;;;:::o;23929:::-;24095:4;24133:2;24122:9;24118:18;24110:26;;24182:9;24176:4;24172:20;24168:1;24157:9;24153:17;24146:47;24210:131;24336:4;24210:131;:::i;:::-;24202:139;;23929:419;;;:::o;24354:::-;24520:4;24558:2;24547:9;24543:18;24535:26;;24607:9;24601:4;24597:20;24593:1;24582:9;24578:17;24571:47;24635:131;24761:4;24635:131;:::i;:::-;24627:139;;24354:419;;;:::o;24779:::-;24945:4;24983:2;24972:9;24968:18;24960:26;;25032:9;25026:4;25022:20;25018:1;25007:9;25003:17;24996:47;25060:131;25186:4;25060:131;:::i;:::-;25052:139;;24779:419;;;:::o;25204:::-;25370:4;25408:2;25397:9;25393:18;25385:26;;25457:9;25451:4;25447:20;25443:1;25432:9;25428:17;25421:47;25485:131;25611:4;25485:131;:::i;:::-;25477:139;;25204:419;;;:::o;25629:::-;25795:4;25833:2;25822:9;25818:18;25810:26;;25882:9;25876:4;25872:20;25868:1;25857:9;25853:17;25846:47;25910:131;26036:4;25910:131;:::i;:::-;25902:139;;25629:419;;;:::o;26054:::-;26220:4;26258:2;26247:9;26243:18;26235:26;;26307:9;26301:4;26297:20;26293:1;26282:9;26278:17;26271:47;26335:131;26461:4;26335:131;:::i;:::-;26327:139;;26054:419;;;:::o;26479:::-;26645:4;26683:2;26672:9;26668:18;26660:26;;26732:9;26726:4;26722:20;26718:1;26707:9;26703:17;26696:47;26760:131;26886:4;26760:131;:::i;:::-;26752:139;;26479:419;;;:::o;26904:218::-;26995:4;27033:2;27022:9;27018:18;27010:26;;27046:69;27112:1;27101:9;27097:17;27088:6;27046:69;:::i;:::-;26904:218;;;;:::o;27128:430::-;27271:4;27309:2;27298:9;27294:18;27286:26;;27322:69;27388:1;27377:9;27373:17;27364:6;27322:69;:::i;:::-;27401:70;27467:2;27456:9;27452:18;27443:6;27401:70;:::i;:::-;27481;27547:2;27536:9;27532:18;27523:6;27481:70;:::i;:::-;27128:430;;;;;;:::o;27564:222::-;27657:4;27695:2;27684:9;27680:18;27672:26;;27708:71;27776:1;27765:9;27761:17;27752:6;27708:71;:::i;:::-;27564:222;;;;:::o;27792:831::-;28055:4;28093:3;28082:9;28078:19;28070:27;;28107:71;28175:1;28164:9;28160:17;28151:6;28107:71;:::i;:::-;28188:80;28264:2;28253:9;28249:18;28240:6;28188:80;:::i;:::-;28315:9;28309:4;28305:20;28300:2;28289:9;28285:18;28278:48;28343:108;28446:4;28437:6;28343:108;:::i;:::-;28335:116;;28461:72;28529:2;28518:9;28514:18;28505:6;28461:72;:::i;:::-;28543:73;28611:3;28600:9;28596:19;28587:6;28543:73;:::i;:::-;27792:831;;;;;;;;:::o;28629:214::-;28718:4;28756:2;28745:9;28741:18;28733:26;;28769:67;28833:1;28822:9;28818:17;28809:6;28769:67;:::i;:::-;28629:214;;;;:::o;28930:132::-;28997:4;29020:3;29012:11;;29050:4;29045:3;29041:14;29033:22;;28930:132;;;:::o;29068:114::-;29135:6;29169:5;29163:12;29153:22;;29068:114;;;:::o;29188:99::-;29240:6;29274:5;29268:12;29258:22;;29188:99;;;:::o;29293:113::-;29363:4;29395;29390:3;29386:14;29378:22;;29293:113;;;:::o;29412:184::-;29511:11;29545:6;29540:3;29533:19;29585:4;29580:3;29576:14;29561:29;;29412:184;;;;:::o;29602:169::-;29686:11;29720:6;29715:3;29708:19;29760:4;29755:3;29751:14;29736:29;;29602:169;;;;:::o;29777:242::-;29816:3;29835:19;29852:1;29835:19;:::i;:::-;29830:24;;29868:19;29885:1;29868:19;:::i;:::-;29863:24;;29961:1;29953:6;29949:14;29946:1;29943:21;29940:47;;;29967:18;;:::i;:::-;29940:47;30011:1;30008;30004:9;29997:16;;29777:242;;;;:::o;30025:305::-;30065:3;30084:20;30102:1;30084:20;:::i;:::-;30079:25;;30118:20;30136:1;30118:20;:::i;:::-;30113:25;;30272:1;30204:66;30200:74;30197:1;30194:81;30191:107;;;30278:18;;:::i;:::-;30191:107;30322:1;30319;30315:9;30308:16;;30025:305;;;;:::o;30336:185::-;30376:1;30393:20;30411:1;30393:20;:::i;:::-;30388:25;;30427:20;30445:1;30427:20;:::i;:::-;30422:25;;30466:1;30456:35;;30471:18;;:::i;:::-;30456:35;30513:1;30510;30506:9;30501:14;;30336:185;;;;:::o;30527:348::-;30567:7;30590:20;30608:1;30590:20;:::i;:::-;30585:25;;30624:20;30642:1;30624:20;:::i;:::-;30619:25;;30812:1;30744:66;30740:74;30737:1;30734:81;30729:1;30722:9;30715:17;30711:105;30708:131;;;30819:18;;:::i;:::-;30708:131;30867:1;30864;30860:9;30849:20;;30527:348;;;;:::o;30881:191::-;30921:4;30941:20;30959:1;30941:20;:::i;:::-;30936:25;;30975:20;30993:1;30975:20;:::i;:::-;30970:25;;31014:1;31011;31008:8;31005:34;;;31019:18;;:::i;:::-;31005:34;31064:1;31061;31057:9;31049:17;;30881:191;;;;:::o;31078:96::-;31115:7;31144:24;31162:5;31144:24;:::i;:::-;31133:35;;31078:96;;;:::o;31180:90::-;31214:7;31257:5;31250:13;31243:21;31232:32;;31180:90;;;:::o;31276:89::-;31312:7;31352:6;31345:5;31341:18;31330:29;;31276:89;;;:::o;31371:126::-;31408:7;31448:42;31441:5;31437:54;31426:65;;31371:126;;;:::o;31503:77::-;31540:7;31569:5;31558:16;;31503:77;;;:::o;31586:86::-;31621:7;31661:4;31654:5;31650:16;31639:27;;31586:86;;;:::o;31678:153::-;31755:9;31788:37;31819:5;31788:37;:::i;:::-;31775:50;;31678:153;;;:::o;31837:121::-;31895:9;31928:24;31946:5;31928:24;:::i;:::-;31915:37;;31837:121;;;:::o;31964:126::-;32014:9;32047:37;32078:5;32047:37;:::i;:::-;32034:50;;31964:126;;;:::o;32096:113::-;32146:9;32179:24;32197:5;32179:24;:::i;:::-;32166:37;;32096:113;;;:::o;32215:307::-;32283:1;32293:113;32307:6;32304:1;32301:13;32293:113;;;32392:1;32387:3;32383:11;32377:18;32373:1;32368:3;32364:11;32357:39;32329:2;32326:1;32322:10;32317:15;;32293:113;;;32424:6;32421:1;32418:13;32415:101;;;32504:1;32495:6;32490:3;32486:16;32479:27;32415:101;32264:258;32215:307;;;:::o;32528:320::-;32572:6;32609:1;32603:4;32599:12;32589:22;;32656:1;32650:4;32646:12;32677:18;32667:81;;32733:4;32725:6;32721:17;32711:27;;32667:81;32795:2;32787:6;32784:14;32764:18;32761:38;32758:84;;;32814:18;;:::i;:::-;32758:84;32579:269;32528:320;;;:::o;32854:180::-;32902:77;32899:1;32892:88;32999:4;32996:1;32989:15;33023:4;33020:1;33013:15;33040:180;33088:77;33085:1;33078:88;33185:4;33182:1;33175:15;33209:4;33206:1;33199:15;33226:180;33274:77;33271:1;33264:88;33371:4;33368:1;33361:15;33395:4;33392:1;33385:15;33412:180;33460:77;33457:1;33450:88;33557:4;33554:1;33547:15;33581:4;33578:1;33571:15;33598:180;33646:77;33643:1;33636:88;33743:4;33740:1;33733:15;33767:4;33764:1;33757:15;33907:117;34016:1;34013;34006:12;34030:102;34071:6;34122:2;34118:7;34113:2;34106:5;34102:14;34098:28;34088:38;;34030:102;;;:::o;34138:222::-;34278:34;34274:1;34266:6;34262:14;34255:58;34347:5;34342:2;34334:6;34330:15;34323:30;34138:222;:::o;34366:221::-;34506:34;34502:1;34494:6;34490:14;34483:58;34575:4;34570:2;34562:6;34558:15;34551:29;34366:221;:::o;34593:174::-;34733:26;34729:1;34721:6;34717:14;34710:50;34593:174;:::o;34773:228::-;34913:34;34909:1;34901:6;34897:14;34890:58;34982:11;34977:2;34969:6;34965:15;34958:36;34773:228;:::o;35007:225::-;35147:34;35143:1;35135:6;35131:14;35124:58;35216:8;35211:2;35203:6;35199:15;35192:33;35007:225;:::o;35238:221::-;35378:34;35374:1;35366:6;35362:14;35355:58;35447:4;35442:2;35434:6;35430:15;35423:29;35238:221;:::o;35465:236::-;35605:34;35601:1;35593:6;35589:14;35582:58;35674:19;35669:2;35661:6;35657:15;35650:44;35465:236;:::o;35707:225::-;35847:34;35843:1;35835:6;35831:14;35824:58;35916:8;35911:2;35903:6;35899:15;35892:33;35707:225;:::o;35938:169::-;36078:21;36074:1;36066:6;36062:14;36055:45;35938:169;:::o;36113:233::-;36253:34;36249:1;36241:6;36237:14;36230:58;36322:16;36317:2;36309:6;36305:15;36298:41;36113:233;:::o;36352:227::-;36492:34;36488:1;36480:6;36476:14;36469:58;36561:10;36556:2;36548:6;36544:15;36537:35;36352:227;:::o;36585:182::-;36725:34;36721:1;36713:6;36709:14;36702:58;36585:182;:::o;36773:220::-;36913:34;36909:1;36901:6;36897:14;36890:58;36982:3;36977:2;36969:6;36965:15;36958:28;36773:220;:::o;36999:182::-;37139:34;37135:1;37127:6;37123:14;37116:58;36999:182;:::o;37187:164::-;37327:16;37323:1;37315:6;37311:14;37304:40;37187:164;:::o;37357:224::-;37497:34;37493:1;37485:6;37481:14;37474:58;37566:7;37561:2;37553:6;37549:15;37542:32;37357:224;:::o;37587:222::-;37727:34;37723:1;37715:6;37711:14;37704:58;37796:5;37791:2;37783:6;37779:15;37772:30;37587:222;:::o;37815:179::-;37955:31;37951:1;37943:6;37939:14;37932:55;37815:179;:::o;38000:223::-;38140:34;38136:1;38128:6;38124:14;38117:58;38209:6;38204:2;38196:6;38192:15;38185:31;38000:223;:::o;38229:158::-;38369:10;38365:1;38357:6;38353:14;38346:34;38229:158;:::o;38393:224::-;38533:34;38529:1;38521:6;38517:14;38510:58;38602:7;38597:2;38589:6;38585:15;38578:32;38393:224;:::o;38623:122::-;38696:24;38714:5;38696:24;:::i;:::-;38689:5;38686:35;38676:63;;38735:1;38732;38725:12;38676:63;38623:122;:::o;38751:116::-;38821:21;38836:5;38821:21;:::i;:::-;38814:5;38811:32;38801:60;;38857:1;38854;38847:12;38801:60;38751:116;:::o;38873:120::-;38945:23;38962:5;38945:23;:::i;:::-;38938:5;38935:34;38925:62;;38983:1;38980;38973:12;38925:62;38873:120;:::o;38999:122::-;39072:24;39090:5;39072:24;:::i;:::-;39065:5;39062:35;39052:63;;39111:1;39108;39101:12;39052:63;38999:122;:::o

Swarm Source

ipfs://797a0955e63542528b3ac940eb65b91e1bbb6f0071e7383a0c9ec4f3449457e4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.