ETH Price: $3,292.76 (+0.50%)
Gas: 2.61 Gwei

Token

JEBUS (JEBUS)
 

Overview

Max Total Supply

1,000,000,000 JEBUS

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
tehapprentice.eth
Balance
4,124,597.174504754 JEBUS

Value
$0.00
0x57d180bB8BFb5B021f96DD71Eb499f70294cE4AE
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:
JEBUS

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 Etherscan.io on 2022-02-17
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// 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.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. 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 mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: Jebus_file.sol



/*

JEBUS

    

1% tax is collected for dev fees



                                                 



*/




pragma solidity ^0.8.7;

// Import SafeMath library




abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {

        return payable(msg.sender);

    }



    function _msgData() internal view virtual returns (bytes memory) {

        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691

        return msg.data;

    }

}





interface IERC20 {



    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    



}











contract Ownable is Context {

    address private _owner;

    address private _previousOwner;

    uint256 private _lockTime;



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



    constructor () {

        address msgSender = _msgSender();

        _owner = msgSender;

        emit OwnershipTransferred(address(0), msgSender);

    }



    function owner() public view returns (address) {

        return _owner;

    }   

    

    modifier onlyOwner() {

        require(_owner == _msgSender(), "Ownable: caller is not the owner");

        _;

    }

    

    function renounceOwnership() public virtual onlyOwner {

        emit OwnershipTransferred(_owner, address(0));

        _owner = address(0);

    }



    function transferOwnership(address newOwner) public virtual onlyOwner {

        require(newOwner != address(0), "Ownable: new owner is the zero address");

        emit OwnershipTransferred(_owner, newOwner);

        _owner = newOwner;

    }



    function getUnlockTime() public view returns (uint256) {

        return _lockTime;

    }

    

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

    }

}



// pragma solidity >=0.5.0;



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;

}





// pragma solidity >=0.5.0;



interface IUniswapV2Pair {

    event Approval(address indexed owner, address indexed spender, uint value);

    event Transfer(address indexed from, address indexed to, uint value);



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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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



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

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

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



    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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



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

    

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);

    event Swap(

        address indexed sender,

        uint amount0In,

        uint amount1In,

        uint amount0Out,

        uint amount1Out,

        address indexed to

    );

    event Sync(uint112 reserve0, uint112 reserve1);



    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);



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

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

    function skim(address to) external;

    function sync() external;



    function initialize(address, address) external;

}



// pragma solidity >=0.6.2;



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

}







// pragma solidity >=0.6.2;



interface IUniswapV2Router02 is IUniswapV2Router01 {

    function removeLiquidityETHSupportingFeeOnTransferTokens(

        address token,

        uint liquidity,

        uint amountTokenMin,

        uint amountETHMin,

        address to,

        uint deadline

    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(

        address token,

        uint liquidity,

        uint amountTokenMin,

        uint amountETHMin,

        address to,

        uint deadline,

        bool approveMax, uint8 v, bytes32 r, bytes32 s

    ) external returns (uint amountETH);



    function swapExactTokensForTokensSupportingFeeOnTransferTokens(

        uint amountIn,

        uint amountOutMin,

        address[] calldata path,

        address to,

        uint deadline

    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(

        uint amountOutMin,

        address[] calldata path,

        address to,

        uint deadline

    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(

        uint amountIn,

        uint amountOutMin,

        address[] calldata path,

        address to,

        uint deadline

    ) external;

}



contract JEBUS is Context, IERC20, Ownable {

    using SafeMath for uint256;

    //using Address for address;

    

    address payable public marketingAddress = payable(0xb7A7BB1AedB54Dd327a7a838a4E7B66c41105b87); // dev Address

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

    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 = 1000 * 10**6 * 10**9;

    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 private _tFeeTotal;



    string private _name = "JEBUS";

    string private _symbol = "JEBUS";

    uint8 private _decimals = 9;





    uint256 public _taxFee = 0;

    uint256 private _previousTaxFee = _taxFee;

    

    uint256 public _liquidityFee = 1;

    uint256 private _previousLiquidityFee = _liquidityFee;

    

    uint256 public marketingDivisor = 1;

    

    uint256 public _maxTxAmount = 30 * 10**6 * 10**9;

    uint256 private minimumTokensBeforeSwap = 20000 * 10**6 * 10**9; 

    uint256 private buyBackUpperLimit = 1 * 10**17;



    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;

    

    bool inSwapAndLiquify;

    bool public swapAndLiquifyEnabled = true;

    bool public buyBackEnabled = true;



    

    event RewardLiquidityProviders(uint256 tokenAmount);

    event BuyBackEnabledUpdated(bool enabled);

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(

        uint256 tokensSwapped,

        uint256 ethReceived,

        uint256 tokensIntoLiqudity

    );

    

    event SwapETHForTokens(

        uint256 amountIn,

        address[] path

    );

    

    event SwapTokensForETH(

        uint256 amountIn,

        address[] path

    );

    

    modifier lockTheSwap {

        inSwapAndLiquify = true;

        _;

        inSwapAndLiquify = false;

    }

    

    constructor () {

        _rOwned[_msgSender()] = _rTotal;

        

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())

            .createPair(address(this), _uniswapV2Router.WETH());



        uniswapV2Router = _uniswapV2Router;



        

        _isExcludedFromFee[owner()] = true;

        _isExcludedFromFee[address(this)] = true;

        

        emit Transfer(address(0), _msgSender(), _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 totalFees() public view returns (uint256) {

        return _tFeeTotal;

    }

    

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {

        return minimumTokensBeforeSwap;

    }

    

    function buyBackUpperLimitAmount() public view returns (uint256) {

        return buyBackUpperLimit;

    }

    

    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 _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()) {

            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        }



        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {

            if (overMinimumTokenBalance) {

                contractTokenBalance = minimumTokensBeforeSwap;

                swapTokens(contractTokenBalance);    

            }

	        uint256 balance = address(this).balance;

            if (buyBackEnabled && balance > uint256(1 * 10**17)) {

                

                if (balance > buyBackUpperLimit)

                    balance = buyBackUpperLimit;

                

				//buyBackTokens(balance.div(100));

				

				//Send to Marketing address

				transferToAddressETH(marketingAddress, balance.div(100));       

            }

        }

        

        bool takeFee = true;

        

        //if any account belongs to _isExcludedFromFee account then remove the fee

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){

            takeFee = false;

        }

        

        _tokenTransfer(from,to,amount,takeFee);

    }



    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {

       

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(contractTokenBalance);

        uint256 transferredBalance = address(this).balance.sub(initialBalance);



        //Send to Marketing address

        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));

        

    }

    



    function buyBackTokens(uint256 amount) private lockTheSwap {

    	if (amount > 0) {

    	    swapETHForTokens(amount);

	    }

    }

    

    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.WETH();



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



        // make the swap

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(

            tokenAmount,

            0, // accept any amount of ETH

            path,

            address(this), // The contract

            block.timestamp

        );

        

        emit SwapTokensForETH(tokenAmount, path);

    }

    

    function swapETHForTokens(uint256 amount) private {

        // generate the uniswap pair path of token -> weth

        address[] memory path = new address[](2);

        path[0] = uniswapV2Router.WETH();

        path[1] = address(this);



      // make the swap

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(

            0, // accept any amount of Tokens

            path,

            deadAddress, // Burn address

            block.timestamp.add(300)

        );

        

        emit SwapETHForTokens(amount, path);

    }

    

    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

            owner(),

            block.timestamp

        );

    }



    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        if(!takeFee)

            removeAllFee();

        

        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]) {

            _transferBothExcluded(sender, recipient, amount);

        } else {

            _transferStandard(sender, recipient, amount);

        }

        

        if(!takeFee)

            restoreAllFee();

    }



    function _transferStandard(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);

        _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 _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 _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 calculateTaxFee(uint256 _amount) private view returns (uint256) {

        return _amount.mul(_taxFee).div(

            10**2

        );

    }

    

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {

        return _amount.mul(_liquidityFee).div(

            10**2

        );

    }

    

    function removeAllFee() private {

        if(_taxFee == 0 && _liquidityFee == 0) return;

        

        _previousTaxFee = _taxFee;

        _previousLiquidityFee = _liquidityFee;

        

        _taxFee = 0;

        _liquidityFee = 0;

    }

    

    function restoreAllFee() private {

        _taxFee = _previousTaxFee;

        _liquidityFee = _previousLiquidityFee;

    }



    function isExcludedFromFee(address account) public view returns(bool) {

        return _isExcludedFromFee[account];

    }

    

    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 setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {

        _liquidityFee = liquidityFee;

    }

    

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {

        _maxTxAmount = maxTxAmount;

    }

    

    function setMarketingDivisor(uint256 divisor) external onlyOwner() {

        marketingDivisor = divisor;

    }



    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {

        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;

    }

    

     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {

        buyBackUpperLimit = buyBackLimit * 10**17;

    }



    function setMarketingAddress(address _marketingAddress) external onlyOwner() {

        marketingAddress = payable(_marketingAddress);

    }



    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {

        swapAndLiquifyEnabled = _enabled;

        emit SwapAndLiquifyEnabledUpdated(_enabled);

    }

    

    function setBuyBackEnabled(bool _enabled) public onlyOwner {

        buyBackEnabled = _enabled;

        emit BuyBackEnabledUpdated(_enabled);

    }

    

    function prepareForPreSale() external onlyOwner {

        setSwapAndLiquifyEnabled(false);

        _taxFee = 0;

        _liquidityFee = 0;

        _maxTxAmount = 1000000000 * 10**6 * 10**9;

    }

    

    function afterPreSale() external onlyOwner {

        setSwapAndLiquifyEnabled(true);

        _taxFee = 0;

        _liquidityFee = 1;

        _maxTxAmount = 30 * 10**6 * 10**9;

    }

    

    function transferToAddressETH(address payable recipient, uint256 amount) private {

        recipient.transfer(amount);

    }

    

     //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":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":"_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":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","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":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","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":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","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"}]

