MATIC Price: $1.02 (-1.04%)
Gas: 89 GWei
 

Overview

Max Total Supply

280,000,000 polyTCG2

Holders

9

Total Transfers

-

Market

Price

$0.00 @ 0.000000 MATIC

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
polyTCGCoin20

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-12-24
*/

/**
 * author: BlockCzech R&D Lab <[email protected]>
 * 
 * 
 *β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–‘
 *β–‘β–‘β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–‘β–‘β–‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•‘β–‘β–‘β•šβ•β•β•β•β–ˆβ–ˆβ•—β–‘β–‘β–‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–‘β–‘
 *β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β•šβ•β•β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•—β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β•šβ•β•β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ•”β•β•β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘
 *β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–‘β–‘β•šβ–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•”β•β•β•β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘
 *β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–‘β–‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β•šβ–ˆβ–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–‘β–‘
 *β–‘β–‘β–‘β–‘β–‘β•šβ•β•β–‘β–‘β–‘β–‘β•šβ•β•β•β•β•β–‘β–‘β•šβ•β•β•β•β•β•β–‘β–‘β–‘β–‘β•šβ•β•β•β•β•β–‘β–‘β•šβ•β•β•β•β•β–‘β•šβ•β•β•šβ•β•β–‘β–‘β•šβ•β•β•β–‘β–‘β•šβ•β•β•β•β•β•β•β•šβ•β•β–‘β•šβ•β•β•β•β•β–‘β–‘β–‘
 *
 * 
 * The TCGCoin20 [POLYGON] is based on the Automatic Liquidity Pool & Custom Fees Architecture.
 *
 * 
 * SPDX-License-Identifier: MIT
 * 
 */

pragma solidity 0.8.11;

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

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

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;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

        function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


