ETH Price: $3,377.08 (-1.95%)
Gas: 2 Gwei

Token

Apes Lane Token (ALT)
 

Overview

Max Total Supply

21,000,000 ALT

Holders

118

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
424.532700701801049511 ALT

Value
$0.00
0x221a744df39f25df3eac9389f47d31d5dacf0041
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ALT

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-07
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.15;

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

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

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

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

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

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

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

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


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

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     */
    function _createSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. 
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 */
library SignedSafeMath {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}
/*
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            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;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 */
library SafeCast {

    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

contract ALT is Context, IERC20, Ownable {
    using SafeMath for uint256;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 21000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Apes Lane Token";
    string private _symbol = "ALT";
    uint8 private _decimals = 18;

    uint256 private launchTime;
    bool public isOpen = false;
    
    address payable public marketingWallet = payable(0xd586dF37563468Aa17c9BFB150F147537E87356C);
        
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _marketingFee = 5;
    uint256 private _previousMarketingFee = _marketingFee;
   
    uint256 public _burnFee = 2;
    uint256 private _previousBurnFee = _burnFee;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    
    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    event SwapAndLiquify(
        uint256 tokensIntoLiqudity,
        uint256 ethReceived
    );

    uint256 public minimumTokensBeforeSwap = 10000 * 10**18;
    uint256 public _maxTxAmount = 21000000 * 10**18;
    uint256 public maxWalletToken = 210000 * (10**18);
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[owner()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        //exclude owner, marketing wallet and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
    }
    
    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _marketingFee = _previousMarketingFee;
       _burnFee = _previousBurnFee;
    }
    
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount)  private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool excludedAccount = _isExcludedFromFee[from] || _isExcludedFromFee[to];
        
        if (from != owner()) {
            require(isOpen == true);
        }

        if (from == uniswapV2Pair && !excludedAccount) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = minimumTokensBeforeSwap;
            //add liquidity and send bnb to marketing wallet
            swapAndLiquify(contractTokenBalance);
        }
        
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // Liquidity token share
        uint256 tokensForLiquidity = contractTokenBalance.mul(_liquidityFee).div(_liquidityFee.add(_marketingFee));
        
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.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
        swapTokensForBnb(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 uniswap
        addLiquidity(otherHalf, newBalance);

        // swap and Send BNB to  marketing wallet
        swapTokensForBnb(contractTokenBalance.sub(tokensForLiquidity));

        marketingWallet.transfer(address(this).balance);

        emit SwapAndLiquify(half, newBalance);
    }

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

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

    //this method is responsible for taking all fee where fee is require to be deducted.
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {

        if(recipient==uniswapV2Pair && (block.timestamp <= launchTime + 12 hours)) {
            //enable extra sale fees for first 12 hours of launch
            _taxFee = 2;
            _liquidityFee = 6;
            _marketingFee = 8;
            _burnFee = 4;

        }
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {   
           removeAllFee(); 
        }
        else  
        {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        
        

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount);
        (tTransferAmount, rTransferAmount) = takeBurn(sender, tTransferAmount, rTransferAmount, tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256){
        if(_marketingFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tMarketing = tAmount.div(100).mul(_marketingFee);
        uint256 rMarketing = tMarketing.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rMarketing);
        tTransferAmount = tTransferAmount.sub(tMarketing);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        emit Transfer(sender, address(this), tMarketing);
        return(tTransferAmount, rTransferAmount);
    }
    
    function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256) {
        if(_burnFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tBurn = tAmount.div(100).mul(_burnFee);
        uint256 rBurn = tBurn.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rBurn);
        tTransferAmount = tTransferAmount.sub(tBurn);
        _rOwned[deadWallet] = _rOwned[deadWallet].add(rBurn);
        emit Transfer(sender, deadWallet, tBurn);
        return(tTransferAmount, rTransferAmount); 
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function setMarketingWallet(address payable newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setMinimumTokensBeforeSwap(uint256 newAmt) external onlyOwner() {
        minimumTokensBeforeSwap = newAmt;
    }

    function setMaxWalletToken(uint256 _maxToken) external onlyOwner {
  	    maxWalletToken = _maxToken;
          require(maxWalletToken > totalSupply().div(200), "value too low");
  	}
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount > totalSupply().div(300), "value too low");
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function openTrade() external onlyOwner {
        require(isOpen != true, "trade is Already open");
        isOpen = true;
        launchTime = block.timestamp;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526a115eec47f6cf7e350000006007556007546000196200002591906200076f565b600019620000349190620007d6565b6008556040518060400160405280600f81526020017f41706573204c616e6520546f6b656e0000000000000000000000000000000000815250600a90816200007d919062000a81565b506040518060400160405280600381526020017f414c540000000000000000000000000000000000000000000000000000000000815250600b9081620000c4919062000a81565b506012600c60006101000a81548160ff021916908360ff1602179055506000600e60006101000a81548160ff02191690831515021790555073d586df37563468aa17c9bfb150f147537e87356c600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f55600f5460105560016011556011546012556005601355601354601455600260155560155460165561dead601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601960156101000a81548160ff02191690831515021790555069021e19e0c9bab2400000601a556a115eec47f6cf7e35000000601b55692c781f708c509f400000601c553480156200021357600080fd5b5062000234620002286200064160201b60201c565b6200064960201b60201c565b600854600160006200024b6200070d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000bd2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a2919062000bd2565b6040518363ffffffff1660e01b8152600401620003c192919062000c15565b6020604051808303816000875af1158015620003e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000407919062000bd2565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006200049e6200070d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005d16200070d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000632919062000c53565b60405180910390a35062000c70565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200077c8262000736565b9150620007898362000736565b9250826200079c576200079b62000740565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007e38262000736565b9150620007f08362000736565b925082821015620008065762000805620007a7565b5b828203905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200089357607f821691505b602082108103620008a957620008a86200084b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008d4565b6200091f8683620008d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009626200095c620009568462000736565b62000937565b62000736565b9050919050565b6000819050919050565b6200097e8362000941565b620009966200098d8262000969565b848454620008e1565b825550505050565b600090565b620009ad6200099e565b620009ba81848462000973565b505050565b5b81811015620009e257620009d6600082620009a3565b600181019050620009c0565b5050565b601f82111562000a3157620009fb81620008af565b62000a0684620008c4565b8101602085101562000a16578190505b62000a2e62000a2585620008c4565b830182620009bf565b50505b505050565b600082821c905092915050565b600062000a566000198460080262000a36565b1980831691505092915050565b600062000a71838362000a43565b9150826002028217905092915050565b62000a8c8262000811565b67ffffffffffffffff81111562000aa85762000aa76200081c565b5b62000ab482546200087a565b62000ac1828285620009e6565b600060209050601f83116001811462000af9576000841562000ae4578287015190505b62000af0858262000a63565b86555062000b60565b601f19841662000b0986620008af565b60005b8281101562000b335784890151825560018201915060208501945060208101905062000b0c565b8683101562000b53578489015162000b4f601f89168262000a43565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b9a8262000b6d565b9050919050565b62000bac8162000b8d565b811462000bb857600080fd5b50565b60008151905062000bcc8162000ba1565b92915050565b60006020828403121562000beb5762000bea62000b68565b5b600062000bfb8482850162000bbb565b91505092915050565b62000c0f8162000b8d565b82525050565b600060408201905062000c2c600083018562000c04565b62000c3b602083018462000c04565b9392505050565b62000c4d8162000736565b82525050565b600060208201905062000c6a600083018462000c42565b92915050565b61562d8062000c806000396000f3fe60806040526004361061024a5760003560e01c806370a0823111610139578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e146108b5578063e6c75f71146108f2578063ea2f0b371461091d578063ec28438a14610946578063f2fde38b1461096f578063fb201b1d1461099857610251565b8063a9059cbb146107d0578063aee50b1e1461080d578063c0b0fda214610836578063c49b9a8014610861578063d2d7ad831461088a57610251565b806388f82020116100fd57806388f82020146106d75780638da5cb5b1461071457806391d55f411461073f57806395d89b4114610768578063a457c2d71461079357610251565b806370a0823114610602578063715018a61461063f57806375f0a874146106565780637d1db4a51461068157806385141a77146106ac57610251565b80633b124fe7116101c757806349bd5a5e1161018b57806349bd5a5e1461052f5780634a74bb021461055a57806352390c02146105855780635d098b38146105ae5780636bc87c3a146105d757610251565b80633b124fe71461044a5780633bd5d17314610475578063437823ec1461049e5780634549b039146104c757806347535d7b1461050457610251565b806323b872dd1161020e57806323b872dd1461033f5780632d8381191461037c578063313ce567146103b95780633685d419146103e4578063395093511461040d57610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e957806322976e0d1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109af565b60405161027891906144ec565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906145a7565b610a41565b6040516102b59190614602565b60405180910390f35b3480156102ca57600080fd5b506102d3610a5f565b6040516102e0919061467c565b60405180910390f35b3480156102f557600080fd5b506102fe610a85565b60405161030b91906146a6565b60405180910390f35b34801561032057600080fd5b50610329610a8f565b60405161033691906146a6565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906146c1565b610a95565b6040516103739190614602565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614714565b610b6e565b6040516103b091906146a6565b60405180910390f35b3480156103c557600080fd5b506103ce610bdc565b6040516103db919061475d565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190614778565b610bf3565b005b34801561041957600080fd5b50610434600480360381019061042f91906145a7565b610f28565b6040516104419190614602565b60405180910390f35b34801561045657600080fd5b5061045f610fdb565b60405161046c91906146a6565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190614714565b610fe1565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190614778565b61115c565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906147d1565b611233565b6040516104fb91906146a6565b60405180910390f35b34801561051057600080fd5b506105196112b7565b6040516105269190614602565b60405180910390f35b34801561053b57600080fd5b506105446112ca565b6040516105519190614820565b60405180910390f35b34801561056657600080fd5b5061056f6112f0565b60405161057c9190614602565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190614778565b611303565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190614879565b61159e565b005b3480156105e357600080fd5b506105ec61165e565b6040516105f991906146a6565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190614778565b611664565b60405161063691906146a6565b60405180910390f35b34801561064b57600080fd5b5061065461174f565b005b34801561066257600080fd5b5061066b6117d7565b60405161067891906148b5565b60405180910390f35b34801561068d57600080fd5b506106966117fd565b6040516106a391906146a6565b60405180910390f35b3480156106b857600080fd5b506106c1611803565b6040516106ce9190614820565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614778565b611829565b60405161070b9190614602565b60405180910390f35b34801561072057600080fd5b5061072961187f565b6040516107369190614820565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190614714565b6118a8565b005b34801561077457600080fd5b5061077d61198c565b60405161078a91906144ec565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b591906145a7565b611a1e565b6040516107c79190614602565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906145a7565b611aeb565b6040516108049190614602565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190614714565b611b09565b005b34801561084257600080fd5b5061084b611b8f565b60405161085891906146a6565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906148d0565b611b95565b005b34801561089657600080fd5b5061089f611c65565b6040516108ac91906146a6565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906148fd565b611c6b565b6040516108e991906146a6565b60405180910390f35b3480156108fe57600080fd5b50610907611cf2565b60405161091491906146a6565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f9190614778565b611cf8565b005b34801561095257600080fd5b5061096d60048036038101906109689190614714565b611dcf565b005b34801561097b57600080fd5b5061099660048036038101906109919190614778565b611eb4565b005b3480156109a457600080fd5b506109ad611fab565b005b6060600a80546109be9061496c565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea9061496c565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a55610a4e6120a1565b84846120a9565b6001905092915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b60135481565b6000610aa2848484612272565b610b6384610aae6120a1565b610b5e856040518060600160405280602881526020016155ab60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b146120a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ac9092919063ffffffff16565b6120a9565b600190509392505050565b6000600854821115610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90614a0f565b60405180910390fd5b6000610bbf612601565b9050610bd4818461262c90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b610bfb6120a1565b73ffffffffffffffffffffffffffffffffffffffff16610c1961187f565b73ffffffffffffffffffffffffffffffffffffffff1614610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690614a7b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290614ae7565b60405180910390fd5b60005b600680549050811015610f24578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d3657610d35614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f115760066001600680549050610d909190614b65565b81548110610da157610da0614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610de057610ddf614b07565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610ed757610ed6614b99565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f24565b8080610f1c90614bc8565b915050610cfe565b5050565b6000610fd1610f356120a1565b84610fcc8560036000610f466120a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b6120a9565b6001905092915050565b600f5481565b6000610feb6120a1565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c82565b60405180910390fd5b600061108583612658565b505050505090506110de81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611136816008546126b490919063ffffffff16565b6008819055506111518360095461264290919063ffffffff16565b600981905550505050565b6111646120a1565b73ffffffffffffffffffffffffffffffffffffffff1661118261187f565b73ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90614a7b565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190614cee565b60405180910390fd5b8161129a57600061128a84612658565b50505050509050809150506112b1565b60006112a584612658565b50505050915050809150505b92915050565b600e60009054906101000a900460ff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b61130b6120a1565b73ffffffffffffffffffffffffffffffffffffffff1661132961187f565b73ffffffffffffffffffffffffffffffffffffffff161461137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137690614a7b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614ae7565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114e05761149c600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115a66120a1565b73ffffffffffffffffffffffffffffffffffffffff166115c461187f565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190614a7b565b60405180910390fd5b80600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116ff57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061174a565b611747600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b90505b919050565b6117576120a1565b73ffffffffffffffffffffffffffffffffffffffff1661177561187f565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614a7b565b60405180910390fd5b6117d560006126ca565b565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118b06120a1565b73ffffffffffffffffffffffffffffffffffffffff166118ce61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614a7b565b60405180910390fd5b80601c8190555061194660c8611938610a85565b61262c90919063ffffffff16565b601c5411611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090614d5a565b60405180910390fd5b50565b6060600b805461199b9061496c565b80601f01602080910402602001604051908101604052809291908181526020018280546119c79061496c565b8015611a145780601f106119e957610100808354040283529160200191611a14565b820191906000526020600020905b8154815290600101906020018083116119f757829003601f168201915b5050505050905090565b6000611ae1611a2b6120a1565b84611adc856040518060600160405280602581526020016155d36025913960036000611a556120a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ac9092919063ffffffff16565b6120a9565b6001905092915050565b6000611aff611af86120a1565b8484612272565b6001905092915050565b611b116120a1565b73ffffffffffffffffffffffffffffffffffffffff16611b2f61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614a7b565b60405180910390fd5b80601a8190555050565b60155481565b611b9d6120a1565b73ffffffffffffffffffffffffffffffffffffffff16611bbb61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614a7b565b60405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c5a9190614602565b60405180910390a150565b601a5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b611d006120a1565b73ffffffffffffffffffffffffffffffffffffffff16611d1e61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90614a7b565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611dd76120a1565b73ffffffffffffffffffffffffffffffffffffffff16611df561187f565b73ffffffffffffffffffffffffffffffffffffffff1614611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4290614a7b565b60405180910390fd5b80601b81905550611e6e61012c611e60610a85565b61262c90919063ffffffff16565b601b5411611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890614d5a565b60405180910390fd5b50565b611ebc6120a1565b73ffffffffffffffffffffffffffffffffffffffff16611eda61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614a7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614dec565b60405180910390fd5b611fa8816126ca565b50565b611fb36120a1565b73ffffffffffffffffffffffffffffffffffffffff16611fd161187f565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614a7b565b60405180910390fd5b60011515600e60009054906101000a900460ff1615150361207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614e58565b60405180910390fd5b6001600e60006101000a81548160ff02191690831515021790555042600d81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90614eea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90614f7c565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161226591906146a6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d89061500e565b60405180910390fd5b60008111612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906150a0565b60405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123c75750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506123d161187f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146124245760011515600e60009054906101000a900460ff1615151461242357600080fd5b5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561247f575080155b156124e357600061248f84611664565b9050601c5483826124a091906150c0565b11156124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890615188565b60405180910390fd5b505b60006124ee30611664565b90506000601a5482101590508080156125145750601960149054906101000a900460ff16155b801561256d5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156125855750601960159054906101000a900460ff165b1561259957601a5491506125988261278e565b5b6125a4868686612928565b505050505050565b60008383111582906125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb91906144ec565b60405180910390fd5b5082840390509392505050565b600080600061260e612daf565b91509150612625818361262c90919063ffffffff16565b9250505090565b6000818361263a91906151d7565b905092915050565b6000818361265091906150c0565b905092915050565b600080600080600080600080600061266f8a613062565b925092509250600080600061268d8d8686612688612601565b6130bc565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600081836126c29190614b65565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601960146101000a81548160ff02191690831515021790555060006127e86127c560135460115461264290919063ffffffff16565b6127da6011548561314590919063ffffffff16565b61262c90919063ffffffff16565b9050600061280060028361262c90919063ffffffff16565b9050600061281782846126b490919063ffffffff16565b905060004790506128278361315b565b600061283c82476126b490919063ffffffff16565b905061284883826133d4565b61286361285e86886126b490919063ffffffff16565b61315b565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156128cb573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516128fd929190615208565b60405180910390a150505050506000601960146101000a81548160ff02191690831515021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612994575061a8c0600d5461299091906150c0565b4211155b156129ba576002600f819055506006601181905550600860138190555060046015819055505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a5b5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a6d57612a6861348c565b612ab3565b601b54811115612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa9906152a3565b60405180910390fd5b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b565750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6b57612b668383836134ae565b612da2565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c0e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c2357612c1e83838361370e565b612da1565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cc75750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cdc57612cd783838361396e565b612da0565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d7e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d9357612d8e838383613b61565b612d9f565b612d9e83838361396e565b5b5b5b5b612daa613e56565b505050565b600080600060085490506000600754905060005b60068054905081101561302557826001600060068481548110612de957612de8614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ed75750816002600060068481548110612e6f57612e6e614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612eee576008546007549450945050505061305e565b612f7e6001600060068481548110612f0957612f08614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846126b490919063ffffffff16565b92506130106002600060068481548110612f9b57612f9a614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836126b490919063ffffffff16565b9150808061301d90614bc8565b915050612dc3565b5061303d60075460085461262c90919063ffffffff16565b8210156130555760085460075493509350505061305e565b81819350935050505b9091565b60008060008061307185613e7c565b9050600061307e86613ead565b905060006130a782613099858a6126b490919063ffffffff16565b6126b490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130d5858961314590919063ffffffff16565b905060006130ec868961314590919063ffffffff16565b90506000613103878961314590919063ffffffff16565b9050600061312c8261311e85876126b490919063ffffffff16565b6126b490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361315391906152c3565b905092915050565b6000600267ffffffffffffffff8111156131785761317761531d565b5b6040519080825280602002602001820160405280156131a65781602001602082028036833780820191505090505b50905030816000815181106131be576131bd614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132899190615361565b8160018151811061329d5761329c614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161330430601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c6b565b101561333a5761333930601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196120a9565b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161339e959493929190615487565b600060405180830381600087803b1580156133b857600080fd5b505af11580156133cc573d6000803e3d6000fd5b505050505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061342061187f565b426040518863ffffffff1660e01b8152600401613442969594939291906154e1565b60606040518083038185885af1158015613460573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134859190615557565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b6000806000806000806134c087612658565b95509550955095509550955061351e87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369481613ede565b61369e8483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136fb91906146a6565b60405180910390a3505050505050505050565b60008060008060008061372087612658565b95509550955095509550955061377e86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381383600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138a885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138f481613ede565b6138fe8483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161395b91906146a6565b60405180910390a3505050505050505050565b60008060008060008061398087612658565b9550955095509550955095506139988984878a6140bd565b80965081945050506139ac8984878a614255565b8096508194505050613a0686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ae781613ede565b613af18483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b4e91906146a6565b60405180910390a3505050505050505050565b600080600080600080613b7387612658565b955095509550955095509550613bd187600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cfb83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d9085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ddc81613ede565b613de68483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e4391906146a6565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550601454601381905550601654601581905550565b6000613ea66064613e98600f548561314590919063ffffffff16565b61262c90919063ffffffff16565b9050919050565b6000613ed76064613ec96011548561314590919063ffffffff16565b61262c90919063ffffffff16565b9050919050565b6000613ee8612601565b90506000613eff828461314590919063ffffffff16565b9050613f5381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561407e5761403a83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614098826008546126b490919063ffffffff16565b6008819055506140b38160095461264290919063ffffffff16565b6009819055505050565b6000806000601354036140d55784849150915061424c565b60006140ff6013546140f160648761262c90919063ffffffff16565b61314590919063ffffffff16565b9050600061411d61410e612601565b8361314590919063ffffffff16565b905061413281876126b490919063ffffffff16565b955061414782886126b490919063ffffffff16565b965061419b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161423b91906146a6565b60405180910390a386869350935050505b94509492505050565b60008060006015540361426d5784849150915061444a565b600061429760155461428960648761262c90919063ffffffff16565b61314590919063ffffffff16565b905060006142b56142a6612601565b8361314590919063ffffffff16565b90506142ca81876126b490919063ffffffff16565b95506142df82886126b490919063ffffffff16565b96506143558160016000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b60016000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161443991906146a6565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561448d578082015181840152602081019050614472565b8381111561449c576000848401525b50505050565b6000601f19601f8301169050919050565b60006144be82614453565b6144c8818561445e565b93506144d881856020860161446f565b6144e1816144a2565b840191505092915050565b6000602082019050818103600083015261450681846144b3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061453e82614513565b9050919050565b61454e81614533565b811461455957600080fd5b50565b60008135905061456b81614545565b92915050565b6000819050919050565b61458481614571565b811461458f57600080fd5b50565b6000813590506145a18161457b565b92915050565b600080604083850312156145be576145bd61450e565b5b60006145cc8582860161455c565b92505060206145dd85828601614592565b9150509250929050565b60008115159050919050565b6145fc816145e7565b82525050565b600060208201905061461760008301846145f3565b92915050565b6000819050919050565b600061464261463d61463884614513565b61461d565b614513565b9050919050565b600061465482614627565b9050919050565b600061466682614649565b9050919050565b6146768161465b565b82525050565b6000602082019050614691600083018461466d565b92915050565b6146a081614571565b82525050565b60006020820190506146bb6000830184614697565b92915050565b6000806000606084860312156146da576146d961450e565b5b60006146e88682870161455c565b93505060206146f98682870161455c565b925050604061470a86828701614592565b9150509250925092565b60006020828403121561472a5761472961450e565b5b600061473884828501614592565b91505092915050565b600060ff82169050919050565b61475781614741565b82525050565b6000602082019050614772600083018461474e565b92915050565b60006020828403121561478e5761478d61450e565b5b600061479c8482850161455c565b91505092915050565b6147ae816145e7565b81146147b957600080fd5b50565b6000813590506147cb816147a5565b92915050565b600080604083850312156147e8576147e761450e565b5b60006147f685828601614592565b9250506020614807858286016147bc565b9150509250929050565b61481a81614533565b82525050565b60006020820190506148356000830184614811565b92915050565b600061484682614513565b9050919050565b6148568161483b565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b60006020828403121561488f5761488e61450e565b5b600061489d84828501614864565b91505092915050565b6148af8161483b565b82525050565b60006020820190506148ca60008301846148a6565b92915050565b6000602082840312156148e6576148e561450e565b5b60006148f4848285016147bc565b91505092915050565b600080604083850312156149145761491361450e565b5b60006149228582860161455c565b92505060206149338582860161455c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061498457607f821691505b6020821081036149975761499661493d565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006149f9602a8361445e565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a6560208361445e565b9150614a7082614a2f565b602082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614ad1601b8361445e565b9150614adc82614a9b565b602082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b7082614571565b9150614b7b83614571565b925082821015614b8e57614b8d614b36565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614bd382614571565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c0557614c04614b36565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614c6c602c8361445e565b9150614c7782614c10565b604082019050919050565b60006020820190508181036000830152614c9b81614c5f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614cd8601f8361445e565b9150614ce382614ca2565b602082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000614d44600d8361445e565b9150614d4f82614d0e565b602082019050919050565b60006020820190508181036000830152614d7381614d37565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dd660268361445e565b9150614de182614d7a565b604082019050919050565b60006020820190508181036000830152614e0581614dc9565b9050919050565b7f747261646520697320416c7265616479206f70656e0000000000000000000000600082015250565b6000614e4260158361445e565b9150614e4d82614e0c565b602082019050919050565b60006020820190508181036000830152614e7181614e35565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed460248361445e565b9150614edf82614e78565b604082019050919050565b60006020820190508181036000830152614f0381614ec7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6660228361445e565b9150614f7182614f0a565b604082019050919050565b60006020820190508181036000830152614f9581614f59565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ff860258361445e565b915061500382614f9c565b604082019050919050565b6000602082019050818103600083015261502781614feb565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061508a60298361445e565b91506150958261502e565b604082019050919050565b600060208201905081810360008301526150b98161507d565b9050919050565b60006150cb82614571565b91506150d683614571565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561510b5761510a614b36565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061517260248361445e565b915061517d82615116565b604082019050919050565b600060208201905081810360008301526151a181615165565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151e282614571565b91506151ed83614571565b9250826151fd576151fc6151a8565b5b828204905092915050565b600060408201905061521d6000830185614697565b61522a6020830184614697565b9392505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061528d60288361445e565b915061529882615231565b604082019050919050565b600060208201905081810360008301526152bc81615280565b9050919050565b60006152ce82614571565b91506152d983614571565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561531257615311614b36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061535b81614545565b92915050565b6000602082840312156153775761537661450e565b5b60006153858482850161534c565b91505092915050565b6000819050919050565b60006153b36153ae6153a98461538e565b61461d565b614571565b9050919050565b6153c381615398565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153fe81614533565b82525050565b600061541083836153f5565b60208301905092915050565b6000602082019050919050565b6000615434826153c9565b61543e81856153d4565b9350615449836153e5565b8060005b8381101561547a5781516154618882615404565b975061546c8361541c565b92505060018101905061544d565b5085935050505092915050565b600060a08201905061549c6000830188614697565b6154a960208301876153ba565b81810360408301526154bb8186615429565b90506154ca6060830185614811565b6154d76080830184614697565b9695505050505050565b600060c0820190506154f66000830189614811565b6155036020830188614697565b61551060408301876153ba565b61551d60608301866153ba565b61552a6080830185614811565b61553760a0830184614697565b979650505050505050565b6000815190506155518161457b565b92915050565b6000806000606084860312156155705761556f61450e565b5b600061557e86828701615542565b935050602061558f86828701615542565b92505060406155a086828701615542565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca4404b9d53303d37fc52931f4a351de9aa7aac6d472b5110f225416835e303b64736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806370a0823111610139578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e146108b5578063e6c75f71146108f2578063ea2f0b371461091d578063ec28438a14610946578063f2fde38b1461096f578063fb201b1d1461099857610251565b8063a9059cbb146107d0578063aee50b1e1461080d578063c0b0fda214610836578063c49b9a8014610861578063d2d7ad831461088a57610251565b806388f82020116100fd57806388f82020146106d75780638da5cb5b1461071457806391d55f411461073f57806395d89b4114610768578063a457c2d71461079357610251565b806370a0823114610602578063715018a61461063f57806375f0a874146106565780637d1db4a51461068157806385141a77146106ac57610251565b80633b124fe7116101c757806349bd5a5e1161018b57806349bd5a5e1461052f5780634a74bb021461055a57806352390c02146105855780635d098b38146105ae5780636bc87c3a146105d757610251565b80633b124fe71461044a5780633bd5d17314610475578063437823ec1461049e5780634549b039146104c757806347535d7b1461050457610251565b806323b872dd1161020e57806323b872dd1461033f5780632d8381191461037c578063313ce567146103b95780633685d419146103e4578063395093511461040d57610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e957806322976e0d1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109af565b60405161027891906144ec565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906145a7565b610a41565b6040516102b59190614602565b60405180910390f35b3480156102ca57600080fd5b506102d3610a5f565b6040516102e0919061467c565b60405180910390f35b3480156102f557600080fd5b506102fe610a85565b60405161030b91906146a6565b60405180910390f35b34801561032057600080fd5b50610329610a8f565b60405161033691906146a6565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906146c1565b610a95565b6040516103739190614602565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614714565b610b6e565b6040516103b091906146a6565b60405180910390f35b3480156103c557600080fd5b506103ce610bdc565b6040516103db919061475d565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190614778565b610bf3565b005b34801561041957600080fd5b50610434600480360381019061042f91906145a7565b610f28565b6040516104419190614602565b60405180910390f35b34801561045657600080fd5b5061045f610fdb565b60405161046c91906146a6565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190614714565b610fe1565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190614778565b61115c565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906147d1565b611233565b6040516104fb91906146a6565b60405180910390f35b34801561051057600080fd5b506105196112b7565b6040516105269190614602565b60405180910390f35b34801561053b57600080fd5b506105446112ca565b6040516105519190614820565b60405180910390f35b34801561056657600080fd5b5061056f6112f0565b60405161057c9190614602565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190614778565b611303565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190614879565b61159e565b005b3480156105e357600080fd5b506105ec61165e565b6040516105f991906146a6565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190614778565b611664565b60405161063691906146a6565b60405180910390f35b34801561064b57600080fd5b5061065461174f565b005b34801561066257600080fd5b5061066b6117d7565b60405161067891906148b5565b60405180910390f35b34801561068d57600080fd5b506106966117fd565b6040516106a391906146a6565b60405180910390f35b3480156106b857600080fd5b506106c1611803565b6040516106ce9190614820565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614778565b611829565b60405161070b9190614602565b60405180910390f35b34801561072057600080fd5b5061072961187f565b6040516107369190614820565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190614714565b6118a8565b005b34801561077457600080fd5b5061077d61198c565b60405161078a91906144ec565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b591906145a7565b611a1e565b6040516107c79190614602565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906145a7565b611aeb565b6040516108049190614602565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190614714565b611b09565b005b34801561084257600080fd5b5061084b611b8f565b60405161085891906146a6565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906148d0565b611b95565b005b34801561089657600080fd5b5061089f611c65565b6040516108ac91906146a6565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906148fd565b611c6b565b6040516108e991906146a6565b60405180910390f35b3480156108fe57600080fd5b50610907611cf2565b60405161091491906146a6565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f9190614778565b611cf8565b005b34801561095257600080fd5b5061096d60048036038101906109689190614714565b611dcf565b005b34801561097b57600080fd5b5061099660048036038101906109919190614778565b611eb4565b005b3480156109a457600080fd5b506109ad611fab565b005b6060600a80546109be9061496c565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea9061496c565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a55610a4e6120a1565b84846120a9565b6001905092915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b60135481565b6000610aa2848484612272565b610b6384610aae6120a1565b610b5e856040518060600160405280602881526020016155ab60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b146120a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ac9092919063ffffffff16565b6120a9565b600190509392505050565b6000600854821115610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90614a0f565b60405180910390fd5b6000610bbf612601565b9050610bd4818461262c90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b610bfb6120a1565b73ffffffffffffffffffffffffffffffffffffffff16610c1961187f565b73ffffffffffffffffffffffffffffffffffffffff1614610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690614a7b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290614ae7565b60405180910390fd5b60005b600680549050811015610f24578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d3657610d35614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f115760066001600680549050610d909190614b65565b81548110610da157610da0614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610de057610ddf614b07565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610ed757610ed6614b99565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f24565b8080610f1c90614bc8565b915050610cfe565b5050565b6000610fd1610f356120a1565b84610fcc8560036000610f466120a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b6120a9565b6001905092915050565b600f5481565b6000610feb6120a1565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c82565b60405180910390fd5b600061108583612658565b505050505090506110de81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611136816008546126b490919063ffffffff16565b6008819055506111518360095461264290919063ffffffff16565b600981905550505050565b6111646120a1565b73ffffffffffffffffffffffffffffffffffffffff1661118261187f565b73ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90614a7b565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190614cee565b60405180910390fd5b8161129a57600061128a84612658565b50505050509050809150506112b1565b60006112a584612658565b50505050915050809150505b92915050565b600e60009054906101000a900460ff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b61130b6120a1565b73ffffffffffffffffffffffffffffffffffffffff1661132961187f565b73ffffffffffffffffffffffffffffffffffffffff161461137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137690614a7b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614ae7565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114e05761149c600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115a66120a1565b73ffffffffffffffffffffffffffffffffffffffff166115c461187f565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190614a7b565b60405180910390fd5b80600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116ff57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061174a565b611747600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b90505b919050565b6117576120a1565b73ffffffffffffffffffffffffffffffffffffffff1661177561187f565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614a7b565b60405180910390fd5b6117d560006126ca565b565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118b06120a1565b73ffffffffffffffffffffffffffffffffffffffff166118ce61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614a7b565b60405180910390fd5b80601c8190555061194660c8611938610a85565b61262c90919063ffffffff16565b601c5411611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090614d5a565b60405180910390fd5b50565b6060600b805461199b9061496c565b80601f01602080910402602001604051908101604052809291908181526020018280546119c79061496c565b8015611a145780601f106119e957610100808354040283529160200191611a14565b820191906000526020600020905b8154815290600101906020018083116119f757829003601f168201915b5050505050905090565b6000611ae1611a2b6120a1565b84611adc856040518060600160405280602581526020016155d36025913960036000611a556120a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ac9092919063ffffffff16565b6120a9565b6001905092915050565b6000611aff611af86120a1565b8484612272565b6001905092915050565b611b116120a1565b73ffffffffffffffffffffffffffffffffffffffff16611b2f61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614a7b565b60405180910390fd5b80601a8190555050565b60155481565b611b9d6120a1565b73ffffffffffffffffffffffffffffffffffffffff16611bbb61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614a7b565b60405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c5a9190614602565b60405180910390a150565b601a5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b611d006120a1565b73ffffffffffffffffffffffffffffffffffffffff16611d1e61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90614a7b565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611dd76120a1565b73ffffffffffffffffffffffffffffffffffffffff16611df561187f565b73ffffffffffffffffffffffffffffffffffffffff1614611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4290614a7b565b60405180910390fd5b80601b81905550611e6e61012c611e60610a85565b61262c90919063ffffffff16565b601b5411611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890614d5a565b60405180910390fd5b50565b611ebc6120a1565b73ffffffffffffffffffffffffffffffffffffffff16611eda61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614a7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614dec565b60405180910390fd5b611fa8816126ca565b50565b611fb36120a1565b73ffffffffffffffffffffffffffffffffffffffff16611fd161187f565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614a7b565b60405180910390fd5b60011515600e60009054906101000a900460ff1615150361207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614e58565b60405180910390fd5b6001600e60006101000a81548160ff02191690831515021790555042600d81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90614eea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90614f7c565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161226591906146a6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d89061500e565b60405180910390fd5b60008111612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906150a0565b60405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123c75750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506123d161187f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146124245760011515600e60009054906101000a900460ff1615151461242357600080fd5b5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561247f575080155b156124e357600061248f84611664565b9050601c5483826124a091906150c0565b11156124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890615188565b60405180910390fd5b505b60006124ee30611664565b90506000601a5482101590508080156125145750601960149054906101000a900460ff16155b801561256d5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156125855750601960159054906101000a900460ff165b1561259957601a5491506125988261278e565b5b6125a4868686612928565b505050505050565b60008383111582906125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb91906144ec565b60405180910390fd5b5082840390509392505050565b600080600061260e612daf565b91509150612625818361262c90919063ffffffff16565b9250505090565b6000818361263a91906151d7565b905092915050565b6000818361265091906150c0565b905092915050565b600080600080600080600080600061266f8a613062565b925092509250600080600061268d8d8686612688612601565b6130bc565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600081836126c29190614b65565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601960146101000a81548160ff02191690831515021790555060006127e86127c560135460115461264290919063ffffffff16565b6127da6011548561314590919063ffffffff16565b61262c90919063ffffffff16565b9050600061280060028361262c90919063ffffffff16565b9050600061281782846126b490919063ffffffff16565b905060004790506128278361315b565b600061283c82476126b490919063ffffffff16565b905061284883826133d4565b61286361285e86886126b490919063ffffffff16565b61315b565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156128cb573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516128fd929190615208565b60405180910390a150505050506000601960146101000a81548160ff02191690831515021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612994575061a8c0600d5461299091906150c0565b4211155b156129ba576002600f819055506006601181905550600860138190555060046015819055505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a5b5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a6d57612a6861348c565b612ab3565b601b54811115612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa9906152a3565b60405180910390fd5b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b565750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6b57612b668383836134ae565b612da2565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c0e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c2357612c1e83838361370e565b612da1565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cc75750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cdc57612cd783838361396e565b612da0565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d7e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d9357612d8e838383613b61565b612d9f565b612d9e83838361396e565b5b5b5b5b612daa613e56565b505050565b600080600060085490506000600754905060005b60068054905081101561302557826001600060068481548110612de957612de8614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ed75750816002600060068481548110612e6f57612e6e614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612eee576008546007549450945050505061305e565b612f7e6001600060068481548110612f0957612f08614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846126b490919063ffffffff16565b92506130106002600060068481548110612f9b57612f9a614b07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836126b490919063ffffffff16565b9150808061301d90614bc8565b915050612dc3565b5061303d60075460085461262c90919063ffffffff16565b8210156130555760085460075493509350505061305e565b81819350935050505b9091565b60008060008061307185613e7c565b9050600061307e86613ead565b905060006130a782613099858a6126b490919063ffffffff16565b6126b490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130d5858961314590919063ffffffff16565b905060006130ec868961314590919063ffffffff16565b90506000613103878961314590919063ffffffff16565b9050600061312c8261311e85876126b490919063ffffffff16565b6126b490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361315391906152c3565b905092915050565b6000600267ffffffffffffffff8111156131785761317761531d565b5b6040519080825280602002602001820160405280156131a65781602001602082028036833780820191505090505b50905030816000815181106131be576131bd614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132899190615361565b8160018151811061329d5761329c614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161330430601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c6b565b101561333a5761333930601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196120a9565b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161339e959493929190615487565b600060405180830381600087803b1580156133b857600080fd5b505af11580156133cc573d6000803e3d6000fd5b505050505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061342061187f565b426040518863ffffffff1660e01b8152600401613442969594939291906154e1565b60606040518083038185885af1158015613460573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134859190615557565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b6000806000806000806134c087612658565b95509550955095509550955061351e87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369481613ede565b61369e8483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136fb91906146a6565b60405180910390a3505050505050505050565b60008060008060008061372087612658565b95509550955095509550955061377e86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381383600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138a885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138f481613ede565b6138fe8483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161395b91906146a6565b60405180910390a3505050505050505050565b60008060008060008061398087612658565b9550955095509550955095506139988984878a6140bd565b80965081945050506139ac8984878a614255565b8096508194505050613a0686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ae781613ede565b613af18483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b4e91906146a6565b60405180910390a3505050505050505050565b600080600080600080613b7387612658565b955095509550955095509550613bd187600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cfb83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d9085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ddc81613ede565b613de68483614083565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e4391906146a6565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550601454601381905550601654601581905550565b6000613ea66064613e98600f548561314590919063ffffffff16565b61262c90919063ffffffff16565b9050919050565b6000613ed76064613ec96011548561314590919063ffffffff16565b61262c90919063ffffffff16565b9050919050565b6000613ee8612601565b90506000613eff828461314590919063ffffffff16565b9050613f5381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561407e5761403a83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614098826008546126b490919063ffffffff16565b6008819055506140b38160095461264290919063ffffffff16565b6009819055505050565b6000806000601354036140d55784849150915061424c565b60006140ff6013546140f160648761262c90919063ffffffff16565b61314590919063ffffffff16565b9050600061411d61410e612601565b8361314590919063ffffffff16565b905061413281876126b490919063ffffffff16565b955061414782886126b490919063ffffffff16565b965061419b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161423b91906146a6565b60405180910390a386869350935050505b94509492505050565b60008060006015540361426d5784849150915061444a565b600061429760155461428960648761262c90919063ffffffff16565b61314590919063ffffffff16565b905060006142b56142a6612601565b8361314590919063ffffffff16565b90506142ca81876126b490919063ffffffff16565b95506142df82886126b490919063ffffffff16565b96506143558160016000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264290919063ffffffff16565b60016000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161443991906146a6565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561448d578082015181840152602081019050614472565b8381111561449c576000848401525b50505050565b6000601f19601f8301169050919050565b60006144be82614453565b6144c8818561445e565b93506144d881856020860161446f565b6144e1816144a2565b840191505092915050565b6000602082019050818103600083015261450681846144b3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061453e82614513565b9050919050565b61454e81614533565b811461455957600080fd5b50565b60008135905061456b81614545565b92915050565b6000819050919050565b61458481614571565b811461458f57600080fd5b50565b6000813590506145a18161457b565b92915050565b600080604083850312156145be576145bd61450e565b5b60006145cc8582860161455c565b92505060206145dd85828601614592565b9150509250929050565b60008115159050919050565b6145fc816145e7565b82525050565b600060208201905061461760008301846145f3565b92915050565b6000819050919050565b600061464261463d61463884614513565b61461d565b614513565b9050919050565b600061465482614627565b9050919050565b600061466682614649565b9050919050565b6146768161465b565b82525050565b6000602082019050614691600083018461466d565b92915050565b6146a081614571565b82525050565b60006020820190506146bb6000830184614697565b92915050565b6000806000606084860312156146da576146d961450e565b5b60006146e88682870161455c565b93505060206146f98682870161455c565b925050604061470a86828701614592565b9150509250925092565b60006020828403121561472a5761472961450e565b5b600061473884828501614592565b91505092915050565b600060ff82169050919050565b61475781614741565b82525050565b6000602082019050614772600083018461474e565b92915050565b60006020828403121561478e5761478d61450e565b5b600061479c8482850161455c565b91505092915050565b6147ae816145e7565b81146147b957600080fd5b50565b6000813590506147cb816147a5565b92915050565b600080604083850312156147e8576147e761450e565b5b60006147f685828601614592565b9250506020614807858286016147bc565b9150509250929050565b61481a81614533565b82525050565b60006020820190506148356000830184614811565b92915050565b600061484682614513565b9050919050565b6148568161483b565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b60006020828403121561488f5761488e61450e565b5b600061489d84828501614864565b91505092915050565b6148af8161483b565b82525050565b60006020820190506148ca60008301846148a6565b92915050565b6000602082840312156148e6576148e561450e565b5b60006148f4848285016147bc565b91505092915050565b600080604083850312156149145761491361450e565b5b60006149228582860161455c565b92505060206149338582860161455c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061498457607f821691505b6020821081036149975761499661493d565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006149f9602a8361445e565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a6560208361445e565b9150614a7082614a2f565b602082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614ad1601b8361445e565b9150614adc82614a9b565b602082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b7082614571565b9150614b7b83614571565b925082821015614b8e57614b8d614b36565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614bd382614571565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c0557614c04614b36565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614c6c602c8361445e565b9150614c7782614c10565b604082019050919050565b60006020820190508181036000830152614c9b81614c5f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614cd8601f8361445e565b9150614ce382614ca2565b602082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000614d44600d8361445e565b9150614d4f82614d0e565b602082019050919050565b60006020820190508181036000830152614d7381614d37565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dd660268361445e565b9150614de182614d7a565b604082019050919050565b60006020820190508181036000830152614e0581614dc9565b9050919050565b7f747261646520697320416c7265616479206f70656e0000000000000000000000600082015250565b6000614e4260158361445e565b9150614e4d82614e0c565b602082019050919050565b60006020820190508181036000830152614e7181614e35565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed460248361445e565b9150614edf82614e78565b604082019050919050565b60006020820190508181036000830152614f0381614ec7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6660228361445e565b9150614f7182614f0a565b604082019050919050565b60006020820190508181036000830152614f9581614f59565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ff860258361445e565b915061500382614f9c565b604082019050919050565b6000602082019050818103600083015261502781614feb565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061508a60298361445e565b91506150958261502e565b604082019050919050565b600060208201905081810360008301526150b98161507d565b9050919050565b60006150cb82614571565b91506150d683614571565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561510b5761510a614b36565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061517260248361445e565b915061517d82615116565b604082019050919050565b600060208201905081810360008301526151a181615165565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151e282614571565b91506151ed83614571565b9250826151fd576151fc6151a8565b5b828204905092915050565b600060408201905061521d6000830185614697565b61522a6020830184614697565b9392505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061528d60288361445e565b915061529882615231565b604082019050919050565b600060208201905081810360008301526152bc81615280565b9050919050565b60006152ce82614571565b91506152d983614571565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561531257615311614b36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061535b81614545565b92915050565b6000602082840312156153775761537661450e565b5b60006153858482850161534c565b91505092915050565b6000819050919050565b60006153b36153ae6153a98461538e565b61461d565b614571565b9050919050565b6153c381615398565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153fe81614533565b82525050565b600061541083836153f5565b60208301905092915050565b6000602082019050919050565b6000615434826153c9565b61543e81856153d4565b9350615449836153e5565b8060005b8381101561547a5781516154618882615404565b975061546c8361541c565b92505060018101905061544d565b5085935050505092915050565b600060a08201905061549c6000830188614697565b6154a960208301876153ba565b81810360408301526154bb8186615429565b90506154ca6060830185614811565b6154d76080830184614697565b9695505050505050565b600060c0820190506154f66000830189614811565b6155036020830188614697565b61551060408301876153ba565b61551d60608301866153ba565b61552a6080830185614811565b61553760a0830184614697565b979650505050505050565b6000815190506155518161457b565b92915050565b6000806000606084860312156155705761556f61450e565b5b600061557e86828701615542565b935050602061558f86828701615542565b92505060406155a086828701615542565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca4404b9d53303d37fc52931f4a351de9aa7aac6d472b5110f225416835e303b64736f6c634300080f0033

Deployed Bytecode Sourcemap

23897:20606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26795:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27707:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25259:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27072:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24988:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27876:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29657:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26981:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30259:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28197:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24800:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43271:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29213:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24652:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25308:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25378:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29918:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43394:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24887:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27175:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11123:94;;;;;;;;;;;;;:::i;:::-;;24691:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25596:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25176:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28700:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10748:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43660:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26886:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28423:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27381:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43528:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25092:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44051:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25534:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27556:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25650:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43153:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43858:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11372:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44230:170;;;;;;;;;;;;;:::i;:::-;;26795:83;26832:13;26865:5;26858:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26795:83;:::o;27707:161::-;27782:4;27799:39;27808:12;:10;:12::i;:::-;27822:7;27831:6;27799:8;:39::i;:::-;27856:4;27849:11;;27707:161;;;;:::o;25259:42::-;;;;;;;;;;;;;:::o;27072:95::-;27125:7;27152;;27145:14;;27072:95;:::o;24988:32::-;;;;:::o;27876:313::-;27974:4;27991:36;28001:6;28009:9;28020:6;27991:9;:36::i;:::-;28038:121;28047:6;28055:12;:10;:12::i;:::-;28069:89;28107:6;28069:89;;;;;;;;;;;;;;;;;:11;:19;28081:6;28069:19;;;;;;;;;;;;;;;:33;28089:12;:10;:12::i;:::-;28069:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28038:8;:121::i;:::-;28177:4;28170:11;;27876:313;;;;;:::o;29657:253::-;29723:7;29762;;29751;:18;;29743:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29827:19;29850:10;:8;:10::i;:::-;29827:33;;29878:24;29890:11;29878:7;:11;;:24;;;;:::i;:::-;29871:31;;;29657:253;;;:::o;26981:83::-;27022:5;27047:9;;;;;;;;;;;27040:16;;26981:83;:::o;30259:479::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30341:11:::1;:20;30353:7;30341:20;;;;;;;;;;;;;;;;;;;;;;;;;30333:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30409:9;30404:327;30428:9;:16;;;;30424:1;:20;30404:327;;;30486:7;30470:23;;:9;30480:1;30470:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;30466:254:::1;;30529:9;30558:1;30539:9;:16;;;;:20;;;;:::i;:::-;30529:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30514:9;30524:1;30514:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30598:1;30579:7;:16;30587:7;30579:16;;;;;;;;;;;;;;;:20;;;;30641:5;30618:11;:20;30630:7;30618:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30665:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;30699:5;;30466:254;30446:3;;;;;:::i;:::-;;;;30404:327;;;;30259:479:::0;:::o;28197:218::-;28285:4;28302:83;28311:12;:10;:12::i;:::-;28325:7;28334:50;28373:10;28334:11;:25;28346:12;:10;:12::i;:::-;28334:25;;;;;;;;;;;;;;;:34;28360:7;28334:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28302:8;:83::i;:::-;28403:4;28396:11;;28197:218;;;;:::o;24800:26::-;;;;:::o;28828:377::-;28880:14;28897:12;:10;:12::i;:::-;28880:29;;28929:11;:19;28941:6;28929:19;;;;;;;;;;;;;;;;;;;;;;;;;28928:20;28920:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;29009:15;29033:19;29044:7;29033:10;:19::i;:::-;29008:44;;;;;;;29081:28;29101:7;29081;:15;29089:6;29081:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29063:7;:15;29071:6;29063:15;;;;;;;;;;;;;;;:46;;;;29130:20;29142:7;29130;;:11;;:20;;;;:::i;:::-;29120:7;:30;;;;29174:23;29189:7;29174:10;;:14;;:23;;;;:::i;:::-;29161:10;:36;;;;28869:336;;28828:377;:::o;43271:111::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43370:4:::1;43340:18;:27;43359:7;43340:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43271:111:::0;:::o;29213:436::-;29303:7;29342;;29331;:18;;29323:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29401:17;29396:246;;29436:15;29460:19;29471:7;29460:10;:19::i;:::-;29435:44;;;;;;;29501:7;29494:14;;;;;29396:246;29543:23;29574:19;29585:7;29574:10;:19::i;:::-;29541:52;;;;;;;29615:15;29608:22;;;29213:436;;;;;:::o;24652:26::-;;;;;;;;;;;;;:::o;25308:29::-;;;;;;;;;;;;;:::o;25378:40::-;;;;;;;;;;;;;:::o;29918:333::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30001:11:::1;:20;30013:7;30001:20;;;;;;;;;;;;;;;;;;;;;;;;;30000:21;29992:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30086:1;30067:7;:16;30075:7;30067:16;;;;;;;;;;;;;;;;:20;30064:108;;;30123:37;30143:7;:16;30151:7;30143:16;;;;;;;;;;;;;;;;30123:19;:37::i;:::-;30104:7;:16;30112:7;30104:16;;;;;;;;;;;;;;;:56;;;;30064:108;30205:4;30182:11;:20;30194:7;30182:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30220:9;30235:7;30220:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29918:333:::0;:::o;43394:122::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43499:9:::1;43481:15;;:27;;;;;;;;;;;;;;;;;;43394:122:::0;:::o;24887:32::-;;;;:::o;27175:198::-;27241:7;27265:11;:20;27277:7;27265:20;;;;;;;;;;;;;;;;;;;;;;;;;27261:49;;;27294:7;:16;27302:7;27294:16;;;;;;;;;;;;;;;;27287:23;;;;27261:49;27328:37;27348:7;:16;27356:7;27348:16;;;;;;;;;;;;;;;;27328:19;:37::i;:::-;27321:44;;27175:198;;;;:::o;11123:94::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11188:21:::1;11206:1;11188:9;:21::i;:::-;11123:94::o:0;24691:92::-;;;;;;;;;;;;;:::o;25596:47::-;;;;:::o;25176:70::-;;;;;;;;;;;;;:::o;28700:120::-;28768:4;28792:11;:20;28804:7;28792:20;;;;;;;;;;;;;;;;;;;;;;;;;28785:27;;28700:120;;;:::o;10748:87::-;10794:7;10821:6;;;;;;;;;;;10814:13;;10748:87;:::o;43660:186::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43752:9:::1;43735:14;:26;;;;43799:22;43817:3;43799:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;43782:14;;:39;43774:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43660:186:::0;:::o;26886:87::-;26925:13;26958:7;26951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26886:87;:::o;28423:269::-;28516:4;28533:129;28542:12;:10;:12::i;:::-;28556:7;28565:96;28604:15;28565:96;;;;;;;;;;;;;;;;;:11;:25;28577:12;:10;:12::i;:::-;28565:25;;;;;;;;;;;;;;;:34;28591:7;28565:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;28533:8;:129::i;:::-;28680:4;28673:11;;28423:269;;;;:::o;27381:167::-;27459:4;27476:42;27486:12;:10;:12::i;:::-;27500:9;27511:6;27476:9;:42::i;:::-;27536:4;27529:11;;27381:167;;;;:::o;43528:124::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43638:6:::1;43612:23;:32;;;;43528:124:::0;:::o;25092:27::-;;;;:::o;44051:171::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44152:8:::1;44128:21;;:32;;;;;;;;;;;;;;;;;;44176:38;44205:8;44176:38;;;;;;:::i;:::-;;;;;;;;44051:171:::0;:::o;25534:55::-;;;;:::o;27556:143::-;27637:7;27664:11;:18;27676:5;27664:18;;;;;;;;;;;;;;;:27;27683:7;27664:27;;;;;;;;;;;;;;;;27657:34;;27556:143;;;;:::o;25650:49::-;;;;:::o;43153:110::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43250:5:::1;43220:18;:27;43239:7;43220:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43153:110:::0;:::o;43858:185::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43950:11:::1;43935:12;:26;;;;43995:22;44013:3;43995:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;43980:12;;:37;43972:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43858:185:::0;:::o;11372:192::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11481:1:::1;11461:22;;:8;:22;;::::0;11453:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11537:19;11547:8;11537:9;:19::i;:::-;11372:192:::0;:::o;44230:170::-;10979:12;:10;:12::i;:::-;10968:23;;:7;:5;:7::i;:::-;:23;;;10960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44299:4:::1;44289:14;;:6;;;;;;;;;;;:14;;::::0;44281:48:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44349:4;44340:6;;:13;;;;;;;;;;;;;;;;;;44377:15;44364:10;:28;;;;44230:170::o:0;2851:98::-;2904:7;2931:10;2924:17;;2851:98;:::o;34580:337::-;34690:1;34673:19;;:5;:19;;;34665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34771:1;34752:21;;:7;:21;;;34744:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34855:6;34825:11;:18;34837:5;34825:18;;;;;;;;;;;;;;;:27;34844:7;34825:27;;;;;;;;;;;;;;;:36;;;;34893:7;34877:32;;34886:5;34877:32;;;34902:6;34877:32;;;;;;:::i;:::-;;;;;;;;34580:337;;;:::o;34925:1223::-;35030:1;35014:18;;:4;:18;;;35006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35102:1;35093:6;:10;35085:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35162:20;35185:18;:24;35204:4;35185:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35213:18;:22;35232:2;35213:22;;;;;;;;;;;;;;;;;;;;;;;;;35185:50;35162:73;;35268:7;:5;:7::i;:::-;35260:15;;:4;:15;;;35256:71;;35310:4;35300:14;;:6;;;;;;;;;;;:14;;;35292:23;;;;;;35256:71;35351:13;;;;;;;;;;;35343:21;;:4;:21;;;:41;;;;;35369:15;35368:16;35343:41;35339:237;;;35401:32;35436:13;35446:2;35436:9;:13::i;:::-;35401:48;;35509:14;;35499:6;35472:24;:33;;;;:::i;:::-;:51;;35464:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35386:190;35339:237;35588:28;35619:24;35637:4;35619:9;:24::i;:::-;35588:55;;35662:24;35713:23;;35689:20;:47;;35662:74;;35765:19;:53;;;;;35802:16;;;;;;;;;;;35801:17;35765:53;:89;;;;;35841:13;;;;;;;;;;;35835:19;;:2;:19;;;35765:89;:127;;;;;35871:21;;;;;;;;;;;35765:127;35747:343;;;35942:23;;35919:46;;36042:36;36057:20;36042:14;:36::i;:::-;35747:343;36110:30;36125:4;36130:2;36133:6;36110:14;:30::i;:::-;34995:1153;;;34925:1223;;;:::o;20040:240::-;20160:7;20218:1;20213;:6;;20221:12;20205:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20260:1;20256;:5;20249:12;;20040:240;;;;;:::o;32753:163::-;32794:7;32815:15;32832;32851:19;:17;:19::i;:::-;32814:56;;;;32888:20;32900:7;32888;:11;;:20;;;;:::i;:::-;32881:27;;;;32753:163;:::o;19828:98::-;19886:7;19917:1;19913;:5;;;;:::i;:::-;19906:12;;19828:98;;;;:::o;19510:::-;19568:7;19599:1;19595;:5;;;;:::i;:::-;19588:12;;19510:98;;;;:::o;31551:419::-;31610:7;31619;31628;31637;31646;31655;31676:23;31701:12;31715:18;31737:20;31749:7;31737:11;:20::i;:::-;31675:82;;;;;;31769:15;31786:23;31811:12;31827:50;31839:7;31848:4;31854:10;31866;:8;:10::i;:::-;31827:11;:50::i;:::-;31768:109;;;;;;31896:7;31905:15;31922:4;31928:15;31945:4;31951:10;31888:74;;;;;;;;;;;;;;;;;;31551:419;;;;;;;:::o;19616:98::-;19674:7;19705:1;19701;:5;;;;:::i;:::-;19694:12;;19616:98;;;;:::o;11572:173::-;11628:16;11647:6;;;;;;;;;;;11628:25;;11673:8;11664:6;;:17;;;;;;;;;;;;;;;;;;11728:8;11697:40;;11718:8;11697:40;;;;;;;;;;;;11617:128;11572:173;:::o;36156:1316::-;25986:4;25967:16;;:23;;;;;;;;;;;;;;;;;;36275:26:::1;36304:77;36348:32;36366:13;;36348;;:17;;:32;;;;:::i;:::-;36304:39;36329:13;;36304:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;36275:106;;36460:12;36475:25;36498:1;36475:18;:22;;:25;;;;:::i;:::-;36460:40;;36511:17;36531:28;36554:4;36531:18;:22;;:28;;;;:::i;:::-;36511:48;;36837:22;36862:21;36837:46;;36928:22;36945:4;36928:16;:22::i;:::-;37081:18;37102:41;37128:14;37102:21;:25;;:41;;;;:::i;:::-;37081:62;;37193:35;37206:9;37217:10;37193:12;:35::i;:::-;37292:62;37309:44;37334:18;37309:20;:24;;:44;;;;:::i;:::-;37292:16;:62::i;:::-;37367:15;;;;;;;;;;;:24;;:47;37392:21;37367:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37432:32;37447:4;37453:10;37432:32;;;;;;;:::i;:::-;;;;;;;;36230:1242;;;;;26032:5:::0;26013:16;;:24;;;;;;;;;;;;;;;;;;36156:1316;:::o;38669:1298::-;38779:13;;;;;;;;;;;38768:24;;:9;:24;;;:70;;;;;38829:8;38816:10;;:21;;;;:::i;:::-;38797:15;:40;;38768:70;38765:273;;;38932:1;38922:7;:11;;;;38964:1;38948:13;:17;;;;38996:1;38980:13;:17;;;;39023:1;39012:8;:12;;;;38765:273;39061:18;:26;39080:6;39061:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39091:18;:29;39110:9;39091:29;;;;;;;;;;;;;;;;;;;;;;;;;39061:59;39058:245;;;39148:14;:12;:14::i;:::-;39058:245;;;39234:12;;39224:6;:22;;39216:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39058:245;39339:11;:19;39351:6;39339:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;39363:11;:22;39375:9;39363:22;;;;;;;;;;;;;;;;;;;;;;;;;39362:23;39339:46;39335:597;;;39402:48;39424:6;39432:9;39443:6;39402:21;:48::i;:::-;39335:597;;;39473:11;:19;39485:6;39473:19;;;;;;;;;;;;;;;;;;;;;;;;;39472:20;:46;;;;;39496:11;:22;39508:9;39496:22;;;;;;;;;;;;;;;;;;;;;;;;;39472:46;39468:464;;;39535:46;39555:6;39563:9;39574:6;39535:19;:46::i;:::-;39468:464;;;39604:11;:19;39616:6;39604:19;;;;;;;;;;;;;;;;;;;;;;;;;39603:20;:47;;;;;39628:11;:22;39640:9;39628:22;;;;;;;;;;;;;;;;;;;;;;;;;39627:23;39603:47;39599:333;;;39667:44;39685:6;39693:9;39704:6;39667:17;:44::i;:::-;39599:333;;;39733:11;:19;39745:6;39733:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;39756:11;:22;39768:9;39756:22;;;;;;;;;;;;;;;;;;;;;;;;;39733:45;39729:203;;;39795:48;39817:6;39825:9;39836:6;39795:21;:48::i;:::-;39729:203;;;39876:44;39894:6;39902:9;39913:6;39876:17;:44::i;:::-;39729:203;39599:333;39468:464;39335:597;39944:15;:13;:15::i;:::-;38669:1298;;;:::o;32924:561::-;32974:7;32983;33003:15;33021:7;;33003:25;;33039:15;33057:7;;33039:25;;33086:9;33081:289;33105:9;:16;;;;33101:1;:20;33081:289;;;33171:7;33147;:21;33155:9;33165:1;33155:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33147:21;;;;;;;;;;;;;;;;:31;:66;;;;33206:7;33182;:21;33190:9;33200:1;33190:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33182:21;;;;;;;;;;;;;;;;:31;33147:66;33143:97;;;33223:7;;33232;;33215:25;;;;;;;;;33143:97;33265:34;33277:7;:21;33285:9;33295:1;33285:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33277:21;;;;;;;;;;;;;;;;33265:7;:11;;:34;;;;:::i;:::-;33255:44;;33324:34;33336:7;:21;33344:9;33354:1;33344:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33336:21;;;;;;;;;;;;;;;;33324:7;:11;;:34;;;;:::i;:::-;33314:44;;33123:3;;;;;:::i;:::-;;;;33081:289;;;;33394:20;33406:7;;33394;;:11;;:20;;;;:::i;:::-;33384:7;:30;33380:61;;;33424:7;;33433;;33416:25;;;;;;;;33380:61;33460:7;33469;33452:25;;;;;;32924:561;;;:::o;31978:330::-;32038:7;32047;32056;32076:12;32091:24;32107:7;32091:15;:24::i;:::-;32076:39;;32126:18;32147:30;32169:7;32147:21;:30::i;:::-;32126:51;;32188:23;32214:33;32236:10;32214:17;32226:4;32214:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;32188:59;;32266:15;32283:4;32289:10;32258:42;;;;;;;;;31978:330;;;;;:::o;32316:429::-;32431:7;32440;32449;32469:15;32487:24;32499:11;32487:7;:11;;:24;;;;:::i;:::-;32469:42;;32522:12;32537:21;32546:11;32537:4;:8;;:21;;;;:::i;:::-;32522:36;;32569:18;32590:27;32605:11;32590:10;:14;;:27;;;;:::i;:::-;32569:48;;32628:23;32654:33;32676:10;32654:17;32666:4;32654:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;32628:59;;32706:7;32715:15;32732:4;32698:39;;;;;;;;;;32316:429;;;;;;;;:::o;19722:98::-;19780:7;19811:1;19807;:5;;;;:::i;:::-;19800:12;;19722:98;;;;:::o;37480:692::-;37606:21;37644:1;37630:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37606:40;;37675:4;37657;37662:1;37657:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37701:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37691:4;37696:1;37691:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37792:11;37739:50;37757:4;37772:15;;;;;;;;;;;37739:9;:50::i;:::-;:64;37736:156;;;37818:62;37835:4;37850:15;;;;;;;;;;;37877:1;37868:11;37818:8;:62::i;:::-;37736:156;37930:15;;;;;;;;;;;:66;;;38011:11;38037:1;38081:4;38108;38128:15;37930:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37535:637;37480:692;:::o;38180:391::-;38301:15;;;;;;;;;;;:31;;;38340:9;38373:4;38393:11;38419:1;38462;38505:7;:5;:7::i;:::-;38527:15;38301:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38180:391;;:::o;34208:141::-;34261:1;34251:7;:11;;;;34289:1;34273:13;:17;;;;34317:1;34301:13;:17;;;;34340:1;34329:8;:12;;;;34208:141::o;41985:566::-;42088:15;42105:23;42130:12;42144:23;42169:12;42183:18;42205:19;42216:7;42205:10;:19::i;:::-;42087:137;;;;;;;;;;;;42253:28;42273:7;42253;:15;42261:6;42253:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42235:7;:15;42243:6;42235:15;;;;;;;;;;;;;;;:46;;;;42310:28;42330:7;42310;:15;42318:6;42310:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42292:7;:15;42300:6;42292:15;;;;;;;;;;;;;;;:46;;;;42370:39;42393:15;42370:7;:18;42378:9;42370:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42349:7;:18;42357:9;42349:18;;;;;;;;;;;;;;;:60;;;;42423:26;42438:10;42423:14;:26::i;:::-;42460:23;42472:4;42478;42460:11;:23::i;:::-;42516:9;42499:44;;42508:6;42499:44;;;42527:15;42499:44;;;;;;:::i;:::-;;;;;;;;42076:475;;;;;;41985:566;;;:::o;42559:586::-;42660:15;42677:23;42702:12;42716:23;42741:12;42755:18;42777:19;42788:7;42777:10;:19::i;:::-;42659:137;;;;;;;;;;;;42825:28;42845:7;42825;:15;42833:6;42825:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42807:7;:15;42815:6;42807:15;;;;;;;;;;;;;;;:46;;;;42885:39;42908:15;42885:7;:18;42893:9;42885:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42864:7;:18;42872:9;42864:18;;;;;;;;;;;;;;;:60;;;;42956:39;42979:15;42956:7;:18;42964:9;42956:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42935:7;:18;42943:9;42935:18;;;;;;;;;;;;;;;:60;;;;43017:26;43032:10;43017:14;:26::i;:::-;43054:23;43066:4;43072;43054:11;:23::i;:::-;43110:9;43093:44;;43102:6;43093:44;;;43121:15;43093:44;;;;;;:::i;:::-;;;;;;;;42648:497;;;;;;42559:586;;;:::o;39975:721::-;40074:15;40091:23;40116:12;40130:23;40155:12;40169:18;40191:19;40202:7;40191:10;:19::i;:::-;40073:137;;;;;;;;;;;;40258:64;40272:6;40280:15;40297;40314:7;40258:13;:64::i;:::-;40221:101;;;;;;;;40370:59;40379:6;40387:15;40404;40421:7;40370:8;:59::i;:::-;40333:96;;;;;;;;40458:28;40478:7;40458;:15;40466:6;40458:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40440:7;:15;40448:6;40440:15;;;;;;;;;;;;;;;:46;;;;40518:39;40541:15;40518:7;:18;40526:9;40518:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40497:7;:18;40505:9;40497:18;;;;;;;;;;;;;;;:60;;;;40568:26;40583:10;40568:14;:26::i;:::-;40605:23;40617:4;40623;40605:11;:23::i;:::-;40661:9;40644:44;;40653:6;40644:44;;;40672:15;40644:44;;;;;;:::i;:::-;;;;;;;;40062:634;;;;;;39975:721;;;:::o;30746:642::-;30849:15;30866:23;30891:12;30905:23;30930:12;30944:18;30966:19;30977:7;30966:10;:19::i;:::-;30848:137;;;;;;;;;;;;31014:28;31034:7;31014;:15;31022:6;31014:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30996:7;:15;31004:6;30996:15;;;;;;;;;;;;;;;:46;;;;31071:28;31091:7;31071;:15;31079:6;31071:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31053:7;:15;31061:6;31053:15;;;;;;;;;;;;;;;:46;;;;31131:39;31154:15;31131:7;:18;31139:9;31131:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31110:7;:18;31118:9;31110:18;;;;;;;;;;;;;;;:60;;;;31202:39;31225:15;31202:7;:18;31210:9;31202:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31181:7;:18;31189:9;31181:18;;;;;;;;;;;;;;;:60;;;;31260:26;31275:10;31260:14;:26::i;:::-;31297:23;31309:4;31315;31297:11;:23::i;:::-;31353:9;31336:44;;31345:6;31336:44;;;31364:15;31336:44;;;;;;:::i;:::-;;;;;;;;30837:551;;;;;;30746:642;;;:::o;34361:207::-;34414:15;;34404:7;:25;;;;34455:21;;34439:13;:37;;;;34502:21;;34486:13;:37;;;;34544:16;;34533:8;:27;;;;34361:207::o;34042:154::-;34106:7;34133:55;34172:5;34133:20;34145:7;;34133;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;34126:62;;34042:154;;;:::o;33864:166::-;33934:7;33961:61;34006:5;33961:26;33973:13;;33961:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;33954:68;;33864:166;;;:::o;33497:355::-;33560:19;33583:10;:8;:10::i;:::-;33560:33;;33604:18;33625:27;33640:11;33625:10;:14;;:27;;;;:::i;:::-;33604:48;;33688:38;33715:10;33688:7;:22;33704:4;33688:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33663:7;:22;33679:4;33663:22;;;;;;;;;;;;;;;:63;;;;33740:11;:26;33760:4;33740:26;;;;;;;;;;;;;;;;;;;;;;;;;33737:107;;;33806:38;33833:10;33806:7;:22;33822:4;33806:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33781:7;:22;33797:4;33781:22;;;;;;;;;;;;;;;:63;;;;33737:107;33549:303;;33497:355;:::o;31396:147::-;31474:17;31486:4;31474:7;;:11;;:17;;;;:::i;:::-;31464:7;:27;;;;31515:20;31530:4;31515:10;;:14;;:20;;;;:::i;:::-;31502:10;:33;;;;31396:147;;:::o;40704:659::-;40832:7;40841;40878:1;40863:13;;:16;40860:67;;40891:15;40908;40884:40;;;;;;40860:67;40937:18;40958:35;40979:13;;40958:16;40970:3;40958:7;:11;;:16;;;;:::i;:::-;:20;;:35;;;;:::i;:::-;40937:56;;41004:18;41025:26;41040:10;:8;:10::i;:::-;41025;:14;;:26;;;;:::i;:::-;41004:47;;41080:31;41100:10;41080:15;:19;;:31;;;;:::i;:::-;41062:49;;41140:31;41160:10;41140:15;:19;;:31;;;;:::i;:::-;41122:49;;41207:38;41234:10;41207:7;:22;41223:4;41207:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;41182:7;:22;41198:4;41182:22;;;;;;;;;;;;;;;:63;;;;41286:4;41261:43;;41270:6;41261:43;;;41293:10;41261:43;;;;;;:::i;:::-;;;;;;;;41322:15;41339;41315:40;;;;;;40704:659;;;;;;;;:::o;41375:602::-;41498:7;41507;41540:1;41530:8;;:11;41527:62;;41553:15;41570;41546:40;;;;;;41527:62;41599:13;41615:30;41636:8;;41615:16;41627:3;41615:7;:11;;:16;;;;:::i;:::-;:20;;:30;;;;:::i;:::-;41599:46;;41656:13;41672:21;41682:10;:8;:10::i;:::-;41672:5;:9;;:21;;;;:::i;:::-;41656:37;;41722:26;41742:5;41722:15;:19;;:26;;;;:::i;:::-;41704:44;;41777:26;41797:5;41777:15;:19;;:26;;;;:::i;:::-;41759:44;;41836:30;41860:5;41836:7;:19;41844:10;;;;;;;;;;;41836:19;;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;41814:7;:19;41822:10;;;;;;;;;;;41814:19;;;;;;;;;;;;;;;:52;;;;41899:10;;;;;;;;;;;41882:35;;41891:6;41882:35;;;41911:5;41882:35;;;;;;:::i;:::-;;;;;;;;41935:15;41952;41928:40;;;;;;41375:602;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:116::-;6619:21;6634:5;6619:21;:::i;:::-;6612:5;6609:32;6599:60;;6655:1;6652;6645:12;6599:60;6549:116;:::o;6671:133::-;6714:5;6752:6;6739:20;6730:29;;6768:30;6792:5;6768:30;:::i;:::-;6671:133;;;;:::o;6810:468::-;6875:6;6883;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7058:1;7083:53;7128:7;7119:6;7108:9;7104:22;7083:53;:::i;:::-;7073:63;;7029:117;7185:2;7211:50;7253:7;7244:6;7233:9;7229:22;7211:50;:::i;:::-;7201:60;;7156:115;6810:468;;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:104::-;7681:7;7710:24;7728:5;7710:24;:::i;:::-;7699:35;;7636:104;;;:::o;7746:138::-;7827:32;7853:5;7827:32;:::i;:::-;7820:5;7817:43;7807:71;;7874:1;7871;7864:12;7807:71;7746:138;:::o;7890:155::-;7944:5;7982:6;7969:20;7960:29;;7998:41;8033:5;7998:41;:::i;:::-;7890:155;;;;:::o;8051:345::-;8118:6;8167:2;8155:9;8146:7;8142:23;8138:32;8135:119;;;8173:79;;:::i;:::-;8135:119;8293:1;8318:61;8371:7;8362:6;8351:9;8347:22;8318:61;:::i;:::-;8308:71;;8264:125;8051:345;;;;:::o;8402:142::-;8505:32;8531:5;8505:32;:::i;:::-;8500:3;8493:45;8402:142;;:::o;8550:254::-;8659:4;8697:2;8686:9;8682:18;8674:26;;8710:87;8794:1;8783:9;8779:17;8770:6;8710:87;:::i;:::-;8550:254;;;;:::o;8810:323::-;8866:6;8915:2;8903:9;8894:7;8890:23;8886:32;8883:119;;;8921:79;;:::i;:::-;8883:119;9041:1;9066:50;9108:7;9099:6;9088:9;9084:22;9066:50;:::i;:::-;9056:60;;9012:114;8810:323;;;;:::o;9139:474::-;9207:6;9215;9264:2;9252:9;9243:7;9239:23;9235:32;9232:119;;;9270:79;;:::i;:::-;9232:119;9390:1;9415:53;9460:7;9451:6;9440:9;9436:22;9415:53;:::i;:::-;9405:63;;9361:117;9517:2;9543:53;9588:7;9579:6;9568:9;9564:22;9543:53;:::i;:::-;9533:63;;9488:118;9139:474;;;;;:::o;9619:180::-;9667:77;9664:1;9657:88;9764:4;9761:1;9754:15;9788:4;9785:1;9778:15;9805:320;9849:6;9886:1;9880:4;9876:12;9866:22;;9933:1;9927:4;9923:12;9954:18;9944:81;;10010:4;10002:6;9998:17;9988:27;;9944:81;10072:2;10064:6;10061:14;10041:18;10038:38;10035:84;;10091:18;;:::i;:::-;10035:84;9856:269;9805:320;;;:::o;10131:229::-;10271:34;10267:1;10259:6;10255:14;10248:58;10340:12;10335:2;10327:6;10323:15;10316:37;10131:229;:::o;10366:366::-;10508:3;10529:67;10593:2;10588:3;10529:67;:::i;:::-;10522:74;;10605:93;10694:3;10605:93;:::i;:::-;10723:2;10718:3;10714:12;10707:19;;10366:366;;;:::o;10738:419::-;10904:4;10942:2;10931:9;10927:18;10919:26;;10991:9;10985:4;10981:20;10977:1;10966:9;10962:17;10955:47;11019:131;11145:4;11019:131;:::i;:::-;11011:139;;10738:419;;;:::o;11163:182::-;11303:34;11299:1;11291:6;11287:14;11280:58;11163:182;:::o;11351:366::-;11493:3;11514:67;11578:2;11573:3;11514:67;:::i;:::-;11507:74;;11590:93;11679:3;11590:93;:::i;:::-;11708:2;11703:3;11699:12;11692:19;;11351:366;;;:::o;11723:419::-;11889:4;11927:2;11916:9;11912:18;11904:26;;11976:9;11970:4;11966:20;11962:1;11951:9;11947:17;11940:47;12004:131;12130:4;12004:131;:::i;:::-;11996:139;;11723:419;;;:::o;12148:177::-;12288:29;12284:1;12276:6;12272:14;12265:53;12148:177;:::o;12331:366::-;12473:3;12494:67;12558:2;12553:3;12494:67;:::i;:::-;12487:74;;12570:93;12659:3;12570:93;:::i;:::-;12688:2;12683:3;12679:12;12672:19;;12331:366;;;:::o;12703:419::-;12869:4;12907:2;12896:9;12892:18;12884:26;;12956:9;12950:4;12946:20;12942:1;12931:9;12927:17;12920:47;12984:131;13110:4;12984:131;:::i;:::-;12976:139;;12703:419;;;:::o;13128:180::-;13176:77;13173:1;13166:88;13273:4;13270:1;13263:15;13297:4;13294:1;13287:15;13314:180;13362:77;13359:1;13352:88;13459:4;13456:1;13449:15;13483:4;13480:1;13473:15;13500:191;13540:4;13560:20;13578:1;13560:20;:::i;:::-;13555:25;;13594:20;13612:1;13594:20;:::i;:::-;13589:25;;13633:1;13630;13627:8;13624:34;;;13638:18;;:::i;:::-;13624:34;13683:1;13680;13676:9;13668:17;;13500:191;;;;:::o;13697:180::-;13745:77;13742:1;13735:88;13842:4;13839:1;13832:15;13866:4;13863:1;13856:15;13883:233;13922:3;13945:24;13963:5;13945:24;:::i;:::-;13936:33;;13991:66;13984:5;13981:77;13978:103;;14061:18;;:::i;:::-;13978:103;14108:1;14101:5;14097:13;14090:20;;13883:233;;;:::o;14122:231::-;14262:34;14258:1;14250:6;14246:14;14239:58;14331:14;14326:2;14318:6;14314:15;14307:39;14122:231;:::o;14359:366::-;14501:3;14522:67;14586:2;14581:3;14522:67;:::i;:::-;14515:74;;14598:93;14687:3;14598:93;:::i;:::-;14716:2;14711:3;14707:12;14700:19;;14359:366;;;:::o;14731:419::-;14897:4;14935:2;14924:9;14920:18;14912:26;;14984:9;14978:4;14974:20;14970:1;14959:9;14955:17;14948:47;15012:131;15138:4;15012:131;:::i;:::-;15004:139;;14731:419;;;:::o;15156:181::-;15296:33;15292:1;15284:6;15280:14;15273:57;15156:181;:::o;15343:366::-;15485:3;15506:67;15570:2;15565:3;15506:67;:::i;:::-;15499:74;;15582:93;15671:3;15582:93;:::i;:::-;15700:2;15695:3;15691:12;15684:19;;15343:366;;;:::o;15715:419::-;15881:4;15919:2;15908:9;15904:18;15896:26;;15968:9;15962:4;15958:20;15954:1;15943:9;15939:17;15932:47;15996:131;16122:4;15996:131;:::i;:::-;15988:139;;15715:419;;;:::o;16140:163::-;16280:15;16276:1;16268:6;16264:14;16257:39;16140:163;:::o;16309:366::-;16451:3;16472:67;16536:2;16531:3;16472:67;:::i;:::-;16465:74;;16548:93;16637:3;16548:93;:::i;:::-;16666:2;16661:3;16657:12;16650:19;;16309:366;;;:::o;16681:419::-;16847:4;16885:2;16874:9;16870:18;16862:26;;16934:9;16928:4;16924:20;16920:1;16909:9;16905:17;16898:47;16962:131;17088:4;16962:131;:::i;:::-;16954:139;;16681:419;;;:::o;17106:225::-;17246:34;17242:1;17234:6;17230:14;17223:58;17315:8;17310:2;17302:6;17298:15;17291:33;17106:225;:::o;17337:366::-;17479:3;17500:67;17564:2;17559:3;17500:67;:::i;:::-;17493:74;;17576:93;17665:3;17576:93;:::i;:::-;17694:2;17689:3;17685:12;17678:19;;17337:366;;;:::o;17709:419::-;17875:4;17913:2;17902:9;17898:18;17890:26;;17962:9;17956:4;17952:20;17948:1;17937:9;17933:17;17926:47;17990:131;18116:4;17990:131;:::i;:::-;17982:139;;17709:419;;;:::o;18134:171::-;18274:23;18270:1;18262:6;18258:14;18251:47;18134:171;:::o;18311:366::-;18453:3;18474:67;18538:2;18533:3;18474:67;:::i;:::-;18467:74;;18550:93;18639:3;18550:93;:::i;:::-;18668:2;18663:3;18659:12;18652:19;;18311:366;;;:::o;18683:419::-;18849:4;18887:2;18876:9;18872:18;18864:26;;18936:9;18930:4;18926:20;18922:1;18911:9;18907:17;18900:47;18964:131;19090:4;18964:131;:::i;:::-;18956:139;;18683:419;;;:::o;19108:223::-;19248:34;19244:1;19236:6;19232:14;19225:58;19317:6;19312:2;19304:6;19300:15;19293:31;19108:223;:::o;19337:366::-;19479:3;19500:67;19564:2;19559:3;19500:67;:::i;:::-;19493:74;;19576:93;19665:3;19576:93;:::i;:::-;19694:2;19689:3;19685:12;19678:19;;19337:366;;;:::o;19709:419::-;19875:4;19913:2;19902:9;19898:18;19890:26;;19962:9;19956:4;19952:20;19948:1;19937:9;19933:17;19926:47;19990:131;20116:4;19990:131;:::i;:::-;19982:139;;19709:419;;;:::o;20134:221::-;20274:34;20270:1;20262:6;20258:14;20251:58;20343:4;20338:2;20330:6;20326:15;20319:29;20134:221;:::o;20361:366::-;20503:3;20524:67;20588:2;20583:3;20524:67;:::i;:::-;20517:74;;20600:93;20689:3;20600:93;:::i;:::-;20718:2;20713:3;20709:12;20702:19;;20361:366;;;:::o;20733:419::-;20899:4;20937:2;20926:9;20922:18;20914:26;;20986:9;20980:4;20976:20;20972:1;20961:9;20957:17;20950:47;21014:131;21140:4;21014:131;:::i;:::-;21006:139;;20733:419;;;:::o;21158:224::-;21298:34;21294:1;21286:6;21282:14;21275:58;21367:7;21362:2;21354:6;21350:15;21343:32;21158:224;:::o;21388:366::-;21530:3;21551:67;21615:2;21610:3;21551:67;:::i;:::-;21544:74;;21627:93;21716:3;21627:93;:::i;:::-;21745:2;21740:3;21736:12;21729:19;;21388:366;;;:::o;21760:419::-;21926:4;21964:2;21953:9;21949:18;21941:26;;22013:9;22007:4;22003:20;21999:1;21988:9;21984:17;21977:47;22041:131;22167:4;22041:131;:::i;:::-;22033:139;;21760:419;;;:::o;22185:228::-;22325:34;22321:1;22313:6;22309:14;22302:58;22394:11;22389:2;22381:6;22377:15;22370:36;22185:228;:::o;22419:366::-;22561:3;22582:67;22646:2;22641:3;22582:67;:::i;:::-;22575:74;;22658:93;22747:3;22658:93;:::i;:::-;22776:2;22771:3;22767:12;22760:19;;22419:366;;;:::o;22791:419::-;22957:4;22995:2;22984:9;22980:18;22972:26;;23044:9;23038:4;23034:20;23030:1;23019:9;23015:17;23008:47;23072:131;23198:4;23072:131;:::i;:::-;23064:139;;22791:419;;;:::o;23216:305::-;23256:3;23275:20;23293:1;23275:20;:::i;:::-;23270:25;;23309:20;23327:1;23309:20;:::i;:::-;23304:25;;23463:1;23395:66;23391:74;23388:1;23385:81;23382:107;;;23469:18;;:::i;:::-;23382:107;23513:1;23510;23506:9;23499:16;;23216:305;;;;:::o;23527:223::-;23667:34;23663:1;23655:6;23651:14;23644:58;23736:6;23731:2;23723:6;23719:15;23712:31;23527:223;:::o;23756:366::-;23898:3;23919:67;23983:2;23978:3;23919:67;:::i;:::-;23912:74;;23995:93;24084:3;23995:93;:::i;:::-;24113:2;24108:3;24104:12;24097:19;;23756:366;;;:::o;24128:419::-;24294:4;24332:2;24321:9;24317:18;24309:26;;24381:9;24375:4;24371:20;24367:1;24356:9;24352:17;24345:47;24409:131;24535:4;24409:131;:::i;:::-;24401:139;;24128:419;;;:::o;24553:180::-;24601:77;24598:1;24591:88;24698:4;24695:1;24688:15;24722:4;24719:1;24712:15;24739:185;24779:1;24796:20;24814:1;24796:20;:::i;:::-;24791:25;;24830:20;24848:1;24830:20;:::i;:::-;24825:25;;24869:1;24859:35;;24874:18;;:::i;:::-;24859:35;24916:1;24913;24909:9;24904:14;;24739:185;;;;:::o;24930:332::-;25051:4;25089:2;25078:9;25074:18;25066:26;;25102:71;25170:1;25159:9;25155:17;25146:6;25102:71;:::i;:::-;25183:72;25251:2;25240:9;25236:18;25227:6;25183:72;:::i;:::-;24930:332;;;;;:::o;25268:227::-;25408:34;25404:1;25396:6;25392:14;25385:58;25477:10;25472:2;25464:6;25460:15;25453:35;25268:227;:::o;25501:366::-;25643:3;25664:67;25728:2;25723:3;25664:67;:::i;:::-;25657:74;;25740:93;25829:3;25740:93;:::i;:::-;25858:2;25853:3;25849:12;25842:19;;25501:366;;;:::o;25873:419::-;26039:4;26077:2;26066:9;26062:18;26054:26;;26126:9;26120:4;26116:20;26112:1;26101:9;26097:17;26090:47;26154:131;26280:4;26154:131;:::i;:::-;26146:139;;25873:419;;;:::o;26298:348::-;26338:7;26361:20;26379:1;26361:20;:::i;:::-;26356:25;;26395:20;26413:1;26395:20;:::i;:::-;26390:25;;26583:1;26515:66;26511:74;26508:1;26505:81;26500:1;26493:9;26486:17;26482:105;26479:131;;;26590:18;;:::i;:::-;26479:131;26638:1;26635;26631:9;26620:20;;26298:348;;;;:::o;26652:180::-;26700:77;26697:1;26690:88;26797:4;26794:1;26787:15;26821:4;26818:1;26811:15;26838:143;26895:5;26926:6;26920:13;26911:22;;26942:33;26969:5;26942:33;:::i;:::-;26838:143;;;;:::o;26987:351::-;27057:6;27106:2;27094:9;27085:7;27081:23;27077:32;27074:119;;;27112:79;;:::i;:::-;27074:119;27232:1;27257:64;27313:7;27304:6;27293:9;27289:22;27257:64;:::i;:::-;27247:74;;27203:128;26987:351;;;;:::o;27344:85::-;27389:7;27418:5;27407:16;;27344:85;;;:::o;27435:158::-;27493:9;27526:61;27544:42;27553:32;27579:5;27553:32;:::i;:::-;27544:42;:::i;:::-;27526:61;:::i;:::-;27513:74;;27435:158;;;:::o;27599:147::-;27694:45;27733:5;27694:45;:::i;:::-;27689:3;27682:58;27599:147;;:::o;27752:114::-;27819:6;27853:5;27847:12;27837:22;;27752:114;;;:::o;27872:184::-;27971:11;28005:6;28000:3;27993:19;28045:4;28040:3;28036:14;28021:29;;27872:184;;;;:::o;28062:132::-;28129:4;28152:3;28144:11;;28182:4;28177:3;28173:14;28165:22;;28062:132;;;:::o;28200:108::-;28277:24;28295:5;28277:24;:::i;:::-;28272:3;28265:37;28200:108;;:::o;28314:179::-;28383:10;28404:46;28446:3;28438:6;28404:46;:::i;:::-;28482:4;28477:3;28473:14;28459:28;;28314:179;;;;:::o;28499:113::-;28569:4;28601;28596:3;28592:14;28584:22;;28499:113;;;:::o;28648:732::-;28767:3;28796:54;28844:5;28796:54;:::i;:::-;28866:86;28945:6;28940:3;28866:86;:::i;:::-;28859:93;;28976:56;29026:5;28976:56;:::i;:::-;29055:7;29086:1;29071:284;29096:6;29093:1;29090:13;29071:284;;;29172:6;29166:13;29199:63;29258:3;29243:13;29199:63;:::i;:::-;29192:70;;29285:60;29338:6;29285:60;:::i;:::-;29275:70;;29131:224;29118:1;29115;29111:9;29106:14;;29071:284;;;29075:14;29371:3;29364:10;;28772:608;;;28648:732;;;;:::o;29386:831::-;29649:4;29687:3;29676:9;29672:19;29664:27;;29701:71;29769:1;29758:9;29754:17;29745:6;29701:71;:::i;:::-;29782:80;29858:2;29847:9;29843:18;29834:6;29782:80;:::i;:::-;29909:9;29903:4;29899:20;29894:2;29883:9;29879:18;29872:48;29937:108;30040:4;30031:6;29937:108;:::i;:::-;29929:116;;30055:72;30123:2;30112:9;30108:18;30099:6;30055:72;:::i;:::-;30137:73;30205:3;30194:9;30190:19;30181:6;30137:73;:::i;:::-;29386:831;;;;;;;;:::o;30223:807::-;30472:4;30510:3;30499:9;30495:19;30487:27;;30524:71;30592:1;30581:9;30577:17;30568:6;30524:71;:::i;:::-;30605:72;30673:2;30662:9;30658:18;30649:6;30605:72;:::i;:::-;30687:80;30763:2;30752:9;30748:18;30739:6;30687:80;:::i;:::-;30777;30853:2;30842:9;30838:18;30829:6;30777:80;:::i;:::-;30867:73;30935:3;30924:9;30920:19;30911:6;30867:73;:::i;:::-;30950;31018:3;31007:9;31003:19;30994:6;30950:73;:::i;:::-;30223:807;;;;;;;;;:::o;31036:143::-;31093:5;31124:6;31118:13;31109:22;;31140:33;31167:5;31140:33;:::i;:::-;31036:143;;;;:::o;31185:663::-;31273:6;31281;31289;31338:2;31326:9;31317:7;31313:23;31309:32;31306:119;;;31344:79;;:::i;:::-;31306:119;31464:1;31489:64;31545:7;31536:6;31525:9;31521:22;31489:64;:::i;:::-;31479:74;;31435:128;31602:2;31628:64;31684:7;31675:6;31664:9;31660:22;31628:64;:::i;:::-;31618:74;;31573:129;31741:2;31767:64;31823:7;31814:6;31803:9;31799:22;31767:64;:::i;:::-;31757:74;;31712:129;31185:663;;;;;:::o

Swarm Source

ipfs://ca4404b9d53303d37fc52931f4a351de9aa7aac6d472b5110f225416835e303b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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