60e0604052600380546001600160a01b03191673b7a7bb1aedb54dd327a7a838a4e7b66c41105b871790556ddead000000000000000000000000608052670de0b6b3a7640000600a819055620000589060001962000524565b6200006690600019620004c1565b600b55604080518082019091526005808252644a4542555360d81b60209092019182526200009791600d91620003e9565b50604080518082019091526005808252644a4542555360d81b6020909201918252620000c691600e91620003e9565b50600f805460ff1916600917905560006010819055601155600160128190556013819055601455666a94d74f4300006015556801158e460913d0000060165567016345785d8a0000601755601880546201010062ffff00199091161790553480156200013157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b158015620001d357600080fd5b505afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e91906200048f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029291906200048f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002db57600080fd5b505af1158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031691906200048f565b6001600160601b0319606091821b811660c0529082901b1660a0526001600760006200034a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252902080549091166001179055620003923390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003da91815260200190565b60405180910390a35062000547565b828054620003f790620004e7565b90600052602060002090601f0160209004810192826200041b576000855562000466565b82601f106200043657805160ff191683800117855562000466565b8280016001018555821562000466579182015b828111156200046657825182559160200191906001019062000449565b506200047492915062000478565b5090565b5b8082111562000474576000815560010162000479565b600060208284031215620004a257600080fd5b81516001600160a01b0381168114620004ba57600080fd5b9392505050565b600082821015620004e257634e487b7160e01b600052601160045260246000fd5b500390565b600181811c90821680620004fc57607f821691505b602082108114156200051e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200054257634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c60a05160601c60c05160601c6129b66200059c600039600081816105840152611a1e0152600081816103b701528181612018015281816120e0015261211c0152600061043801526129b66000f3fe6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610903578063ec28438a14610923578063f0f165af14610943578063f2fde38b1461096357600080fd5b8063d6b513cf14610887578063dd4670641461089d578063dd62ed3e146108bd57600080fd5b8063a5ece941146107dd578063a69df4b5146107fd578063a9059cbb14610812578063b0cb81f114610832578063bdc653ef14610852578063c49b9a801461086757600080fd5b806388f8202011610149578063906e9dd011610123578063906e9dd01461077357806395d89b4114610793578063a073d37f146107a8578063a457c2d7146107bd57600080fd5b806388f82020146106fc5780638da5cb5b146107355780638ee88c531461075357600080fd5b80636053a0e31461065b5780636bc87c3a1461067b57806370a0823114610691578063715018a6146106b15780637d1db4a5146106c657806382d2a4bb146106dc57600080fd5b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146105da5780635342acb4146105fa578063557ed1ba14610633578063602bc62b1461064657600080fd5b806349bd5a5e146105725780634a74bb02146105a65780635134f6ab146105c557600080fd5b80633685d419146104bc57806339509351146104dc5780633b124fe7146104fc5780633bd5d17314610512578063437823ec146105325780634549b0391461055257600080fd5b806318160ddd116102a157806318160ddd146103f157806323b872dd1461040657806327c8f8351461042657806329370cc61461045a5780632d8381191461047a578063313ce5671461049a57600080fd5b8063061c82d0146102f457806306fdde031461031657806307efbfdc14610341578063095ea7b31461035657806313114a9d146103865780631694505e146103a557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612683565b610983565b005b34801561032257600080fd5b5061032b6109bb565b604051610338919061270c565b60405180910390f35b34801561034d57600080fd5b50610314610a4d565b34801561036257600080fd5b5061037661037136600461263c565b610a98565b6040519015158152602001610338565b34801561039257600080fd5b50600c545b604051908152602001610338565b3480156103b157600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610338565b3480156103fd57600080fd5b50600a54610397565b34801561041257600080fd5b506103766104213660046125fb565b610aaf565b34801561043257600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561046657600080fd5b50610314610475366004612668565b610b18565b34801561048657600080fd5b50610397610495366004612683565b610b98565b3480156104a657600080fd5b50600f5460405160ff9091168152602001610338565b3480156104c857600080fd5b506103146104d7366004612588565b610c1c565b3480156104e857600080fd5b506103766104f736600461263c565b610dd3565b34801561050857600080fd5b5061039760105481565b34801561051e57600080fd5b5061031461052d366004612683565b610e09565b34801561053e57600080fd5b5061031461054d366004612588565b610ef3565b34801561055e57600080fd5b5061039761056d36600461269c565b610f41565b34801561057e57600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b257600080fd5b5060185461037690610100900460ff1681565b3480156105d157600080fd5b50610314610fce565b3480156105e657600080fd5b506103146105f5366004612588565b61101c565b34801561060657600080fd5b50610376610615366004612588565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063f57600080fd5b5042610397565b34801561065257600080fd5b50600254610397565b34801561066757600080fd5b506018546103769062010000900460ff1681565b34801561068757600080fd5b5061039760125481565b34801561069d57600080fd5b506103976106ac366004612588565b61116f565b3480156106bd57600080fd5b506103146111ce565b3480156106d257600080fd5b5061039760155481565b3480156106e857600080fd5b506103146106f7366004612683565b611230565b34801561070857600080fd5b50610376610717366004612588565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561074157600080fd5b506000546001600160a01b03166103d9565b34801561075f57600080fd5b5061031461076e366004612683565b611272565b34801561077f57600080fd5b5061031461078e366004612588565b6112a1565b34801561079f57600080fd5b5061032b6112ed565b3480156107b457600080fd5b50601654610397565b3480156107c957600080fd5b506103766107d836600461263c565b6112fc565b3480156107e957600080fd5b506003546103d9906001600160a01b031681565b34801561080957600080fd5b5061031461134b565b34801561081e57600080fd5b5061037661082d36600461263c565b611451565b34801561083e57600080fd5b5061031461084d366004612683565b61145e565b34801561085e57600080fd5b50601754610397565b34801561087357600080fd5b50610314610882366004612668565b61148d565b34801561089357600080fd5b5061039760145481565b3480156108a957600080fd5b506103146108b8366004612683565b611500565b3480156108c957600080fd5b506103976108d83660046125c2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561090f57600080fd5b5061031461091e366004612588565b611585565b34801561092f57600080fd5b5061031461093e366004612683565b6115d0565b34801561094f57600080fd5b5061031461095e366004612683565b6115ff565b34801561096f57600080fd5b5061031461097e366004612588565b61162e565b6000546001600160a01b031633146109b65760405162461bcd60e51b81526004016109ad90612761565b60405180910390fd5b601055565b6060600d80546109ca90612863565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690612863565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000546001600160a01b03163314610a775760405162461bcd60e51b81526004016109ad90612761565b610a81600161148d565b60006010556001601255666a94d74f430000601555565b6000610aa5338484611706565b5060015b92915050565b6000610abc84848461182a565b610b0e8433610b0985604051806060016040528060288152602001612914602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611b21565b611706565b5060019392505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016109ad90612761565b60188054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610b8d90831515815260200190565b60405180910390a150565b6000600b54821115610bff5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109ad565b6000610c09611b4d565b9050610c158382611b70565b9392505050565b6000546001600160a01b03163314610c465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16610cae5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b60005b600954811015610dcf57816001600160a01b031660098281548110610cd857610cd86128e5565b6000918252602090912001546001600160a01b03161415610dbd5760098054610d039060019061284c565b81548110610d1357610d136128e5565b600091825260209091200154600980546001600160a01b039092169183908110610d3f57610d3f6128e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610d9757610d976128cf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc78161289e565b915050610cb1565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610aa5918590610b099086611b7c565b3360008181526008602052604090205460ff1615610e7e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ad565b6000610e8983611b88565b505050506001600160a01b038416600090815260046020526040902054919250610eb591905082611bd7565b6001600160a01b038316600090815260046020526040902055600b54610edb9082611bd7565b600b55600c54610eeb9084611b7c565b600c55505050565b6000546001600160a01b03163314610f1d5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a54831115610f955760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ad565b81610fb4576000610fa584611b88565b50939550610aa9945050505050565b6000610fbf84611b88565b50929550610aa9945050505050565b6000546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109ad90612761565b611002600061148d565b6000601081905560125569d3c21bcecceda1000000601555565b6000546001600160a01b031633146110465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16156110af5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b6001600160a01b03811660009081526004602052604090205415611109576001600160a01b0381166000908152600460205260409020546110ef90610b98565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff16156111ac57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610aa990610b98565b6000546001600160a01b031633146111f85760405162461bcd60e51b81526004016109ad90612761565b600080546040516001600160a01b039091169060008051602061293c833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461125a5760405162461bcd60e51b81526004016109ad90612761565b61126c8167016345785d8a000061282d565b60175550565b6000546001600160a01b0316331461129c5760405162461bcd60e51b81526004016109ad90612761565b601255565b6000546001600160a01b031633146112cb5760405162461bcd60e51b81526004016109ad90612761565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e80546109ca90612863565b6000610aa53384610b098560405180606001604052806025815260200161295c602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611b21565b6001546001600160a01b031633146113b15760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109ad565b60025442116114025760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109ad565b600154600080546040516001600160a01b03938416939091169160008051602061293c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610aa533848461182a565b6000546001600160a01b031633146114885760405162461bcd60e51b81526004016109ad90612761565b601455565b6000546001600160a01b031633146114b75760405162461bcd60e51b81526004016109ad90612761565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b8d90831515815260200190565b6000546001600160a01b0316331461152a5760405162461bcd60e51b81526004016109ad90612761565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561155981426127f3565b600255600080546040516001600160a01b039091169060008051602061293c833981519152908390a350565b6000546001600160a01b031633146115af5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115fa5760405162461bcd60e51b81526004016109ad90612761565b601555565b6000546001600160a01b031633146116295760405162461bcd60e51b81526004016109ad90612761565b601655565b6000546001600160a01b031633146116585760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b0381166116bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ad565b600080546040516001600160a01b038085169392169160008051602061293c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ad565b6001600160a01b0382166117c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ad565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661188e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ad565b6001600160a01b0382166118f05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ad565b600081116119525760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ad565b6000546001600160a01b0384811691161480159061197e57506000546001600160a01b03838116911614155b156119e6576015548111156119e65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ad565b60006119f13061116f565b6016546018549192508210159060ff16158015611a155750601854610100900460ff165b8015611a5257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15611ac2578015611a6b576016549150611a6b82611be3565b601854479062010000900460ff168015611a8c575067016345785d8a000081115b15611ac057601754811115611aa057506017545b600354611ac0906001600160a01b0316611abb836064611b70565b611c47565b505b6001600160a01b03851660009081526007602052604090205460019060ff1680611b0457506001600160a01b03851660009081526007602052604090205460ff165b15611b0d575060005b611b1986868684611c82565b505050505050565b60008184841115611b455760405162461bcd60e51b81526004016109ad919061270c565b505050900390565b6000806000611b5a611dad565b9092509050611b698282611b70565b9250505090565b6000610c15828461280b565b6000610c1582846127f3565b6000806000806000806000806000611b9f8a611f2f565b9250925092506000806000611bbd8d8686611bb8611b4d565b611f71565b919f909e50909c50959a5093985091965092945050505050565b6000610c15828461284c565b6018805460ff1916600117905547611bfa82611fc1565b6000611c064783611bd7565b600354601454601254929350611c38926001600160a01b0390921691611abb9190611c32908690611b70565b906121c9565b50506018805460ff1916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611c7d573d6000803e3d6000fd5b505050565b80611c8f57611c8f6121d5565b6001600160a01b03841660009081526008602052604090205460ff168015611cd057506001600160a01b03831660009081526008602052604090205460ff16155b15611ce557611ce0848484612203565b611d91565b6001600160a01b03841660009081526008602052604090205460ff16158015611d2657506001600160a01b03831660009081526008602052604090205460ff165b15611d3657611ce0848484612329565b6001600160a01b03841660009081526008602052604090205460ff168015611d7657506001600160a01b03831660009081526008602052604090205460ff165b15611d8657611ce08484846123d2565b611d91848484612445565b80611da757611da7601154601055601354601255565b50505050565b600b54600a546000918291825b600954811015611eff57826004600060098481548110611ddc57611ddc6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e475750816005600060098481548110611e2057611e206128e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e5d57600b54600a54945094505050509091565b611ea36004600060098481548110611e7757611e776128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bd7565b9250611eeb6005600060098481548110611ebf57611ebf6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bd7565b915080611ef78161289e565b915050611dba565b50600a54600b54611f0f91611b70565b821015611f2657600b54600a549350935050509091565b90939092509050565b600080600080611f3e85612489565b90506000611f4b866124ab565b90506000611f6382611f5d8986611bd7565b90611bd7565b979296509094509092505050565b6000808080611f8088866121c9565b90506000611f8e88876121c9565b90506000611f9c88886121c9565b90506000611fae82611f5d8686611bd7565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ff657611ff66128e5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561206f57600080fd5b505afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a791906125a5565b816001815181106120ba576120ba6128e5565b60200260200101906001600160a01b031690816001600160a01b031681525050612105307f000000000000000000000000000000000000000000000000000000000000000084611706565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061215a9085906000908690309042906004016127b7565b600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516121bd929190612796565b60405180910390a15050565b6000610c15828461282d565b6010541580156121e55750601254155b156121ec57565b601080546011556012805460135560009182905555565b60008060008060008061221587611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506122479088611bd7565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546122769087611bd7565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546122a59086611b7c565b6001600160a01b0389166000908152600460205260409020556122c7816124c7565b6122d1848361254f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161231691815260200190565b60405180910390a3505050505050505050565b60008060008060008061233b87611b88565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061236d9087611bd7565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546123a39084611b7c565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546122a59086611b7c565b6000806000806000806123e487611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506124169088611bd7565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461236d9087611bd7565b60008060008060008061245787611b88565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506122769087611bd7565b6000610aa960646124a5601054856121c990919063ffffffff16565b90611b70565b6000610aa960646124a5601254856121c990919063ffffffff16565b60006124d1611b4d565b905060006124df83836121c9565b306000908152600460205260409020549091506124fc9082611b7c565b3060009081526004602090815260408083209390935560089052205460ff1615611c7d573060009081526005602052604090205461253a9084611b7c565b30600090815260056020526040902055505050565b600b5461255c9083611bd7565b600b55600c5461256c9082611b7c565b600c555050565b8035801515811461258357600080fd5b919050565b60006020828403121561259a57600080fd5b8135610c15816128fb565b6000602082840312156125b757600080fd5b8151610c15816128fb565b600080604083850312156125d557600080fd5b82356125e0816128fb565b915060208301356125f0816128fb565b809150509250929050565b60008060006060848603121561261057600080fd5b833561261b816128fb565b9250602084013561262b816128fb565b929592945050506040919091013590565b6000806040838503121561264f57600080fd5b823561265a816128fb565b946020939093013593505050565b60006020828403121561267a57600080fd5b610c1582612573565b60006020828403121561269557600080fd5b5035919050565b600080604083850312156126af57600080fd5b823591506126bf60208401612573565b90509250929050565b600081518084526020808501945080840160005b838110156127015781516001600160a01b0316875295820195908201906001016126dc565b509495945050505050565b600060208083528351808285015260005b818110156127395785810183015185820160400152820161271d565b8181111561274b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006127af60408301846126c8565b949350505050565b85815284602082015260a0604082015260006127d660a08301866126c8565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612806576128066128b9565b500190565b60008261282857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612847576128476128b9565b500290565b60008282101561285e5761285e6128b9565b500390565b600181811c9082168061287757607f821691505b6020821081141561289857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b2576128b26128b9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461291057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fe380180148e096c40913f16c618c5a8f9e263788fe04a6e6010445e6688168664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610903578063ec28438a14610923578063f0f165af14610943578063f2fde38b1461096357600080fd5b8063d6b513cf14610887578063dd4670641461089d578063dd62ed3e146108bd57600080fd5b8063a5ece941146107dd578063a69df4b5146107fd578063a9059cbb14610812578063b0cb81f114610832578063bdc653ef14610852578063c49b9a801461086757600080fd5b806388f8202011610149578063906e9dd011610123578063906e9dd01461077357806395d89b4114610793578063a073d37f146107a8578063a457c2d7146107bd57600080fd5b806388f82020146106fc5780638da5cb5b146107355780638ee88c531461075357600080fd5b80636053a0e31461065b5780636bc87c3a1461067b57806370a0823114610691578063715018a6146106b15780637d1db4a5146106c657806382d2a4bb146106dc57600080fd5b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146105da5780635342acb4146105fa578063557ed1ba14610633578063602bc62b1461064657600080fd5b806349bd5a5e146105725780634a74bb02146105a65780635134f6ab146105c557600080fd5b80633685d419146104bc57806339509351146104dc5780633b124fe7146104fc5780633bd5d17314610512578063437823ec146105325780634549b0391461055257600080fd5b806318160ddd116102a157806318160ddd146103f157806323b872dd1461040657806327c8f8351461042657806329370cc61461045a5780632d8381191461047a578063313ce5671461049a57600080fd5b8063061c82d0146102f457806306fdde031461031657806307efbfdc14610341578063095ea7b31461035657806313114a9d146103865780631694505e146103a557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612683565b610983565b005b34801561032257600080fd5b5061032b6109bb565b604051610338919061270c565b60405180910390f35b34801561034d57600080fd5b50610314610a4d565b34801561036257600080fd5b5061037661037136600461263c565b610a98565b6040519015158152602001610338565b34801561039257600080fd5b50600c545b604051908152602001610338565b3480156103b157600080fd5b506103d97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610338565b3480156103fd57600080fd5b50600a54610397565b34801561041257600080fd5b506103766104213660046125fb565b610aaf565b34801561043257600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000dead81565b34801561046657600080fd5b50610314610475366004612668565b610b18565b34801561048657600080fd5b50610397610495366004612683565b610b98565b3480156104a657600080fd5b50600f5460405160ff9091168152602001610338565b3480156104c857600080fd5b506103146104d7366004612588565b610c1c565b3480156104e857600080fd5b506103766104f736600461263c565b610dd3565b34801561050857600080fd5b5061039760105481565b34801561051e57600080fd5b5061031461052d366004612683565b610e09565b34801561053e57600080fd5b5061031461054d366004612588565b610ef3565b34801561055e57600080fd5b5061039761056d36600461269c565b610f41565b34801561057e57600080fd5b506103d97f0000000000000000000000002f80a7b0c5c9cdcae89309e8d6c4394a93b1769c81565b3480156105b257600080fd5b5060185461037690610100900460ff1681565b3480156105d157600080fd5b50610314610fce565b3480156105e657600080fd5b506103146105f5366004612588565b61101c565b34801561060657600080fd5b50610376610615366004612588565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063f57600080fd5b5042610397565b34801561065257600080fd5b50600254610397565b34801561066757600080fd5b506018546103769062010000900460ff1681565b34801561068757600080fd5b5061039760125481565b34801561069d57600080fd5b506103976106ac366004612588565b61116f565b3480156106bd57600080fd5b506103146111ce565b3480156106d257600080fd5b5061039760155481565b3480156106e857600080fd5b506103146106f7366004612683565b611230565b34801561070857600080fd5b50610376610717366004612588565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561074157600080fd5b506000546001600160a01b03166103d9565b34801561075f57600080fd5b5061031461076e366004612683565b611272565b34801561077f57600080fd5b5061031461078e366004612588565b6112a1565b34801561079f57600080fd5b5061032b6112ed565b3480156107b457600080fd5b50601654610397565b3480156107c957600080fd5b506103766107d836600461263c565b6112fc565b3480156107e957600080fd5b506003546103d9906001600160a01b031681565b34801561080957600080fd5b5061031461134b565b34801561081e57600080fd5b5061037661082d36600461263c565b611451565b34801561083e57600080fd5b5061031461084d366004612683565b61145e565b34801561085e57600080fd5b50601754610397565b34801561087357600080fd5b50610314610882366004612668565b61148d565b34801561089357600080fd5b5061039760145481565b3480156108a957600080fd5b506103146108b8366004612683565b611500565b3480156108c957600080fd5b506103976108d83660046125c2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561090f57600080fd5b5061031461091e366004612588565b611585565b34801561092f57600080fd5b5061031461093e366004612683565b6115d0565b34801561094f57600080fd5b5061031461095e366004612683565b6115ff565b34801561096f57600080fd5b5061031461097e366004612588565b61162e565b6000546001600160a01b031633146109b65760405162461bcd60e51b81526004016109ad90612761565b60405180910390fd5b601055565b6060600d80546109ca90612863565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690612863565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000546001600160a01b03163314610a775760405162461bcd60e51b81526004016109ad90612761565b610a81600161148d565b60006010556001601255666a94d74f430000601555565b6000610aa5338484611706565b5060015b92915050565b6000610abc84848461182a565b610b0e8433610b0985604051806060016040528060288152602001612914602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611b21565b611706565b5060019392505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016109ad90612761565b60188054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610b8d90831515815260200190565b60405180910390a150565b6000600b54821115610bff5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109ad565b6000610c09611b4d565b9050610c158382611b70565b9392505050565b6000546001600160a01b03163314610c465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16610cae5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b60005b600954811015610dcf57816001600160a01b031660098281548110610cd857610cd86128e5565b6000918252602090912001546001600160a01b03161415610dbd5760098054610d039060019061284c565b81548110610d1357610d136128e5565b600091825260209091200154600980546001600160a01b039092169183908110610d3f57610d3f6128e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610d9757610d976128cf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc78161289e565b915050610cb1565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610aa5918590610b099086611b7c565b3360008181526008602052604090205460ff1615610e7e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ad565b6000610e8983611b88565b505050506001600160a01b038416600090815260046020526040902054919250610eb591905082611bd7565b6001600160a01b038316600090815260046020526040902055600b54610edb9082611bd7565b600b55600c54610eeb9084611b7c565b600c55505050565b6000546001600160a01b03163314610f1d5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a54831115610f955760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ad565b81610fb4576000610fa584611b88565b50939550610aa9945050505050565b6000610fbf84611b88565b50929550610aa9945050505050565b6000546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109ad90612761565b611002600061148d565b6000601081905560125569d3c21bcecceda1000000601555565b6000546001600160a01b031633146110465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16156110af5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b6001600160a01b03811660009081526004602052604090205415611109576001600160a01b0381166000908152600460205260409020546110ef90610b98565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff16156111ac57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610aa990610b98565b6000546001600160a01b031633146111f85760405162461bcd60e51b81526004016109ad90612761565b600080546040516001600160a01b039091169060008051602061293c833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461125a5760405162461bcd60e51b81526004016109ad90612761565b61126c8167016345785d8a000061282d565b60175550565b6000546001600160a01b0316331461129c5760405162461bcd60e51b81526004016109ad90612761565b601255565b6000546001600160a01b031633146112cb5760405162461bcd60e51b81526004016109ad90612761565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e80546109ca90612863565b6000610aa53384610b098560405180606001604052806025815260200161295c602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611b21565b6001546001600160a01b031633146113b15760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109ad565b60025442116114025760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109ad565b600154600080546040516001600160a01b03938416939091169160008051602061293c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610aa533848461182a565b6000546001600160a01b031633146114885760405162461bcd60e51b81526004016109ad90612761565b601455565b6000546001600160a01b031633146114b75760405162461bcd60e51b81526004016109ad90612761565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b8d90831515815260200190565b6000546001600160a01b0316331461152a5760405162461bcd60e51b81526004016109ad90612761565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561155981426127f3565b600255600080546040516001600160a01b039091169060008051602061293c833981519152908390a350565b6000546001600160a01b031633146115af5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115fa5760405162461bcd60e51b81526004016109ad90612761565b601555565b6000546001600160a01b031633146116295760405162461bcd60e51b81526004016109ad90612761565b601655565b6000546001600160a01b031633146116585760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b0381166116bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ad565b600080546040516001600160a01b038085169392169160008051602061293c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ad565b6001600160a01b0382166117c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ad565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661188e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ad565b6001600160a01b0382166118f05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ad565b600081116119525760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ad565b6000546001600160a01b0384811691161480159061197e57506000546001600160a01b03838116911614155b156119e6576015548111156119e65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ad565b60006119f13061116f565b6016546018549192508210159060ff16158015611a155750601854610100900460ff165b8015611a5257507f0000000000000000000000002f80a7b0c5c9cdcae89309e8d6c4394a93b1769c6001600160a01b0316846001600160a01b0316145b15611ac2578015611a6b576016549150611a6b82611be3565b601854479062010000900460ff168015611a8c575067016345785d8a000081115b15611ac057601754811115611aa057506017545b600354611ac0906001600160a01b0316611abb836064611b70565b611c47565b505b6001600160a01b03851660009081526007602052604090205460019060ff1680611b0457506001600160a01b03851660009081526007602052604090205460ff165b15611b0d575060005b611b1986868684611c82565b505050505050565b60008184841115611b455760405162461bcd60e51b81526004016109ad919061270c565b505050900390565b6000806000611b5a611dad565b9092509050611b698282611b70565b9250505090565b6000610c15828461280b565b6000610c1582846127f3565b6000806000806000806000806000611b9f8a611f2f565b9250925092506000806000611bbd8d8686611bb8611b4d565b611f71565b919f909e50909c50959a5093985091965092945050505050565b6000610c15828461284c565b6018805460ff1916600117905547611bfa82611fc1565b6000611c064783611bd7565b600354601454601254929350611c38926001600160a01b0390921691611abb9190611c32908690611b70565b906121c9565b50506018805460ff1916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611c7d573d6000803e3d6000fd5b505050565b80611c8f57611c8f6121d5565b6001600160a01b03841660009081526008602052604090205460ff168015611cd057506001600160a01b03831660009081526008602052604090205460ff16155b15611ce557611ce0848484612203565b611d91565b6001600160a01b03841660009081526008602052604090205460ff16158015611d2657506001600160a01b03831660009081526008602052604090205460ff165b15611d3657611ce0848484612329565b6001600160a01b03841660009081526008602052604090205460ff168015611d7657506001600160a01b03831660009081526008602052604090205460ff165b15611d8657611ce08484846123d2565b611d91848484612445565b80611da757611da7601154601055601354601255565b50505050565b600b54600a546000918291825b600954811015611eff57826004600060098481548110611ddc57611ddc6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e475750816005600060098481548110611e2057611e206128e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e5d57600b54600a54945094505050509091565b611ea36004600060098481548110611e7757611e776128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bd7565b9250611eeb6005600060098481548110611ebf57611ebf6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bd7565b915080611ef78161289e565b915050611dba565b50600a54600b54611f0f91611b70565b821015611f2657600b54600a549350935050509091565b90939092509050565b600080600080611f3e85612489565b90506000611f4b866124ab565b90506000611f6382611f5d8986611bd7565b90611bd7565b979296509094509092505050565b6000808080611f8088866121c9565b90506000611f8e88876121c9565b90506000611f9c88886121c9565b90506000611fae82611f5d8686611bd7565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ff657611ff66128e5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561206f57600080fd5b505afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a791906125a5565b816001815181106120ba576120ba6128e5565b60200260200101906001600160a01b031690816001600160a01b031681525050612105307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611706565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061215a9085906000908690309042906004016127b7565b600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516121bd929190612796565b60405180910390a15050565b6000610c15828461282d565b6010541580156121e55750601254155b156121ec57565b601080546011556012805460135560009182905555565b60008060008060008061221587611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506122479088611bd7565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546122769087611bd7565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546122a59086611b7c565b6001600160a01b0389166000908152600460205260409020556122c7816124c7565b6122d1848361254f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161231691815260200190565b60405180910390a3505050505050505050565b60008060008060008061233b87611b88565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061236d9087611bd7565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546123a39084611b7c565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546122a59086611b7c565b6000806000806000806123e487611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506124169088611bd7565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461236d9087611bd7565b60008060008060008061245787611b88565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506122769087611bd7565b6000610aa960646124a5601054856121c990919063ffffffff16565b90611b70565b6000610aa960646124a5601254856121c990919063ffffffff16565b60006124d1611b4d565b905060006124df83836121c9565b306000908152600460205260409020549091506124fc9082611b7c565b3060009081526004602090815260408083209390935560089052205460ff1615611c7d573060009081526005602052604090205461253a9084611b7c565b30600090815260056020526040902055505050565b600b5461255c9083611bd7565b600b55600c5461256c9082611b7c565b600c555050565b8035801515811461258357600080fd5b919050565b60006020828403121561259a57600080fd5b8135610c15816128fb565b6000602082840312156125b757600080fd5b8151610c15816128fb565b600080604083850312156125d557600080fd5b82356125e0816128fb565b915060208301356125f0816128fb565b809150509250929050565b60008060006060848603121561261057600080fd5b833561261b816128fb565b9250602084013561262b816128fb565b929592945050506040919091013590565b6000806040838503121561264f57600080fd5b823561265a816128fb565b946020939093013593505050565b60006020828403121561267a57600080fd5b610c1582612573565b60006020828403121561269557600080fd5b5035919050565b600080604083850312156126af57600080fd5b823591506126bf60208401612573565b90509250929050565b600081518084526020808501945080840160005b838110156127015781516001600160a01b0316875295820195908201906001016126dc565b509495945050505050565b600060208083528351808285015260005b818110156127395785810183015185820160400152820161271d565b8181111561274b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006127af60408301846126c8565b949350505050565b85815284602082015260a0604082015260006127d660a08301866126c8565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612806576128066128b9565b500190565b60008261282857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612847576128476128b9565b500290565b60008282101561285e5761285e6128b9565b500390565b600181811c9082168061287757607f821691505b6020821081141561289857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b2576128b26128b9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461291057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fe380180148e096c40913f16c618c5a8f9e263788fe04a6e6010445e6688168664736f6c63430008070033