contract polyTCGCoin20 is Context, IERC20, Ownable {
    using Address for address;
    using SafeMath for uint256;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isBot;
    address[] private _excluded;

    mapping (address => bool) private _isDEXBuyFee;
    mapping (address => bool) private _isDEXSellFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _takeTotal = 280 * 10**6 * 10**9;
    uint256 private _reflectTotal = (MAX - (MAX % _takeTotal));
    uint256 private _takeFeeTotal;

    string private constant _name = "TCG 2.0 Polygon";
    string private constant _symbol = "polyTCG2";
    uint8 private constant _decimals = 9;

    bool public _taxFeeFlag = false;

    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _liquiditySellFee = 10;
    uint256 private _previousLiquiditySellFee = _liquiditySellFee;


    IUniswapV2Router02 public uniswapRouter;
    address public uniswapPair;

    bool public isIntoLiquifySwap;
    bool public swapAndLiquifyEnabled = true;

    uint256 private _maxLoopCount = 100;


    uint256 public _maximumValueOfTransaction = 280 * 10**6 * 10**9 ;
    uint256 public numTokensSellToAddToLiquidity = 10 * 10**9 ;

    event SwapAndLiquifyEvent(
        uint256 coinsForSwapping,
        uint256 bnbIsReceived,
        uint256 coinsThatWasAddedIntoLiquidity
    );

    event LiquifySwapUpdatedEnabled(bool enabled);
    event SetTaxFeePercent(uint value);
    event SetTaxFeeFlag(bool flag);
    event SetMaxLoopCount(uint value);
    event SetMaxTxPercent(uint value);
    event SetLiquidityFeePercent(uint value);
    event SetSellFeeLiquidity(uint value);
    event ExcludedFromFee(address _address);
    event IncludeInFee(address _address);
    event ETHReceived(address _address);
    event Delivery(address _address,  uint256 amount);
    event AddLiquidity(uint256 coin_amount, uint256 bnb_amount);
    event SwapAndLiquifyEnabled(bool flag);
    event RouterSet(address indexed router);


    modifier lockSwaping {
        isIntoLiquifySwap = true;
        _;
        isIntoLiquifySwap = false;
    }

    constructor () {
        _reflectOwned[_msgSender()] = _reflectTotal;
        _setRouterAddress(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506,0xc35DADB65012eC5796536bD9864eD8773aBc74C4);        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), _msgSender(), _takeTotal);
    }
    
    function _setRouterAddressByOwner(address router, address factory) external onlyOwner() {
        _setRouterAddress(router, factory);
    }

    function _setRouterAddress(address router, address factory) private {

        IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02(router);

        uniswapPair = IUniswapV2Factory(_uniswapRouter.factory())
            .createPair(address(this), _uniswapRouter.WETH());

        uniswapRouter = _uniswapRouter;
        
        address payable _pancakeFactory = payable(factory);
        _isExcludedFromFee[_pancakeFactory] = true;
        
        emit RouterSet(router);
    }
    
    function _isV2Pair(address account) internal view returns(bool){
        return (account == uniswapPair);
    }



    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BEP20 functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _takeOwned[account];
        return tokenFromReflection(_reflectOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);

        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"));

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));

        return true;
    }


    function _getCurrentSupply() private view returns(uint256, uint256) {
        require(_excluded.length <= _maxLoopCount, "The number of loop iterations in _getCurrentSupply is greater than the allowed value.");

        uint256 rSupply = _reflectTotal;
        uint256 tSupply = _takeTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectOwned[_excluded[i]] > rSupply || _takeOwned[_excluded[i]] > tSupply) return (_reflectTotal, _takeTotal);
            rSupply = rSupply.sub(_reflectOwned[_excluded[i]]);
            tSupply = tSupply.sub(_takeOwned[_excluded[i]]);
        }
        if (rSupply < _reflectTotal.div(_takeTotal)) return (_reflectTotal, _takeTotal);

        return (rSupply, tSupply);
    }

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

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

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Setter functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        emit SetTaxFeePercent(taxFee);
        _taxFee = taxFee;
    }

    function setTaxFeeFlag(bool flag) external onlyOwner() {
        emit SetTaxFeeFlag(flag);
        _taxFeeFlag = flag;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        emit SetLiquidityFeePercent(liquidityFee);
        _liquidityFee = liquidityFee;
    }

    function setMaxLoopCount(uint256 maxLoopCount) external onlyOwner() {
        emit SetMaxLoopCount(maxLoopCount);
        _maxLoopCount = maxLoopCount;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        emit SetMaxTxPercent(maxTxPercent);
        _maximumValueOfTransaction = _takeTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner() {
        numTokensSellToAddToLiquidity = amount;
    }

    function setLiquiditySellFeePercent(uint256 liquiditySellFee) external onlyOwner() {
        emit SetTaxFeePercent(liquiditySellFee);
        _liquiditySellFee = liquiditySellFee;
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Fees calculate functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function totalFees() external view returns (uint256) {
        return _takeFeeTotal;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 takeAmountToTransfer, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 reflectAmount, uint256 reflectAmountToTransfer, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());

        return (reflectAmount, reflectAmountToTransfer, rFee, takeAmountToTransfer, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 takeAmountToTransfer = tAmount.sub(tFee).sub(tLiquidity);

        return (takeAmountToTransfer, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 reflectAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 reflectAmountToTransfer = reflectAmount.sub(rFee).sub(rLiquidity);

        return (reflectAmount, reflectAmountToTransfer, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();

        return rSupply.div(tSupply);
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Withdraw function \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    /// This will allow to rescue ETH sent by mistake directly to the contract
    function rescueTokensFromContract(uint256 amount) external onlyOwner {
        if(amount == 0 ){ // ETH
            payable(owner()).transfer(address(this).balance);
        }else{ // TCG2
            _tokenTransfer(address(this), owner(), amount, false);
        }
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Fees managing functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Fees group mebership functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function setupBot(address account, bool value) external onlyOwner {
        _isBot[account] = value;
    }

    function excludeFromFee(address account) external onlyOwner {
        emit ExcludedFromFee(account);
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        emit IncludeInFee(account);
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setDexWithSellFee(address account, bool value) external onlyOwner {
        _isDEXSellFee[account] = value;
    }


    function isDexWithSellFee(address account) public view returns(bool) {
        return _isDEXSellFee[account];
    }

    function setDexWithBuyFee(address account, bool value) external onlyOwner {
        _isDEXBuyFee[account] = value;
    }

    function isDexWithBuyFee(address account) public view returns(bool) {
        return _isDEXBuyFee[account];
    }


    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ LP functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        emit SwapAndLiquifyEnabled(_enabled);
        swapAndLiquifyEnabled = _enabled;

        emit LiquifySwapUpdatedEnabled(_enabled);
    }

    //to receive ETH from uniswapRouter when swapping
    receive() external payable {}

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _reflectOwned[address(this)] = _reflectOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _takeOwned[address(this)] = _takeOwned[address(this)].add(tLiquidity);
    }

    function swapAndLiquifyByOwner(uint256 amount) external onlyOwner {
        swapAndLiquify(amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockSwaping {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to pancakswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquifyEvent(half, newBalance, otherHalf);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        emit AddLiquidity(tokenAmount, ethAmount);
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

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

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Reflection functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


    function tokenFromReflection(uint256 reflectAmount) public view returns(uint256) {
        require(reflectAmount <= _reflectTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();

        return reflectAmount.div(currentRate);
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Custom transfer functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require( !_isBot[to], "BEP20: transfer to the bot address");
        require( !_isBot[from], "BEP20: transfer from the bot address");
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maximumValueOfTransaction, "Transfer amount exceeds the maxTxAmount.");


        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maximumValueOfTransaction){contractTokenBalance = _maximumValueOfTransaction;}

        bool overMinimumCoinBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinimumCoinBalance &&
            !isIntoLiquifySwap &&
            from != uniswapPair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = _taxFeeFlag;

        if(_isDEXSellFee[to] && !_isExcludedFromFee[from]){
            takeFee = true;
            _previousLiquidityFee = _liquidityFee;
            _liquidityFee = _liquiditySellFee;
        } else if(_isDEXBuyFee[from] && !_isExcludedFromFee[to]){
            takeFee = true;
        }

        //transfer amount, it will take liquidity fee
        _tokenTransfer(from,to,amount,takeFee);

        if(takeFee = true){
            _liquidityFee = _previousLiquidityFee;
        }

    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        if(!takeFee){removeAllFee();}

        (uint256 reflectAmount, uint256 reflectAmountToTransfer, uint256 rFee, uint256 takeAmountToTransfer, uint256 tFee, uint256 tLiquidity) = _getValues(amount);

        _reflectOwned[sender] = _reflectOwned[sender].sub(reflectAmount);
        _reflectOwned[recipient] = _reflectOwned[recipient].add(reflectAmountToTransfer);


        _takeLiquidity(tLiquidity);
        
        emit Transfer(sender, recipient, takeAmountToTransfer);

        if(!takeFee){restoreAllFee();}
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"coin_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnb_amount","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Delivery","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"ETHReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquifySwapUpdatedEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetLiquidityFeePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxLoopCount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxTxPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetSellFeeLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetTaxFeeFlag","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetTaxFeePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SwapAndLiquifyEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"coinsForSwapping","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbIsReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coinsThatWasAddedIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquifyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maximumValueOfTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"_setRouterAddressByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isDexWithBuyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isDexWithSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isIntoLiquifySwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexWithBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexWithSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquiditySellFee","type":"uint256"}],"name":"setLiquiditySellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxLoopCount","type":"uint256"}],"name":"setMaxLoopCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setTaxFeeFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setupBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapAndLiquifyByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526703e2c284391c0000600c55600c546000196200002291906200062b565b60001962000031919062000692565b600d556000600f60006101000a81548160ff0219169083151502179055506000601055601054601155600a601255601254601355600a6014556014546015556001601760156101000a81548160ff02191690831515021790555060646018556703e2c284391c00006019556402540be400601a55348015620000b257600080fd5b506000620000c56200033060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d54600360006200017a6200033060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001f2731b02da8cb0d097eb8d57a175b88c7d8b4799750673c35dadb65012ec5796536bd9864ed8773abc74c46200033860201b60201c565b60016006600062000208620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002c16200033060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620003229190620006de565b60405180910390a3620007d5565b600033905090565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000765565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043d919062000765565b6040518363ffffffff1660e01b81526004016200045c929190620007a8565b6020604051808303816000875af11580156200047c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a2919062000765565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008290506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a250505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200063882620005f2565b91506200064583620005f2565b925082620006585762000657620005fc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200069f82620005f2565b9150620006ac83620005f2565b925082821015620006c257620006c162000663565b5b828203905092915050565b620006d881620005f2565b82525050565b6000602082019050620006f56000830184620006cd565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200072d8262000700565b9050919050565b6200073f8162000720565b81146200074b57600080fd5b50565b6000815190506200075f8162000734565b92915050565b6000602082840312156200077e576200077d620006fb565b5b60006200078e848285016200074e565b91505092915050565b620007a28162000720565b82525050565b6000604082019050620007bf600083018562000797565b620007ce602083018462000797565b9392505050565b61502980620007e56000396000f3fe6080604052600436106102975760003560e01c8063735de9f71161015a578063c816841b116100c1578063dd62ed3e1161007a578063dd62ed3e14610a21578063e5f84e4214610a5e578063ea2f0b3714610a89578063f0f165af14610ab2578063f2fde38b14610adb578063f42cf5b314610b045761029e565b8063c816841b14610925578063ca3ba99514610950578063d12a768814610979578063d543dbeb146109a4578063dac11380146109cd578063dd467064146109f85761029e565b8063a457c2d711610113578063a457c2d714610819578063a69df4b514610856578063a84c19771461086d578063a9059cbb14610896578063bafa57f5146108d3578063c49b9a80146108fc5761029e565b8063735de9f7146107195780638da5cb5b146107445780638ee88c531461076f57806395d22b861461079857806395d89b41146107c3578063982fc6bc146107ee5761029e565b8063437823ec116101fe57806361dd90ad116101b757806361dd90ad1461060b5780636bc87c3a146106485780636cf9f871146106735780636dbdb1cd1461069c57806370a08231146106c5578063715018a6146107025761029e565b8063437823ec146104fd5780634a74bb02146105265780635342acb41461055157806359940aa81461058e5780635eb34f51146105b7578063602bc62b146105e05761029e565b8063216bcc1711610250578063216bcc17146103c757806323b872dd146103f05780632d8381191461042d578063313ce5671461046a57806339509351146104955780633b124fe7146104d25761029e565b8063061c82d0146102a357806306fdde03146102cc578063072b12e2146102f7578063095ea7b31461033457806313114a9d1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613eb5565b610b2d565b005b3480156102d857600080fd5b506102e1610c03565b6040516102ee9190613f7b565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613ffb565b610c40565b60405161032b9190614043565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061405e565b610c96565b6040516103689190614043565b60405180910390f35b34801561037d57600080fd5b50610386610cb4565b60405161039391906140ad565b60405180910390f35b3480156103a857600080fd5b506103b1610cbe565b6040516103be91906140ad565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613eb5565b610cc8565b005b3480156103fc57600080fd5b50610417600480360381019061041291906140c8565b610d9e565b6040516104249190614043565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613eb5565b610e77565b60405161046191906140ad565b60405180910390f35b34801561047657600080fd5b5061047f610ee5565b60405161048c9190614137565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b7919061405e565b610eee565b6040516104c99190614043565b60405180910390f35b3480156104de57600080fd5b506104e7610fa1565b6040516104f491906140ad565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613ffb565b610fa7565b005b34801561053257600080fd5b5061053b6110ce565b6040516105489190614043565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613ffb565b6110e1565b6040516105859190614043565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061417e565b611137565b005b3480156105c357600080fd5b506105de60048036038101906105d991906141be565b611227565b005b3480156105ec57600080fd5b506105f56112ca565b60405161060291906140ad565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613ffb565b6112d4565b60405161063f9190614043565b60405180910390f35b34801561065457600080fd5b5061065d61132a565b60405161066a91906140ad565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613eb5565b611330565b005b3480156106a857600080fd5b506106c360048036038101906106be9190613eb5565b611406565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190613ffb565b6114a7565b6040516106f991906140ad565b60405180910390f35b34801561070e57600080fd5b50610717611592565b005b34801561072557600080fd5b5061072e6116e5565b60405161073b919061425d565b60405180910390f35b34801561075057600080fd5b5061075961170b565b6040516107669190614287565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190613eb5565b611734565b005b3480156107a457600080fd5b506107ad61180a565b6040516107ba9190614043565b60405180910390f35b3480156107cf57600080fd5b506107d861181d565b6040516107e59190613f7b565b60405180910390f35b3480156107fa57600080fd5b5061080361185a565b60405161081091906140ad565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b919061405e565b611860565b60405161084d9190614043565b60405180910390f35b34801561086257600080fd5b5061086b61192d565b005b34801561087957600080fd5b50610894600480360381019061088f91906142a2565b611b01565b005b3480156108a257600080fd5b506108bd60048036038101906108b8919061405e565b611bea565b6040516108ca9190614043565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f5919061417e565b611c08565b005b34801561090857600080fd5b50610923600480360381019061091e91906142a2565b611cf8565b005b34801561093157600080fd5b5061093a611e18565b6040516109479190614287565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190613eb5565b611e3e565b005b34801561098557600080fd5b5061098e611f47565b60405161099b91906140ad565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190613eb5565b611f4d565b005b3480156109d957600080fd5b506109e261204a565b6040516109ef91906140ad565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613eb5565b612050565b005b348015610a2d57600080fd5b50610a486004803603810190610a4391906141be565b612217565b604051610a5591906140ad565b60405180910390f35b348015610a6a57600080fd5b50610a7361229e565b604051610a809190614043565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613ffb565b6122b1565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613eb5565b6123d8565b005b348015610ae757600080fd5b50610b026004803603810190610afd9190613ffb565b612477565b005b348015610b1057600080fd5b50610b2b6004803603810190610b26919061417e565b612639565b005b610b35612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb99061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610bf191906140ad565b60405180910390a18060108190555050565b60606040518060400160405280600f81526020017f54434720322e3020506f6c79676f6e0000000000000000000000000000000000815250905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610caa610ca3612729565b8484612731565b6001905092915050565b6000600e54905090565b6000600c54905090565b610cd0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610d8c91906140ad565b60405180910390a18060148190555050565b6000610dab8484846128fc565b610e6c84610db7612729565b610e6785604051806060016040528060288152602001614fa760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1d612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b600190509392505050565b6000600d54821115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb5906143ad565b60405180910390fd5b6000610ec8612ec2565b9050610edd8184612eed90919063ffffffff16565b915050919050565b60006009905090565b6000610f97610efb612729565b84610f928560056000610f0c612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b612731565b6001905092915050565b60105481565b610faf612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061431b565b60405180910390fd5b7ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c8160405161106b9190614287565b60405180910390a16001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601760159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61113f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061431b565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61122f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061431b565b60405180910390fd5b6112c68282612f19565b5050565b6000600254905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b611338612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc9061431b565b60405180910390fd5b7f65b5acab4a325162455ef7363784b96e746f3703d63e4e139f33ba0e0260de5d816040516113f491906140ad565b60405180910390a18060188190555050565b61140e612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061431b565b60405180910390fd5b6114a48161319f565b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561154257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061158d565b61158a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e77565b90505b919050565b61159a612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e9061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173c612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c09061431b565b60405180910390fd5b7fa080f06a1e9c2a432b1d35cf0a54ebca051cf5dce7433c3d8e94948436f10356816040516117f891906140ad565b60405180910390a18060128190555050565b601760149054906101000a900460ff1681565b60606040518060400160405280600881526020017f706f6c7954434732000000000000000000000000000000000000000000000000815250905090565b60195481565b600061192361186d612729565b8461191e85604051806060016040528060258152602001614fcf6025913960056000611897612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b49061443f565b60405180910390fd5b6002544211611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906144ab565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b09612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d9061431b565b60405180910390fd5b7f41bbe7cd012e7bef77126e91d0829d308b727ccf7495b355fea9eb07f99270f281604051611bc59190614043565b60405180910390a180600f60006101000a81548160ff02191690831515021790555050565b6000611bfe611bf7612729565b84846128fc565b6001905092915050565b611c10612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c949061431b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d00612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061431b565b60405180910390fd5b7ff2acc1979c00010542ffd8cae4d838ff799fc95287f58db252e6b45eaaa3936b81604051611dbc9190614043565b60405180910390a180601760156101000a81548160ff0219169083151502179055507f9b37996c8b5253e2bc406f4abfdbd8e4d25d2d2cf4864f181d8c263368b3f70281604051611e0d9190614043565b60405180910390a150565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e46612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca9061431b565b60405180910390fd5b6000811415611f2f57611ee461170b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f29573d6000803e3d6000fd5b50611f44565b611f4330611f3b61170b565b836000613275565b5b50565b601a5481565b611f55612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061431b565b60405180910390fd5b7f570636dca93f35bb5dee1663ad99fe3f70745771395df08a5f7732130618b5188160405161201191906140ad565b60405180910390a1612041606461203383600c5461345390919063ffffffff16565b612eed90919063ffffffff16565b60198190555050565b60145481565b612058612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc9061431b565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261219391906144fa565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f60009054906101000a900460ff1681565b6122b9612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d9061431b565b60405180910390fd5b7f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e816040516123759190614287565b60405180910390a16000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123e0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124649061431b565b60405180910390fd5b80601a8190555050565b61247f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125039061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906145c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c59061431b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612808906146e6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128ef91906140ad565b60405180910390a3505050565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614778565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d9061480a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d9061489c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aed9061492e565b60405180910390fd5b60008111612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b30906149c0565b60405180910390fd5b612b4161170b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f61170b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bfa57601954811115612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf090614a52565b60405180910390fd5b5b6000612c05306114a7565b90506019548110612c165760195490505b6000601a548210159050808015612c3a5750601760149054906101000a900460ff16155b8015612c945750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cac5750601760159054906101000a900460ff165b15612cc057601a549150612cbf8261319f565b5b6000600f60009054906101000a900460ff169050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d775750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d975760019050601254601381905550601454601281905550612e45565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3a5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4457600190505b5b612e5186868684613275565b600190508015612e65576013546012819055505b505050505050565b6000838311158290612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac9190613f7b565b60405180910390fd5b5082840390509392505050565b6000806000612ecf613469565b91509150612ee68183612eed90919063ffffffff16565b9250505090565b60008183612efb9190614aa1565b905092915050565b60008183612f1191906144fa565b905092915050565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8d9190614ae7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130189190614ae7565b6040518363ffffffff1660e01b8152600401613035929190614b14565b6020604051808303816000875af1158015613054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130789190614ae7565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008290506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a250505050565b6001601760146101000a81548160ff02191690831515021790555060006131d0600283612eed90919063ffffffff16565b905060006131e7828461376690919063ffffffff16565b905060004790506131f78361377c565b600061320c824761376690919063ffffffff16565b905061321883826139bf565b7fba38c3ad648004cf41379049fbd93fd358394610f3a9c40cc72d4738f878f5e384828560405161324b93929190614b3d565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b8061328357613282613add565b5b60008060008060008061329588613b20565b9550955095509550955095506132f386600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338885600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133d481613b7c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161343191906140ad565b60405180910390a38661344757613446613d21565b5b50505050505050505050565b600081836134619190614b74565b905092915050565b60008060185460098054905011156134b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ad90614c66565b60405180910390fd5b6000600d5490506000600c54905060005b600980549050811015613729578260036000600984815481106134ed576134ec614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135db575081600460006009848154811061357357613572614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135f257600d54600c5494509450505050613762565b613682600360006009848154811061360d5761360c614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461376690919063ffffffff16565b9250613714600460006009848154811061369f5761369e614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361376690919063ffffffff16565b9150808061372190614cb5565b9150506134c7565b50613741600c54600d54612eed90919063ffffffff16565b82101561375957600d54600c54935093505050613762565b81819350935050505b9091565b600081836137749190614cfe565b905092915050565b6000600267ffffffffffffffff81111561379957613798614d32565b5b6040519080825280602002602001820160405280156137c75781602001602082028036833780820191505090505b50905030816000815181106137df576137de614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138aa9190614ae7565b816001815181106138be576138bd614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061392530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613989959493929190614e5a565b600060405180830381600087803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050505050565b7fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb482826040516139f0929190614eb4565b60405180910390a1613a2530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613a7161170b565b426040518863ffffffff1660e01b8152600401613a9396959493929190614edd565b60606040518083038185885af1158015613ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ad69190614f53565b5050505050565b6000601054148015613af157506000601254145b15613afb57613b1e565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806000806000613b378a613d35565b9250925092506000806000613b558d8686613b50612ec2565b613d8f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613b86612ec2565b90506000613b9d828461345390919063ffffffff16565b9050613bf181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d1c57613cd883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b601154601081905550601354601281905550565b600080600080613d4485613e18565b90506000613d5186613e49565b90506000613d7a82613d6c858a61376690919063ffffffff16565b61376690919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613da8858961345390919063ffffffff16565b90506000613dbf868961345390919063ffffffff16565b90506000613dd6878961345390919063ffffffff16565b90506000613dff82613df1858761376690919063ffffffff16565b61376690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000613e426064613e346010548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b6000613e736064613e656012548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b600080fd5b6000819050919050565b613e9281613e7f565b8114613e9d57600080fd5b50565b600081359050613eaf81613e89565b92915050565b600060208284031215613ecb57613eca613e7a565b5b6000613ed984828501613ea0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f1c578082015181840152602081019050613f01565b83811115613f2b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f4d82613ee2565b613f578185613eed565b9350613f67818560208601613efe565b613f7081613f31565b840191505092915050565b60006020820190508181036000830152613f958184613f42565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fc882613f9d565b9050919050565b613fd881613fbd565b8114613fe357600080fd5b50565b600081359050613ff581613fcf565b92915050565b60006020828403121561401157614010613e7a565b5b600061401f84828501613fe6565b91505092915050565b60008115159050919050565b61403d81614028565b82525050565b60006020820190506140586000830184614034565b92915050565b6000806040838503121561407557614074613e7a565b5b600061408385828601613fe6565b925050602061409485828601613ea0565b9150509250929050565b6140a781613e7f565b82525050565b60006020820190506140c2600083018461409e565b92915050565b6000806000606084860312156140e1576140e0613e7a565b5b60006140ef86828701613fe6565b935050602061410086828701613fe6565b925050604061411186828701613ea0565b9150509250925092565b600060ff82169050919050565b6141318161411b565b82525050565b600060208201905061414c6000830184614128565b92915050565b61415b81614028565b811461416657600080fd5b50565b60008135905061417881614152565b92915050565b6000806040838503121561419557614194613e7a565b5b60006141a385828601613fe6565b92505060206141b485828601614169565b9150509250929050565b600080604083850312156141d5576141d4613e7a565b5b60006141e385828601613fe6565b92505060206141f485828601613fe6565b9150509250929050565b6000819050919050565b600061422361421e61421984613f9d565b6141fe565b613f9d565b9050919050565b600061423582614208565b9050919050565b60006142478261422a565b9050919050565b6142578161423c565b82525050565b6000602082019050614272600083018461424e565b92915050565b61428181613fbd565b82525050565b600060208201905061429c6000830184614278565b92915050565b6000602082840312156142b8576142b7613e7a565b5b60006142c684828501614169565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614305602083613eed565b9150614310826142cf565b602082019050919050565b60006020820190508181036000830152614334816142f8565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614397602a83613eed565b91506143a28261433b565b604082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614429602383613eed565b9150614434826143cd565b604082019050919050565b600060208201905081810360008301526144588161441c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614495601f83613eed565b91506144a08261445f565b602082019050919050565b600060208201905081810360008301526144c481614488565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061450582613e7f565b915061451083613e7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614545576145446144cb565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145ac602683613eed565b91506145b782614550565b604082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061463e602483613eed565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146d0602283613eed565b91506146db82614674565b604082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b7f42455032303a207472616e7366657220746f2074686520626f7420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614762602283613eed565b915061476d82614706565b604082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f42455032303a207472616e736665722066726f6d2074686520626f742061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f4602483613eed565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614886602583613eed565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614918602383613eed565b9150614923826148bc565b604082019050919050565b600060208201905081810360008301526149478161490b565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006149aa602983613eed565b91506149b58261494e565b604082019050919050565b600060208201905081810360008301526149d98161499d565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614a3c602883613eed565b9150614a47826149e0565b604082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614aac82613e7f565b9150614ab783613e7f565b925082614ac757614ac6614a72565b5b828204905092915050565b600081519050614ae181613fcf565b92915050565b600060208284031215614afd57614afc613e7a565b5b6000614b0b84828501614ad2565b91505092915050565b6000604082019050614b296000830185614278565b614b366020830184614278565b9392505050565b6000606082019050614b52600083018661409e565b614b5f602083018561409e565b614b6c604083018461409e565b949350505050565b6000614b7f82613e7f565b9150614b8a83613e7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bc357614bc26144cb565b5b828202905092915050565b7f546865206e756d626572206f66206c6f6f7020697465726174696f6e7320696e60008201527f205f67657443757272656e74537570706c79206973206772656174657220746860208201527f616e2074686520616c6c6f7765642076616c75652e0000000000000000000000604082015250565b6000614c50605583613eed565b9150614c5b82614bce565b606082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cc082613e7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cf357614cf26144cb565b5b600182019050919050565b6000614d0982613e7f565b9150614d1483613e7f565b925082821015614d2757614d266144cb565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000614d86614d81614d7c84614d61565b6141fe565b613e7f565b9050919050565b614d9681614d6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dd181613fbd565b82525050565b6000614de38383614dc8565b60208301905092915050565b6000602082019050919050565b6000614e0782614d9c565b614e118185614da7565b9350614e1c83614db8565b8060005b83811015614e4d578151614e348882614dd7565b9750614e3f83614def565b925050600181019050614e20565b5085935050505092915050565b600060a082019050614e6f600083018861409e565b614e7c6020830187614d8d565b8181036040830152614e8e8186614dfc565b9050614e9d6060830185614278565b614eaa608083018461409e565b9695505050505050565b6000604082019050614ec9600083018561409e565b614ed6602083018461409e565b9392505050565b600060c082019050614ef26000830189614278565b614eff602083018861409e565b614f0c6040830187614d8d565b614f196060830186614d8d565b614f266080830185614278565b614f3360a083018461409e565b979650505050505050565b600081519050614f4d81613e89565b92915050565b600080600060608486031215614f6c57614f6b613e7a565b5b6000614f7a86828701614f3e565b9350506020614f8b86828701614f3e565b9250506040614f9c86828701614f3e565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d2d868212e54016aa312b6b519391f52c0311444f90ce8c184673c14b605d0b864736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063735de9f71161015a578063c816841b116100c1578063dd62ed3e1161007a578063dd62ed3e14610a21578063e5f84e4214610a5e578063ea2f0b3714610a89578063f0f165af14610ab2578063f2fde38b14610adb578063f42cf5b314610b045761029e565b8063c816841b14610925578063ca3ba99514610950578063d12a768814610979578063d543dbeb146109a4578063dac11380146109cd578063dd467064146109f85761029e565b8063a457c2d711610113578063a457c2d714610819578063a69df4b514610856578063a84c19771461086d578063a9059cbb14610896578063bafa57f5146108d3578063c49b9a80146108fc5761029e565b8063735de9f7146107195780638da5cb5b146107445780638ee88c531461076f57806395d22b861461079857806395d89b41146107c3578063982fc6bc146107ee5761029e565b8063437823ec116101fe57806361dd90ad116101b757806361dd90ad1461060b5780636bc87c3a146106485780636cf9f871146106735780636dbdb1cd1461069c57806370a08231146106c5578063715018a6146107025761029e565b8063437823ec146104fd5780634a74bb02146105265780635342acb41461055157806359940aa81461058e5780635eb34f51146105b7578063602bc62b146105e05761029e565b8063216bcc1711610250578063216bcc17146103c757806323b872dd146103f05780632d8381191461042d578063313ce5671461046a57806339509351146104955780633b124fe7146104d25761029e565b8063061c82d0146102a357806306fdde03146102cc578063072b12e2146102f7578063095ea7b31461033457806313114a9d1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613eb5565b610b2d565b005b3480156102d857600080fd5b506102e1610c03565b6040516102ee9190613f7b565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613ffb565b610c40565b60405161032b9190614043565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061405e565b610c96565b6040516103689190614043565b60405180910390f35b34801561037d57600080fd5b50610386610cb4565b60405161039391906140ad565b60405180910390f35b3480156103a857600080fd5b506103b1610cbe565b6040516103be91906140ad565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613eb5565b610cc8565b005b3480156103fc57600080fd5b50610417600480360381019061041291906140c8565b610d9e565b6040516104249190614043565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613eb5565b610e77565b60405161046191906140ad565b60405180910390f35b34801561047657600080fd5b5061047f610ee5565b60405161048c9190614137565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b7919061405e565b610eee565b6040516104c99190614043565b60405180910390f35b3480156104de57600080fd5b506104e7610fa1565b6040516104f491906140ad565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613ffb565b610fa7565b005b34801561053257600080fd5b5061053b6110ce565b6040516105489190614043565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613ffb565b6110e1565b6040516105859190614043565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061417e565b611137565b005b3480156105c357600080fd5b506105de60048036038101906105d991906141be565b611227565b005b3480156105ec57600080fd5b506105f56112ca565b60405161060291906140ad565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613ffb565b6112d4565b60405161063f9190614043565b60405180910390f35b34801561065457600080fd5b5061065d61132a565b60405161066a91906140ad565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613eb5565b611330565b005b3480156106a857600080fd5b506106c360048036038101906106be9190613eb5565b611406565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190613ffb565b6114a7565b6040516106f991906140ad565b60405180910390f35b34801561070e57600080fd5b50610717611592565b005b34801561072557600080fd5b5061072e6116e5565b60405161073b919061425d565b60405180910390f35b34801561075057600080fd5b5061075961170b565b6040516107669190614287565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190613eb5565b611734565b005b3480156107a457600080fd5b506107ad61180a565b6040516107ba9190614043565b60405180910390f35b3480156107cf57600080fd5b506107d861181d565b6040516107e59190613f7b565b60405180910390f35b3480156107fa57600080fd5b5061080361185a565b60405161081091906140ad565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b919061405e565b611860565b60405161084d9190614043565b60405180910390f35b34801561086257600080fd5b5061086b61192d565b005b34801561087957600080fd5b50610894600480360381019061088f91906142a2565b611b01565b005b3480156108a257600080fd5b506108bd60048036038101906108b8919061405e565b611bea565b6040516108ca9190614043565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f5919061417e565b611c08565b005b34801561090857600080fd5b50610923600480360381019061091e91906142a2565b611cf8565b005b34801561093157600080fd5b5061093a611e18565b6040516109479190614287565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190613eb5565b611e3e565b005b34801561098557600080fd5b5061098e611f47565b60405161099b91906140ad565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190613eb5565b611f4d565b005b3480156109d957600080fd5b506109e261204a565b6040516109ef91906140ad565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613eb5565b612050565b005b348015610a2d57600080fd5b50610a486004803603810190610a4391906141be565b612217565b604051610a5591906140ad565b60405180910390f35b348015610a6a57600080fd5b50610a7361229e565b604051610a809190614043565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613ffb565b6122b1565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613eb5565b6123d8565b005b348015610ae757600080fd5b50610b026004803603810190610afd9190613ffb565b612477565b005b348015610b1057600080fd5b50610b2b6004803603810190610b26919061417e565b612639565b005b610b35612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb99061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610bf191906140ad565b60405180910390a18060108190555050565b60606040518060400160405280600f81526020017f54434720322e3020506f6c79676f6e0000000000000000000000000000000000815250905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610caa610ca3612729565b8484612731565b6001905092915050565b6000600e54905090565b6000600c54905090565b610cd0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610d8c91906140ad565b60405180910390a18060148190555050565b6000610dab8484846128fc565b610e6c84610db7612729565b610e6785604051806060016040528060288152602001614fa760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1d612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b600190509392505050565b6000600d54821115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb5906143ad565b60405180910390fd5b6000610ec8612ec2565b9050610edd8184612eed90919063ffffffff16565b915050919050565b60006009905090565b6000610f97610efb612729565b84610f928560056000610f0c612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b612731565b6001905092915050565b60105481565b610faf612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061431b565b60405180910390fd5b7ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c8160405161106b9190614287565b60405180910390a16001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601760159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61113f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061431b565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61122f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061431b565b60405180910390fd5b6112c68282612f19565b5050565b6000600254905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b611338612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc9061431b565b60405180910390fd5b7f65b5acab4a325162455ef7363784b96e746f3703d63e4e139f33ba0e0260de5d816040516113f491906140ad565b60405180910390a18060188190555050565b61140e612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061431b565b60405180910390fd5b6114a48161319f565b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561154257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061158d565b61158a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e77565b90505b919050565b61159a612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e9061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173c612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c09061431b565b60405180910390fd5b7fa080f06a1e9c2a432b1d35cf0a54ebca051cf5dce7433c3d8e94948436f10356816040516117f891906140ad565b60405180910390a18060128190555050565b601760149054906101000a900460ff1681565b60606040518060400160405280600881526020017f706f6c7954434732000000000000000000000000000000000000000000000000815250905090565b60195481565b600061192361186d612729565b8461191e85604051806060016040528060258152602001614fcf6025913960056000611897612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b49061443f565b60405180910390fd5b6002544211611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906144ab565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b09612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d9061431b565b60405180910390fd5b7f41bbe7cd012e7bef77126e91d0829d308b727ccf7495b355fea9eb07f99270f281604051611bc59190614043565b60405180910390a180600f60006101000a81548160ff02191690831515021790555050565b6000611bfe611bf7612729565b84846128fc565b6001905092915050565b611c10612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c949061431b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d00612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061431b565b60405180910390fd5b7ff2acc1979c00010542ffd8cae4d838ff799fc95287f58db252e6b45eaaa3936b81604051611dbc9190614043565b60405180910390a180601760156101000a81548160ff0219169083151502179055507f9b37996c8b5253e2bc406f4abfdbd8e4d25d2d2cf4864f181d8c263368b3f70281604051611e0d9190614043565b60405180910390a150565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e46612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca9061431b565b60405180910390fd5b6000811415611f2f57611ee461170b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f29573d6000803e3d6000fd5b50611f44565b611f4330611f3b61170b565b836000613275565b5b50565b601a5481565b611f55612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061431b565b60405180910390fd5b7f570636dca93f35bb5dee1663ad99fe3f70745771395df08a5f7732130618b5188160405161201191906140ad565b60405180910390a1612041606461203383600c5461345390919063ffffffff16565b612eed90919063ffffffff16565b60198190555050565b60145481565b612058612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc9061431b565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261219391906144fa565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f60009054906101000a900460ff1681565b6122b9612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d9061431b565b60405180910390fd5b7f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e816040516123759190614287565b60405180910390a16000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123e0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124649061431b565b60405180910390fd5b80601a8190555050565b61247f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125039061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906145c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c59061431b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612808906146e6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128ef91906140ad565b60405180910390a3505050565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614778565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d9061480a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d9061489c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aed9061492e565b60405180910390fd5b60008111612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b30906149c0565b60405180910390fd5b612b4161170b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f61170b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bfa57601954811115612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf090614a52565b60405180910390fd5b5b6000612c05306114a7565b90506019548110612c165760195490505b6000601a548210159050808015612c3a5750601760149054906101000a900460ff16155b8015612c945750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cac5750601760159054906101000a900460ff165b15612cc057601a549150612cbf8261319f565b5b6000600f60009054906101000a900460ff169050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d775750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d975760019050601254601381905550601454601281905550612e45565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3a5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4457600190505b5b612e5186868684613275565b600190508015612e65576013546012819055505b505050505050565b6000838311158290612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac9190613f7b565b60405180910390fd5b5082840390509392505050565b6000806000612ecf613469565b91509150612ee68183612eed90919063ffffffff16565b9250505090565b60008183612efb9190614aa1565b905092915050565b60008183612f1191906144fa565b905092915050565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8d9190614ae7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130189190614ae7565b6040518363ffffffff1660e01b8152600401613035929190614b14565b6020604051808303816000875af1158015613054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130789190614ae7565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008290506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a250505050565b6001601760146101000a81548160ff02191690831515021790555060006131d0600283612eed90919063ffffffff16565b905060006131e7828461376690919063ffffffff16565b905060004790506131f78361377c565b600061320c824761376690919063ffffffff16565b905061321883826139bf565b7fba38c3ad648004cf41379049fbd93fd358394610f3a9c40cc72d4738f878f5e384828560405161324b93929190614b3d565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b8061328357613282613add565b5b60008060008060008061329588613b20565b9550955095509550955095506132f386600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338885600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133d481613b7c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161343191906140ad565b60405180910390a38661344757613446613d21565b5b50505050505050505050565b600081836134619190614b74565b905092915050565b60008060185460098054905011156134b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ad90614c66565b60405180910390fd5b6000600d5490506000600c54905060005b600980549050811015613729578260036000600984815481106134ed576134ec614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135db575081600460006009848154811061357357613572614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135f257600d54600c5494509450505050613762565b613682600360006009848154811061360d5761360c614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461376690919063ffffffff16565b9250613714600460006009848154811061369f5761369e614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361376690919063ffffffff16565b9150808061372190614cb5565b9150506134c7565b50613741600c54600d54612eed90919063ffffffff16565b82101561375957600d54600c54935093505050613762565b81819350935050505b9091565b600081836137749190614cfe565b905092915050565b6000600267ffffffffffffffff81111561379957613798614d32565b5b6040519080825280602002602001820160405280156137c75781602001602082028036833780820191505090505b50905030816000815181106137df576137de614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138aa9190614ae7565b816001815181106138be576138bd614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061392530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613989959493929190614e5a565b600060405180830381600087803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050505050565b7fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb482826040516139f0929190614eb4565b60405180910390a1613a2530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613a7161170b565b426040518863ffffffff1660e01b8152600401613a9396959493929190614edd565b60606040518083038185885af1158015613ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ad69190614f53565b5050505050565b6000601054148015613af157506000601254145b15613afb57613b1e565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806000806000613b378a613d35565b9250925092506000806000613b558d8686613b50612ec2565b613d8f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613b86612ec2565b90506000613b9d828461345390919063ffffffff16565b9050613bf181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d1c57613cd883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b601154601081905550601354601281905550565b600080600080613d4485613e18565b90506000613d5186613e49565b90506000613d7a82613d6c858a61376690919063ffffffff16565b61376690919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613da8858961345390919063ffffffff16565b90506000613dbf868961345390919063ffffffff16565b90506000613dd6878961345390919063ffffffff16565b90506000613dff82613df1858761376690919063ffffffff16565b61376690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000613e426064613e346010548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b6000613e736064613e656012548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b600080fd5b6000819050919050565b613e9281613e7f565b8114613e9d57600080fd5b50565b600081359050613eaf81613e89565b92915050565b600060208284031215613ecb57613eca613e7a565b5b6000613ed984828501613ea0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f1c578082015181840152602081019050613f01565b83811115613f2b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f4d82613ee2565b613f578185613eed565b9350613f67818560208601613efe565b613f7081613f31565b840191505092915050565b60006020820190508181036000830152613f958184613f42565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fc882613f9d565b9050919050565b613fd881613fbd565b8114613fe357600080fd5b50565b600081359050613ff581613fcf565b92915050565b60006020828403121561401157614010613e7a565b5b600061401f84828501613fe6565b91505092915050565b60008115159050919050565b61403d81614028565b82525050565b60006020820190506140586000830184614034565b92915050565b6000806040838503121561407557614074613e7a565b5b600061408385828601613fe6565b925050602061409485828601613ea0565b9150509250929050565b6140a781613e7f565b82525050565b60006020820190506140c2600083018461409e565b92915050565b6000806000606084860312156140e1576140e0613e7a565b5b60006140ef86828701613fe6565b935050602061410086828701613fe6565b925050604061411186828701613ea0565b9150509250925092565b600060ff82169050919050565b6141318161411b565b82525050565b600060208201905061414c6000830184614128565b92915050565b61415b81614028565b811461416657600080fd5b50565b60008135905061417881614152565b92915050565b6000806040838503121561419557614194613e7a565b5b60006141a385828601613fe6565b92505060206141b485828601614169565b9150509250929050565b600080604083850312156141d5576141d4613e7a565b5b60006141e385828601613fe6565b92505060206141f485828601613fe6565b9150509250929050565b6000819050919050565b600061422361421e61421984613f9d565b6141fe565b613f9d565b9050919050565b600061423582614208565b9050919050565b60006142478261422a565b9050919050565b6142578161423c565b82525050565b6000602082019050614272600083018461424e565b92915050565b61428181613fbd565b82525050565b600060208201905061429c6000830184614278565b92915050565b6000602082840312156142b8576142b7613e7a565b5b60006142c684828501614169565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614305602083613eed565b9150614310826142cf565b602082019050919050565b60006020820190508181036000830152614334816142f8565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614397602a83613eed565b91506143a28261433b565b604082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614429602383613eed565b9150614434826143cd565b604082019050919050565b600060208201905081810360008301526144588161441c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614495601f83613eed565b91506144a08261445f565b602082019050919050565b600060208201905081810360008301526144c481614488565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061450582613e7f565b915061451083613e7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614545576145446144cb565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145ac602683613eed565b91506145b782614550565b604082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061463e602483613eed565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146d0602283613eed565b91506146db82614674565b604082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b7f42455032303a207472616e7366657220746f2074686520626f7420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614762602283613eed565b915061476d82614706565b604082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f42455032303a207472616e736665722066726f6d2074686520626f742061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f4602483613eed565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614886602583613eed565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614918602383613eed565b9150614923826148bc565b604082019050919050565b600060208201905081810360008301526149478161490b565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006149aa602983613eed565b91506149b58261494e565b604082019050919050565b600060208201905081810360008301526149d98161499d565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614a3c602883613eed565b9150614a47826149e0565b604082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614aac82613e7f565b9150614ab783613e7f565b925082614ac757614ac6614a72565b5b828204905092915050565b600081519050614ae181613fcf565b92915050565b600060208284031215614afd57614afc613e7a565b5b6000614b0b84828501614ad2565b91505092915050565b6000604082019050614b296000830185614278565b614b366020830184614278565b9392505050565b6000606082019050614b52600083018661409e565b614b5f602083018561409e565b614b6c604083018461409e565b949350505050565b6000614b7f82613e7f565b9150614b8a83613e7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bc357614bc26144cb565b5b828202905092915050565b7f546865206e756d626572206f66206c6f6f7020697465726174696f6e7320696e60008201527f205f67657443757272656e74537570706c79206973206772656174657220746860208201527f616e2074686520616c6c6f7765642076616c75652e0000000000000000000000604082015250565b6000614c50605583613eed565b9150614c5b82614bce565b606082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cc082613e7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cf357614cf26144cb565b5b600182019050919050565b6000614d0982613e7f565b9150614d1483613e7f565b925082821015614d2757614d266144cb565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000614d86614d81614d7c84614d61565b6141fe565b613e7f565b9050919050565b614d9681614d6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dd181613fbd565b82525050565b6000614de38383614dc8565b60208301905092915050565b6000602082019050919050565b6000614e0782614d9c565b614e118185614da7565b9350614e1c83614db8565b8060005b83811015614e4d578151614e348882614dd7565b9750614e3f83614def565b925050600181019050614e20565b5085935050505092915050565b600060a082019050614e6f600083018861409e565b614e7c6020830187614d8d565b8181036040830152614e8e8186614dfc565b9050614e9d6060830185614278565b614eaa608083018461409e565b9695505050505050565b6000604082019050614ec9600083018561409e565b614ed6602083018461409e565b9392505050565b600060c082019050614ef26000830189614278565b614eff602083018861409e565b614f0c6040830187614d8d565b614f196060830186614d8d565b614f266080830185614278565b614f3360a083018461409e565b979650505050505050565b600081519050614f4d81613e89565b92915050565b600080600060608486031215614f6c57614f6b613e7a565b5b6000614f7a86828701614f3e565b9350506020614f8b86828701614f3e565b9250506040614f9c86828701614f3e565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d2d868212e54016aa312b6b519391f52c0311444f90ce8c184673c14b605d0b864736f6c634300080b0033

Deployed Bytecode Sourcemap

17754:18673:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24791:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21617:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29846:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22551:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26123:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21898:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25798:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22724:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33438:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21807:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23049:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18770:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29263:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19188:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29581:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29712:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20717:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13686:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30101:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18853:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25254:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31043:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22006:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13278:148;;;;;;;;;;;;;:::i;:::-;;19071:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13064:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25072:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19152:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21710:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19283:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23279:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14018:305;;;;;;;;;;;;;:::i;:::-;;24937:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22221:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29147:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30343:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19117:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28224:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19354:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25422:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18955:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13784:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22398:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18730:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29424:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25654:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13434:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29971:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24791:138;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24870:24:::1;24887:6;24870:24;;;;;;:::i;:::-;;;;;;;;24915:6;24905:7;:16;;;;24791:138:::0;:::o;21617:85::-;21656:13;21689:5;;;;;;;;;;;;;;;;;21682:12;;21617:85;:::o;29846:117::-;29909:4;29933:13;:22;29947:7;29933:22;;;;;;;;;;;;;;;;;;;;;;;;;29926:29;;29846:117;;;:::o;22551:165::-;22628:4;22645:39;22654:12;:10;:12::i;:::-;22668:7;22677:6;22645:8;:39::i;:::-;22704:4;22697:11;;22551:165;;;;:::o;26123:92::-;26167:7;26194:13;;26187:20;;26123:92;:::o;21898:100::-;21953:7;21980:10;;21973:17;;21898:100;:::o;25798:188::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25897:34:::1;25914:16;25897:34;;;;;;:::i;:::-;;;;;;;;25962:16;25942:17;:36;;;;25798:188:::0;:::o;22724:317::-;22824:4;22841:36;22851:6;22859:9;22870:6;22841:9;:36::i;:::-;22888:121;22897:6;22905:12;:10;:12::i;:::-;22919:89;22957:6;22919:89;;;;;;;;;;;;;;;;;:11;:19;22931:6;22919:19;;;;;;;;;;;;;;;:33;22939:12;:10;:12::i;:::-;22919:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22888:8;:121::i;:::-;23029:4;23022:11;;22724:317;;;;;:::o;33438:279::-;33510:7;33555:13;;33538;:30;;33530:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33626:19;33649:10;:8;:10::i;:::-;33626:33;;33679:30;33697:11;33679:13;:17;;:30;;;;:::i;:::-;33672:37;;;33438:279;;;:::o;21807:83::-;21848:5;18720:1;21866:16;;21807:83;:::o;23049:222::-;23139:4;23156:83;23165:12;:10;:12::i;:::-;23179:7;23188:50;23227:10;23188:11;:25;23200:12;:10;:12::i;:::-;23188:25;;;;;;;;;;;;;;;:34;23214:7;23188:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23156:8;:83::i;:::-;23259:4;23252:11;;23049:222;;;;:::o;18770:26::-;;;;:::o;29263:153::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29339:24:::1;29355:7;29339:24;;;;;;:::i;:::-;;;;;;;;29404:4;29374:18;:27;29393:7;29374:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;29263:153:::0;:::o;19188:40::-;;;;;;;;;;;;;:::o;29581:123::-;29645:4;29669:18;:27;29688:7;29669:27;;;;;;;;;;;;;;;;;;;;;;;;;29662:34;;29581:123;;;:::o;29712:124::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29823:5:::1;29798:13;:22;29812:7;29798:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;29712:124:::0;;:::o;20717:141::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20816:34:::1;20834:6;20842:7;20816:17;:34::i;:::-;20717:141:::0;;:::o;13686:90::-;13732:7;13759:9;;13752:16;;13686:90;:::o;30101:115::-;30163:4;30187:12;:21;30200:7;30187:21;;;;;;;;;;;;;;;;;;;;;;;;;30180:28;;30101:115;;;:::o;18853:33::-;;;;:::o;25254:160::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25338:29:::1;25354:12;25338:29;;;;;;:::i;:::-;;;;;;;;25394:12;25378:13;:28;;;;25254:160:::0;:::o;31043:107::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31120:22:::1;31135:6;31120:14;:22::i;:::-;31043:107:::0;:::o;22006:207::-;22072:7;22096:11;:20;22108:7;22096:20;;;;;;;;;;;;;;;;;;;;;;;;;22092:52;;;22125:10;:19;22136:7;22125:19;;;;;;;;;;;;;;;;22118:26;;;;22092:52;22162:43;22182:13;:22;22196:7;22182:22;;;;;;;;;;;;;;;;22162:19;:43::i;:::-;22155:50;;22006:207;;;;:::o;13278:148::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13385:1:::1;13348:40;;13369:6;::::0;::::1;;;;;;;;13348:40;;;;;;;;;;;;13416:1;13399:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;13278:148::o:0;19071:39::-;;;;;;;;;;;;;:::o;13064:79::-;13102:7;13129:6;;;;;;;;;;;13122:13;;13064:79;:::o;25072:174::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25163:36:::1;25186:12;25163:36;;;;;;:::i;:::-;;;;;;;;25226:12;25210:13;:28;;;;25072:174:::0;:::o;19152:29::-;;;;;;;;;;;;;:::o;21710:89::-;21751:13;21784:7;;;;;;;;;;;;;;;;;21777:14;;21710:89;:::o;19283:63::-;;;;:::o;23279:273::-;23374:4;23391:129;23400:12;:10;:12::i;:::-;23414:7;23423:96;23462:15;23423:96;;;;;;;;;;;;;;;;;:11;:25;23435:12;:10;:12::i;:::-;23423:25;;;;;;;;;;;;;;;:34;23449:7;23423:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23391:8;:129::i;:::-;23540:4;23533:11;;23279:273;;;;:::o;14018:305::-;14088:10;14070:28;;:14;;;;;;;;;;;:28;;;14062:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14175:9;;14157:15;:27;14149:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14266:14;;;;;;;;;;;14237:44;;14258:6;;;;;;;;;;14237:44;;;;;;;;;;;;14301:14;;;;;;;;;;;14292:6;;:23;;;;;;;;;;;;;;;;;;14018:305::o;24937:127::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25008:19:::1;25022:4;25008:19;;;;;;:::i;:::-;;;;;;;;25052:4;25038:11;;:18;;;;;;;;;;;;;;;;;;24937:127:::0;:::o;22221:169::-;22301:4;22318:42;22328:12;:10;:12::i;:::-;22342:9;22353:6;22318:9;:42::i;:::-;22378:4;22371:11;;22221:169;;;;:::o;29147:108::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29242:5:::1;29224:6;:15;29231:7;29224:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;29147:108:::0;;:::o;30343:219::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30427:31:::1;30449:8;30427:31;;;;;;:::i;:::-;;;;;;;;30493:8;30469:21;;:32;;;;;;;;;;;;;;;;;;30519:35;30545:8;30519:35;;;;;;:::i;:::-;;;;;;;;30343:219:::0;:::o;19117:26::-;;;;;;;;;;;;;:::o;28224:277::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28317:1:::1;28307:6;:11;28304:190;;;28350:7;:5;:7::i;:::-;28342:25;;:48;28368:21;28342:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28304:190;;;28429:53;28452:4;28459:7;:5;:7::i;:::-;28468:6;28476:5;28429:14;:53::i;:::-;28304:190;28224:277:::0;:::o;19354:57::-;;;;:::o;25422:224::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25506:29:::1;25522:12;25506:29;;;;;;:::i;:::-;;;;;;;;25575:63;25622:5;25575:28;25590:12;25575:10;;:14;;:28;;;;:::i;:::-;:32;;:63;;;;:::i;:::-;25546:26;:92;;;;25422:224:::0;:::o;18955:37::-;;;;:::o;13784:226::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13865:6:::1;::::0;::::1;;;;;;;;13848:14;;:23;;;;;;;;;;;;;;;;;;13899:1;13882:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;13942:4;13924:15;:22;;;;:::i;:::-;13912:9;:34;;;;13999:1;13962:40;;13983:6;::::0;::::1;;;;;;;;13962:40;;;;;;;;;;;;13784:226:::0;:::o;22398:145::-;22481:7;22508:11;:18;22520:5;22508:18;;;;;;;;;;;;;;;:27;22527:7;22508:27;;;;;;;;;;;;;;;;22501:34;;22398:145;;;;:::o;18730:31::-;;;;;;;;;;;;;:::o;29424:149::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29498:21:::1;29511:7;29498:21;;;;;;:::i;:::-;;;;;;;;29560:5;29530:18;:27;29549:7;29530:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29424:149:::0;:::o;25654:136::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25776:6:::1;25744:29;:38;;;;25654:136:::0;:::o;13434:244::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13543:1:::1;13523:22;;:8;:22;;;;13515:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13633:8;13604:38;;13625:6;::::0;::::1;;;;;;;;13604:38;;;;;;;;;;;;13662:8;13653:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;13434:244:::0;:::o;29971:122::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30080:5:::1;30056:12;:21;30069:7;30056:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29971:122:::0;;:::o;1769:98::-;1822:7;1849:10;1842:17;;1769:98;:::o;24325:337::-;24435:1;24418:19;;:5;:19;;;;24410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24516:1;24497:21;;:7;:21;;;;24489:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24600:6;24570:11;:18;24582:5;24570:18;;;;;;;;;;;;;;;:27;24589:7;24570:27;;;;;;;;;;;;;;;:36;;;;24638:7;24622:32;;24631:5;24622:32;;;24647:6;24622:32;;;;;;:::i;:::-;;;;;;;;24325:337;;;:::o;33855:1849::-;33979:6;:10;33986:2;33979:10;;;;;;;;;;;;;;;;;;;;;;;;;33978:11;33969:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34049:6;:12;34056:4;34049:12;;;;;;;;;;;;;;;;;;;;;;;;;34048:13;34039:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34137:1;34121:18;;:4;:18;;;;34113:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34214:1;34200:16;;:2;:16;;;;34192:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34284:1;34275:6;:10;34267:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34353:7;:5;:7::i;:::-;34345:15;;:4;:15;;;;:32;;;;;34370:7;:5;:7::i;:::-;34364:13;;:2;:13;;;;34345:32;34342:139;;;34410:26;;34400:6;:36;;34392:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;34342:139;34496:28;34527:24;34545:4;34527:9;:24::i;:::-;34496:55;;34591:26;;34567:20;:50;34564:106;;34642:26;;34619:49;;34564:106;34682:27;34736:29;;34712:20;:53;;34682:83;;34794:22;:57;;;;;34834:17;;;;;;;;;;;34833:18;34794:57;:93;;;;;34876:11;;;;;;;;;;;34868:19;;:4;:19;;;;34794:93;:131;;;;;34904:21;;;;;;;;;;;34794:131;34776:320;;;34975:29;;34952:52;;35048:36;35063:20;35048:14;:36::i;:::-;34776:320;35169:12;35184:11;;;;;;;;;;;35169:26;;35211:13;:17;35225:2;35211:17;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;35233:18;:24;35252:4;35233:24;;;;;;;;;;;;;;;;;;;;;;;;;35232:25;35211:46;35208:287;;;35283:4;35273:14;;35326:13;;35302:21;:37;;;;35370:17;;35354:13;:33;;;;35208:287;;;35408:12;:18;35421:4;35408:18;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;35431:18;:22;35450:2;35431:22;;;;;;;;;;;;;;;;;;;;;;;;;35430:23;35408:45;35405:90;;;35479:4;35469:14;;35405:90;35208:287;35562:38;35577:4;35582:2;35585:6;35592:7;35562:14;:38::i;:::-;35626:4;35616:14;;;35613:82;;;35662:21;;35646:13;:37;;;;35613:82;33958:1746;;;33855:1849;;;:::o;11934:240::-;12054:7;12112:1;12107;:6;;12115:12;12099:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12154:1;12150;:5;12143:12;;11934:240;;;;;:::o;27849:165::-;27890:7;27911:15;27928;27947:19;:17;:19::i;:::-;27910:56;;;;27986:20;27998:7;27986;:11;;:20;;;;:::i;:::-;27979:27;;;;27849:165;:::o;11722:98::-;11780:7;11811:1;11807;:5;;;;:::i;:::-;11800:12;;11722:98;;;;:::o;11404:::-;11462:7;11493:1;11489;:5;;;;:::i;:::-;11482:12;;11404:98;;;;:::o;20866:494::-;20947:33;21002:6;20947:62;;21054:14;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21036:68;;;21113:4;21120:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21036:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21022:11;;:120;;;;;;;;;;;;;;;;;;21171:14;21155:13;;:30;;;;;;;;;;;;;;;;;;21206:31;21248:7;21206:50;;21305:4;21267:18;:35;21286:15;21267:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;21345:6;21335:17;;;;;;;;;;;;20934:426;;20866:494;;:::o;31158:985::-;20279:4;20259:17;;:24;;;;;;;;;;;;;;;;;;31294:12:::1;31309:27;31334:1;31309:20;:24;;:27;;;;:::i;:::-;31294:42;;31347:17;31367:30;31392:4;31367:20;:24;;:30;;;;:::i;:::-;31347:50;;31675:22;31700:21;31675:46;;31766:22;31783:4;31766:16;:22::i;:::-;31919:18;31940:41;31966:14;31940:21;:25;;:41;;;;:::i;:::-;31919:62;;32034:35;32047:9;32058:10;32034:12;:35::i;:::-;32087:48;32107:4;32113:10;32125:9;32087:48;;;;;;;;:::i;:::-;;;;;;;;31232:911;;;;20326:5:::0;20306:17;;:25;;;;;;;;;;;;;;;;;;31158:985;:::o;35785:639::-;35898:7;35894:29;;35907:14;:12;:14::i;:::-;35894:29;35936:21;35959:31;35992:12;36006:28;36036:12;36050:18;36072;36083:6;36072:10;:18::i;:::-;35935:155;;;;;;;;;;;;36127:40;36153:13;36127;:21;36141:6;36127:21;;;;;;;;;;;;;;;;:25;;:40;;;;:::i;:::-;36103:13;:21;36117:6;36103:21;;;;;;;;;;;;;;;:64;;;;36205:53;36234:23;36205:13;:24;36219:9;36205:24;;;;;;;;;;;;;;;;:28;;:53;;;;:::i;:::-;36178:13;:24;36192:9;36178:24;;;;;;;;;;;;;;;:80;;;;36273:26;36288:10;36273:14;:26::i;:::-;36342:9;36325:49;;36334:6;36325:49;;;36353:20;36325:49;;;;;;:::i;:::-;;;;;;;;36391:7;36387:30;;36400:15;:13;:15::i;:::-;36387:30;35881:543;;;;;;35785:639;;;;:::o;11616:98::-;11674:7;11705:1;11701;:5;;;;:::i;:::-;11694:12;;11616:98;;;;:::o;23562:755::-;23612:7;23621;23669:13;;23649:9;:16;;;;:33;;23641:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;23785:15;23803:13;;23785:31;;23827:15;23845:10;;23827:28;;23871:9;23866:316;23890:9;:16;;;;23886:1;:20;23866:316;;;23962:7;23932:13;:27;23946:9;23956:1;23946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23932:27;;;;;;;;;;;;;;;;:37;:75;;;;24000:7;23973:10;:24;23984:9;23994:1;23984:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23973:24;;;;;;;;;;;;;;;;:34;23932:75;23928:115;;;24017:13;;24032:10;;24009:34;;;;;;;;;23928:115;24068:40;24080:13;:27;24094:9;24104:1;24094:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24080:27;;;;;;;;;;;;;;;;24068:7;:11;;:40;;;;:::i;:::-;24058:50;;24133:37;24145:10;:24;24156:9;24166:1;24156:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24145:24;;;;;;;;;;;;;;;;24133:7;:11;;:37;;;;:::i;:::-;24123:47;;23908:3;;;;;:::i;:::-;;;;23866:316;;;;24206:29;24224:10;;24206:13;;:17;;:29;;;;:::i;:::-;24196:7;:39;24192:79;;;24245:13;;24260:10;;24237:34;;;;;;;;24192:79;24292:7;24301;24284:25;;;;;;23562:755;;;:::o;11510:98::-;11568:7;11599:1;11595;:5;;;;:::i;:::-;11588:12;;11510:98;;;;:::o;32151:583::-;32277:21;32315:1;32301:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32277:40;;32346:4;32328;32333:1;32328:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32372:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32362:4;32367:1;32362:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;32405:60;32422:4;32437:13;;;;;;;;;;;32453:11;32405:8;:60::i;:::-;32504:13;;;;;;;;;;;:64;;;32583:11;32609:1;32653:4;32680;32700:15;32504:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32206:528;32151:583;:::o;32742:561::-;32828:36;32841:11;32854:9;32828:36;;;;;;;:::i;:::-;;;;;;;;32942:60;32959:4;32974:13;;;;;;;;;;;32990:11;32942:8;:60::i;:::-;33045:13;;;;;;;;;;;:29;;;33082:9;33115:4;33135:11;33161:1;33204;33247:7;:5;:7::i;:::-;33269:15;33045:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32742:561;;:::o;28637:234::-;28694:1;28683:7;;:12;:34;;;;;28716:1;28699:13;;:18;28683:34;28680:46;;;28719:7;;28680:46;28756:7;;28738:15;:25;;;;28798:13;;28774:21;:37;;;;28834:1;28824:7;:11;;;;28862:1;28846:13;:17;;;;28637:234;:::o;26559:459::-;26618:7;26627;26636;26645;26654;26663;26684:28;26714:12;26728:18;26750:20;26762:7;26750:11;:20::i;:::-;26683:87;;;;;;26782:21;26805:31;26838:12;26854:50;26866:7;26875:4;26881:10;26893;:8;:10::i;:::-;26854:11;:50::i;:::-;26781:123;;;;;;26925:13;26940:23;26965:4;26971:20;26993:4;26999:10;26917:93;;;;;;;;;;;;;;;;;;26559:459;;;;;;;:::o;30662:373::-;30725:19;30748:10;:8;:10::i;:::-;30725:33;;30769:18;30790:27;30805:11;30790:10;:14;;:27;;;;:::i;:::-;30769:48;;30859:44;30892:10;30859:13;:28;30881:4;30859:28;;;;;;;;;;;;;;;;:32;;:44;;;;:::i;:::-;30828:13;:28;30850:4;30828:28;;;;;;;;;;;;;;;:75;;;;30917:11;:26;30937:4;30917:26;;;;;;;;;;;;;;;;;;;;;;;;;30914:113;;;30986:41;31016:10;30986;:25;31005:4;30986:25;;;;;;;;;;;;;;;;:29;;:41;;;;:::i;:::-;30958:10;:25;30977:4;30958:25;;;;;;;;;;;;;;;:69;;;;30914:113;30714:321;;30662:373;:::o;28879:125::-;28933:15;;28923:7;:25;;;;28975:21;;28959:13;:37;;;;28879:125::o;27026:342::-;27086:7;27095;27104;27124:12;27139:24;27155:7;27139:15;:24::i;:::-;27124:39;;27174:18;27195:30;27217:7;27195:21;:30::i;:::-;27174:51;;27236:28;27267:33;27289:10;27267:17;27279:4;27267:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;27236:64;;27321:20;27343:4;27349:10;27313:47;;;;;;;;;27026:342;;;;;:::o;27376:465::-;27491:7;27500;27509;27529:21;27553:24;27565:11;27553:7;:11;;:24;;;;:::i;:::-;27529:48;;27588:12;27603:21;27612:11;27603:4;:8;;:21;;;;:::i;:::-;27588:36;;27635:18;27656:27;27671:11;27656:10;:14;;:27;;;;:::i;:::-;27635:48;;27694:31;27728:39;27756:10;27728:23;27746:4;27728:13;:17;;:23;;;;:::i;:::-;:27;;:39;;;;:::i;:::-;27694:73;;27788:13;27803:23;27828:4;27780:53;;;;;;;;;;27376:465;;;;;;;;:::o;26223:154::-;26287:7;26314:55;26353:5;26314:20;26326:7;;26314;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;26307:62;;26223:154;;;:::o;26385:166::-;26455:7;26482:61;26527:5;26482:26;26494:13;;26482:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;26475:68;;26385:166;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:329::-;2981:6;3030:2;3018:9;3009:7;3005:23;3001:32;2998:119;;;3036:79;;:::i;:::-;2998:119;3156:1;3181:53;3226:7;3217:6;3206:9;3202:22;3181:53;:::i;:::-;3171:63;;3127:117;2922:329;;;;:::o;3257:90::-;3291:7;3334:5;3327:13;3320:21;3309:32;;3257:90;;;:::o;3353:109::-;3434:21;3449:5;3434:21;:::i;:::-;3429:3;3422:34;3353:109;;:::o;3468:210::-;3555:4;3593:2;3582:9;3578:18;3570:26;;3606:65;3668:1;3657:9;3653:17;3644:6;3606:65;:::i;:::-;3468:210;;;;:::o;3684:474::-;3752:6;3760;3809:2;3797:9;3788:7;3784:23;3780:32;3777:119;;;3815:79;;:::i;:::-;3777:119;3935:1;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3906:117;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;3684:474;;;;;:::o;4164:118::-;4251:24;4269:5;4251:24;:::i;:::-;4246:3;4239:37;4164:118;;:::o;4288:222::-;4381:4;4419:2;4408:9;4404:18;4396:26;;4432:71;4500:1;4489:9;4485:17;4476:6;4432:71;:::i;:::-;4288:222;;;;:::o;4516:619::-;4593:6;4601;4609;4658:2;4646:9;4637:7;4633:23;4629:32;4626:119;;;4664:79;;:::i;:::-;4626:119;4784:1;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4755:117;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;5039:2;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5010:118;4516:619;;;;;:::o;5141:86::-;5176:7;5216:4;5209:5;5205:16;5194:27;;5141:86;;;:::o;5233:112::-;5316:22;5332:5;5316:22;:::i;:::-;5311:3;5304:35;5233:112;;:::o;5351:214::-;5440:4;5478:2;5467:9;5463:18;5455:26;;5491:67;5555:1;5544:9;5540:17;5531:6;5491:67;:::i;:::-;5351:214;;;;:::o;5571:116::-;5641:21;5656:5;5641:21;:::i;:::-;5634:5;5631:32;5621:60;;5677:1;5674;5667:12;5621:60;5571:116;:::o;5693:133::-;5736:5;5774:6;5761:20;5752:29;;5790:30;5814:5;5790:30;:::i;:::-;5693:133;;;;:::o;5832:468::-;5897:6;5905;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;6207:2;6233:50;6275:7;6266:6;6255:9;6251:22;6233:50;:::i;:::-;6223:60;;6178:115;5832:468;;;;;:::o;6306:474::-;6374:6;6382;6431:2;6419:9;6410:7;6406:23;6402:32;6399:119;;;6437:79;;:::i;:::-;6399:119;6557:1;6582:53;6627:7;6618:6;6607:9;6603:22;6582:53;:::i;:::-;6572:63;;6528:117;6684:2;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;:::i;:::-;6700:63;;6655:118;6306:474;;;;;:::o;6786:60::-;6814:3;6835:5;6828:12;;6786:60;;;:::o;6852:142::-;6902:9;6935:53;6953:34;6962:24;6980:5;6962:24;:::i;:::-;6953:34;:::i;:::-;6935:53;:::i;:::-;6922:66;;6852:142;;;:::o;7000:126::-;7050:9;7083:37;7114:5;7083:37;:::i;:::-;7070:50;;7000:126;;;:::o;7132:152::-;7208:9;7241:37;7272:5;7241:37;:::i;:::-;7228:50;;7132:152;;;:::o;7290:183::-;7403:63;7460:5;7403:63;:::i;:::-;7398:3;7391:76;7290:183;;:::o;7479:274::-;7598:4;7636:2;7625:9;7621:18;7613:26;;7649:97;7743:1;7732:9;7728:17;7719:6;7649:97;:::i;:::-;7479:274;;;;:::o;7759:118::-;7846:24;7864:5;7846:24;:::i;:::-;7841:3;7834:37;7759:118;;:::o;7883:222::-;7976:4;8014:2;8003:9;7999:18;7991:26;;8027:71;8095:1;8084:9;8080:17;8071:6;8027:71;:::i;:::-;7883:222;;;;:::o;8111:323::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8313:114;8111:323;;;;:::o;8440:182::-;8580:34;8576:1;8568:6;8564:14;8557:58;8440:182;:::o;8628:366::-;8770:3;8791:67;8855:2;8850:3;8791:67;:::i;:::-;8784:74;;8867:93;8956:3;8867:93;:::i;:::-;8985:2;8980:3;8976:12;8969:19;;8628:366;;;:::o;9000:419::-;9166:4;9204:2;9193:9;9189:18;9181:26;;9253:9;9247:4;9243:20;9239:1;9228:9;9224:17;9217:47;9281:131;9407:4;9281:131;:::i;:::-;9273:139;;9000:419;;;:::o;9425:229::-;9565:34;9561:1;9553:6;9549:14;9542:58;9634:12;9629:2;9621:6;9617:15;9610:37;9425:229;:::o;9660:366::-;9802:3;9823:67;9887:2;9882:3;9823:67;:::i;:::-;9816:74;;9899:93;9988:3;9899:93;:::i;:::-;10017:2;10012:3;10008:12;10001:19;;9660:366;;;:::o;10032:419::-;10198:4;10236:2;10225:9;10221:18;10213:26;;10285:9;10279:4;10275:20;10271:1;10260:9;10256:17;10249:47;10313:131;10439:4;10313:131;:::i;:::-;10305:139;;10032:419;;;:::o;10457:222::-;10597:34;10593:1;10585:6;10581:14;10574:58;10666:5;10661:2;10653:6;10649:15;10642:30;10457:222;:::o;10685:366::-;10827:3;10848:67;10912:2;10907:3;10848:67;:::i;:::-;10841:74;;10924:93;11013:3;10924:93;:::i;:::-;11042:2;11037:3;11033:12;11026:19;;10685:366;;;:::o;11057:419::-;11223:4;11261:2;11250:9;11246:18;11238:26;;11310:9;11304:4;11300:20;11296:1;11285:9;11281:17;11274:47;11338:131;11464:4;11338:131;:::i;:::-;11330:139;;11057:419;;;:::o;11482:181::-;11622:33;11618:1;11610:6;11606:14;11599:57;11482:181;:::o;11669:366::-;11811:3;11832:67;11896:2;11891:3;11832:67;:::i;:::-;11825:74;;11908:93;11997:3;11908:93;:::i;:::-;12026:2;12021:3;12017:12;12010:19;;11669:366;;;:::o;12041:419::-;12207:4;12245:2;12234:9;12230:18;12222:26;;12294:9;12288:4;12284:20;12280:1;12269:9;12265:17;12258:47;12322:131;12448:4;12322:131;:::i;:::-;12314:139;;12041:419;;;:::o;12466:180::-;12514:77;12511:1;12504:88;12611:4;12608:1;12601:15;12635:4;12632:1;12625:15;12652:305;12692:3;12711:20;12729:1;12711:20;:::i;:::-;12706:25;;12745:20;12763:1;12745:20;:::i;:::-;12740:25;;12899:1;12831:66;12827:74;12824:1;12821:81;12818:107;;;12905:18;;:::i;:::-;12818:107;12949:1;12946;12942:9;12935:16;;12652:305;;;;:::o;12963:225::-;13103:34;13099:1;13091:6;13087:14;13080:58;13172:8;13167:2;13159:6;13155:15;13148:33;12963:225;:::o;13194:366::-;13336:3;13357:67;13421:2;13416:3;13357:67;:::i;:::-;13350:74;;13433:93;13522:3;13433:93;:::i;:::-;13551:2;13546:3;13542:12;13535:19;;13194:366;;;:::o;13566:419::-;13732:4;13770:2;13759:9;13755:18;13747:26;;13819:9;13813:4;13809:20;13805:1;13794:9;13790:17;13783:47;13847:131;13973:4;13847:131;:::i;:::-;13839:139;;13566:419;;;:::o;13991:223::-;14131:34;14127:1;14119:6;14115:14;14108:58;14200:6;14195:2;14187:6;14183:15;14176:31;13991:223;:::o;14220:366::-;14362:3;14383:67;14447:2;14442:3;14383:67;:::i;:::-;14376:74;;14459:93;14548:3;14459:93;:::i;:::-;14577:2;14572:3;14568:12;14561:19;;14220:366;;;:::o;14592:419::-;14758:4;14796:2;14785:9;14781:18;14773:26;;14845:9;14839:4;14835:20;14831:1;14820:9;14816:17;14809:47;14873:131;14999:4;14873:131;:::i;:::-;14865:139;;14592:419;;;:::o;15017:221::-;15157:34;15153:1;15145:6;15141:14;15134:58;15226:4;15221:2;15213:6;15209:15;15202:29;15017:221;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:221::-;16181:34;16177:1;16169:6;16165:14;16158:58;16250:4;16245:2;16237:6;16233:15;16226:29;16041:221;:::o;16268:366::-;16410:3;16431:67;16495:2;16490:3;16431:67;:::i;:::-;16424:74;;16507:93;16596:3;16507:93;:::i;:::-;16625:2;16620:3;16616:12;16609:19;;16268:366;;;:::o;16640:419::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16893:9;16887:4;16883:20;16879:1;16868:9;16864:17;16857:47;16921:131;17047:4;16921:131;:::i;:::-;16913:139;;16640:419;;;:::o;17065:223::-;17205:34;17201:1;17193:6;17189:14;17182:58;17274:6;17269:2;17261:6;17257:15;17250:31;17065:223;:::o;17294:366::-;17436:3;17457:67;17521:2;17516:3;17457:67;:::i;:::-;17450:74;;17533:93;17622:3;17533:93;:::i;:::-;17651:2;17646:3;17642:12;17635:19;;17294:366;;;:::o;17666:419::-;17832:4;17870:2;17859:9;17855:18;17847:26;;17919:9;17913:4;17909:20;17905:1;17894:9;17890:17;17883:47;17947:131;18073:4;17947:131;:::i;:::-;17939:139;;17666:419;;;:::o;18091:224::-;18231:34;18227:1;18219:6;18215:14;18208:58;18300:7;18295:2;18287:6;18283:15;18276:32;18091:224;:::o;18321:366::-;18463:3;18484:67;18548:2;18543:3;18484:67;:::i;:::-;18477:74;;18560:93;18649:3;18560:93;:::i;:::-;18678:2;18673:3;18669:12;18662:19;;18321:366;;;:::o;18693:419::-;18859:4;18897:2;18886:9;18882:18;18874:26;;18946:9;18940:4;18936:20;18932:1;18921:9;18917:17;18910:47;18974:131;19100:4;18974:131;:::i;:::-;18966:139;;18693:419;;;:::o;19118:222::-;19258:34;19254:1;19246:6;19242:14;19235:58;19327:5;19322:2;19314:6;19310:15;19303:30;19118:222;:::o;19346:366::-;19488:3;19509:67;19573:2;19568:3;19509:67;:::i;:::-;19502:74;;19585:93;19674:3;19585:93;:::i;:::-;19703:2;19698:3;19694:12;19687:19;;19346:366;;;:::o;19718:419::-;19884:4;19922:2;19911:9;19907:18;19899:26;;19971:9;19965:4;19961:20;19957:1;19946:9;19942:17;19935:47;19999:131;20125:4;19999:131;:::i;:::-;19991:139;;19718:419;;;:::o;20143:228::-;20283:34;20279:1;20271:6;20267:14;20260:58;20352:11;20347:2;20339:6;20335:15;20328:36;20143:228;:::o;20377:366::-;20519:3;20540:67;20604:2;20599:3;20540:67;:::i;:::-;20533:74;;20616:93;20705:3;20616:93;:::i;:::-;20734:2;20729:3;20725:12;20718:19;;20377:366;;;:::o;20749:419::-;20915:4;20953:2;20942:9;20938:18;20930:26;;21002:9;20996:4;20992:20;20988:1;20977:9;20973:17;20966:47;21030:131;21156:4;21030:131;:::i;:::-;21022:139;;20749:419;;;:::o;21174:227::-;21314:34;21310:1;21302:6;21298:14;21291:58;21383:10;21378:2;21370:6;21366:15;21359:35;21174:227;:::o;21407:366::-;21549:3;21570:67;21634:2;21629:3;21570:67;:::i;:::-;21563:74;;21646:93;21735:3;21646:93;:::i;:::-;21764:2;21759:3;21755:12;21748:19;;21407:366;;;:::o;21779:419::-;21945:4;21983:2;21972:9;21968:18;21960:26;;22032:9;22026:4;22022:20;22018:1;22007:9;22003:17;21996:47;22060:131;22186:4;22060:131;:::i;:::-;22052:139;;21779:419;;;:::o;22204:180::-;22252:77;22249:1;22242:88;22349:4;22346:1;22339:15;22373:4;22370:1;22363:15;22390:185;22430:1;22447:20;22465:1;22447:20;:::i;:::-;22442:25;;22481:20;22499:1;22481:20;:::i;:::-;22476:25;;22520:1;22510:35;;22525:18;;:::i;:::-;22510:35;22567:1;22564;22560:9;22555:14;;22390:185;;;;:::o;22581:143::-;22638:5;22669:6;22663:13;22654:22;;22685:33;22712:5;22685:33;:::i;:::-;22581:143;;;;:::o;22730:351::-;22800:6;22849:2;22837:9;22828:7;22824:23;22820:32;22817:119;;;22855:79;;:::i;:::-;22817:119;22975:1;23000:64;23056:7;23047:6;23036:9;23032:22;23000:64;:::i;:::-;22990:74;;22946:128;22730:351;;;;:::o;23087:332::-;23208:4;23246:2;23235:9;23231:18;23223:26;;23259:71;23327:1;23316:9;23312:17;23303:6;23259:71;:::i;:::-;23340:72;23408:2;23397:9;23393:18;23384:6;23340:72;:::i;:::-;23087:332;;;;;:::o;23425:442::-;23574:4;23612:2;23601:9;23597:18;23589:26;;23625:71;23693:1;23682:9;23678:17;23669:6;23625:71;:::i;:::-;23706:72;23774:2;23763:9;23759:18;23750:6;23706:72;:::i;:::-;23788;23856:2;23845:9;23841:18;23832:6;23788:72;:::i;:::-;23425:442;;;;;;:::o;23873:348::-;23913:7;23936:20;23954:1;23936:20;:::i;:::-;23931:25;;23970:20;23988:1;23970:20;:::i;:::-;23965:25;;24158:1;24090:66;24086:74;24083:1;24080:81;24075:1;24068:9;24061:17;24057:105;24054:131;;;24165:18;;:::i;:::-;24054:131;24213:1;24210;24206:9;24195:20;;23873:348;;;;:::o;24227:309::-;24367:34;24363:1;24355:6;24351:14;24344:58;24436:34;24431:2;24423:6;24419:15;24412:59;24505:23;24500:2;24492:6;24488:15;24481:48;24227:309;:::o;24542:366::-;24684:3;24705:67;24769:2;24764:3;24705:67;:::i;:::-;24698:74;;24781:93;24870:3;24781:93;:::i;:::-;24899:2;24894:3;24890:12;24883:19;;24542:366;;;:::o;24914:419::-;25080:4;25118:2;25107:9;25103:18;25095:26;;25167:9;25161:4;25157:20;25153:1;25142:9;25138:17;25131:47;25195:131;25321:4;25195:131;:::i;:::-;25187:139;;24914:419;;;:::o;25339:180::-;25387:77;25384:1;25377:88;25484:4;25481:1;25474:15;25508:4;25505:1;25498:15;25525:233;25564:3;25587:24;25605:5;25587:24;:::i;:::-;25578:33;;25633:66;25626:5;25623:77;25620:103;;;25703:18;;:::i;:::-;25620:103;25750:1;25743:5;25739:13;25732:20;;25525:233;;;:::o;25764:191::-;25804:4;25824:20;25842:1;25824:20;:::i;:::-;25819:25;;25858:20;25876:1;25858:20;:::i;:::-;25853:25;;25897:1;25894;25891:8;25888:34;;;25902:18;;:::i;:::-;25888:34;25947:1;25944;25940:9;25932:17;;25764:191;;;;:::o;25961:180::-;26009:77;26006:1;25999:88;26106:4;26103:1;26096:15;26130:4;26127:1;26120:15;26147:85;26192:7;26221:5;26210:16;;26147:85;;;:::o;26238:158::-;26296:9;26329:61;26347:42;26356:32;26382:5;26356:32;:::i;:::-;26347:42;:::i;:::-;26329:61;:::i;:::-;26316:74;;26238:158;;;:::o;26402:147::-;26497:45;26536:5;26497:45;:::i;:::-;26492:3;26485:58;26402:147;;:::o;26555:114::-;26622:6;26656:5;26650:12;26640:22;;26555:114;;;:::o;26675:184::-;26774:11;26808:6;26803:3;26796:19;26848:4;26843:3;26839:14;26824:29;;26675:184;;;;:::o;26865:132::-;26932:4;26955:3;26947:11;;26985:4;26980:3;26976:14;26968:22;;26865:132;;;:::o;27003:108::-;27080:24;27098:5;27080:24;:::i;:::-;27075:3;27068:37;27003:108;;:::o;27117:179::-;27186:10;27207:46;27249:3;27241:6;27207:46;:::i;:::-;27285:4;27280:3;27276:14;27262:28;;27117:179;;;;:::o;27302:113::-;27372:4;27404;27399:3;27395:14;27387:22;;27302:113;;;:::o;27451:732::-;27570:3;27599:54;27647:5;27599:54;:::i;:::-;27669:86;27748:6;27743:3;27669:86;:::i;:::-;27662:93;;27779:56;27829:5;27779:56;:::i;:::-;27858:7;27889:1;27874:284;27899:6;27896:1;27893:13;27874:284;;;27975:6;27969:13;28002:63;28061:3;28046:13;28002:63;:::i;:::-;27995:70;;28088:60;28141:6;28088:60;:::i;:::-;28078:70;;27934:224;27921:1;27918;27914:9;27909:14;;27874:284;;;27878:14;28174:3;28167:10;;27575:608;;;27451:732;;;;:::o;28189:831::-;28452:4;28490:3;28479:9;28475:19;28467:27;;28504:71;28572:1;28561:9;28557:17;28548:6;28504:71;:::i;:::-;28585:80;28661:2;28650:9;28646:18;28637:6;28585:80;:::i;:::-;28712:9;28706:4;28702:20;28697:2;28686:9;28682:18;28675:48;28740:108;28843:4;28834:6;28740:108;:::i;:::-;28732:116;;28858:72;28926:2;28915:9;28911:18;28902:6;28858:72;:::i;:::-;28940:73;29008:3;28997:9;28993:19;28984:6;28940:73;:::i;:::-;28189:831;;;;;;;;:::o;29026:332::-;29147:4;29185:2;29174:9;29170:18;29162:26;;29198:71;29266:1;29255:9;29251:17;29242:6;29198:71;:::i;:::-;29279:72;29347:2;29336:9;29332:18;29323:6;29279:72;:::i;:::-;29026:332;;;;;:::o;29364:807::-;29613:4;29651:3;29640:9;29636:19;29628:27;;29665:71;29733:1;29722:9;29718:17;29709:6;29665:71;:::i;:::-;29746:72;29814:2;29803:9;29799:18;29790:6;29746:72;:::i;:::-;29828:80;29904:2;29893:9;29889:18;29880:6;29828:80;:::i;:::-;29918;29994:2;29983:9;29979:18;29970:6;29918:80;:::i;:::-;30008:73;30076:3;30065:9;30061:19;30052:6;30008:73;:::i;:::-;30091;30159:3;30148:9;30144:19;30135:6;30091:73;:::i;:::-;29364:807;;;;;;;;;:::o;30177:143::-;30234:5;30265:6;30259:13;30250:22;;30281:33;30308:5;30281:33;:::i;:::-;30177:143;;;;:::o;30326:663::-;30414:6;30422;30430;30479:2;30467:9;30458:7;30454:23;30450:32;30447:119;;;30485:79;;:::i;:::-;30447:119;30605:1;30630:64;30686:7;30677:6;30666:9;30662:22;30630:64;:::i;:::-;30620:74;;30576:128;30743:2;30769:64;30825:7;30816:6;30805:9;30801:22;30769:64;:::i;:::-;30759:74;;30714:129;30882:2;30908:64;30964:7;30955:6;30944:9;30940:22;30908:64;:::i;:::-;30898:74;;30853:129;30326:663;;;;;:::o

Swarm Source

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