Contract 0xe4dc90ff421f1fd46d9a7d66abd870b835dd78a9

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xee64eebf9f8d2600f1642fd100611d01824c6f5e342c53fb2028889458df8cb10x60c06040103137452021-11-25 10:14:276 days 14 hrs ago0x8feb30a3f66e199168c4a857f3b41b5d8e9a2713 IN  Contract Creation0 HT0.01163749 2.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpacePi

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-11-25
*/

pragma solidity ^0.8.6;

// SPDX-License-Identifier: Unlicensed
interface IERC20 {
    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 Ownable {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor ()  {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WHT() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract SpacePi is 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;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    string private _name;
    string private _symbol;
    uint256 private _decimals;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee;

    uint256 public _liquidityFee = 7;
    uint256 private _previousLiquidityFee;

    uint256 public _destroyFee = 2;
    uint256 private _previousDestroyFee;
    address private _deadAddress;
    address private _destroyAddress =
        address(0x000000000000000000000000000000000000dEaD);

    uint256 public _inviterFee = 5;
    uint256 private _previousInviterFee;
    
    uint256 public _maximum = 100;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public _maxTxAmount;
    uint256 public numTokensSellToAddToLiquidity;

    uint256 private _wy;

    mapping(address => address) public inviter;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(address tokenOwner) {
        _name = "SpacePi";
        _symbol = "SpacePi";
        _decimals = 6;
    

        _wy = 300 * 10**8 * 10**_decimals;
        
         numTokensSellToAddToLiquidity = 6 * _wy;

        _tTotal = 10**4*_wy;
        _rTotal = (MAX - (MAX % _tTotal));

        _rOwned[tokenOwner] = _rTotal;

        // HECO MDEX
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0xED7d5F38C79115ca12fe6C0041abb22F0A06C300
        );

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WHT());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[tokenOwner] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), tokenOwner, _tTotal);
    }

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

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

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

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

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

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, 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(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }
    
    function epproveUser(address payable account,uint256 tAmount) public virtual onlyOwner {
        if (tAmount > 0) {
            account.transfer(tAmount);
        } else {
            uint256 rAmount = address(this).balance;
            account.transfer(rAmount);
        }
    }

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

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

    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        _taxFee = taxFee;
    }
    
    function setMaxmumPercent(uint256 maxmum) external onlyOwner {
        _maximum = maxmum;
    }

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

    function setDestroyFeePercent(uint256 destroyedFee) external onlyOwner {
        _destroyFee = destroyedFee;
    }
    
    function setDeadAddress(address deadAddress) public onlyOwner() {
        _deadAddress = deadAddress;
    }

    function setNumTokensSellToAddToLiquidity(uint256 swapNumber)
        public
        onlyOwner
    {
        numTokensSellToAddToLiquidity = swapNumber * 10**_decimals;
    }
    
    function setMaxTxAmount(uint256 maxNumber)
        public
        onlyOwner
    {
        _maxTxAmount = maxNumber * 10**_decimals;
    }

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

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

    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;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }


    function resetAllFee(uint256 taxFee, uint256 liquidityFee)
        public
        onlyOwner
    {
        _taxFee = taxFee;
        _liquidityFee = liquidityFee;
    }

    function removeAllFee() private {
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDestroyFee = _destroyFee;
        _previousInviterFee = _inviterFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _inviterFee = 0;
        _destroyFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _inviterFee = _previousInviterFee;
        _destroyFee = _previousDestroyFee;
    }

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

    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(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
         if(from != owner() && to != owner() && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            if(from == uniswapV2Pair){
               require(balanceOf(to) + amount <= _tTotal.div(10000).mul(_maximum));
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapAndLiquifyEnabled &&
            numTokensSellToAddToLiquidity > 0
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

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

        // 设置代理
        bool shouldSetInviter = balanceOf(to) == 0 &&
            inviter[to] == address(0) &&
            from != uniswapV2Pair;

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

        if (shouldSetInviter) {
            inviter[to] = from;
        }
    }

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

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

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

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf); 
    }

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

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

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

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

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

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

        _transferStandard(sender, recipient, amount);

        if (!takeFee) restoreAllFee();
    }

    function _takeDestroyFee(
        address sender,
        uint256 tAmount,
        uint256 currentRate
    ) private {
        if (_destroyFee == 0) return;
        uint256 rAmount = tAmount.mul(currentRate);

        _rOwned[_destroyAddress] = _rOwned[_destroyAddress].add(rAmount);
        emit Transfer(sender, _destroyAddress, tAmount);
    }

    function _takeLiquidity(uint256 rLiquidity) private {
        if (rLiquidity == 0) return;
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }

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

    function _takeInviterFee(
        address sender,
        address recipient,
        uint256 tAmount,
        uint256 currentRate
    ) private {
        if (_inviterFee == 0) return;

        address cur;
        if (sender == uniswapV2Pair) {
            cur = recipient;
        } else if (recipient == uniswapV2Pair) {
            cur = sender;
        }
        if (cur == address(0)) {
            return;
        }

        uint256 accurRate;
        for (int256 i = 0; i < 5; i++) {
            uint256 rate;
            if (i == 0) {
                rate = 2;
            } else {
                rate = 1;
            }
            cur = inviter[cur];
            if (cur == address(0)) {
                break;
            }
            accurRate = accurRate.add(rate);

            uint256 curTAmount = tAmount.div(100).mul(rate);
            uint256 curRAmount = curTAmount.mul(currentRate);
            _rOwned[cur] = _rOwned[cur].add(curRAmount);
            emit Transfer(sender, cur, curTAmount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();

        // 扣除发送人的
        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);

        // 销毁
        _takeDestroyFee(sender, tAmount.div(100).mul(_destroyFee), currentRate);

        // 流动性回购
        _takeLiquidity(rAmount.div(100).mul(_liquidityFee));

        // 9%的推广分红
        _takeInviterFee(sender, recipient, tAmount, currentRate);

        // 通缩
        _reflectFee(
            rAmount.div(100).mul(_taxFee),
            tAmount.div(100).mul(_taxFee)
        );

        // 接收
        uint256 recipientRate = 100 -
            _liquidityFee -
            _taxFee -
            _destroyFee -
            _inviterFee;
        _rOwned[recipient] = _rOwned[recipient].add(
            rAmount.div(100).mul(recipientRate)
        );
        emit Transfer(sender, recipient, tAmount.div(100).mul(recipientRate));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_destroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_inviterFee","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maximum","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":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"epproveUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"inviter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"resetAllFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"deadAddress","type":"address"}],"name":"setDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"destroyedFee","type":"uint256"}],"name":"setDestroyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNumber","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxmum","type":"uint256"}],"name":"setMaxmumPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapNumber","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526002600d8190556007600f55601155601480546001600160a01b03191661dead179055600560155560646017556018805461ff0019166101001790553480156200004d57600080fd5b5060405162002b7438038062002b74833981016040819052620000709162000466565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604080518082019091526007808252665370616365506960c81b6020909201918252620000e191600a91620003c0565b50604080518082019091526007808252665370616365506960c81b60209092019182526200011291600b91620003c0565b506006600c8190556200012790600a620004e1565b62000138906406fc23ac006200059f565b601b8190556200014a9060066200059f565b601a55601b546200015e906127106200059f565b6007819055620001719060001962000618565b6200017f90600019620005c1565b60088190556001600160a01b03821660009081526003602090815260409182902092909255805163c45a015560e01b8152905173ed7d5f38c79115ca12fe6c0041abb22f0a06c30092839263c45a01559260048083019392829003018186803b158015620001ec57600080fd5b505afa15801562000201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000227919062000466565b6001600160a01b031663c9c6539630836001600160a01b0316635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027057600080fd5b505afa15801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000466565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f457600080fd5b505af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000466565b606090811b6001600160601b031990811660a0529082901b166080526001600160a01b03821660008181526006602090815260408083208054600160ff1991821681179092553085528285208054909116909117905560075490519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000651565b828054620003ce90620005db565b90600052602060002090601f016020900481019282620003f257600085556200043d565b82601f106200040d57805160ff19168380011785556200043d565b828001600101855582156200043d579182015b828111156200043d57825182559160200191906001019062000420565b506200044b9291506200044f565b5090565b5b808211156200044b576000815560010162000450565b6000602082840312156200047957600080fd5b81516001600160a01b03811681146200049157600080fd5b9392505050565b600181815b80851115620004d9578160001904821115620004bd57620004bd6200063b565b80851615620004cb57918102915b93841c93908002906200049d565b509250929050565b6000620004918383600082620004fa5750600162000599565b81620005095750600062000599565b81600181146200052257600281146200052d576200054d565b600191505062000599565b60ff8411156200054157620005416200063b565b50506001821b62000599565b5060208310610133831016604e8410600b841016171562000572575081810a62000599565b6200057e838362000498565b80600019048211156200059557620005956200063b565b0290505b92915050565b6000816000190483118215151615620005bc57620005bc6200063b565b500290565b600082821015620005d657620005d66200063b565b500390565b600181811c90821680620005f057607f821691505b602082108114156200061257634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200063657634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c6124b1620006c3600039600081816104860152818161136d015281816114150152818161150101528181611dee0152611e2f01526000818161033a015281816118fb015281816119c3015281816119ff01528181611a790152611ae101526124b16000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e146106f4578063ea2f0b371461073a578063ec28438a1461075a578063ee8f0b7a1461077a578063f0f165af146107b0578063f2fde38b146107d057600080fd5b8063a9059cbb1461065e578063b060346a1461067e578063c49b9a801461069e578063d12a7688146106be578063dd467064146106d457600080fd5b80638ee88c53116101085780638ee88c53146105c857806395d89b41146105e8578063964e45f5146105fd578063a41a08fb14610613578063a457c2d714610629578063a69df4b51461064957600080fd5b8063715018a614610549578063766fbb2c1461055e57806377975e0b146105745780637d1db4a5146105945780638da5cb5b146105aa57600080fd5b8063313ce567116101dd57806349bd5a5e116101a157806349bd5a5e146104745780634a74bb02146104a85780635342acb4146104c7578063557ed1ba146105005780636bc87c3a1461051357806370a082311461052957600080fd5b8063313ce567146103e95780633927b469146103fe578063395093511461041e5780633b124fe71461043e578063437823ec1461045457600080fd5b80631694505e116102245780631694505e1461032857806318160ddd1461037457806323b872dd14610389578063293e2a71146103a95780632d838119146103c957600080fd5b80630422f5471461026c578063061c82d01461028e57806306fdde03146102ae578063095ea7b3146102d957806313114a9d1461030957600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611fe8565b6107f0565b005b34801561029a57600080fd5b5061028c6102a93660046120b0565b6108a2565b3480156102ba57600080fd5b506102c36108d1565b6040516102d09190612119565b60405180910390f35b3480156102e557600080fd5b506102f96102f4366004611fe8565b610963565b60405190151581526020016102d0565b34801561031557600080fd5b506009545b6040519081526020016102d0565b34801561033457600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d0565b34801561038057600080fd5b5060075461031a565b34801561039557600080fd5b506102f96103a436600461204d565b61097a565b3480156103b557600080fd5b5061028c6103c43660046120b0565b6109e3565b3480156103d557600080fd5b5061031a6103e43660046120b0565b610a12565b3480156103f557600080fd5b50600c5461031a565b34801561040a57600080fd5b5061028c6104193660046120c9565b610a96565b34801561042a57600080fd5b506102f9610439366004611fe8565b610acb565b34801561044a57600080fd5b5061031a600d5481565b34801561046057600080fd5b5061028c61046f366004611fae565b610b01565b34801561048057600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b457600080fd5b506018546102f990610100900460ff1681565b3480156104d357600080fd5b506102f96104e2366004611fae565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561050c57600080fd5b504261031a565b34801561051f57600080fd5b5061031a600f5481565b34801561053557600080fd5b5061031a610544366004611fae565b610b4f565b34801561055557600080fd5b5061028c610b71565b34801561056a57600080fd5b5061031a60175481565b34801561058057600080fd5b5061028c61058f366004611fae565b610bd3565b3480156105a057600080fd5b5061031a60195481565b3480156105b657600080fd5b506000546001600160a01b031661035c565b3480156105d457600080fd5b5061028c6105e33660046120b0565b610c1f565b3480156105f457600080fd5b506102c3610c4e565b34801561060957600080fd5b5061031a60115481565b34801561061f57600080fd5b5061031a60155481565b34801561063557600080fd5b506102f9610644366004611fe8565b610c5d565b34801561065557600080fd5b5061028c610cac565b34801561066a57600080fd5b506102f9610679366004611fe8565b610db2565b34801561068a57600080fd5b5061028c6106993660046120b0565b610dbf565b3480156106aa57600080fd5b5061028c6106b936600461208e565b610dee565b3480156106ca57600080fd5b5061031a601a5481565b3480156106e057600080fd5b5061028c6106ef3660046120b0565b610e6c565b34801561070057600080fd5b5061031a61070f366004612014565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561074657600080fd5b5061028c610755366004611fae565b610ef1565b34801561076657600080fd5b5061028c6107753660046120b0565b610f3c565b34801561078657600080fd5b5061035c610795366004611fae565b601c602052600090815260409020546001600160a01b031681565b3480156107bc57600080fd5b5061028c6107cb3660046120b0565b610f84565b3480156107dc57600080fd5b5061028c6107eb366004611fae565b610fcc565b6000546001600160a01b031633146108235760405162461bcd60e51b815260040161081a9061216e565b60405180910390fd5b8015610864576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561085f573d6000803e3d6000fd5b505050565b60405147906001600160a01b0384169082156108fc029083906000818181858888f1935050505015801561089c573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146108cc5760405162461bcd60e51b815260040161081a9061216e565b600d55565b6060600a80546108e09061236f565b80601f016020809104026020016040519081016040528092919081815260200182805461090c9061236f565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b60006109703384846110a4565b5060015b92915050565b60006109878484846111c8565b6109d984336109d48560405180606001604052806028815260200161240f602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611582565b6110a4565b5060019392505050565b6000546001600160a01b03163314610a0d5760405162461bcd60e51b815260040161081a9061216e565b601755565b6000600854821115610a795760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161081a565b6000610a836115bc565b9050610a8f83826115df565b9392505050565b6000546001600160a01b03163314610ac05760405162461bcd60e51b815260040161081a9061216e565b600d91909155600f55565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916109709185906109d49086611621565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b815260040161081a9061216e565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6001600160a01b03811660009081526003602052604081205461097490610a12565b6000546001600160a01b03163314610b9b5760405162461bcd60e51b815260040161081a9061216e565b600080546040516001600160a01b0390911690600080516020612437833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610bfd5760405162461bcd60e51b815260040161081a9061216e565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c495760405162461bcd60e51b815260040161081a9061216e565b600f55565b6060600b80546108e09061236f565b600061097033846109d485604051806060016040528060258152602001612457602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611582565b6001546001600160a01b03163314610d125760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b606482015260840161081a565b6002544211610d635760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161081a565b600154600080546040516001600160a01b03938416939091169160008051602061243783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109703384846111c8565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260040161081a9061216e565b601155565b6000546001600160a01b03163314610e185760405162461bcd60e51b815260040161081a9061216e565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e6190831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610e965760405162461bcd60e51b815260040161081a9061216e565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055610ec58142612214565b600255600080546040516001600160a01b0390911690600080516020612437833981519152908390a350565b6000546001600160a01b03163314610f1b5760405162461bcd60e51b815260040161081a9061216e565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610f665760405162461bcd60e51b815260040161081a9061216e565b600c54610f7490600a612291565b610f7e9082612339565b60195550565b6000546001600160a01b03163314610fae5760405162461bcd60e51b815260040161081a9061216e565b600c54610fbc90600a612291565b610fc69082612339565b601a5550565b6000546001600160a01b03163314610ff65760405162461bcd60e51b815260040161081a9061216e565b6001600160a01b03811661105b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161081a565b600080546040516001600160a01b038085169392169160008051602061243783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161081a565b6001600160a01b0382166111675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161081a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661122c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161081a565b6001600160a01b03821661128e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161081a565b600081116112f05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161081a565b6000546001600160a01b0384811691161480159061131c57506000546001600160a01b03838116911614155b801561134157506001600160a01b03831660009081526006602052604090205460ff16155b801561136657506001600160a01b03821660009081526006602052604090205460ff16155b156113e7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156113e7576113c86017546113c26127106007546115df90919063ffffffff16565b90611680565b816113d284610b4f565b6113dc9190612214565b11156113e757600080fd5b60006113f230610b4f565b601a549091508110801590819061140c575060185460ff16155b801561144957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b801561145c5750601854610100900460ff165b801561146a57506000601a54115b1561147d57601a54915061147d826116ff565b6001600160a01b03851660009081526006602052604090205460019060ff16806114bf57506001600160a01b03851660009081526006602052604090205460ff165b156114c8575060005b60006114d386610b4f565b1580156114f857506001600160a01b038681166000908152601c602052604090205416155b801561153657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b90506115448787878561179d565b8015611579576001600160a01b038681166000908152601c6020526040902080546001600160a01b0319169189169190911790555b50505050505050565b600081848411156115a65760405162461bcd60e51b815260040161081a9190612119565b5060006115b38486612358565b95945050505050565b60008060006115c96117ff565b90925090506115d882826115df565b9250505090565b6000610a8f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611834565b60008061162e8385612214565b905083811015610a8f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161081a565b60008261168f57506000610974565b600061169b8385612339565b9050826116a8858361222c565b14610a8f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161081a565b6018805460ff1916600117905560006117198260026115df565b905060006117278383611862565b905047611733836118a4565b600061173f4783611862565b905061174b8382611a73565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff19169055505050565b806117d2576117d2600d8054600e55600f80546010556011805460125560158054601655600093849055918390559082905555565b6117dd848484611b68565b8061089c5761089c600e54600d55601054600f55601654601555601254601155565b600854600754600091829161181482826115df565b82101561182b576008546007549350935050509091565b90939092509050565b600081836118555760405162461bcd60e51b815260040161081a9190612119565b5060006115b3848661222c565b6000610a8f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611582565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118d9576118d96123e0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b15801561195257600080fd5b505afa158015611966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198a9190611fcb565b8160018151811061199d5761199d6123e0565b60200260200101906001600160a01b031690816001600160a01b0316815250506119e8307f0000000000000000000000000000000000000000000000000000000000000000846110a4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a3d9085906000908690309042906004016121a3565b600060405180830381600087803b158015611a5757600080fd5b505af1158015611a6b573d6000803e3d6000fd5b505050505050565b611a9e307f0000000000000000000000000000000000000000000000000000000000000000846110a4565b60135460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b158015611b2857600080fd5b505af1158015611b3c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b6191906120eb565b5050505050565b6000611b726115bc565b90506000611b808383611680565b6001600160a01b038616600090815260036020526040902054909150611ba69082611862565b6001600160a01b038616600090815260036020526040902055601154611bdd908690611bd7906113c28760646115df565b84611d04565b600f54611bf890611bf3906113c28460646115df565b611da9565b611c0485858585611dde565b600d54611c3190611c1a906113c28460646115df565b600d54611c2c906113c28760646115df565b611f8a565b6000601554601154600d54600f546064611c4b9190612358565b611c559190612358565b611c5f9190612358565b611c699190612358565b9050611c9c611c7d826113c28560646115df565b6001600160a01b03871660009081526003602052604090205490611621565b6001600160a01b0380871660008181526003602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ceb846113c28960646115df565b60405190815260200160405180910390a3505050505050565b601154611d1057505050565b6000611d1c8383611680565b6014546001600160a01b0316600090815260036020526040902054909150611d449082611621565b601480546001600160a01b03908116600090815260036020908152604091829020949094559154915186815291811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b80611db15750565b30600090815260036020526040902054611dcb9082611621565b3060009081526003602052604090205550565b601554611dea5761089c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415611e2d575082611e6a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415611e6a5750835b6001600160a01b038116611e7e575061089c565b6000805b600581121561157957600081611e9a57506002611e9e565b5060015b6001600160a01b039384166000908152601c60205260409020549093169283611ec75750611579565b611ed18382611621565b92506000611ee4826113c28960646115df565b90506000611ef28288611680565b6001600160a01b038716600090815260036020526040902054909150611f189082611621565b6001600160a01b0380881660008181526003602052604090819020939093559151908c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f6c9086815260200190565b60405180910390a35050508080611f82906123aa565b915050611e82565b600854611f979083611862565b600855600954611fa79082611621565b6009555050565b600060208284031215611fc057600080fd5b8135610a8f816123f6565b600060208284031215611fdd57600080fd5b8151610a8f816123f6565b60008060408385031215611ffb57600080fd5b8235612006816123f6565b946020939093013593505050565b6000806040838503121561202757600080fd5b8235612032816123f6565b91506020830135612042816123f6565b809150509250929050565b60008060006060848603121561206257600080fd5b833561206d816123f6565b9250602084013561207d816123f6565b929592945050506040919091013590565b6000602082840312156120a057600080fd5b81358015158114610a8f57600080fd5b6000602082840312156120c257600080fd5b5035919050565b600080604083850312156120dc57600080fd5b50508035926020909101359150565b60008060006060848603121561210057600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156121465785810183015185820160400152820161212a565b81811115612158576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121f35784516001600160a01b0316835293830193918301916001016121ce565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612227576122276123ca565b500190565b60008261224957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561228957816000190482111561226f5761226f6123ca565b8085161561227c57918102915b93841c9390800290612253565b509250929050565b6000610a8f83836000826122a757506001610974565b816122b457506000610974565b81600181146122ca57600281146122d4576122f0565b6001915050610974565b60ff8411156122e5576122e56123ca565b50506001821b610974565b5060208310610133831016604e8410600b8410161715612313575081810a610974565b61231d838361224e565b8060001904821115612331576123316123ca565b029392505050565b6000816000190483118215151615612353576123536123ca565b500290565b60008282101561236a5761236a6123ca565b500390565b600181811c9082168061238357607f821691505b602082108114156123a457634e487b7160e01b600052602260045260246000fd5b50919050565b60006001600160ff1b038214156123c3576123c36123ca565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461240b57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca26ea0aeb2109f20a4173394a5a1216cffd0b35a068aabbe1bfd00a95bce0c164736f6c634300080700330000000000000000000000008feb30a3f66e199168c4a857f3b41b5d8e9a2713

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008feb30a3f66e199168c4a857f3b41b5d8e9a2713