Deployed Bytecode Sourcemap

18674:21115:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37735:102;;;;;;;;;;-1:-1:-1;37735:102:0;;;;;:::i;:::-;;:::i;:::-;;21638:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39338:196;;;;;;;;;;;;;:::i;22610:167::-;;;;;;;;;;-1:-1:-1;22610:167:0;;;;;:::i;:::-;;:::i;:::-;;;3547:14:1;;3540:22;3522:41;;3510:2;3495:18;22610:167:0;3382:187:1;23781:91:0;;;;;;;;;;-1:-1:-1;23852:10:0;;23781:91;;;10066:25:1;;;10054:2;10039:18;23781:91:0;9920:177:1;20143:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3114:32:1;;;3096:51;;3084:2;3069:18;20143:51:0;2950:203:1;21939:99:0;;;;;;;;;;-1:-1:-1;22021:7:0;;21939:99;;22789:321;;;;;;;;;;-1:-1:-1;22789:321:0;;;;;:::i;:::-;;:::i;18922:81::-;;;;;;;;;;;;;;;38940:156;;;;;;;;;;-1:-1:-1;38940:156:0;;;;;:::i;:::-;;:::i;25031:261::-;;;;;;;;;;-1:-1:-1;25031:261:0;;;;;:::i;:::-;;:::i;21840:87::-;;;;;;;;;;-1:-1:-1;21908:9:0;;21840:87;;21908:9;;;;11168:36:1;;11156:2;11141:18;21840:87:0;11026:184:1;25667:501:0;;;;;;;;;;-1:-1:-1;25667:501:0;;;;;:::i;:::-;;:::i;23122:224::-;;;;;;;;;;-1:-1:-1;23122:224:0;;;;;:::i;:::-;;:::i;19698:26::-;;;;;;;;;;;;;;;;24156:391;;;;;;;;;;-1:-1:-1;24156:391:0;;;;;:::i;:::-;;:::i;37474:115::-;;;;;;;;;;-1:-1:-1;37474:115:0;;;;;:::i;:::-;;:::i;24565:454::-;;;;;;;;;;-1:-1:-1;24565:454:0;;;;;:::i;:::-;;:::i;20203:38::-;;;;;;;;;;;;;;;20288:40;;;;;;;;;;-1:-1:-1;20288:40:0;;;;;;;;;;;39112:210;;;;;;;;;;;;;:::i;25304:351::-;;;;;;;;;;-1:-1:-1;25304:351:0;;;;;:::i;:::-;;:::i;37331:127::-;;;;;;;;;;-1:-1:-1;37331:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;37421:27:0;37395:4;37421:27;;;:18;:27;;;;;;;;;37331:127;9604:94;;;;;;;;;;-1:-1:-1;9673:15:0;9604:94;;9494;;;;;;;;;;-1:-1:-1;9569:9:0;;9494:94;;20337:33;;;;;;;;;;-1:-1:-1;20337:33:0;;;;;;;;;;;19791:32;;;;;;;;;;;;;;;;22050:204;;;;;;;;;;-1:-1:-1;22050:204:0;;;;;:::i;:::-;;:::i;9064:154::-;;;;;;;;;;;;;:::i;19954:48::-;;;;;;;;;;;;;;;;38441:137;;;;;;;;;;-1:-1:-1;38441:137:0;;;;;:::i;:::-;;:::i;23645:124::-;;;;;;;;;;-1:-1:-1;23645:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;23739:20:0;23713:4;23739:20;;;:11;:20;;;;;;;;;23645:124;8821:83;;;;;;;;;;-1:-1:-1;8859:7:0;8888:6;-1:-1:-1;;;;;8888:6:0;8821:83;;37853:126;;;;;;;;;;-1:-1:-1;37853:126:0;;;;;:::i;:::-;;:::i;38590:145::-;;;;;;;;;;-1:-1:-1;38590:145:0;;;;;:::i;:::-;;:::i;21737:91::-;;;;;;;;;;;;;:::i;23888:124::-;;;;;;;;;;-1:-1:-1;23979:23:0;;23888:124;;23358:275;;;;;;;;;;-1:-1:-1;23358:275:0;;;;;:::i;:::-;;:::i;18805:93::-;;;;;;;;;;-1:-1:-1;18805:93:0;;;;-1:-1:-1;;;;;18805:93:0;;;9962:315;;;;;;;;;;;;;:::i;22266:173::-;;;;;;;;;;-1:-1:-1;22266:173:0;;;;;:::i;:::-;;:::i;38126:116::-;;;;;;;;;;-1:-1:-1;38126:116:0;;;;;:::i;:::-;;:::i;24028:112::-;;;;;;;;;;-1:-1:-1;24113:17:0;;24028:112;;38747:177;;;;;;;;;;-1:-1:-1;38747:177:0;;;;;:::i;:::-;;:::i;19902:35::-;;;;;;;;;;;;;;;;9710:236;;;;;;;;;;-1:-1:-1;9710:236:0;;;;;:::i;:::-;;:::i;22451:147::-;;;;;;;;;;-1:-1:-1;22451:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;22561:18:0;;;22532:7;22561:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22451:147;37605:114;;;;;;;;;;-1:-1:-1;37605:114:0;;;;;:::i;:::-;;:::i;37995:115::-;;;;;;;;;;-1:-1:-1;37995:115:0;;;;;:::i;:::-;;:::i;38254:170::-;;;;;;;;;;-1:-1:-1;38254:170:0;;;;;:::i;:::-;;:::i;9230:252::-;;;;;;;;;;-1:-1:-1;9230:252:0;;;;;:::i;:::-;;:::i;37735:102::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;;;;;;;;;37811:7:::1;:16:::0;37735:102::o;21638:87::-;21675:13;21710:5;21703:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21638:87;:::o;39338:196::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;39394:30:::1;39419:4;39394:24;:30::i;:::-;39447:1;39437:7;:11:::0;39477:1:::1;39461:13;:17:::0;39506:18:::1;39491:12;:33:::0;39338:196::o;22610:167::-;22685:4;22704:39;7386:10;22727:7;22736:6;22704:8;:39::i;:::-;-1:-1:-1;22763:4:0;22610:167;;;;;:::o;22789:321::-;22887:4;22906:36;22916:6;22924:9;22935:6;22906:9;:36::i;:::-;22955:121;22964:6;7386:10;22986:89;23024:6;22986:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22986:19:0;;;;;;:11;:19;;;;;;;;7386:10;22986:33;;;;;;;;;;:37;:89::i;:::-;22955:8;:121::i;:::-;-1:-1:-1;23096:4:0;22789:321;;;;;:::o;38940:156::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;39012:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39012:25:0;;::::1;;::::0;;39055:31:::1;::::0;::::1;::::0;::::1;::::0;39029:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;39055:31:0::1;;;;;;;;38940:156:::0;:::o;25031:261::-;25097:7;25138;;25127;:18;;25119:73;;;;-1:-1:-1;;;25119:73:0;;5017:2:1;25119:73:0;;;4999:21:1;5056:2;5036:18;;;5029:30;5095:34;5075:18;;;5068:62;-1:-1:-1;;;5146:18:1;;;5139:40;5196:19;;25119:73:0;4815:406:1;25119:73:0;25205:19;25228:10;:8;:10::i;:::-;25205:33;-1:-1:-1;25258:24:0;:7;25205:33;25258:11;:24::i;:::-;25251:31;25031:261;-1:-1:-1;;;25031:261:0:o;25667:501::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25751:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25743:60;;;::::0;-1:-1:-1;;;25743:60:0;;6238:2:1;25743:60:0::1;::::0;::::1;6220:21:1::0;6277:2;6257:18;;;6250:30;6316:29;6296:18;;;6289:57;6363:18;;25743:60:0::1;6036:351:1::0;25743:60:0::1;25821:9;25816:343;25840:9;:16:::0;25836:20;::::1;25816:343;;;25900:7;-1:-1:-1::0;;;;;25884:23:0::1;:9;25894:1;25884:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25884:12:0::1;:23;25880:266;;;25945:9;25955:16:::0;;:20:::1;::::0;25974:1:::1;::::0;25955:20:::1;:::i;:::-;25945:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25930:9:::1;:12:::0;;-1:-1:-1;;;;;25945:31:0;;::::1;::::0;25940:1;;25930:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25930:46:0::1;-1:-1:-1::0;;;;;25930:46:0;;::::1;;::::0;;25997:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;26038:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26038:28:0::1;::::0;;26087:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26087:15:0;;;;;-1:-1:-1;;;;;;26087:15:0::1;::::0;;;;;25816:343:::1;25667:501:::0;:::o;25880:266::-:1;25858:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25816:343;;;;25667:501:::0;:::o;23122:224::-;7386:10;23210:4;23261:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23261:34:0;;;;;;;;;;23210:4;;23229:83;;23252:7;;23261:50;;23300:10;23261:38;:50::i;24156:391::-;7386:10;24210:14;24261:19;;;:11;:19;;;;;;;;24260:20;24252:77;;;;-1:-1:-1;;;24252:77:0;;9305:2:1;24252:77:0;;;9287:21:1;9344:2;9324:18;;;9317:30;9383:34;9363:18;;;9356:62;-1:-1:-1;;;9434:18:1;;;9427:42;9486:19;;24252:77:0;9103:408:1;24252:77:0;24343:15;24367:19;24378:7;24367:10;:19::i;:::-;-1:-1:-1;;;;;;;;;24417:15:0;;;;;;:7;:15;;;;;;24342:44;;-1:-1:-1;24417:28:0;;:15;-1:-1:-1;24342:44:0;24417:19;:28::i;:::-;-1:-1:-1;;;;;24399:15:0;;;;;;:7;:15;;;;;:46;24468:7;;:20;;24480:7;24468:11;:20::i;:::-;24458:7;:30;24514:10;;:23;;24529:7;24514:14;:23::i;:::-;24501:10;:36;-1:-1:-1;;;24156:391:0:o;37474:115::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37545:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37545:34:0::1;37575:4;37545:34;::::0;;37474:115::o;24565:454::-;24655:7;24696;;24685;:18;;24677:62;;;;-1:-1:-1;;;24677:62:0;;6594:2:1;24677:62:0;;;6576:21:1;6633:2;6613:18;;;6606:30;6672:33;6652:18;;;6645:61;6723:18;;24677:62:0;6392:355:1;24677:62:0;24757:17;24752:258;;24794:15;24818:19;24829:7;24818:10;:19::i;:::-;-1:-1:-1;24793:44:0;;-1:-1:-1;24854:14:0;;-1:-1:-1;;;;;24854:14:0;24752:258;24907:23;24938:19;24949:7;24938:10;:19::i;:::-;-1:-1:-1;24905:52:0;;-1:-1:-1;24974:22:0;;-1:-1:-1;;;;;24974:22:0;39112:210;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;39173:31:::1;39198:5;39173:24;:31::i;:::-;39227:1;39217:7;:11:::0;;;39241:13:::1;:17:::0;39286:26:::1;39271:12;:41:::0;39112:210::o;25304:351::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25393:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25392:21;25384:61;;;::::0;-1:-1:-1;;;25384:61:0;;6238:2:1;25384:61:0::1;::::0;::::1;6220:21:1::0;6277:2;6257:18;;;6250:30;6316:29;6296:18;;;6289:57;6363:18;;25384:61:0::1;6036:351:1::0;25384:61:0::1;-1:-1:-1::0;;;;;25461:16:0;::::1;25480:1;25461:16:::0;;;:7:::1;:16;::::0;;;;;:20;25458:112:::1;;-1:-1:-1::0;;;;;25539:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25519:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25500:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25458:112:::1;-1:-1:-1::0;;;;;25582:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25582:27:0::1;25605:4;25582:27:::0;;::::1;::::0;;;25622:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25622:23:0::1;::::0;;::::1;::::0;;25304:351::o;22050:204::-;-1:-1:-1;;;;;22142:20:0;;22116:7;22142:20;;;:11;:20;;;;;;;;22138:49;;;-1:-1:-1;;;;;;22171:16:0;;;;;:7;:16;;;;;;;22050:204::o;22138:49::-;-1:-1:-1;;;;;22227:16:0;;;;;;:7;:16;;;;;;22207:37;;:19;:37::i;9064:154::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;9173:1:::1;9157:6:::0;;9136:40:::1;::::0;-1:-1:-1;;;;;9157:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9136:40:0;9173:1;;9136:40:::1;9206:1;9189:19:::0;;-1:-1:-1;;;;;;9189:19:0::1;::::0;;9064:154::o;38441:137::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38547:21:::1;:12:::0;38562:6:::1;38547:21;:::i;:::-;38527:17;:41:::0;-1:-1:-1;38441:137:0:o;37853:126::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;37941:13:::1;:28:::0;37853:126::o;38590:145::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38680:16:::1;:45:::0;;-1:-1:-1;;;;;;38680:45:0::1;-1:-1:-1::0;;;;;38680:45:0;;;::::1;::::0;;;::::1;::::0;;38590:145::o;21737:91::-;21776:13;21811:7;21804:14;;;;;:::i;23358:275::-;23451:4;23470:129;7386:10;23493:7;23502:96;23541:15;23502:96;;;;;;;;;;;;;;;;;7386:10;23502:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23502:34:0;;;;;;;;;;;;:38;:96::i;9962:315::-;10016:14;;-1:-1:-1;;;;;10016:14:0;10034:10;10016:28;10008:76;;;;-1:-1:-1;;;10008:76:0;;9718:2:1;10008:76:0;;;9700:21:1;9757:2;9737:18;;;9730:30;9796:34;9776:18;;;9769:62;-1:-1:-1;;;9847:18:1;;;9840:33;9890:19;;10008:76:0;9516:399:1;10008:76:0;10123:9;;10105:15;:27;10097:72;;;;-1:-1:-1;;;10097:72:0;;8945:2:1;10097:72:0;;;8927:21:1;8984:2;8964:18;;;8957:30;9023:33;9003:18;;;8996:61;9074:18;;10097:72:0;8743:355:1;10097:72:0;10216:14;;;10208:6;;10187:44;;-1:-1:-1;;;;;10216:14:0;;;;10208:6;;;;-1:-1:-1;;;;;;;;;;;10187:44:0;;10253:14;;;10244:23;;-1:-1:-1;;;;;;10244:23:0;-1:-1:-1;;;;;10253:14:0;;;10244:23;;;;;;9962:315::o;22266:173::-;22344:4;22363:42;7386:10;22387:9;22398:6;22363:9;:42::i;38126:116::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38206:16:::1;:26:::0;38126:116::o;38747:177::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38826:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;38826:32:0;;::::1;;::::0;;38876:38:::1;::::0;::::1;::::0;::::1;::::0;38850:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;9710:236:0;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;9793:6:::1;::::0;;;9776:23;;-1:-1:-1;;;;;;9776:23:0;;::::1;-1:-1:-1::0;;;;;9793:6:0;::::1;9776:23;::::0;;;9812:19:::1;::::0;;9856:22:::1;9874:4:::0;9856:15:::1;:22;:::i;:::-;9844:9;:34:::0;9933:1:::1;9917:6:::0;;9896:40:::1;::::0;-1:-1:-1;;;;;9917:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9896:40:0;9933:1;;9896:40:::1;9710:236:::0;:::o;37605:114::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37674:27:0::1;37704:5;37674:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37674:35:0::1;::::0;;37605:114::o;37995:115::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38074:12:::1;:26:::0;37995:115::o;38254:170::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38364:23:::1;:50:::0;38254:170::o;9230:252::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9321:22:0;::::1;9313:73;;;::::0;-1:-1:-1;;;9313:73:0;;5428:2:1;9313:73:0::1;::::0;::::1;5410:21:1::0;5467:2;5447:18;;;5440:30;5506:34;5486:18;;;5479:62;-1:-1:-1;;;5557:18:1;;;5550:36;5603:19;;9313:73:0::1;5226:402:1::0;9313:73:0::1;9425:6;::::0;;9404:38:::1;::::0;-1:-1:-1;;;;;9404:38:0;;::::1;::::0;9425:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9404:38:0;::::1;9455:6;:17:::0;;-1:-1:-1;;;;;;9455:17:0::1;-1:-1:-1::0;;;;;9455:17:0;;;::::1;::::0;;;::::1;::::0;;9230:252::o;26180:349::-;-1:-1:-1;;;;;26275:19:0;;26267:68;;;;-1:-1:-1;;;26267:68:0;;8540:2:1;26267:68:0;;;8522:21:1;8579:2;8559:18;;;8552:30;8618:34;8598:18;;;8591:62;-1:-1:-1;;;8669:18:1;;;8662:34;8713:19;;26267:68:0;8338:400:1;26267:68:0;-1:-1:-1;;;;;26356:21:0;;26348:68;;;;-1:-1:-1;;;26348:68:0;;5835:2:1;26348:68:0;;;5817:21:1;5874:2;5854:18;;;5847:30;5913:34;5893:18;;;5886:62;-1:-1:-1;;;5964:18:1;;;5957:32;6006:19;;26348:68:0;5633:398:1;26348:68:0;-1:-1:-1;;;;;26433:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26487:32;;10066:25:1;;;26487:32:0;;10039:18:1;26487:32:0;;;;;;;26180:349;;;:::o;26541:1736::-;-1:-1:-1;;;;;26673:18:0;;26665:68;;;;-1:-1:-1;;;26665:68:0;;8134:2:1;26665:68:0;;;8116:21:1;8173:2;8153:18;;;8146:30;8212:34;8192:18;;;8185:62;-1:-1:-1;;;8263:18:1;;;8256:35;8308:19;;26665:68:0;7932:401:1;26665:68:0;-1:-1:-1;;;;;26754:16:0;;26746:64;;;;-1:-1:-1;;;26746:64:0;;4613:2:1;26746:64:0;;;4595:21:1;4652:2;4632:18;;;4625:30;4691:34;4671:18;;;4664:62;-1:-1:-1;;;4742:18:1;;;4735:33;4785:19;;26746:64:0;4411:399:1;26746:64:0;26840:1;26831:6;:10;26823:64;;;;-1:-1:-1;;;26823:64:0;;7724:2:1;26823:64:0;;;7706:21:1;7763:2;7743:18;;;7736:30;7802:34;7782:18;;;7775:62;-1:-1:-1;;;7853:18:1;;;7846:39;7902:19;;26823:64:0;7522:405:1;26823:64:0;8859:7;8888:6;-1:-1:-1;;;;;26911:15:0;;;8888:6;;26911:15;;;;:32;;-1:-1:-1;8859:7:0;8888:6;-1:-1:-1;;;;;26930:13:0;;;8888:6;;26930:13;;26911:32;26908:143;;;26980:12;;26970:6;:22;;26962:75;;;;-1:-1:-1;;;26962:75:0;;6954:2:1;26962:75:0;;;6936:21:1;6993:2;6973:18;;;6966:30;7032:34;7012:18;;;7005:62;-1:-1:-1;;;7083:18:1;;;7076:38;7131:19;;26962:75:0;6752:404:1;26962:75:0;27067:28;27098:24;27116:4;27098:9;:24::i;:::-;27190:23;;27243:16;;27067:55;;-1:-1:-1;27166:47:0;;;;27243:16;;27242:17;:42;;;;-1:-1:-1;27263:21:0;;;;;;;27242:42;:65;;;;;27294:13;-1:-1:-1;;;;;27288:19:0;:2;-1:-1:-1;;;;;27288:19:0;;27242:65;27238:713;;;27330:23;27326:171;;;27399:23;;27376:46;;27443:32;27454:20;27443:10;:32::i;:::-;27570:14;;27528:21;;27570:14;;;;;:47;;;;;27606:10;27588:7;:29;27570:47;27566:372;;;27674:17;;27664:7;:27;27660:83;;;-1:-1:-1;27726:17:0;;27660:83;27878:16;;27857:56;;-1:-1:-1;;;;;27878:16:0;27896;:7;27908:3;27896:11;:16::i;:::-;27857:20;:56::i;:::-;27309:642;27238:713;-1:-1:-1;;;;;28108:24:0;;27975:12;28108:24;;;:18;:24;;;;;;27990:4;;28108:24;;;:50;;-1:-1:-1;;;;;;28136:22:0;;;;;;:18;:22;;;;;;;;28108:50;28105:100;;;-1:-1:-1;28186:5:0;28105:100;28229:38;28244:4;28249:2;28252:6;28259:7;28229:14;:38::i;:::-;26652:1625;;;26541:1736;;;:::o;5141:240::-;5261:7;5322:12;5314:6;;;;5306:29;;;;-1:-1:-1;;;5306:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;5357:5:0;;;5141:240::o;35377:169::-;35418:7;35441:15;35458;35477:19;:17;:19::i;:::-;35440:56;;-1:-1:-1;35440:56:0;-1:-1:-1;35516:20:0;35440:56;;35516:11;:20::i;:::-;35509:27;;;;35377:169;:::o;3999:98::-;4057:7;4084:5;4088:1;4084;:5;:::i;2862:98::-;2920:7;2947:5;2951:1;2947;:5;:::i;34133:427::-;34192:7;34201;34210;34219;34228;34237;34260:23;34285:12;34299:18;34321:20;34333:7;34321:11;:20::i;:::-;34259:82;;;;;;34355:15;34372:23;34397:12;34413:50;34425:7;34434:4;34440:10;34452;:8;:10::i;:::-;34413:11;:50::i;:::-;34354:109;;;;-1:-1:-1;34354:109:0;;-1:-1:-1;34516:15:0;;-1:-1:-1;34533:4:0;;-1:-1:-1;34539:10:0;;-1:-1:-1;34133:427:0;;-1:-1:-1;;;;;34133:427:0:o;3243:98::-;3301:7;3328:5;3332:1;3328;:5;:::i;28289:451::-;20951:16;:23;;-1:-1:-1;;20951:23:0;20970:4;20951:23;;;28408:21:::1;28442:38;28459:20:::0;28442:16:::1;:38::i;:::-;28493:26;28522:41;:21;28548:14:::0;28522:25:::1;:41::i;:::-;28640:16;::::0;28700::::1;::::0;28681:13:::1;::::0;28493:70;;-1:-1:-1;28619:99:0::1;::::0;-1:-1:-1;;;;;28640:16:0;;::::1;::::0;28658:59:::1;::::0;28700:16;28658:37:::1;::::0;28493:70;;28658:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;28619:99::-;-1:-1:-1::0;;21001:16:0;:24;;-1:-1:-1;;21001:24:0;;;-1:-1:-1;28289:451:0:o;39550:130::-;39644:26;;-1:-1:-1;;;;;39644:18:0;;;:26;;;;;39663:6;;39644:26;;;;39663:6;39644:18;:26;;;;;;;;;;;;;;;;;;;;;39550:130;;:::o;30812:736::-;30925:7;30921:42;;30949:14;:12;:14::i;:::-;-1:-1:-1;;;;;30992:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31016:22:0;;;;;;:11;:22;;;;;;;;31015:23;30992:46;30988:483;;;31057:48;31079:6;31087:9;31098:6;31057:21;:48::i;:::-;30988:483;;;-1:-1:-1;;;;;31130:19:0;;;;;;:11;:19;;;;;;;;31129:20;:46;;;;-1:-1:-1;;;;;;31153:22:0;;;;;;:11;:22;;;;;;;;31129:46;31125:346;;;31194:46;31214:6;31222:9;31233:6;31194:19;:46::i;31125:346::-;-1:-1:-1;;;;;31264:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31287:22:0;;;;;;:11;:22;;;;;;;;31264:45;31260:211;;;31328:48;31350:6;31358:9;31369:6;31328:21;:48::i;31260:211::-;31413:44;31431:6;31439:9;31450:6;31413:17;:44::i;:::-;31499:7;31495:43;;31523:15;37244;;37234:7;:25;37288:21;;37272:13;:37;37188:131;31523:15;30812:736;;;;:::o;35558:581::-;35657:7;;35695;;35608;;;;;35721:297;35745:9;:16;35741:20;;35721:297;;;35813:7;35789;:21;35797:9;35807:1;35797:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35797:12:0;35789:21;;;;;;;;;;;;;:31;;:66;;;35848:7;35824;:21;35832:9;35842:1;35832:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35832:12:0;35824:21;;;;;;;;;;;;;:31;35789:66;35785:97;;;35865:7;;35874;;35857:25;;;;;;;35558:581;;:::o;35785:97::-;35909:34;35921:7;:21;35929:9;35939:1;35929:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35929:12:0;35921:21;;;;;;;;;;;;;35909:7;;:11;:34::i;:::-;35899:44;;35970:34;35982:7;:21;35990:9;36000:1;35990:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35990:12:0;35982:21;;;;;;;;;;;;;35970:7;;:11;:34::i;:::-;35960:44;-1:-1:-1;35763:3:0;;;;:::i;:::-;;;;35721:297;;;-1:-1:-1;36056:7:0;;36044;;:20;;:11;:20::i;:::-;36034:7;:30;36030:61;;;36074:7;;36083;;36066:25;;;;;;35558:581;;:::o;36030:61::-;36112:7;;36121;;-1:-1:-1;35558:581:0;-1:-1:-1;35558:581:0:o;34572:340::-;34632:7;34641;34650;34672:12;34687:24;34703:7;34687:15;:24::i;:::-;34672:39;;34724:18;34745:30;34767:7;34745:21;:30::i;:::-;34724:51;-1:-1:-1;34788:23:0;34814:33;34724:51;34814:17;:7;34826:4;34814:11;:17::i;:::-;:21;;:33::i;:::-;34788:59;34885:4;;-1:-1:-1;34891:10:0;;-1:-1:-1;34572:340:0;;-1:-1:-1;;;34572:340:0:o;34924:441::-;35039:7;;;;35097:24;:7;35109:11;35097;:24::i;:::-;35079:42;-1:-1:-1;35134:12:0;35149:21;:4;35158:11;35149:8;:21::i;:::-;35134:36;-1:-1:-1;35183:18:0;35204:27;:10;35219:11;35204:14;:27::i;:::-;35183:48;-1:-1:-1;35244:23:0;35270:33;35183:48;35270:17;:7;35282:4;35270:11;:17::i;:33::-;35324:7;;;;-1:-1:-1;35350:4:0;;-1:-1:-1;34924:441:0;;-1:-1:-1;;;;;;;34924:441:0:o;28919:702::-;29073:16;;;29087:1;29073:16;;;;;;;;29049:21;;29073:16;;;;;;;;;;-1:-1:-1;29073:16:0;29049:40;;29120:4;29102;29107:1;29102:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29102:23:0;;;-1:-1:-1;;;;;29102:23:0;;;;;29148:15;-1:-1:-1;;;;;29148:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29138:4;29143:1;29138:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29138:32:0;;;-1:-1:-1;;;;;29138:32:0;;;;;29187:62;29204:4;29219:15;29237:11;29187:8;:62::i;:::-;29294:252;;-1:-1:-1;;;29294:252:0;;-1:-1:-1;;;;;29294:15:0;:66;;;;:252;;29377:11;;29405:1;;29451:4;;29480;;29518:15;;29294:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29576:35;29593:11;29606:4;29576:35;;;;;;;:::i;:::-;;;;;;;;28974:647;28919:702;:::o;3600:98::-;3658:7;3685:5;3689:1;3685;:5;:::i;36906:266::-;36954:7;;:12;:34;;;;-1:-1:-1;36970:13:0;;:18;36954:34;36951:46;;;36906:266::o;36951:46::-;37039:7;;;37021:15;:25;37083:13;;;37059:21;:37;-1:-1:-1;37121:11:0;;;;37145:17;36906:266::o;32699:579::-;32804:15;32821:23;32846:12;32860:23;32885:12;32899:18;32921:19;32932:7;32921:10;:19::i;:::-;-1:-1:-1;;;;;32968:15:0;;;;;;:7;:15;;;;;;32803:137;;-1:-1:-1;32803:137:0;;-1:-1:-1;32803:137:0;;-1:-1:-1;32803:137:0;-1:-1:-1;32803:137:0;-1:-1:-1;32803:137:0;-1:-1:-1;32968:28:0;;32988:7;32968:19;:28::i;:::-;-1:-1:-1;;;;;32950:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33027:7;:15;;;;:28;;33047:7;33027:19;:28::i;:::-;-1:-1:-1;;;;;33009:15:0;;;;;;;:7;:15;;;;;;:46;;;;33089:18;;;;;;;:39;;33112:15;33089:22;:39::i;:::-;-1:-1:-1;;;;;33068:18:0;;;;;;:7;:18;;;;;:60;33144:26;33159:10;33144:14;:26::i;:::-;33183:23;33195:4;33201;33183:11;:23::i;:::-;33241:9;-1:-1:-1;;;;;33224:44:0;33233:6;-1:-1:-1;;;;;33224:44:0;;33252:15;33224:44;;;;10066:25:1;;10054:2;10039:18;;9920:177;33224:44:0;;;;;;;;32790:488;;;;;;32699:579;;;:::o;32088:599::-;32191:15;32208:23;32233:12;32247:23;32272:12;32286:18;32308:19;32319:7;32308:10;:19::i;:::-;-1:-1:-1;;;;;32355:15:0;;;;;;:7;:15;;;;;;32190:137;;-1:-1:-1;32190:137:0;;-1:-1:-1;32190:137:0;;-1:-1:-1;32190:137:0;-1:-1:-1;32190:137:0;-1:-1:-1;32190:137:0;-1:-1:-1;32355:28:0;;32190:137;32355:19;:28::i;:::-;-1:-1:-1;;;;;32337:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32417:18;;;;;:7;:18;;;;;:39;;32440:15;32417:22;:39::i;:::-;-1:-1:-1;;;;;32396:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32490:7;:18;;;;:39;;32513:15;32490:22;:39::i;33290:657::-;33395:15;33412:23;33437:12;33451:23;33476:12;33490:18;33512:19;33523:7;33512:10;:19::i;:::-;-1:-1:-1;;;;;33559:15:0;;;;;;:7;:15;;;;;;33394:137;;-1:-1:-1;33394:137:0;;-1:-1:-1;33394:137:0;;-1:-1:-1;33394:137:0;-1:-1:-1;33394:137:0;-1:-1:-1;33394:137:0;-1:-1:-1;33559:28:0;;33579:7;33559:19;:28::i;:::-;-1:-1:-1;;;;;33541:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33618:7;:15;;;;:28;;33638:7;33618:19;:28::i;31560:516::-;31661:15;31678:23;31703:12;31717:23;31742:12;31756:18;31778:19;31789:7;31778:10;:19::i;:::-;-1:-1:-1;;;;;31828:15:0;;;;;;:7;:15;;;;;;31660:137;;-1:-1:-1;31660:137:0;;-1:-1:-1;31660:137:0;;-1:-1:-1;31660:137:0;-1:-1:-1;31660:137:0;-1:-1:-1;31660:137:0;-1:-1:-1;31828:28:0;;31660:137;31828:19;:28::i;36538:162::-;36602:7;36631:59;36672:5;36631:20;36643:7;;36631;:11;;:20;;;;:::i;:::-;:24;;:59::i;36716:174::-;36786:7;36815:65;36862:5;36815:26;36827:13;;36815:7;:11;;:26;;;;:::i;36155:367::-;36220:19;36243:10;:8;:10::i;:::-;36220:33;-1:-1:-1;36266:18:0;36287:27;:10;36220:33;36287:14;:27::i;:::-;36368:4;36352:22;;;;:7;:22;;;;;;36266:48;;-1:-1:-1;36352:38:0;;36266:48;36352:26;:38::i;:::-;36343:4;36327:22;;;;:7;:22;;;;;;;;:63;;;;36406:11;:26;;;;;;36403:109;;;36490:4;36474:22;;;;:7;:22;;;;;;:38;;36501:10;36474:26;:38::i;:::-;36465:4;36449:22;;;;:7;:22;;;;;:63;36207:315;;36155:367;:::o;33959:153::-;34039:7;;:17;;34051:4;34039:11;:17::i;:::-;34029:7;:27;34082:10;;:20;;34097:4;34082:14;:20::i;:::-;34069:10;:33;-1:-1:-1;;33959:153:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:461::-;2537:3;2575:5;2569:12;2602:6;2597:3;2590:19;2628:4;2657:2;2652:3;2648:12;2641:19;;2694:2;2687:5;2683:14;2715:1;2725:195;2739:6;2736:1;2733:13;2725:195;;;2804:13;;-1:-1:-1;;;;;2800:39:1;2788:52;;2860:12;;;;2895:15;;;;2836:1;2754:9;2725:195;;;-1:-1:-1;2936:3:1;;2484:461;-1:-1:-1;;;;;2484:461:1:o;3809:597::-;3921:4;3950:2;3979;3968:9;3961:21;4011:6;4005:13;4054:6;4049:2;4038:9;4034:18;4027:34;4079:1;4089:140;4103:6;4100:1;4097:13;4089:140;;;4198:14;;;4194:23;;4188:30;4164:17;;;4183:2;4160:26;4153:66;4118:10;;4089:140;;;4247:6;4244:1;4241:13;4238:91;;;4317:1;4312:2;4303:6;4292:9;4288:22;4284:31;4277:42;4238:91;-1:-1:-1;4390:2:1;4369:15;-1:-1:-1;;4365:29:1;4350:45;;;;4397:2;4346:54;;3809:597;-1:-1:-1;;;3809:597:1:o;7161:356::-;7363:2;7345:21;;;7382:18;;;7375:30;7441:34;7436:2;7421:18;;7414:62;7508:2;7493:18;;7161:356::o;10102:332::-;10309:6;10298:9;10291:25;10352:2;10347;10336:9;10332:18;10325:30;10272:4;10372:56;10424:2;10413:9;10409:18;10401:6;10372:56;:::i;:::-;10364:64;10102:332;-1:-1:-1;;;;10102:332:1:o;10439:582::-;10738:6;10727:9;10720:25;10781:6;10776:2;10765:9;10761:18;10754:34;10824:3;10819:2;10808:9;10804:18;10797:31;10701:4;10845:57;10897:3;10886:9;10882:19;10874:6;10845:57;:::i;:::-;-1:-1:-1;;;;;10938:32:1;;;;10933:2;10918:18;;10911:60;-1:-1:-1;11002:3:1;10987:19;10980:35;10837:65;10439:582;-1:-1:-1;;;10439:582:1:o;11215:128::-;11255:3;11286:1;11282:6;11279:1;11276:13;11273:39;;;11292:18;;:::i;:::-;-1:-1:-1;11328:9:1;;11215:128::o;11348:217::-;11388:1;11414;11404:132;;11458:10;11453:3;11449:20;11446:1;11439:31;11493:4;11490:1;11483:15;11521:4;11518:1;11511:15;11404:132;-1:-1:-1;11550:9:1;;11348:217::o;11570:168::-;11610:7;11676:1;11672;11668:6;11664:14;11661:1;11658:21;11653:1;11646:9;11639:17;11635:45;11632:71;;;11683:18;;:::i;:::-;-1:-1:-1;11723:9:1;;11570:168::o;11743:125::-;11783:4;11811:1;11808;11805:8;11802:34;;;11816:18;;:::i;:::-;-1:-1:-1;11853:9:1;;11743:125::o;11873:380::-;11952:1;11948:12;;;;11995;;;12016:61;;12070:4;12062:6;12058:17;12048:27;;12016:61;12123:2;12115:6;12112:14;12092:18;12089:38;12086:161;;;12169:10;12164:3;12160:20;12157:1;12150:31;12204:4;12201:1;12194:15;12232:4;12229:1;12222:15;12086:161;;11873:380;;;:::o;12258:135::-;12297:3;-1:-1:-1;;12318:17:1;;12315:43;;;12338:18;;:::i;:::-;-1:-1:-1;12385:1:1;12374:13;;12258:135::o;12398:127::-;12459:10;12454:3;12450:20;12447:1;12440:31;12490:4;12487:1;12480:15;12514:4;12511:1;12504:15;12530:127;12591:10;12586:3;12582:20;12579:1;12572:31;12622:4;12619:1;12612:15;12646:4;12643:1;12636:15;12662:127;12723:10;12718:3;12714:20;12711:1;12704:31;12754:4;12751:1;12744:15;12778:4;12775:1;12768:15;12926:131;-1:-1:-1;;;;;13001:31:1;;12991:42;;12981:70;;13047:1;13044;13037:12;12981:70;12926:131;:::o

Swarm Source

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