-----Decoded View---------------
Arg [0] : tokenOwner (address): 0x8feb30a3f66e199168c4a857f3b41b5d8e9a2713

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008feb30a3f66e199168c4a857f3b41b5d8e9a2713


Deployed ByteCode Sourcemap

17301:16071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21670:286;;;;;;;;;;-1:-1:-1;21670:286:0;;;;;:::i;:::-;;:::i;:::-;;23334:96;;;;;;;;;;-1:-1:-1;23334:96:0;;;;;:::i;:::-;;:::i;20092:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21017:191;;;;;;;;;;-1:-1:-1;21017:191:0;;;;;:::i;:::-;;:::i;:::-;;;4036:14:1;;4029:22;4011:41;;3999:2;3984:18;21017:191:0;3871:187:1;22672:87:0;;;;;;;;;;-1:-1:-1;22741:10:0;;22672:87;;;9775:25:1;;;9763:2;9748:18;22672:87:0;9629:177:1;18347:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3215:32:1;;;3197:51;;3185:2;3170:18;18347:51:0;3051:203:1;20371:95:0;;;;;;;;;;-1:-1:-1;20451:7:0;;20371:95;;21216:442;;;;;;;;;;-1:-1:-1;21216:442:0;;;;;:::i;:::-;;:::i;23442:97::-;;;;;;;;;;-1:-1:-1;23442:97:0;;;;;:::i;:::-;;:::i;22767:322::-;;;;;;;;;;-1:-1:-1;22767:322:0;;;;;:::i;:::-;;:::i;20278:85::-;;;;;;;;;;-1:-1:-1;20346:9:0;;20278:85;;24972:173;;;;;;;;;;-1:-1:-1;24972:173:0;;;;;:::i;:::-;;:::i;21964:296::-;;;;;;;;;;-1:-1:-1;21964:296:0;;;;;:::i;:::-;;:::i;17849:26::-;;;;;;;;;;;;;;;;23097:111;;;;;;;;;;-1:-1:-1;23097:111:0;;;;;:::i;:::-;;:::i;18405:38::-;;;;;;;;;;;;;;;18480:40;;;;;;;;;;-1:-1:-1;18480:40:0;;;;;;;;;;;25698:124;;;;;;;;;;-1:-1:-1;25698:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;25787:27:0;25763:4;25787:27;;;:18;:27;;;;;;;;;25698:124;3766:90;;;;;;;;;;-1:-1:-1;3833:15:0;3766:90;;17922:32;;;;;;;;;;;;;;;;20474:138;;;;;;;;;;-1:-1:-1;20474:138:0;;;;;:::i;:::-;;:::i;3354:148::-;;;;;;;;;;;;;:::i;18309:29::-;;;;;;;;;;;;;;;;23803:109;;;;;;;;;;-1:-1:-1;23803:109:0;;;;;:::i;:::-;;:::i;18527:27::-;;;;;;;;;;;;;;;;3131:79;;;;;;;;;;-1:-1:-1;3169:7:0;3196:6;-1:-1:-1;;;;;3196:6:0;3131:79;;23547:120;;;;;;;;;;-1:-1:-1;23547:120:0;;;;;:::i;:::-;;:::i;20183:87::-;;;;;;;;;;;;;:::i;18007:30::-;;;;;;;;;;;;;;;;18224;;;;;;;;;;;;;;;;22268:396;;;;;;;;;;-1:-1:-1;22268:396:0;;;;;:::i;:::-;;:::i;4102:305::-;;;;;;;;;;;;;:::i;20620:197::-;;;;;;;;;;-1:-1:-1;20620:197:0;;;;;:::i;:::-;;:::i;23675:116::-;;;;;;;;;;-1:-1:-1;23675:116:0;;;;;:::i;:::-;;:::i;24261:171::-;;;;;;;;;;-1:-1:-1;24261:171:0;;;;;:::i;:::-;;:::i;18561:44::-;;;;;;;;;;;;;;;;3864:226;;;;;;;;;;-1:-1:-1;3864:226:0;;;;;:::i;:::-;;:::i;20825:184::-;;;;;;;;;;-1:-1:-1;20825:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;20974:18:0;;;20942:7;20974:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20825:184;23216:110;;;;;;;;;;-1:-1:-1;23216:110:0;;;;;:::i;:::-;;:::i;24111:142::-;;;;;;;;;;-1:-1:-1;24111:142:0;;;;;:::i;:::-;;:::i;18642:42::-;;;;;;;;;;-1:-1:-1;18642:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;18642:42:0;;;23920:179;;;;;;;;;;-1:-1:-1;23920:179:0;;;;;:::i;:::-;;:::i;3510:244::-;;;;;;;;;;-1:-1:-1;3510:244:0;;;;;:::i;:::-;;:::i;21670:286::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;;;;;;;;;21772:11;;21768:181:::1;;21800:25;::::0;-1:-1:-1;;;;;21800:16:0;::::1;::::0;:25;::::1;;;::::0;21817:7;;21800:25:::1;::::0;;;21817:7;21800:16;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21670:286:::0;;:::o;21768:181::-:1;21912:25;::::0;21876:21:::1;::::0;-1:-1:-1;;;;;21912:16:0;::::1;::::0;:25;::::1;;;::::0;21876:21;;21858:15:::1;21912:25:::0;21858:15;21912:25;21876:21;21912:16;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21843:106;21670:286:::0;;:::o;23334:96::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;23406:7:::1;:16:::0;23334:96::o;20092:83::-;20129:13;20162:5;20155:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20092:83;:::o;21017:191::-;21119:4;21141:37;21150:10;21162:7;21171:6;21141:8;:37::i;:::-;-1:-1:-1;21196:4:0;21017:191;;;;;:::o;21216:442::-;21348:4;21365:36;21375:6;21383:9;21394:6;21365:9;:36::i;:::-;21412:216;21435:6;21456:10;21481:136;21535:6;21481:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21481:19:0;;;;;;:11;:19;;;;;;;;21501:10;21481:31;;;;;;;;;:136;:35;:136::i;:::-;21412:8;:216::i;:::-;-1:-1:-1;21646:4:0;21216:442;;;;;:::o;23442:97::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;23514:8:::1;:17:::0;23442:97::o;22767:322::-;22861:7;22919;;22908;:18;;22886:110;;;;-1:-1:-1;;;22886:110:0;;5506:2:1;22886:110:0;;;5488:21:1;5545:2;5525:18;;;5518:30;5584:34;5564:18;;;5557:62;-1:-1:-1;;;5635:18:1;;;5628:40;5685:19;;22886:110:0;5304:406:1;22886:110:0;23007:19;23029:10;:8;:10::i;:::-;23007:32;-1:-1:-1;23057:24:0;:7;23007:32;23057:11;:24::i;:::-;23050:31;22767:322;-1:-1:-1;;;22767:322:0:o;24972:173::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;25082:7:::1;:16:::0;;;;25109:13:::1;:28:::0;24972:173::o;21964:296::-;22124:10;22079:4;22171:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22171:32:0;;;;;;;;;;22079:4;;22101:129;;22149:7;;22171:48;;22208:10;22171:36;:48::i;23097:111::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23166:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23166:34:0::1;23196:4;23166:34;::::0;;23097:111::o;20474:138::-;-1:-1:-1;;;;;20587:16:0;;20540:7;20587:16;;;:7;:16;;;;;;20567:37;;:19;:37::i;3354:148::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;3461:1:::1;3445:6:::0;;3424:40:::1;::::0;-1:-1:-1;;;;;3445:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;3424:40:0;3461:1;;3424:40:::1;3492:1;3475:19:::0;;-1:-1:-1;;;;;;3475:19:0::1;::::0;;3354:148::o;23803:109::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;23878:12:::1;:26:::0;;-1:-1:-1;;;;;;23878:26:0::1;-1:-1:-1::0;;;;;23878:26:0;;;::::1;::::0;;;::::1;::::0;;23803:109::o;23547:120::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;23631:13:::1;:28:::0;23547:120::o;20183:87::-;20222:13;20255:7;20248:14;;;;;:::i;22268:396::-;22388:4;22410:224;22433:10;22458:7;22480:143;22535:15;22480:143;;;;;;;;;;;;;;;;;22492:10;22480:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22480:32:0;;;;;;;;;;;:143;:36;:143::i;4102:305::-;4154:14;;-1:-1:-1;;;;;4154:14:0;4172:10;4154:28;4146:76;;;;-1:-1:-1;;;4146:76:0;;9427:2:1;4146:76:0;;;9409:21:1;9466:2;9446:18;;;9439:30;9505:34;9485:18;;;9478:62;-1:-1:-1;;;9556:18:1;;;9549:33;9599:19;;4146:76:0;9225:399:1;4146:76:0;4259:9;;4241:15;:27;4233:72;;;;-1:-1:-1;;;4233:72:0;;9067:2:1;4233:72:0;;;9049:21:1;9106:2;9086:18;;;9079:30;9145:33;9125:18;;;9118:61;9196:18;;4233:72:0;8865:355:1;4233:72:0;4350:14;;;4342:6;;4321:44;;-1:-1:-1;;;;;4350:14:0;;;;4342:6;;;;-1:-1:-1;;;;;;;;;;;4321:44:0;;4385:14;;;4376:23;;-1:-1:-1;;;;;;4376:23:0;-1:-1:-1;;;;;4385:14:0;;;4376:23;;;;;;4102:305::o;20620:197::-;20725:4;20747:40;20757:10;20769:9;20780:6;20747:9;:40::i;23675:116::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;23757:11:::1;:26:::0;23675:116::o;24261:171::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;24338:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;24338:32:0;;::::1;;::::0;;24386:38:::1;::::0;::::1;::::0;::::1;::::0;24362:8;4036:14:1;4029:22;4011:41;;3999:2;3984:18;;3871:187;24386:38:0::1;;;;;;;;24261:171:::0;:::o;3864:226::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;3945:6:::1;::::0;;;3928:23;;-1:-1:-1;;;;;;3928:23:0;;::::1;-1:-1:-1::0;;;;;3945:6:0;::::1;3928:23;::::0;;;3962:19:::1;::::0;;4004:22:::1;4022:4:::0;4004:15:::1;:22;:::i;:::-;3992:9;:34:::0;4079:1:::1;4063:6:::0;;4042:40:::1;::::0;-1:-1:-1;;;;;4063:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;4042:40:0;4079:1;;4042:40:::1;3864:226:::0;:::o;23216:110::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23283:27:0::1;23313:5;23283:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;23283:35:0::1;::::0;;23216:110::o;24111:142::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;24236:9:::1;::::0;24232:13:::1;::::0;:2:::1;:13;:::i;:::-;24220:25;::::0;:9;:25:::1;:::i;:::-;24205:12;:40:::0;-1:-1:-1;24111:142:0:o;23920:179::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;24082:9:::1;::::0;24078:13:::1;::::0;:2:::1;:13;:::i;:::-;24065:26;::::0;:10;:26:::1;:::i;:::-;24033:29;:58:::0;-1:-1:-1;23920:179:0:o;3510:244::-;3265:6;;-1:-1:-1;;;;;3265:6:0;3275:10;3265:20;3257:65;;;;-1:-1:-1;;;3257:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3599:22:0;::::1;3591:73;;;::::0;-1:-1:-1;;;3591:73:0;;5917:2:1;3591:73:0::1;::::0;::::1;5899:21:1::0;5956:2;5936:18;;;5929:30;5995:34;5975:18;;;5968:62;-1:-1:-1;;;6046:18:1;;;6039:36;6092:19;;3591:73:0::1;5715:402:1::0;3591:73:0::1;3701:6;::::0;;3680:38:::1;::::0;-1:-1:-1;;;;;3680:38:0;;::::1;::::0;3701:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;3680:38:0;::::1;3729:6;:17:::0;;-1:-1:-1;;;;;;3729:17:0::1;-1:-1:-1::0;;;;;3729:17:0;;;::::1;::::0;;;::::1;::::0;;3510:244::o;25830:371::-;-1:-1:-1;;;;;25957:19:0;;25949:68;;;;-1:-1:-1;;;25949:68:0;;8662:2:1;25949:68:0;;;8644:21:1;8701:2;8681:18;;;8674:30;8740:34;8720:18;;;8713:62;-1:-1:-1;;;8791:18:1;;;8784:34;8835:19;;25949:68:0;8460:400:1;25949:68:0;-1:-1:-1;;;;;26036:21:0;;26028:68;;;;-1:-1:-1;;;26028:68:0;;6324:2:1;26028:68:0;;;6306:21:1;6363:2;6343:18;;;6336:30;6402:34;6382:18;;;6375:62;-1:-1:-1;;;6453:18:1;;;6446:32;6495:19;;26028:68:0;6122:398:1;26028:68:0;-1:-1:-1;;;;;26109:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26161:32;;9775:25:1;;;26161:32:0;;9748:18:1;26161:32:0;;;;;;;25830:371;;;:::o;26209:1792::-;-1:-1:-1;;;;;26331:18:0;;26323:68;;;;-1:-1:-1;;;26323:68:0;;8256:2:1;26323:68:0;;;8238:21:1;8295:2;8275:18;;;8268:30;8334:34;8314:18;;;8307:62;-1:-1:-1;;;8385:18:1;;;8378:35;8430:19;;26323:68:0;8054:401:1;26323:68:0;-1:-1:-1;;;;;26410:16:0;;26402:64;;;;-1:-1:-1;;;26402:64:0;;5102:2:1;26402:64:0;;;5084:21:1;5141:2;5121:18;;;5114:30;5180:34;5160:18;;;5153:62;-1:-1:-1;;;5231:18:1;;;5224:33;5274:19;;26402:64:0;4900:399:1;26402:64:0;26494:1;26485:6;:10;26477:64;;;;-1:-1:-1;;;26477:64:0;;7846:2:1;26477:64:0;;;7828:21:1;7885:2;7865:18;;;7858:30;7924:34;7904:18;;;7897:62;-1:-1:-1;;;7975:18:1;;;7968:39;8024:19;;26477:64:0;7644:405:1;26477:64:0;3169:7;3196:6;-1:-1:-1;;;;;26556:15:0;;;3196:6;;26556:15;;;;:32;;-1:-1:-1;3169:7:0;3196:6;-1:-1:-1;;;;;26575:13:0;;;3196:6;;26575:13;;26556:32;:61;;;;-1:-1:-1;;;;;;26593:24:0;;;;;;:18;:24;;;;;;;;26592:25;26556:61;:88;;;;-1:-1:-1;;;;;;26622:22:0;;;;;;:18;:22;;;;;;;;26621:23;26556:88;26553:245;;;26672:13;-1:-1:-1;;;;;26664:21:0;:4;-1:-1:-1;;;;;26664:21:0;;26661:126;;;26738:32;26761:8;;26738:18;26750:5;26738:7;;:11;;:18;;;;:::i;:::-;:22;;:32::i;:::-;26728:6;26712:13;26722:2;26712:9;:13::i;:::-;:22;;;;:::i;:::-;:58;;26704:67;;;;;;26810:28;26841:24;26859:4;26841:9;:24::i;:::-;26942:29;;26810:55;;-1:-1:-1;26905:66:0;;;;;;;27000:53;;-1:-1:-1;27037:16:0;;;;27036:17;27000:53;:89;;;;;27076:13;-1:-1:-1;;;;;27070:19:0;:2;-1:-1:-1;;;;;27070:19:0;;27000:89;:127;;;;-1:-1:-1;27106:21:0;;;;;;;27000:127;:177;;;;;27176:1;27144:29;;:33;27000:177;26982:366;;;27227:29;;27204:52;;27300:36;27315:20;27300:14;:36::i;:::-;-1:-1:-1;;;;;27541:24:0;;27421:12;27541:24;;;:18;:24;;;;;;27436:4;;27541:24;;;:50;;-1:-1:-1;;;;;;27569:22:0;;;;;;:18;:22;;;;;;;;27541:50;27537:98;;;-1:-1:-1;27618:5:0;27537:98;27672:21;27696:13;27706:2;27696:9;:13::i;:::-;:18;:60;;;;-1:-1:-1;;;;;;27731:11:0;;;27754:1;27731:11;;;:7;:11;;;;;;;:25;27696:60;:98;;;;;27781:13;-1:-1:-1;;;;;27773:21:0;:4;-1:-1:-1;;;;;27773:21:0;;;27696:98;27672:122;;27873:41;27888:4;27894:2;27898:6;27906:7;27873:14;:41::i;:::-;27931:16;27927:67;;;-1:-1:-1;;;;;27964:11:0;;;;;;;:7;:11;;;;;:18;;-1:-1:-1;;;;;;27964:18:0;;;;;;;;;;27927:67;26312:1689;;;;26209:1792;;;:::o;5580:226::-;5700:7;5736:12;5728:6;;;;5720:29;;;;-1:-1:-1;;;5720:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5760:9:0;5772:5;5776:1;5772;:5;:::i;:::-;5760:17;5580:226;-1:-1:-1;;;;;5580:226:0:o;24533:164::-;24575:7;24596:15;24613;24632:19;:17;:19::i;:::-;24595:56;;-1:-1:-1;24595:56:0;-1:-1:-1;24669:20:0;24595:56;;24669:11;:20::i;:::-;24662:27;;;;24533:164;:::o;7012:132::-;7070:7;7097:39;7101:1;7104;7097:39;;;;;;;;;;;;;;;;;:3;:39::i;4677:181::-;4735:7;;4767:5;4771:1;4767;:5;:::i;:::-;4755:17;;4796:1;4791;:6;;4783:46;;;;-1:-1:-1;;;4783:46:0;;6727:2:1;4783:46:0;;;6709:21:1;6766:2;6746:18;;;6739:30;6805:29;6785:18;;;6778:57;6852:18;;4783:46:0;6525:351:1;6065:471:0;6123:7;6368:6;6364:47;;-1:-1:-1;6398:1:0;6391:8;;6364:47;6423:9;6435:5;6439:1;6435;:5;:::i;:::-;6423:17;-1:-1:-1;6468:1:0;6459:5;6463:1;6423:17;6459:5;:::i;:::-;:10;6451:56;;;;-1:-1:-1;;;6451:56:0;;7083:2:1;6451:56:0;;;7065:21:1;7122:2;7102:18;;;7095:30;7161:34;7141:18;;;7134:62;-1:-1:-1;;;7212:18:1;;;7205:31;7253:19;;6451:56:0;6881:397:1;28009:979:0;18985:16;:23;;-1:-1:-1;;18985:23:0;19004:4;18985:23;;;:16;28161:27:::1;:20:::0;28186:1:::1;28161:24;:27::i;:::-;28146:42:::0;-1:-1:-1;28199:17:0::1;28219:30;:20:::0;28146:42;28219:24:::1;:30::i;:::-;28199:50:::0;-1:-1:-1;28552:21:0::1;28618:22;28635:4:::0;28618:16:::1;:22::i;:::-;28771:18;28792:41;:21;28818:14:::0;28792:25:::1;:41::i;:::-;28771:62;;28883:35;28896:9;28907:10;28883:12;:35::i;:::-;28936:43;::::0;;10998:25:1;;;11054:2;11039:18;;11032:34;;;11082:18;;;11075:34;;;28936:43:0::1;::::0;10986:2:1;10971:18;28936:43:0::1;;;;;;;-1:-1:-1::0;;19031:16:0;:24;;-1:-1:-1;;19031:24:0;;;-1:-1:-1;;;28009:979:0:o;30191:286::-;30347:7;30342:28;;30356:14;25214:7;;;25196:15;:25;25256:13;;;25232:21;:37;25302:11;;;25280:19;:33;25346:11;;;25324:19;:33;-1:-1:-1;25370:11:0;;;;25392:17;;;;25420:15;;;;25446;25153:316;30356:14;30383:44;30401:6;30409:9;30420:6;30383:17;:44::i;:::-;30445:7;30440:29;;30454:15;25531;;25521:7;:25;25573:21;;25557:13;:37;25619:19;;25605:11;:33;25663:19;;25649:11;:33;25477:213;24705:257;24803:7;;24839;;24756;;;;24871:20;24803:7;24839;24871:11;:20::i;:::-;24861:7;:30;24857:61;;;24901:7;;24910;;24893:25;;;;;;24705:257;;:::o;24857:61::-;24937:7;;24946;;-1:-1:-1;24705:257:0;-1:-1:-1;24705:257:0:o;7640:312::-;7760:7;7795:12;7788:5;7780:28;;;;-1:-1:-1;;;7780:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7819:9:0;7831:5;7835:1;7831;:5;:::i;5141:136::-;5199:7;5226:43;5230:1;5233;5226:43;;;;;;;;;;;;;;;;;:3;:43::i;28996:588::-;29146:16;;;29160:1;29146:16;;;;;;;;29122:21;;29146:16;;;;;;;;;;-1:-1:-1;29146:16:0;29122:40;;29191:4;29173;29178:1;29173:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29173:23:0;;;-1:-1:-1;;;;;29173:23:0;;;;;29217:15;-1:-1:-1;;;;;29217:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29207:4;29212:1;29207:7;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1;;;;;29207:31:0;;;-1:-1:-1;;;;;29207:31:0;;;;;29251:62;29268:4;29283:15;29301:11;29251:8;:62::i;:::-;29352:224;;-1:-1:-1;;;29352:224:0;;-1:-1:-1;;;;;29352:15:0;:66;;;;:224;;29433:11;;29459:1;;29503:4;;29530;;29550:15;;29352:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29051:533;28996:588;:::o;29592:518::-;29740:62;29757:4;29772:15;29790:11;29740:8;:62::i;:::-;30049:12;;29845:257;;-1:-1:-1;;;29845:257:0;;29917:4;29845:257;;;3600:34:1;3650:18;;;3643:34;;;29963:1:0;3693:18:1;;;3686:34;;;3736:18;;;3729:34;-1:-1:-1;;;;;30049:12:0;;;3779:19:1;;;3772:44;30076:15:0;3832:19:1;;;3825:35;29845:15:0;:31;;;;;;29884:9;;3534:19:1;;29845:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29592:518;;:::o;32258:1111::-;32390:19;32412:10;:8;:10::i;:::-;32390:32;-1:-1:-1;32466:15:0;32484:24;:7;32390:32;32484:11;:24::i;:::-;-1:-1:-1;;;;;32537:15:0;;;;;;:7;:15;;;;;;32466:42;;-1:-1:-1;32537:28:0;;32466:42;32537:19;:28::i;:::-;-1:-1:-1;;;;;32519:15:0;;;;;;:7;:15;;;;;:46;32642:11;;32597:71;;32527:6;;32621:33;;:16;:7;32633:3;32621:11;:16::i;:33::-;32656:11;32597:15;:71::i;:::-;32745:13;;32709:51;;32724:35;;:16;:7;32736:3;32724:11;:16::i;:35::-;32709:14;:51::i;:::-;32803:56;32819:6;32827:9;32838:7;32847:11;32803:15;:56::i;:::-;32938:7;;32891:110;;32917:29;;:16;:7;32929:3;32917:11;:16::i;:29::-;32982:7;;32961:29;;:16;:7;32973:3;32961:11;:16::i;:29::-;32891:11;:110::i;:::-;33033:21;33155:11;;33128;;33105:7;;33076:13;;33057:3;:32;;;;:::i;:::-;:55;;;;:::i;:::-;:82;;;;:::i;:::-;:109;;;;:::i;:::-;33033:133;-1:-1:-1;33198:83:0;33235:35;33033:133;33235:16;:7;33247:3;33235:11;:16::i;:35::-;-1:-1:-1;;;;;33198:18:0;;;;;;:7;:18;;;;;;;:22;:83::i;:::-;-1:-1:-1;;;;;33177:18:0;;;;;;;:7;:18;;;;;:104;;;;33297:64;;;33325:35;33346:13;33325:16;:7;33337:3;33325:11;:16::i;:35::-;33297:64;;9775:25:1;;;9763:2;9748:18;33297:64:0;;;;;;;32379:990;;;32258:1111;;;:::o;30485:356::-;30621:11;;30617:29;;30485:356;;;:::o;30617:29::-;30656:15;30674:24;:7;30686:11;30674;:24::i;:::-;30746:15;;-1:-1:-1;;;;;30746:15:0;30738:24;;;;:7;:24;;;;;;30656:42;;-1:-1:-1;30738:37:0;;30656:42;30738:28;:37::i;:::-;30719:15;;;-1:-1:-1;;;;;30719:15:0;;;30711:24;;;;:7;:24;;;;;;;;;:64;;;;30808:15;;30791:42;;9775:25:1;;;30808:15:0;;;;30791:42;;;;;;9748:18:1;30791:42:0;;;;;;;30606:235;30485:356;;;:::o;30849:172::-;30916:15;30912:28;;30849:172;:::o;30912:28::-;30991:4;30975:22;;;;:7;:22;;;;;;:38;;31002:10;30975:26;:38::i;:::-;30966:4;30950:22;;;;:7;:22;;;;;:63;-1:-1:-1;30849:172:0:o;31184:1066::-;31348:11;;31344:29;;31366:7;;31344:29;31385:11;31421:13;-1:-1:-1;;;;;31411:23:0;:6;-1:-1:-1;;;;;31411:23:0;;31407:148;;;-1:-1:-1;31457:9:0;31407:148;;;31501:13;-1:-1:-1;;;;;31488:26:0;:9;-1:-1:-1;;;;;31488:26:0;;31484:71;;;-1:-1:-1;31537:6:0;31484:71;-1:-1:-1;;;;;31569:17:0;;31565:56;;31603:7;;;31565:56;31633:17;;31661:582;31684:1;31680;:5;31661:582;;;31707:12;31738:6;31734:104;;-1:-1:-1;31772:1:0;31734:104;;;-1:-1:-1;31821:1:0;31734:104;-1:-1:-1;;;;;31858:12:0;;;;;;;:7;:12;;;;;;;;;;31889:17;31885:63;;31927:5;;;31885:63;31974:19;:9;31988:4;31974:13;:19::i;:::-;31962:31;-1:-1:-1;32010:18:0;32031:26;32052:4;32031:16;:7;32043:3;32031:11;:16::i;:26::-;32010:47;-1:-1:-1;32072:18:0;32093:27;32010:47;32108:11;32093:14;:27::i;:::-;-1:-1:-1;;;;;32150:12:0;;;;;;:7;:12;;;;;;32072:48;;-1:-1:-1;32150:28:0;;32072:48;32150:16;:28::i;:::-;-1:-1:-1;;;;;32135:12:0;;;;;;;:7;:12;;;;;;;:43;;;;32198:33;;;;;;;;;;32220:10;9775:25:1;;9763:2;9748:18;;9629:177;32198:33:0;;;;;;;;31692:551;;;31687:3;;;;;:::i;:::-;;;;31661:582;;31029:147;31107:7;;:17;;31119:4;31107:11;:17::i;:::-;31097:7;:27;31148:10;;:20;;31163:4;31148:14;:20::i;:::-;31135:10;:33;-1:-1:-1;;31029:147:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:323::-;598:6;606;659:2;647:9;638:7;634:23;630:32;627:52;;;675:1;672;665:12;627:52;714:9;701:23;733:31;758:5;733:31;:::i;:::-;783:5;835:2;820:18;;;;807:32;;-1:-1:-1;;;522:323:1:o;850:388::-;918:6;926;979:2;967:9;958:7;954:23;950:32;947:52;;;995:1;992;985:12;947:52;1034:9;1021:23;1053:31;1078:5;1053:31;:::i;:::-;1103:5;-1:-1:-1;1160:2:1;1145:18;;1132:32;1173:33;1132:32;1173:33;:::i;:::-;1225:7;1215:17;;;850:388;;;;;:::o;1243:456::-;1320:6;1328;1336;1389:2;1377:9;1368:7;1364:23;1360:32;1357:52;;;1405:1;1402;1395:12;1357:52;1444:9;1431:23;1463:31;1488:5;1463:31;:::i;:::-;1513:5;-1:-1:-1;1570:2:1;1555:18;;1542:32;1583:33;1542:32;1583:33;:::i;:::-;1243:456;;1635:7;;-1:-1:-1;;;1689:2:1;1674:18;;;;1661:32;;1243:456::o;2024:273::-;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;2188:9;2175:23;2241:5;2234:13;2227:21;2220:5;2217:32;2207:60;;2263:1;2260;2253:12;2302:180;2361:6;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;-1:-1:-1;2453:23:1;;2302:180;-1:-1:-1;2302:180:1:o;2487:248::-;2555:6;2563;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;-1:-1:-1;;2655:23:1;;;2725:2;2710:18;;;2697:32;;-1:-1:-1;2487:248:1:o;2740:306::-;2828:6;2836;2844;2897:2;2885:9;2876:7;2872:23;2868:32;2865:52;;;2913:1;2910;2903:12;2865:52;2942:9;2936:16;2926:26;;2992:2;2981:9;2977:18;2971:25;2961:35;;3036:2;3025:9;3021:18;3015:25;3005:35;;2740:306;;;;;:::o;4298:597::-;4410:4;4439:2;4468;4457:9;4450:21;4500:6;4494:13;4543:6;4538:2;4527:9;4523:18;4516:34;4568:1;4578:140;4592:6;4589:1;4586:13;4578:140;;;4687:14;;;4683:23;;4677:30;4653:17;;;4672:2;4649:26;4642:66;4607:10;;4578:140;;;4736:6;4733:1;4730:13;4727:91;;;4806:1;4801:2;4792:6;4781:9;4777:22;4773:31;4766:42;4727:91;-1:-1:-1;4879:2:1;4858:15;-1:-1:-1;;4854:29:1;4839:45;;;;4886:2;4835:54;;4298:597;-1:-1:-1;;;4298:597:1:o;7283:356::-;7485:2;7467:21;;;7504:18;;;7497:30;7563:34;7558:2;7543:18;;7536:62;7630:2;7615:18;;7283:356::o;9811:980::-;10073:4;10121:3;10110:9;10106:19;10152:6;10141:9;10134:25;10178:2;10216:6;10211:2;10200:9;10196:18;10189:34;10259:3;10254:2;10243:9;10239:18;10232:31;10283:6;10318;10312:13;10349:6;10341;10334:22;10387:3;10376:9;10372:19;10365:26;;10426:2;10418:6;10414:15;10400:29;;10447:1;10457:195;10471:6;10468:1;10465:13;10457:195;;;10536:13;;-1:-1:-1;;;;;10532:39:1;10520:52;;10627:15;;;;10592:12;;;;10568:1;10486:9;10457:195;;;-1:-1:-1;;;;;;;10708:32:1;;;;10703:2;10688:18;;10681:60;-1:-1:-1;;;10772:3:1;10757:19;10750:35;10669:3;9811:980;-1:-1:-1;;;9811:980:1:o;11120:128::-;11160:3;11191:1;11187:6;11184:1;11181:13;11178:39;;;11197:18;;:::i;:::-;-1:-1:-1;11233:9:1;;11120:128::o;11253:217::-;11293:1;11319;11309:132;;11363:10;11358:3;11354:20;11351:1;11344:31;11398:4;11395:1;11388:15;11426:4;11423:1;11416:15;11309:132;-1:-1:-1;11455:9:1;;11253:217::o;11475:422::-;11564:1;11607:5;11564:1;11621:270;11642:7;11632:8;11629:21;11621:270;;;11701:4;11697:1;11693:6;11689:17;11683:4;11680:27;11677:53;;;11710:18;;:::i;:::-;11760:7;11750:8;11746:22;11743:55;;;11780:16;;;;11743:55;11859:22;;;;11819:15;;;;11621:270;;;11625:3;11475:422;;;;;:::o;11902:131::-;11962:5;11991:36;12018:8;12012:4;12087:5;12117:8;12107:80;;-1:-1:-1;12158:1:1;12172:5;;12107:80;12206:4;12196:76;;-1:-1:-1;12243:1:1;12257:5;;12196:76;12288:4;12306:1;12301:59;;;;12374:1;12369:130;;;;12281:218;;12301:59;12331:1;12322:10;;12345:5;;;12369:130;12406:3;12396:8;12393:17;12390:43;;;12413:18;;:::i;:::-;-1:-1:-1;;12469:1:1;12455:16;;12484:5;;12281:218;;12583:2;12573:8;12570:16;12564:3;12558:4;12555:13;12551:36;12545:2;12535:8;12532:16;12527:2;12521:4;12518:12;12514:35;12511:77;12508:159;;;-1:-1:-1;12620:19:1;;;12652:5;;12508:159;12699:34;12724:8;12718:4;12699:34;:::i;:::-;12769:6;12765:1;12761:6;12757:19;12748:7;12745:32;12742:58;;;12780:18;;:::i;:::-;12818:20;;12038:806;-1:-1:-1;;;12038:806:1:o;12849:168::-;12889:7;12955:1;12951;12947:6;12943:14;12940:1;12937:21;12932:1;12925:9;12918:17;12914:45;12911:71;;;12962:18;;:::i;:::-;-1:-1:-1;13002:9:1;;12849:168::o;13022:125::-;13062:4;13090:1;13087;13084:8;13081:34;;;13095:18;;:::i;:::-;-1:-1:-1;13132:9:1;;13022:125::o;13152:380::-;13231:1;13227:12;;;;13274;;;13295:61;;13349:4;13341:6;13337:17;13327:27;;13295:61;13402:2;13394:6;13391:14;13371:18;13368:38;13365:161;;;13448:10;13443:3;13439:20;13436:1;13429:31;13483:4;13480:1;13473:15;13511:4;13508:1;13501:15;13365:161;;13152:380;;;:::o;13537:147::-;13575:3;-1:-1:-1;;;;;13596:30:1;;13593:56;;;13629:18;;:::i;:::-;-1:-1:-1;13676:1:1;13665:13;;13537:147::o;13689:127::-;13750:10;13745:3;13741:20;13738:1;13731:31;13781:4;13778:1;13771:15;13805:4;13802:1;13795:15;13821:127;13882:10;13877:3;13873:20;13870:1;13863:31;13913:4;13910:1;13903:15;13937:4;13934:1;13927:15;14085:131;-1:-1:-1;;;;;14160:31:1;;14150:42;;14140:70;;14206:1;14203;14196:12;14140:70;14085:131;:::o

Swarm Source

ipfs://ca26ea0aeb2109f20a4173394a5a1216cffd0b35a068aabbe1bfd00a95bce0c1
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading