ETH Price: $2,622.67 (+0.99%)

Token

Old Uniswap Days (OUD)
 

Overview

Max Total Supply

100,000 OUD

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
500 OUD

Value
$0.00
0x43163cb67b970a0e09df45cacc2092f8da289695
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:
OUD

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-18
*/

// File: openzeppelin-solidity\contracts\utils\Address.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
 
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return 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;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract Rebasable is Ownable {
  address private _rebaser;

  event TransferredRebasership(address indexed previousRebaser, address indexed newRebaser);

  constructor() internal {
    address msgSender = _msgSender();
    _rebaser = msgSender;
    emit TransferredRebasership(address(0), msgSender);
  }

  function Rebaser() public view returns(address) {
    return _rebaser;
  }

  modifier onlyRebaser() {
    require(_rebaser == _msgSender(), "caller is not rebaser");
    _;
  }

  function transferRebasership(address newRebaser) public virtual onlyOwner {
    require(newRebaser != address(0), "new rebaser is address zero");
    emit TransferredRebasership(_rebaser, newRebaser);
    _rebaser = newRebaser;
  }
}

/// SWC-103:  Floating Pragma

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}

contract OUD is Ownable, Rebasable
{
    using OUDSafeMath for uint256;
	using Address for address;
	
	IUniswapV2Router02 public immutable _uniswapV2Router;

    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(address indexed owner, address indexed spender, uint amount);

    event Rebase(uint256 indexed epoch, uint256 scalingFactor);

    event WhitelistFrom(address _addr, bool _whitelisted);
    event WhitelistTo(address _addr, bool _whitelisted);
    event UniswapPairAddress(address _addr, bool _whitelisted);

    string public name     = "Old Uniswap Days";
    string public symbol   = "OUD";
    uint8  public decimals = 9;

    address payable public MarketingAddress = payable(0x158a56f36F3b39C7dEf0016060A6189452A18E15); // Marketing Address
    address private BurnAddress = 0x000000000000000000000000000000000000dEaD;
	
    address public rewardAddress;

    uint256 private constant internalDecimals = 10**9;

    uint256 private constant BASE = 10**9;

   
    uint256 private OUDScalingFactor  = BASE;

	mapping (address => uint256) private _rOwned;
	mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) internal _allowedFragments;
	
	mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping(address => bool) public whitelistFrom;
    mapping(address => bool) public whitelistTo;
    mapping(address => bool) public uniswapPairAddress;
	address private currentPoolAddress;
	address private currentPairTokenAddress;
	address public uniswapETHPool;
	address[] private futurePools;


    uint256 initSupply = 10**5 * 10**9;
    uint256 _totalSupply = 10**5 * 10**9;
    uint16 public SELL_FEE;
    uint16 public TX_FEE;

	uint256 private _tFeeTotal;
	uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _totalSupply));
    uint256 public _maxTxAmount = 10**5 * 10**9;
	uint256 public _minTokensBeforeSwap = 10 * 10**9;


    uint256 public MarketingDivisor = 2;
    
    uint256 private buyBackUpperLimit = 1 * 10**18;
	
	bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    bool public tradingEnabled;

    bool public buyBackEnabled = true;
	
	event MaxTxAmountUpdated(uint256 maxTxAmount);
	event TradingEnabled();
	event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    
	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(IUniswapV2Router02 uniswapV2Router)
    public
    Ownable()
    Rebasable()
    {
		_uniswapV2Router = uniswapV2Router;
        
        currentPoolAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        currentPairTokenAddress = uniswapV2Router.WETH();
        uniswapETHPool = currentPoolAddress;
		rewardAddress = address(this);
        
        updateSwapAndLiquifyEnabled(false);
        
       _rOwned[_msgSender()] = reflectionFromToken(_totalSupply, false);
        
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

    function getSellBurn(uint256 value) private view returns (uint256)
    {
        uint256 nPercent = value.mul(SELL_FEE).divRound(100);
        return nPercent;
    }

    function getTxBurn(uint256 value) private view returns (uint256)
    {
        uint256 nPercent = value.mul(TX_FEE).divRound(100);
        return nPercent;
    }

    function _isWhitelisted(address _from, address _to) internal view returns (bool)
    {
        return whitelistFrom[_from]||whitelistTo[_to];
    }

    function _isUniswapPairAddress(address _addr) internal view returns (bool)
    {
        return uniswapPairAddress[_addr];
    }

    function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner
    {
        emit WhitelistTo(_addr, _whitelisted);
        whitelistTo[_addr] = _whitelisted;
    }

    function setTxFee(uint16 fee) external onlyOwner
    {
		require(fee < 10, 'OUD: Transaction fee should be less than 10%');
        TX_FEE = fee;
    }
    
    function buyBackUpperLimitAmount() private view returns (uint256) {
        return buyBackUpperLimit;
    }

    function setSellFee(uint16 fee) external onlyOwner
    {
		require(fee < 20, 'OUD: Sell fee should be less than 20%');
        SELL_FEE = fee;
    }
	
    function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner
    {
        emit WhitelistFrom(_addr, _whitelisted);
        whitelistFrom[_addr] = _whitelisted;
    }

    function setUniswapPairAddress(address _addr, bool _whitelisted) external onlyOwner 
	{
        emit UniswapPairAddress(_addr, _whitelisted);
        uniswapPairAddress[_addr] = _whitelisted;
    }
	
    function maxScalingFactor() internal view returns (uint256)
    {
        return _maxScalingFactor();
    }

    function _maxScalingFactor() internal view returns (uint256)
    {
        // scaling factor can only go up to 2**256-1 = initSupply * OUDScalingFactor
        // this is used to check if OUDScalingFactor will be too high to compute balances when rebasing.
        return uint256(-1) / initSupply;
    }

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

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

	function balanceOf(address account) public view returns (uint256) {
	  
        if (_isExcluded[account]) return _tOwned[account].mul(OUDScalingFactor).div(internalDecimals);
        uint256 tOwned = tokenFromReflection(_rOwned[account]);
		return _scaling(tOwned);
	}

    function balanceOfUnderlying(address account) internal view returns (uint256)
    {
        return tokenFromReflection(_rOwned[account]);
    }

    
    function allowance(address owner_, address spender) external view returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

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

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue)
        {
            _allowedFragments[msg.sender][spender] = 0;
        }
        else
        {
            _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue);
        }

        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }
	
	function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "OUD: approve from the zero address");
        require(spender != address(0), "OUD: approve to the zero address");

        _allowedFragments[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
	
	function isExcluded(address account) private view returns (bool) 
	{
        return _isExcluded[account];
    }
	
	function totalFees() public view returns (uint256) 
	{
        return _tFeeTotal;
    }
    
    	function reflect(uint256 tAmount) private 
	{
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        uint256 currentRate = _getRate();
        uint256 TAmount = tAmount.mul(internalDecimals).div(OUDScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
    
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) private view returns(uint256) 
	{
        require(tAmount <= _totalSupply, "Amount must be less than supply");
        uint256 currentRate = _getRate();
        uint256 TAmount = tAmount.mul(internalDecimals).div(OUDScalingFactor);
        uint256 fee = getTxBurn(TAmount);
		uint256 rAmount = TAmount.mul(currentRate);
        if (!deductTransferFee) {
            return rAmount;
        } else {
            (uint256 rTransferAmount,) = _getRValues(TAmount, fee, currentRate);
            return rTransferAmount;
        }
    }
	
	function tokenFromReflection(uint256 rAmount) private view returns(uint256) 
	{
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
	
	function excludeAccount(address account) internal onlyOwner() 
	{
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _rOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
	
	function includeAccount(address account) internal 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];
                _rOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
	
	function _transfer(address sender, address recipient, uint256 amount) private 
	{
        
		require(sender != address(0), "OUD: cannot transfer from the zero address");
        require(recipient != address(0), "OUD: cannot transfer to the zero address");
        require(amount > 0, "OUD: Transfer amount must be greater than zero");
		
		if(sender != owner() && recipient != owner() && !inSwapAndLiquify) {
            require(amount <= _maxTxAmount, "OUD: Transfer amount exceeds the maxTxAmount.");
            if((_msgSender() == currentPoolAddress || _msgSender() == address(_uniswapV2Router)) && !tradingEnabled)
                require(false, "OUD: trading is disabled.");
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= _minTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && recipient == currentPoolAddress) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = _minTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.mul(1));
            }
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }
    
    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing
        transferToAddressETH(MarketingAddress, transferredBalance.div(SELL_FEE).mul(MarketingDivisor));
        
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    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,
            BurnAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
	
	receive() external payable {}

    function addLiquidityForEth(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
            address(this),
            block.timestamp
        );
    }

	
	function _transferStandard(address sender, address recipient, uint256 tAmount) private 
	{
	    uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(OUDScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
		_rOwned[sender] = _rOwned[sender].sub(rAmount);
		
		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
	    else if (_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(uint256 rTransferAmount, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply;
		
		_transferStandardSell(sender, recipient, rTransferAmount, rRewardFee, tTransferAmount, tRewardFee);
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(uint256 rTransferAmount, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply;
		
		_transferStandardTx(sender, recipient, rTransferAmount, rRewardFee, tTransferAmount, tRewardFee);
            }
            else
            {           
                _rOwned[recipient] = _rOwned[recipient].add(rAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferStandardSell(address sender, address recipient, uint256 rTransferAmount, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{
                 
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
		
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }
    
    function _transferStandardTx(address sender, address recipient, uint256 rTransferAmount, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{        
                             
                _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
			
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private 
	{
		uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(OUDScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);

		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
		else if(_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply;
		
		_transferToExcludedSell(sender, recipient, rRewardFee, tTransferAmount, tRewardFee);
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply;
		
        _transferToExcludedSell(sender, recipient, rRewardFee, tTransferAmount, tRewardFee);
            }
            else
            {
                _tOwned[recipient] = _tOwned[recipient].add(TAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferToExcludedSell (address sender, address recipient, uint256 tTransferAmount, uint256 rRewardFee, uint256 tRewardFee) private 
	{
            
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }
    
    function _transferToExcludedTx (address sender, address recipient, uint256 tTransferAmount, uint256 rRewardFee, uint256 tRewardFee) private 
	{        
                
                _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
    }
         
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private 
	{
		uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(OUDScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
		_rOwned[sender] = _rOwned[sender].sub(rAmount);
		
		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
		else if(_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(uint256 rTransferAmount, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply;
		
		_transferFromExcludedSell(sender, recipient, rTransferAmount, rRewardFee, tTransferAmount, tRewardFee);
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(uint256 rTransferAmount, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply;
		
		_transferFromExcludedTx(sender, recipient, rTransferAmount, rRewardFee, tTransferAmount, tRewardFee);
                
            }
            else
            {
                _rOwned[recipient] = _rOwned[recipient].add(rAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferFromExcludedSell(address sender, address recipient, uint256 rTransferAmount, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{
            
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
    }
    
    function _transferFromExcludedTx(address sender, address recipient, uint256 rTransferAmount, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{
                
                _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private 
	{
	    uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(OUDScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
		_rOwned[sender] = _rOwned[sender].sub(rAmount);
		
		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
        else if(_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(uint256 rTransferAmount, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
            _totalSupply = _totalSupply;
            
            _transferBothExcludedSell(sender, recipient, rTransferAmount, rRewardFee, tTransferAmount, tRewardFee);
            
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(uint256 rTransferAmount, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tRewardFee) = _getTValues(TAmount, fee);
           _totalSupply = _totalSupply;
            
            _transferBothExcludedTx(sender, recipient, rTransferAmount, rRewardFee, tTransferAmount, tRewardFee);
            }
            else
            {
                _rOwned[recipient] = _rOwned[recipient].add(rAmount);
				_tOwned[recipient] = _tOwned[recipient].add(TAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferBothExcludedSell(address sender, address recipient, uint256 rTransferAmount, uint256 tTransferAmount, uint256 rRewardFee, uint256 tRewardFee) private 
	{   
            
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
			_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
			
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }
    
     function _transferBothExcludedTx(address sender, address recipient, uint256 rTransferAmount, uint256 tTransferAmount, uint256 rRewardFee, uint256 tRewardFee) private 
	 {
                
                _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
				_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
				
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
     }
	 
	function _scaling(uint256 amount) private view returns (uint256)
	
	{
		uint256 scaledAmount = amount.mul(OUDScalingFactor).div(internalDecimals);
		return(scaledAmount);
	}
	
	function setBuybackUpperLimit(uint256 buyBackLimit) internal onlyOwner() {
        buyBackUpperLimit = buyBackLimit;
    }
    
    function setBuyBackEnabled(bool _enabled) internal onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }

    function _getTValues(uint256 TAmount, uint256 fee) private view returns (uint256, uint256) 
	{
	    uint256 tRewardFee = fee;
        uint256 tTransferAmount = TAmount.sub(tRewardFee);
        return (tTransferAmount, tRewardFee);
    }
	
    function _getRValues(uint256 rAmount, uint256 fee, uint256 currentRate) private view returns ( uint256, uint256) 
	{
		uint256 rRewardFee = fee.mul(currentRate);
		uint256 rTransferAmount = _getRValues2(rAmount, rRewardFee);
        return (rTransferAmount, rRewardFee);
    }
	
	function _getRValues2(uint256 rAmount, uint256 rRewardFee) private pure returns (uint256) 
	{
        uint256 rTransferAmount = rAmount.sub(rRewardFee);
        return (rTransferAmount);
    }
	

    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 = initSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, initSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(initSupply)) return (_rTotal, initSupply);
        return (rSupply, tSupply);
    }

    function _setRewardAddress(address rewards_) external onlyOwner
    {
        rewardAddress = rewards_;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        MarketingDivisor = divisor;
    }
    
    function setMarketingAddress(address _MarketingAddress) external onlyOwner() {
        MarketingAddress = payable(_MarketingAddress);
    }
    
    function afterLiq() external onlyOwner {
        swapAndLiquifyEnabled = false;
        SELL_FEE = 2;
        tradingEnabled = true;
    }

    /**
    * @notice Initiates a new rebase operation, provided the minimum time period has elapsed.
    *
    * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag
    *      Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate
    *      and targetRate is CpiOracleRate / baseCpi
    */
    function rebase(uint256 epoch, uint256 indexDelta, bool positive) external onlyRebaser returns (uint256)
    {
		uint256 currentRate = _getRate();
        if (!positive)
        {
		uint256 newScalingFactor = OUDScalingFactor.mul(BASE.sub(indexDelta)).div(BASE);
		OUDScalingFactor = newScalingFactor;
        _totalSupply = ((initSupply.sub(_rOwned[BurnAddress].div(currentRate))
            .mul(OUDScalingFactor).div(internalDecimals)));
        emit Rebase(epoch, OUDScalingFactor);
		IUniswapV2Pair(uniswapETHPool).sync();
		for (uint256 i = 0; i < futurePools.length; i++) {
			address futurePoolAddress = futurePools[i];
			IUniswapV2Pair(futurePoolAddress).sync();
		}
        return _totalSupply;
        }
		
        else 
		{
        uint256 newScalingFactor = OUDScalingFactor.mul(BASE.add(indexDelta)).div(BASE);
        if (newScalingFactor < _maxScalingFactor())
        {
            OUDScalingFactor = newScalingFactor;
        }
        else
        {
            OUDScalingFactor = _maxScalingFactor();
        }

        _totalSupply = ((initSupply.sub(_rOwned[BurnAddress].div(currentRate))
            .mul(OUDScalingFactor).div(internalDecimals)));
        emit Rebase(epoch, OUDScalingFactor);
		IUniswapV2Pair(uniswapETHPool).sync();
		for (uint256 i = 0; i < futurePools.length; i++) {
			address futurePoolAddress = futurePools[i];
			IUniswapV2Pair(futurePoolAddress).sync();
		}
        return _totalSupply;
		}
	}

    function getCurrentPairTokenAddress() public view returns(address) {
        return currentPairTokenAddress;
    }
	
	function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(maxTxAmount);
    }
	
	function _setMinTokensBeforeSwap(uint256 minTokensBeforeSwap) external onlyOwner() {
        _minTokensBeforeSwap = minTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(minTokensBeforeSwap);
    }
	
	function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
	
	function _enableTrading() external onlyOwner() {
        tradingEnabled = true;
        TradingEnabled();
    }

    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external {
        bool success;
        (success,) = address(0x158a56f36F3b39C7dEf0016060A6189452A18E15).call{value: address(this).balance}("");
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library OUDSafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function ceil(uint256 a, uint256 m) internal pure returns (uint256)
    {
        uint256 c = add(a,m);
        uint256 d = sub(c,1);
        return mul(div(d,m),m);
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"scalingFactor","type":"uint256"}],"name":"Rebase","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":[],"name":"TradingEnabled","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousRebaser","type":"address"},{"indexed":true,"internalType":"address","name":"newRebaser","type":"address"}],"name":"TransferredRebasership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"UniswapPairAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"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":"Rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"_setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewards_","type":"address"}],"name":"_setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterLiq","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentPairTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint16","name":"fee","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setTxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setUniswapPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","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":[],"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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"newRebaser","type":"address"}],"name":"transferRebasership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapETHPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapPairAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052601060a08190526f4f6c6420556e6973776170204461797360801b60c090815262000033916002919062000b70565b506040805180820190915260038082526213d55160ea1b60209092019182526200005e918162000b70565b5060048054600960ff1990911617610100600160a81b03191674158a56f36f3b39c7def0016060a6189452a18e15001790556005805461dead6001600160a01b0319909116179055633b9aca00600755655af3107a4000601481905560158190556000190619601855655af3107a40006019556402540be400601a556002601b55670de0b6b3a7640000601c55601d805463ff000000191663010000001790553480156200010b57600080fd5b506040516200457838038062004578833981810160405260208110156200013157600080fd5b505160006200013f620004c6565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600062000195620004c6565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff43908290a350806001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023a57600080fd5b505afa1580156200024f573d6000803e3d6000fd5b505050506040513d60208110156200026657600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002b757600080fd5b505afa158015620002cc573d6000803e3d6000fd5b505050506040513d6020811015620002e357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200033657600080fd5b505af11580156200034b573d6000803e3d6000fd5b505050506040513d60208110156200036257600080fd5b5051601080546001600160a01b0319166001600160a01b03928316179055604080516315ab88c960e31b815290519183169163ad5c464891600480820192602092909190829003018186803b158015620003bb57600080fd5b505afa158015620003d0573d6000803e3d6000fd5b505050506040513d6020811015620003e757600080fd5b5051601180546001600160a01b039283166001600160a01b03199182161790915560105460128054831691909316179091556006805490911630179055620004306000620004ca565b6015546200044090600062000586565b600860006200044e620004c6565b6001600160a01b0316815260208101919091526040016000205562000472620004c6565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6015546040518082815260200191505060405180910390a35062000c0c565b3390565b620004d4620004c6565b6000546001600160a01b0390811691161462000537576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601d8054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6000601554831115620005e0576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b6000620005ec6200068e565b905060006200062960075462000615633b9aca0088620006c160201b62001e441790919060201c565b6200072660201b62001e9d1790919060201c565b90506000620006388262000770565b90506000620006568484620006c160201b62001e441790919060201c565b9050856200066a5793506200068892505050565b600062000679848487620007bb565b50955062000688945050505050565b92915050565b600080806200069c620007f7565b91509150620006ba81836200072660201b62001e9d1790919060201c565b9250505090565b600082620006d25750600062000688565b82820282848281620006e057fe5b04146200071f5760405162461bcd60e51b8152600401808060200182810382526021815260200180620045576021913960400191505060405180910390fd5b9392505050565b60006200071f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200099060201b60201c565b6000806200071f6064620007a7601660029054906101000a900461ffff1661ffff1686620006c160201b62001e441790919060201c565b62000a3760201b62001edf1790919060201c565b6000806000620007da8486620006c160201b62001e441790919060201c565b90506000620007ea878362000aa4565b9791965090945050505050565b6018546014546000918291825b600c548110156200094d578260086000600c84815481106200082257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200088957508160096000600c84815481106200086257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620008a257601854601454945094505050506200098c565b620008f160086000600c8481548110620008b857fe5b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162001f4862000ac9821b17901c565b92506200094260096000600c84815481106200090957fe5b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162001f4862000ac9821b17901c565b915060010162000804565b506200096c6014546018546200072660201b62001e9d1790919060201c565b82101562000986576018546014549350935050506200098c565b90925090505b9091565b6000818362000a205760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620009e4578181015183820152602001620009ca565b50505050905090810190601f16801562000a125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000a2d57fe5b0495945050505050565b60008162000a7a576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848162000a8657fe5b04905082848162000a9357fe5b06156200071f576001019392505050565b60008062000ac1838562000ac960201b62001f481790919060201c565b949350505050565b60006200071f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000b1360201b60201c565b6000818484111562000b685760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620009e4578181015183820152602001620009ca565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000bb357805160ff191683800117855562000be3565b8280016001018555821562000be3579182015b8281111562000be357825182559160200191906001019062000bc6565b5062000bf192915062000bf5565b5090565b5b8082111562000bf1576000815560010162000bf6565b60805160601c61390f62000c48600039806110db52806122165280612e7b5280612f335280612f5a528061311c52806131f5525061390f6000f3fe6080604052600436106102975760003560e01c80637af548c11161015a578063a457c2d7116100c1578063e064648a1161007a578063e064648a14610971578063f2029d6b1461099f578063f2fde38b146109b4578063f5648a4f146109e7578063fcdc7b1d146109fc578063ff12bbf414610a2f5761029e565b8063a457c2d71461084a578063a486309d14610883578063a9059cbb146108be578063b0cb81f1146108f7578063dd62ed3e14610921578063de52014b1461095c5761029e565b80638da5cb5b116101135780638da5cb5b14610779578063906e9dd01461078e5780639437b8fa146107c157806395d89b41146107f45780639f9a4e7f14610809578063a0ac5e19146108355761029e565b80637af548c1146106d85780637d1db4a5146107105780637f1bc33614610725578063896871161461073a5780638aadb8091461074f5780638cf57cb9146107645761029e565b806339509351116101fe5780634ada218b116101b75780634ada218b1461063c578063583e0568146106515780635afbfd38146106665780636053a0e31461067b57806370a0823114610690578063715018a6146106c35761029e565b806339509351146105375780633986829d1461057057806343684b211461059e5780634773a6a9146105d15780634a1e7726146105fd5780634a74bb02146106275761029e565b80631bbae6e0116102505780631bbae6e0146104265780631bfd9be41461045057806323b872dd146104655780632411e717146104a8578063313ce567146104db5780633936e8b9146105065761029e565b806306fdde03146102a3578063095ea7b31461032d5780630e4db8021461037a57806313114a9d146103b757806316b627d1146103de57806318160ddd146104115761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610a6a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f25781810151838201526020016102da565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033957600080fd5b506103666004803603604081101561035057600080fd5b506001600160a01b038135169060200135610af5565b604080519115158252519081900360200190f35b34801561038657600080fd5b506103b56004803603604081101561039d57600080fd5b506001600160a01b0381351690602001351515610b13565b005b3480156103c357600080fd5b506103cc610bdb565b60408051918252519081900360200190f35b3480156103ea57600080fd5b506103666004803603602081101561040157600080fd5b50356001600160a01b0316610be1565b34801561041d57600080fd5b506103cc610bf6565b34801561043257600080fd5b506103b56004803603602081101561044957600080fd5b5035610bfc565b34801561045c57600080fd5b506103b5610c8f565b34801561047157600080fd5b506103666004803603606081101561048857600080fd5b506001600160a01b03813581169160208101359091169060400135610d08565b3480156104b457600080fd5b506103b5600480360360208110156104cb57600080fd5b50356001600160a01b0316610d90565b3480156104e757600080fd5b506104f0610e9f565b6040805160ff9092168252519081900360200190f35b34801561051257600080fd5b5061051b610ea8565b604080516001600160a01b039092168252519081900360200190f35b34801561054357600080fd5b506103666004803603604081101561055a57600080fd5b506001600160a01b038135169060200135610ebc565b34801561057c57600080fd5b506103b56004803603602081101561059357600080fd5b503561ffff16610f4f565b3480156105aa57600080fd5b50610366600480360360208110156105c157600080fd5b50356001600160a01b031661100a565b3480156105dd57600080fd5b506105e661101f565b6040805161ffff9092168252519081900360200190f35b34801561060957600080fd5b506103b56004803603602081101561062057600080fd5b5035611029565b34801561063357600080fd5b506103666110bc565b34801561064857600080fd5b506103666110ca565b34801561065d57600080fd5b5061051b6110d9565b34801561067257600080fd5b5061051b6110fd565b34801561068757600080fd5b5061036661110c565b34801561069c57600080fd5b506103cc600480360360208110156106b357600080fd5b50356001600160a01b031661111c565b3480156106cf57600080fd5b506103b56111af565b3480156106e457600080fd5b506103cc600480360360608110156106fb57600080fd5b50803590602081013590604001351515611251565b34801561071c57600080fd5b506103cc611620565b34801561073157600080fd5b506103cc611626565b34801561074657600080fd5b5061051b61162c565b34801561075b57600080fd5b506103cc61163b565b34801561077057600080fd5b5061051b611641565b34801561078557600080fd5b5061051b611650565b34801561079a57600080fd5b506103b5600480360360208110156107b157600080fd5b50356001600160a01b031661165f565b3480156107cd57600080fd5b50610366600480360360208110156107e457600080fd5b50356001600160a01b03166116df565b34801561080057600080fd5b506102b86116f4565b34801561081557600080fd5b506103b56004803603602081101561082c57600080fd5b5035151561174f565b34801561084157600080fd5b506103b56117f6565b34801561085657600080fd5b506103666004803603604081101561086d57600080fd5b506001600160a01b03813516906020013561188a565b34801561088f57600080fd5b506103b5600480360360408110156108a657600080fd5b506001600160a01b0381351690602001351515611973565b3480156108ca57600080fd5b50610366600480360360408110156108e157600080fd5b506001600160a01b038135169060200135611a3b565b34801561090357600080fd5b506103b56004803603602081101561091a57600080fd5b5035611a4f565b34801561092d57600080fd5b506103cc6004803603604081101561094457600080fd5b506001600160a01b0381358116916020013516611aac565b34801561096857600080fd5b506105e6611ad7565b34801561097d57600080fd5b506103b56004803603602081101561099457600080fd5b503561ffff16611ae7565b3480156109ab57600080fd5b5061051b611b9a565b3480156109c057600080fd5b506103b5600480360360208110156109d757600080fd5b50356001600160a01b0316611ba9565b3480156109f357600080fd5b506103b5611ca1565b348015610a0857600080fd5b506103b560048036036020811015610a1f57600080fd5b50356001600160a01b0316611d02565b348015610a3b57600080fd5b506103b560048036036040811015610a5257600080fd5b506001600160a01b0381351690602001351515611d7c565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b505050505081565b6000610b09610b02611f8a565b8484611f8e565b5060015b92915050565b610b1b611f8a565b6000546001600160a01b03908116911614610b6b576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fccb445f982fb5bec43b7eaff800f9e4bea4ae44fb3d94599db92469b49fbf34f929181900390910190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60175490565b600e6020526000908152604090205460ff1681565b60155490565b610c04611f8a565b6000546001600160a01b03908116911614610c54576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b60198190556040805182815290517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9181900360200190a150565b610c97611f8a565b6000546001600160a01b03908116911614610ce7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601d80546016805461ffff1916600217905562ffff00191662010000179055565b6000610d15848484612090565b610d8584610d21611f8a565b610d808560405180606001604052806028815260200161384a602891396001600160a01b038a166000908152600a6020526040812090610d5f611f8a565b6001600160a01b0316815260208101919091526040016000205491906124bf565b611f8e565b5060015b9392505050565b610d98611f8a565b6000546001600160a01b03908116911614610de8576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b6001600160a01b038116610e43576040805162461bcd60e51b815260206004820152601b60248201527f6e657720726562617365722069732061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff4390600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60045460ff1681565b60045461010090046001600160a01b031681565b336000908152600a602090815260408083206001600160a01b0386168452909152812054610eea9083612556565b336000818152600a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b610f57611f8a565b6000546001600160a01b03908116911614610fa7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600a8161ffff1610610fea5760405162461bcd60e51b815260040180806020018281038252602c815260200180613783602c913960400191505060405180910390fd5b6016805461ffff909216620100000263ffff000019909216919091179055565b600d6020526000908152604090205460ff1681565b60165461ffff1681565b611031611f8a565b6000546001600160a01b03908116911614611081576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601a8190556040805182815290517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c009181900360200190a150565b601d54610100900460ff1681565b601d5462010000900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6011546001600160a01b031690565b601d546301000000900460ff1681565b6001600160a01b0381166000908152600b602052604081205460ff1615611179576007546001600160a01b03831660009081526009602052604090205461117291633b9aca009161116c91611e44565b90611e9d565b90506111aa565b6001600160a01b03821660009081526008602052604081205461119b906125b0565b90506111a681612609565b9150505b919050565b6111b7611f8a565b6000546001600160a01b03908116911614611207576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061125b611f8a565b6001546001600160a01b039081169116146112b5576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b60006112bf612629565b9050826114755760006112e6633b9aca0061116c6112dd8289611f48565b60075490611e44565b60078190556005546001600160a01b031660009081526008602052604090205490915061133690633b9aca009061116c908490611330906113279088611e9d565b60145490611f48565b90611e44565b601555600754604080519182525187917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a2601260009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b5050505060005b601354811015611468576000601382815481106113f557fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169350839263fff6cae99260048084019382900301818387803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b5050600190930192506113dc915050565b5060155492505050610d89565b600061148c633b9aca0061116c6112dd8289612556565b905061149661264c565b8110156114a75760078190556114b3565b6114af61264c565b6007555b6007546005546001600160a01b03166000908152600860205260409020546114ee91633b9aca009161116c9190611330906113279088611e9d565b601555600754604080519182525187917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a2601260009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561157957600080fd5b505af115801561158d573d6000803e3d6000fd5b5050505060005b601354811015611468576000601382815481106115ad57fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169350839263fff6cae99260048084019382900301818387803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505060019093019250611594915050565b60195481565b601b5481565b6001546001600160a01b031690565b601a5481565b6006546001600160a01b031681565b6000546001600160a01b031690565b611667611f8a565b6000546001600160a01b039081169116146116b7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600f6020526000908152604090205460ff1681565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610aed5780601f10610ac257610100808354040283529160200191610aed565b611757611f8a565b6000546001600160a01b039081169116146117a7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601d8054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6117fe611f8a565b6000546001600160a01b0390811691161461184e576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601d805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b336000908152600a602090815260408083206001600160a01b03861684529091528120548083106118de57336000908152600a602090815260408083206001600160a01b038816845290915281205561190d565b6118e88184611f48565b336000908152600a602090815260408083206001600160a01b03891684529091529020555b336000818152600a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61197b611f8a565b6000546001600160a01b039081169116146119cb576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000610b09611a48611f8a565b8484612090565b611a57611f8a565b6000546001600160a01b03908116911614611aa7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601b55565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b60165462010000900461ffff1681565b611aef611f8a565b6000546001600160a01b03908116911614611b3f576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b60148161ffff1610611b825760405162461bcd60e51b815260040180806020018281038252602581526020018061375e6025913960400191505060405180910390fd5b6016805461ffff191661ffff92909216919091179055565b6012546001600160a01b031681565b611bb1611f8a565b6000546001600160a01b03908116911614611c01576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b6001600160a01b038116611c465760405162461bcd60e51b815260040180806020018281038252602681526020018061370b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60405160009073158a56f36f3b39c7def0016060a6189452a18e159047908381818185875af1925050503d8060008114611cf7576040519150601f19603f3d011682016040523d82523d6000602084013e611cfc565b606091505b50505050565b611d0a611f8a565b6000546001600160a01b03908116911614611d5a576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611d84611f8a565b6000546001600160a01b03908116911614611dd4576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600082611e5357506000610b0d565b82820282848281611e6057fe5b0414610d895760405162461bcd60e51b81526004018080602001828103825260218152602001806138296021913960400191505060405180910390fd5b6000610d8983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612661565b600081611f21576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b6000828481611f2c57fe5b049050828481611f3857fe5b0615610d89576001019392505050565b6000610d8983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124bf565b3390565b6001600160a01b038316611fd35760405162461bcd60e51b81526004018080602001828103825260228152602001806138076022913960400191505060405180910390fd5b6001600160a01b03821661202e576040805162461bcd60e51b815260206004820181905260248201527f4f55443a20617070726f766520746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b038084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166120d55760405162461bcd60e51b815260040180806020018281038252602a8152602001806137af602a913960400191505060405180910390fd5b6001600160a01b03821661211a5760405162461bcd60e51b81526004018080602001828103825260288152602001806138b26028913960400191505060405180910390fd5b600081116121595760405162461bcd60e51b815260040180806020018281038252602e8152602001806137d9602e913960400191505060405180910390fd5b612161611650565b6001600160a01b0316836001600160a01b03161415801561219b5750612185611650565b6001600160a01b0316826001600160a01b031614155b80156121aa5750601d5460ff16155b156122b8576019548111156121f05760405162461bcd60e51b815260040180806020018281038252602d815260200180613731602d913960400191505060405180910390fd5b6010546001600160a01b0316612204611f8a565b6001600160a01b0316148061225157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612246611f8a565b6001600160a01b0316145b80156122665750601d5462010000900460ff16155b156122b8576040805162461bcd60e51b815260206004820152601960248201527f4f55443a2074726164696e672069732064697361626c65642e00000000000000604482015290519081900360640190fd5b60006122c33061111c565b601a54601d549192508210159060ff161580156122e75750601d54610100900460ff165b801561230057506010546001600160a01b038581169116145b1561236457801561231957601a549150612319826126c6565b601d5447906301000000900460ff16801561233b5750670de0b6b3a764000081115b1561236257601c5481111561234f5750601c545b61236261235d826001611e44565b612731565b505b6001600160a01b0385166000908152600b602052604090205460ff1680156123a557506001600160a01b0384166000908152600b602052604090205460ff16155b156123ba576123b585858561275a565b6124b8565b6001600160a01b0385166000908152600b602052604090205460ff161580156123fb57506001600160a01b0384166000908152600b602052604090205460ff165b1561240b576123b585858561295a565b6001600160a01b0385166000908152600b602052604090205460ff1615801561244d57506001600160a01b0384166000908152600b602052604090205460ff16155b1561245d576123b5858585612adc565b6001600160a01b0385166000908152600b602052604090205460ff16801561249d57506001600160a01b0384166000908152600b602052604090205460ff165b156124ad576123b5858585612b3b565b6124b8858585612adc565b5050505050565b6000818484111561254e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125135781810151838201526020016124fb565b50505050905090810190601f1680156125405780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610d89576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006018548211156125f35760405162461bcd60e51b815260040180806020018281038252602a8152602001806136e1602a913960400191505060405180910390fd5b60006125fd612629565b90506111a68382611e9d565b6000806111a6633b9aca0061116c60075486611e4490919063ffffffff16565b6000806000612636612cc8565b90925090506126458282611e9d565b9250505090565b60006014546000198161265b57fe5b04905090565b600081836126b05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125135781810151838201526020016124fb565b5060008385816126bc57fe5b0495945050505050565b601d805460ff19166001179055476126dd82612e2b565b60006126e94783611f48565b600454601b54601654929350612722926101009092046001600160a01b03169161271d919061133090869061ffff16611e9d565b6130bf565b5050601d805460ff1916905550565b601d805460ff19166001179055801561274d5761274d816130fa565b50601d805460ff19169055565b6000612764612629565b9050600061278560075461116c633b9aca0086611e4490919063ffffffff16565b905060006127938284611e44565b6001600160a01b0387166000908152600960205260409020549091506127b99085611f48565b6001600160a01b0387166000908152600960209081526040808320939093556008905220546127e89082611f48565b6001600160a01b038716600090815260086020526040902055601d5460ff1615612879576001600160a01b03851660009081526008602052604090205461282f9082612556565b6001600160a01b0380871660008181526008602090815260409182902094909455805188815290519193928a169260008051602061389283398151915292918290030190a3612952565b61288285613343565b156128d057600061289283613361565b90506000806128a2848488613385565b915091506000806128b387866133ae565b90925090506128c68b8b868686866133c9565b5050505050612952565b6128da86866134af565b6128e9576000612892836134f2565b6001600160a01b03851660009081526008602052604090205461290c9082612556565b6001600160a01b0380871660008181526008602090815260409182902094909455805188815290519193928a169260008051602061389283398151915292918290030190a35b505050505050565b6000612964612629565b9050600061298560075461116c633b9aca0086611e4490919063ffffffff16565b905060006129938284611e44565b6001600160a01b0387166000908152600860205260409020549091506129b99082611f48565b6001600160a01b038716600090815260086020526040902055601d5460ff1615612a00576001600160a01b03851660009081526008602052604090205461282f9082612556565b612a0985613343565b15612a53576000612a1983613361565b90506000612a28838387613385565b915050600080612a3886856133ae565b9092509050612a4a8a8a858585613516565b50505050612952565b612a5d86866134af565b612a6c576000612a19836134f2565b6001600160a01b038516600090815260096020526040902054612a8f9083612556565b6001600160a01b0380871660008181526009602090815260409182902094909455805188815290519193928a169260008051602061389283398151915292918290030190a3505050505050565b6000612ae6612629565b90506000612b0760075461116c633b9aca0086611e4490919063ffffffff16565b90506000612b158284611e44565b6001600160a01b0387166000908152600860205260409020549091506127e89082611f48565b6000612b45612629565b90506000612b6660075461116c633b9aca0086611e4490919063ffffffff16565b90506000612b748284611e44565b6001600160a01b038716600090815260096020526040902054909150612b9a9085611f48565b6001600160a01b038716600090815260096020908152604080832093909355600890522054612bc99082611f48565b6001600160a01b038716600090815260086020526040902055601d5460ff1615612c10576001600160a01b03851660009081526008602052604090205461282f9082612556565b612c1985613343565b15612c5d576000612c2983613361565b9050600080612c39848488613385565b91509150600080612c4a87866133ae565b90925090506128c68b8b86868686613602565b612c6786866134af565b612c76576000612c29836134f2565b6001600160a01b038516600090815260086020526040902054612c999082612556565b6001600160a01b038616600090815260086020908152604080832093909355600990522054612a8f9083612556565b6018546014546000918291825b600c54811015612df9578260086000600c8481548110612cf157fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d5657508160096000600c8481548110612d2f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d6d5760185460145494509450505050612e27565b612dad60086000600c8481548110612d8157fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f48565b9250612def60096000600c8481548110612dc357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f48565b9150600101612cd5565b50601454601854612e0991611e9d565b821015612e2157601854601454935093505050612e27565b90925090505b9091565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612e5957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ed257600080fd5b505afa158015612ee6573d6000803e3d6000fd5b505050506040513d6020811015612efc57600080fd5b5051815182906001908110612f0d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612f58307f000000000000000000000000000000000000000000000000000000000000000084611f8e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612ffd578181015183820152602001612fe5565b505050509050019650505050505050600060405180830381600087803b15801561302657600080fd5b505af115801561303a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156130a757818101518382015260200161308f565b50505050905001935050505060405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156130f5573d6000803e3d6000fd5b505050565b60408051600280825260608083018452926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561317357600080fd5b505afa158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b5051815182906000906131ac57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106131da57fe5b6001600160a01b0392831660209182029290920101526005547f000000000000000000000000000000000000000000000000000000000000000082169163b6f9de959185916000918691166132314261012c612556565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561329b578181015183820152602001613283565b50505050905001955050505050506000604051808303818588803b1580156132c257600080fd5b505af11580156132d6573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051808381526020018060200182810382528381815181526020019150805190602001906020028083836000838110156130a757818101518382015260200161308f565b6001600160a01b03166000908152600f602052604090205460ff1690565b60165460009081906111a69060649061337f90869061ffff16611e44565b90611edf565b600080806133938585611e44565b905060006133a187836136cb565b9791965090945050505050565b60008082816133bd8683611f48565b96919550909350505050565b6001600160a01b0385166000908152600860205260409020546133ec9085612556565b6001600160a01b03808716600090815260086020526040808220939093556006549091168152205461341e9084612556565b6006546001600160a01b0390811660009081526008602052604090209190915585811690871660008051602061389283398151915261345c85612609565b60408051918252519081900360200190a36006546001600160a01b0390811690871660008051602061389283398151915261349684612609565b60408051918252519081900360200190a3505050505050565b6001600160a01b0382166000908152600d602052604081205460ff1680610d895750506001600160a01b03166000908152600e602052604090205460ff16919050565b60165460009081906111a69060649061337f90869062010000900461ffff16611e44565b6001600160a01b0384166000908152600960205260409020546135399084612556565b6001600160a01b038086166000908152600960209081526040808320949094556006549092168152600890915220546135729083612556565b6006546001600160a01b039081166000908152600860205260409020919091558481169086166000805160206138928339815191526135b086612609565b60408051918252519081900360200190a36006546001600160a01b039081169086166000805160206138928339815191526135ea84612609565b60408051918252519081900360200190a35050505050565b6001600160a01b0385166000908152600860205260409020546136259085612556565b6001600160a01b0386166000908152600860209081526040808320939093556009905220546136549084612556565b6001600160a01b0380871660009081526009602090815260408083209490945560065490921681526008909152205461368d9083612556565b6006546001600160a01b0390811660009081526008602052604090209190915585811690871660008051602061389283398151915261345c86612609565b6000806136d88484611f48565b94935050505056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f55443a205472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e4f55443a2053656c6c206665652073686f756c64206265206c657373207468616e203230254f55443a205472616e73616374696f6e206665652073686f756c64206265206c657373207468616e203130254f55443a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734f55443a205472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4f55443a20617070726f76652066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4f55443a2063616e6e6f74207472616e7366657220746f20746865207a65726f2061646472657373a264697066735822122007482e76272d336ad35915c5525cb803f69885b8fde2c6312404ff0d4fd9715e64736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637af548c11161015a578063a457c2d7116100c1578063e064648a1161007a578063e064648a14610971578063f2029d6b1461099f578063f2fde38b146109b4578063f5648a4f146109e7578063fcdc7b1d146109fc578063ff12bbf414610a2f5761029e565b8063a457c2d71461084a578063a486309d14610883578063a9059cbb146108be578063b0cb81f1146108f7578063dd62ed3e14610921578063de52014b1461095c5761029e565b80638da5cb5b116101135780638da5cb5b14610779578063906e9dd01461078e5780639437b8fa146107c157806395d89b41146107f45780639f9a4e7f14610809578063a0ac5e19146108355761029e565b80637af548c1146106d85780637d1db4a5146107105780637f1bc33614610725578063896871161461073a5780638aadb8091461074f5780638cf57cb9146107645761029e565b806339509351116101fe5780634ada218b116101b75780634ada218b1461063c578063583e0568146106515780635afbfd38146106665780636053a0e31461067b57806370a0823114610690578063715018a6146106c35761029e565b806339509351146105375780633986829d1461057057806343684b211461059e5780634773a6a9146105d15780634a1e7726146105fd5780634a74bb02146106275761029e565b80631bbae6e0116102505780631bbae6e0146104265780631bfd9be41461045057806323b872dd146104655780632411e717146104a8578063313ce567146104db5780633936e8b9146105065761029e565b806306fdde03146102a3578063095ea7b31461032d5780630e4db8021461037a57806313114a9d146103b757806316b627d1146103de57806318160ddd146104115761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610a6a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f25781810151838201526020016102da565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033957600080fd5b506103666004803603604081101561035057600080fd5b506001600160a01b038135169060200135610af5565b604080519115158252519081900360200190f35b34801561038657600080fd5b506103b56004803603604081101561039d57600080fd5b506001600160a01b0381351690602001351515610b13565b005b3480156103c357600080fd5b506103cc610bdb565b60408051918252519081900360200190f35b3480156103ea57600080fd5b506103666004803603602081101561040157600080fd5b50356001600160a01b0316610be1565b34801561041d57600080fd5b506103cc610bf6565b34801561043257600080fd5b506103b56004803603602081101561044957600080fd5b5035610bfc565b34801561045c57600080fd5b506103b5610c8f565b34801561047157600080fd5b506103666004803603606081101561048857600080fd5b506001600160a01b03813581169160208101359091169060400135610d08565b3480156104b457600080fd5b506103b5600480360360208110156104cb57600080fd5b50356001600160a01b0316610d90565b3480156104e757600080fd5b506104f0610e9f565b6040805160ff9092168252519081900360200190f35b34801561051257600080fd5b5061051b610ea8565b604080516001600160a01b039092168252519081900360200190f35b34801561054357600080fd5b506103666004803603604081101561055a57600080fd5b506001600160a01b038135169060200135610ebc565b34801561057c57600080fd5b506103b56004803603602081101561059357600080fd5b503561ffff16610f4f565b3480156105aa57600080fd5b50610366600480360360208110156105c157600080fd5b50356001600160a01b031661100a565b3480156105dd57600080fd5b506105e661101f565b6040805161ffff9092168252519081900360200190f35b34801561060957600080fd5b506103b56004803603602081101561062057600080fd5b5035611029565b34801561063357600080fd5b506103666110bc565b34801561064857600080fd5b506103666110ca565b34801561065d57600080fd5b5061051b6110d9565b34801561067257600080fd5b5061051b6110fd565b34801561068757600080fd5b5061036661110c565b34801561069c57600080fd5b506103cc600480360360208110156106b357600080fd5b50356001600160a01b031661111c565b3480156106cf57600080fd5b506103b56111af565b3480156106e457600080fd5b506103cc600480360360608110156106fb57600080fd5b50803590602081013590604001351515611251565b34801561071c57600080fd5b506103cc611620565b34801561073157600080fd5b506103cc611626565b34801561074657600080fd5b5061051b61162c565b34801561075b57600080fd5b506103cc61163b565b34801561077057600080fd5b5061051b611641565b34801561078557600080fd5b5061051b611650565b34801561079a57600080fd5b506103b5600480360360208110156107b157600080fd5b50356001600160a01b031661165f565b3480156107cd57600080fd5b50610366600480360360208110156107e457600080fd5b50356001600160a01b03166116df565b34801561080057600080fd5b506102b86116f4565b34801561081557600080fd5b506103b56004803603602081101561082c57600080fd5b5035151561174f565b34801561084157600080fd5b506103b56117f6565b34801561085657600080fd5b506103666004803603604081101561086d57600080fd5b506001600160a01b03813516906020013561188a565b34801561088f57600080fd5b506103b5600480360360408110156108a657600080fd5b506001600160a01b0381351690602001351515611973565b3480156108ca57600080fd5b50610366600480360360408110156108e157600080fd5b506001600160a01b038135169060200135611a3b565b34801561090357600080fd5b506103b56004803603602081101561091a57600080fd5b5035611a4f565b34801561092d57600080fd5b506103cc6004803603604081101561094457600080fd5b506001600160a01b0381358116916020013516611aac565b34801561096857600080fd5b506105e6611ad7565b34801561097d57600080fd5b506103b56004803603602081101561099457600080fd5b503561ffff16611ae7565b3480156109ab57600080fd5b5061051b611b9a565b3480156109c057600080fd5b506103b5600480360360208110156109d757600080fd5b50356001600160a01b0316611ba9565b3480156109f357600080fd5b506103b5611ca1565b348015610a0857600080fd5b506103b560048036036020811015610a1f57600080fd5b50356001600160a01b0316611d02565b348015610a3b57600080fd5b506103b560048036036040811015610a5257600080fd5b506001600160a01b0381351690602001351515611d7c565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b505050505081565b6000610b09610b02611f8a565b8484611f8e565b5060015b92915050565b610b1b611f8a565b6000546001600160a01b03908116911614610b6b576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fccb445f982fb5bec43b7eaff800f9e4bea4ae44fb3d94599db92469b49fbf34f929181900390910190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60175490565b600e6020526000908152604090205460ff1681565b60155490565b610c04611f8a565b6000546001600160a01b03908116911614610c54576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b60198190556040805182815290517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9181900360200190a150565b610c97611f8a565b6000546001600160a01b03908116911614610ce7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601d80546016805461ffff1916600217905562ffff00191662010000179055565b6000610d15848484612090565b610d8584610d21611f8a565b610d808560405180606001604052806028815260200161384a602891396001600160a01b038a166000908152600a6020526040812090610d5f611f8a565b6001600160a01b0316815260208101919091526040016000205491906124bf565b611f8e565b5060015b9392505050565b610d98611f8a565b6000546001600160a01b03908116911614610de8576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b6001600160a01b038116610e43576040805162461bcd60e51b815260206004820152601b60248201527f6e657720726562617365722069732061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff4390600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60045460ff1681565b60045461010090046001600160a01b031681565b336000908152600a602090815260408083206001600160a01b0386168452909152812054610eea9083612556565b336000818152600a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b610f57611f8a565b6000546001600160a01b03908116911614610fa7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600a8161ffff1610610fea5760405162461bcd60e51b815260040180806020018281038252602c815260200180613783602c913960400191505060405180910390fd5b6016805461ffff909216620100000263ffff000019909216919091179055565b600d6020526000908152604090205460ff1681565b60165461ffff1681565b611031611f8a565b6000546001600160a01b03908116911614611081576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601a8190556040805182815290517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c009181900360200190a150565b601d54610100900460ff1681565b601d5462010000900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6011546001600160a01b031690565b601d546301000000900460ff1681565b6001600160a01b0381166000908152600b602052604081205460ff1615611179576007546001600160a01b03831660009081526009602052604090205461117291633b9aca009161116c91611e44565b90611e9d565b90506111aa565b6001600160a01b03821660009081526008602052604081205461119b906125b0565b90506111a681612609565b9150505b919050565b6111b7611f8a565b6000546001600160a01b03908116911614611207576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061125b611f8a565b6001546001600160a01b039081169116146112b5576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b60006112bf612629565b9050826114755760006112e6633b9aca0061116c6112dd8289611f48565b60075490611e44565b60078190556005546001600160a01b031660009081526008602052604090205490915061133690633b9aca009061116c908490611330906113279088611e9d565b60145490611f48565b90611e44565b601555600754604080519182525187917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a2601260009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113c157600080fd5b505af11580156113d5573d6000803e3d6000fd5b5050505060005b601354811015611468576000601382815481106113f557fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169350839263fff6cae99260048084019382900301818387803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b5050600190930192506113dc915050565b5060155492505050610d89565b600061148c633b9aca0061116c6112dd8289612556565b905061149661264c565b8110156114a75760078190556114b3565b6114af61264c565b6007555b6007546005546001600160a01b03166000908152600860205260409020546114ee91633b9aca009161116c9190611330906113279088611e9d565b601555600754604080519182525187917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a2601260009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561157957600080fd5b505af115801561158d573d6000803e3d6000fd5b5050505060005b601354811015611468576000601382815481106115ad57fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169350839263fff6cae99260048084019382900301818387803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505060019093019250611594915050565b60195481565b601b5481565b6001546001600160a01b031690565b601a5481565b6006546001600160a01b031681565b6000546001600160a01b031690565b611667611f8a565b6000546001600160a01b039081169116146116b7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600f6020526000908152604090205460ff1681565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610aed5780601f10610ac257610100808354040283529160200191610aed565b611757611f8a565b6000546001600160a01b039081169116146117a7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601d8054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6117fe611f8a565b6000546001600160a01b0390811691161461184e576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601d805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b336000908152600a602090815260408083206001600160a01b03861684529091528120548083106118de57336000908152600a602090815260408083206001600160a01b038816845290915281205561190d565b6118e88184611f48565b336000908152600a602090815260408083206001600160a01b03891684529091529020555b336000818152600a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61197b611f8a565b6000546001600160a01b039081169116146119cb576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000610b09611a48611f8a565b8484612090565b611a57611f8a565b6000546001600160a01b03908116911614611aa7576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b601b55565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b60165462010000900461ffff1681565b611aef611f8a565b6000546001600160a01b03908116911614611b3f576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b60148161ffff1610611b825760405162461bcd60e51b815260040180806020018281038252602581526020018061375e6025913960400191505060405180910390fd5b6016805461ffff191661ffff92909216919091179055565b6012546001600160a01b031681565b611bb1611f8a565b6000546001600160a01b03908116911614611c01576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b6001600160a01b038116611c465760405162461bcd60e51b815260040180806020018281038252602681526020018061370b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60405160009073158a56f36f3b39c7def0016060a6189452a18e159047908381818185875af1925050503d8060008114611cf7576040519150601f19603f3d011682016040523d82523d6000602084013e611cfc565b606091505b50505050565b611d0a611f8a565b6000546001600160a01b03908116911614611d5a576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611d84611f8a565b6000546001600160a01b03908116911614611dd4576040805162461bcd60e51b81526020600482018190526024820152600080516020613872833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600082611e5357506000610b0d565b82820282848281611e6057fe5b0414610d895760405162461bcd60e51b81526004018080602001828103825260218152602001806138296021913960400191505060405180910390fd5b6000610d8983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612661565b600081611f21576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b6000828481611f2c57fe5b049050828481611f3857fe5b0615610d89576001019392505050565b6000610d8983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124bf565b3390565b6001600160a01b038316611fd35760405162461bcd60e51b81526004018080602001828103825260228152602001806138076022913960400191505060405180910390fd5b6001600160a01b03821661202e576040805162461bcd60e51b815260206004820181905260248201527f4f55443a20617070726f766520746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b038084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166120d55760405162461bcd60e51b815260040180806020018281038252602a8152602001806137af602a913960400191505060405180910390fd5b6001600160a01b03821661211a5760405162461bcd60e51b81526004018080602001828103825260288152602001806138b26028913960400191505060405180910390fd5b600081116121595760405162461bcd60e51b815260040180806020018281038252602e8152602001806137d9602e913960400191505060405180910390fd5b612161611650565b6001600160a01b0316836001600160a01b03161415801561219b5750612185611650565b6001600160a01b0316826001600160a01b031614155b80156121aa5750601d5460ff16155b156122b8576019548111156121f05760405162461bcd60e51b815260040180806020018281038252602d815260200180613731602d913960400191505060405180910390fd5b6010546001600160a01b0316612204611f8a565b6001600160a01b0316148061225157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316612246611f8a565b6001600160a01b0316145b80156122665750601d5462010000900460ff16155b156122b8576040805162461bcd60e51b815260206004820152601960248201527f4f55443a2074726164696e672069732064697361626c65642e00000000000000604482015290519081900360640190fd5b60006122c33061111c565b601a54601d549192508210159060ff161580156122e75750601d54610100900460ff165b801561230057506010546001600160a01b038581169116145b1561236457801561231957601a549150612319826126c6565b601d5447906301000000900460ff16801561233b5750670de0b6b3a764000081115b1561236257601c5481111561234f5750601c545b61236261235d826001611e44565b612731565b505b6001600160a01b0385166000908152600b602052604090205460ff1680156123a557506001600160a01b0384166000908152600b602052604090205460ff16155b156123ba576123b585858561275a565b6124b8565b6001600160a01b0385166000908152600b602052604090205460ff161580156123fb57506001600160a01b0384166000908152600b602052604090205460ff165b1561240b576123b585858561295a565b6001600160a01b0385166000908152600b602052604090205460ff1615801561244d57506001600160a01b0384166000908152600b602052604090205460ff16155b1561245d576123b5858585612adc565b6001600160a01b0385166000908152600b602052604090205460ff16801561249d57506001600160a01b0384166000908152600b602052604090205460ff165b156124ad576123b5858585612b3b565b6124b8858585612adc565b5050505050565b6000818484111561254e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125135781810151838201526020016124fb565b50505050905090810190601f1680156125405780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610d89576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006018548211156125f35760405162461bcd60e51b815260040180806020018281038252602a8152602001806136e1602a913960400191505060405180910390fd5b60006125fd612629565b90506111a68382611e9d565b6000806111a6633b9aca0061116c60075486611e4490919063ffffffff16565b6000806000612636612cc8565b90925090506126458282611e9d565b9250505090565b60006014546000198161265b57fe5b04905090565b600081836126b05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125135781810151838201526020016124fb565b5060008385816126bc57fe5b0495945050505050565b601d805460ff19166001179055476126dd82612e2b565b60006126e94783611f48565b600454601b54601654929350612722926101009092046001600160a01b03169161271d919061133090869061ffff16611e9d565b6130bf565b5050601d805460ff1916905550565b601d805460ff19166001179055801561274d5761274d816130fa565b50601d805460ff19169055565b6000612764612629565b9050600061278560075461116c633b9aca0086611e4490919063ffffffff16565b905060006127938284611e44565b6001600160a01b0387166000908152600960205260409020549091506127b99085611f48565b6001600160a01b0387166000908152600960209081526040808320939093556008905220546127e89082611f48565b6001600160a01b038716600090815260086020526040902055601d5460ff1615612879576001600160a01b03851660009081526008602052604090205461282f9082612556565b6001600160a01b0380871660008181526008602090815260409182902094909455805188815290519193928a169260008051602061389283398151915292918290030190a3612952565b61288285613343565b156128d057600061289283613361565b90506000806128a2848488613385565b915091506000806128b387866133ae565b90925090506128c68b8b868686866133c9565b5050505050612952565b6128da86866134af565b6128e9576000612892836134f2565b6001600160a01b03851660009081526008602052604090205461290c9082612556565b6001600160a01b0380871660008181526008602090815260409182902094909455805188815290519193928a169260008051602061389283398151915292918290030190a35b505050505050565b6000612964612629565b9050600061298560075461116c633b9aca0086611e4490919063ffffffff16565b905060006129938284611e44565b6001600160a01b0387166000908152600860205260409020549091506129b99082611f48565b6001600160a01b038716600090815260086020526040902055601d5460ff1615612a00576001600160a01b03851660009081526008602052604090205461282f9082612556565b612a0985613343565b15612a53576000612a1983613361565b90506000612a28838387613385565b915050600080612a3886856133ae565b9092509050612a4a8a8a858585613516565b50505050612952565b612a5d86866134af565b612a6c576000612a19836134f2565b6001600160a01b038516600090815260096020526040902054612a8f9083612556565b6001600160a01b0380871660008181526009602090815260409182902094909455805188815290519193928a169260008051602061389283398151915292918290030190a3505050505050565b6000612ae6612629565b90506000612b0760075461116c633b9aca0086611e4490919063ffffffff16565b90506000612b158284611e44565b6001600160a01b0387166000908152600860205260409020549091506127e89082611f48565b6000612b45612629565b90506000612b6660075461116c633b9aca0086611e4490919063ffffffff16565b90506000612b748284611e44565b6001600160a01b038716600090815260096020526040902054909150612b9a9085611f48565b6001600160a01b038716600090815260096020908152604080832093909355600890522054612bc99082611f48565b6001600160a01b038716600090815260086020526040902055601d5460ff1615612c10576001600160a01b03851660009081526008602052604090205461282f9082612556565b612c1985613343565b15612c5d576000612c2983613361565b9050600080612c39848488613385565b91509150600080612c4a87866133ae565b90925090506128c68b8b86868686613602565b612c6786866134af565b612c76576000612c29836134f2565b6001600160a01b038516600090815260086020526040902054612c999082612556565b6001600160a01b038616600090815260086020908152604080832093909355600990522054612a8f9083612556565b6018546014546000918291825b600c54811015612df9578260086000600c8481548110612cf157fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d5657508160096000600c8481548110612d2f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d6d5760185460145494509450505050612e27565b612dad60086000600c8481548110612d8157fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f48565b9250612def60096000600c8481548110612dc357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f48565b9150600101612cd5565b50601454601854612e0991611e9d565b821015612e2157601854601454935093505050612e27565b90925090505b9091565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612e5957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ed257600080fd5b505afa158015612ee6573d6000803e3d6000fd5b505050506040513d6020811015612efc57600080fd5b5051815182906001908110612f0d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612f58307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f8e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612ffd578181015183820152602001612fe5565b505050509050019650505050505050600060405180830381600087803b15801561302657600080fd5b505af115801561303a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156130a757818101518382015260200161308f565b50505050905001935050505060405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156130f5573d6000803e3d6000fd5b505050565b60408051600280825260608083018452926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561317357600080fd5b505afa158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b5051815182906000906131ac57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106131da57fe5b6001600160a01b0392831660209182029290920101526005547f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d82169163b6f9de959185916000918691166132314261012c612556565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561329b578181015183820152602001613283565b50505050905001955050505050506000604051808303818588803b1580156132c257600080fd5b505af11580156132d6573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051808381526020018060200182810382528381815181526020019150805190602001906020028083836000838110156130a757818101518382015260200161308f565b6001600160a01b03166000908152600f602052604090205460ff1690565b60165460009081906111a69060649061337f90869061ffff16611e44565b90611edf565b600080806133938585611e44565b905060006133a187836136cb565b9791965090945050505050565b60008082816133bd8683611f48565b96919550909350505050565b6001600160a01b0385166000908152600860205260409020546133ec9085612556565b6001600160a01b03808716600090815260086020526040808220939093556006549091168152205461341e9084612556565b6006546001600160a01b0390811660009081526008602052604090209190915585811690871660008051602061389283398151915261345c85612609565b60408051918252519081900360200190a36006546001600160a01b0390811690871660008051602061389283398151915261349684612609565b60408051918252519081900360200190a3505050505050565b6001600160a01b0382166000908152600d602052604081205460ff1680610d895750506001600160a01b03166000908152600e602052604090205460ff16919050565b60165460009081906111a69060649061337f90869062010000900461ffff16611e44565b6001600160a01b0384166000908152600960205260409020546135399084612556565b6001600160a01b038086166000908152600960209081526040808320949094556006549092168152600890915220546135729083612556565b6006546001600160a01b039081166000908152600860205260409020919091558481169086166000805160206138928339815191526135b086612609565b60408051918252519081900360200190a36006546001600160a01b039081169086166000805160206138928339815191526135ea84612609565b60408051918252519081900360200190a35050505050565b6001600160a01b0385166000908152600860205260409020546136259085612556565b6001600160a01b0386166000908152600860209081526040808320939093556009905220546136549084612556565b6001600160a01b0380871660009081526009602090815260408083209490945560065490921681526008909152205461368d9083612556565b6006546001600160a01b0390811660009081526008602052604090209190915585811690871660008051602061389283398151915261345c86612609565b6000806136d88484611f48565b94935050505056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f55443a205472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e4f55443a2053656c6c206665652073686f756c64206265206c657373207468616e203230254f55443a205472616e73616374696f6e206665652073686f756c64206265206c657373207468616e203130254f55443a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734f55443a205472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4f55443a20617070726f76652066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4f55443a2063616e6e6f74207472616e7366657220746f20746865207a65726f2061646472657373a264697066735822122007482e76272d336ad35915c5525cb803f69885b8fde2c6312404ff0d4fd9715e64736f6c634300060c0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

12018:31748:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12599:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19061:152;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19061:152:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17320:201;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17320:201:0;;;;;;;;;;:::i;:::-;;20539:90;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13438:43;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13438:43:0;-1:-1:-1;;;;;13438:43:0;;:::i;15734:96::-;;;;;;;;;;;;;:::i;42857:159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42857:159:0;;:::i;40738:142::-;;;;;;;;;;;;;:::i;18129:329::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18129:329:0;;;;;;;;;;;;;;;;;:::i;9897:235::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9897:235:0;-1:-1:-1;;;;;9897:235:0;;:::i;12686:26::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12721:93;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12721:93:0;;;;;;;;;;;;;;19221:314;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19221:314:0;;;;;;;;:::i;16677:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16677:155:0;;;;:::i;13386:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13386:45:0;-1:-1:-1;;;;;13386:45:0;;:::i;13780:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43022:207;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43022:207:0;;:::i;14218:33::-;;;;;;;;;;;;;:::i;14258:26::-;;;;;;;;;;;;;:::i;12126:52::-;;;;;;;;;;;;;:::i;42735:116::-;;;;;;;;;;;;;:::i;14293:33::-;;;;;;;;;;;;;:::i;18463:273::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18463:273:0;-1:-1:-1;;;;;18463:273:0;;:::i;8833:148::-;;;;;;;;;;;;;:::i;41244:1483::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41244:1483:0;;;;;;;;;;;;;;:::i;13975:43::-;;;;;;;;;;;;;:::i;14081:35::-;;;;;;;;;;;;;:::i;9707:76::-;;;;;;;;;;;;;:::i;14022:48::-;;;;;;;;;;;;;:::i;12924:28::-;;;;;;;;;;;;;:::i;8191:79::-;;;;;;;;;;;;;:::i;40585:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40585:141:0;-1:-1:-1;;;;;40585:141:0;;:::i;13488:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13488:50:0;-1:-1:-1;;;;;13488:50:0;;:::i;12649:30::-;;;;;;;;;;;;;:::i;43235:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43235:174:0;;;;:::i;43415:114::-;;;;;;;;;;;;;:::i;19543:525::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19543:525:0;;;;;;;;:::i;16485:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16485:184:0;;;;;;;;;;:::i;17963:158::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17963:158:0;;;;;;;;:::i;40461:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40461:112:0;;:::i;18904:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18904:149:0;;;;;;;;;;:::i;13809:20::-;;;;;;;;;;;;;:::i;16961:152::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16961:152:0;;;;:::i;13623:29::-;;;;;;;;;;;;;:::i;9136:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9136:244:0;-1:-1:-1;;;;;9136:244:0;;:::i;43581:182::-;;;;;;;;;;;;;:::i;40337:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40337:112:0;-1:-1:-1;;;;;40337:112:0;;:::i;17122:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17122:190:0;;;;;;;;;;:::i;12599:43::-;;;;;;;;;;;;;;-1:-1:-1;;12599:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19061:152::-;19127:4;19144:39;19153:12;:10;:12::i;:::-;19167:7;19176:6;19144:8;:39::i;:::-;-1:-1:-1;19201:4:0;19061:152;;;;;:::o;17320:201::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;17423:39:::1;::::0;;-1:-1:-1;;;;;17423:39:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;17473:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:40;;-1:-1:-1;;17473:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17320:201::o;20539:90::-;20611:10;;20539:90;:::o;13438:43::-;;;;;;;;;;;;;;;:::o;15734:96::-;15810:12;;15734:96;:::o;42857:159::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;42935:12:::1;:26:::0;;;42977:31:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;42857:159:::0;:::o;40738:142::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;40788:21:::1;:29:::0;;40828:8:::1;:12:::0;;-1:-1:-1;;40828:12:0::1;40839:1;40828:12;::::0;;-1:-1:-1;;40851:21:0;;::::1;::::0;;40738:142::o;18129:329::-;18218:4;18229:36;18239:6;18247:9;18258:6;18229:9;:36::i;:::-;18301:127;18310:6;18318:12;:10;:12::i;:::-;18332:95;18376:6;18332:95;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18332:25:0;;;;;;:17;:25;;;;;;18358:12;:10;:12::i;:::-;-1:-1:-1;;;;;18332:39:0;;;;;;;;;;;;-1:-1:-1;18332:39:0;;;:95;:43;:95::i;:::-;18301:8;:127::i;:::-;-1:-1:-1;18446:4:0;18129:329;;;;;;:::o;9897:235::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9986:24:0;::::1;9978:64;;;::::0;;-1:-1:-1;;;9978:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10077:8;::::0;10054:44:::1;::::0;-1:-1:-1;;;;;10054:44:0;;::::1;::::0;10077:8:::1;::::0;10054:44:::1;::::0;10077:8:::1;::::0;10054:44:::1;10105:8;:21:::0;;-1:-1:-1;;;;;;10105:21:0::1;-1:-1:-1::0;;;;;10105:21:0;;;::::1;::::0;;;::::1;::::0;;9897:235::o;12686:26::-;;;;;;:::o;12721:93::-;;;;;;-1:-1:-1;;;;;12721:93:0;;:::o;19221:314::-;19384:10;19303:4;19366:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19366:38:0;;;;;;;;;;:54;;19409:10;19366:42;:54::i;:::-;19343:10;19325:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19325:38:0;;;;;;;;;;;;:95;;;19436:69;;;;;;19325:38;;19436:69;;;;;;;;;;;-1:-1:-1;19523:4:0;19221:314;;;;:::o;16677:155::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;16750:2:::1;16744:3;:8;;;16736:65;;;;-1:-1:-1::0;;;16736:65:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16812:6;:12:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;16812:12:0;;::::1;::::0;;;::::1;::::0;;16677:155::o;13386:45::-;;;;;;;;;;;;;;;:::o;13780:22::-;;;;;;:::o;43022:207::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;43116:20:::1;:42:::0;;;43174:47:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;43022:207:::0;:::o;14218:33::-;;;;;;;;;:::o;14258:26::-;;;;;;;;;:::o;12126:52::-;;;:::o;42735:116::-;42820:23;;-1:-1:-1;;;;;42820:23:0;42735:116;:::o;14293:33::-;;;;;;;;;:::o;18463:273::-;-1:-1:-1;;;;;18549:20:0;;18520:7;18549:20;;;:11;:20;;;;;;;;18545:93;;;18599:16;;-1:-1:-1;;;;;18578:16:0;;;;;;:7;:16;;;;;;:60;;13005:5;;18578:38;;:20;:38::i;:::-;:42;;:60::i;:::-;18571:67;;;;18545:93;-1:-1:-1;;;;;18686:16:0;;18649:14;18686:16;;;:7;:16;;;;;;18666:37;;:19;:37::i;:::-;18649:54;;18715:16;18724:6;18715:8;:16::i;:::-;18708:23;;;18463:273;;;;:::o;8833:148::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;8940:1:::1;8924:6:::0;;8903:40:::1;::::0;-1:-1:-1;;;;;8924:6:0;;::::1;::::0;8903:40:::1;::::0;8940:1;;8903:40:::1;8971:1;8954:19:::0;;-1:-1:-1;;;;;;8954:19:0::1;::::0;;8833:148::o;41244:1483::-;41340:7;9839:12;:10;:12::i;:::-;9827:8;;-1:-1:-1;;;;;9827:8:0;;;:24;;;9819:58;;;;;-1:-1:-1;;;9819:58:0;;;;;;;;;;;;-1:-1:-1;;;9819:58:0;;;;;;;;;;;;;;;41359:19:::1;41381:10;:8;:10::i;:::-;41359:32;;41407:8;41402:1321;;41431:24;41458:52;13051:5;41458:42;41479:20;13051:5:::0;41488:10;41479:8:::1;:20::i;:::-;41458:16;::::0;;:20:::1;:42::i;:52::-;41515:16;:35:::0;;;41601:11:::1;::::0;-1:-1:-1;;;;;41601:11:0::1;41593:20;::::0;;;:7:::1;:20;::::0;;;;;41431:79;;-1:-1:-1;41578:111:0::1;::::0;13005:5:::1;::::0;41578:89:::1;::::0;41431:79;;41578:53:::1;::::0;41593:37:::1;::::0;41618:11;41593:24:::1;:37::i;:::-;41578:10;::::0;;:14:::1;:53::i;:::-;:71:::0;::::1;:89::i;:111::-;41561:12;:130:::0;41721:16:::1;::::0;41707:31:::1;::::0;;;;;;41714:5;;41707:31:::1;::::0;;;;;::::1;::::0;;::::1;41758:14;;;;;;;;;-1:-1:-1::0;;;;;41758:14:0::1;-1:-1:-1::0;;;;;41743:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41790:9;41785:149;41809:11;:18:::0;41805:22;::::1;41785:149;;;41840:25;41868:11;41880:1;41868:14;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;41888:40:::1;::::0;;-1:-1:-1;;;;;;41888:40:0;;;;-1:-1:-1;;;;;41868:14:0;;::::1;::::0;-1:-1:-1;41868:14:0;;41888:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;41868:14;;41888:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41829:3:0::1;::::0;;::::1;::::0;-1:-1:-1;41785:149:0::1;::::0;-1:-1:-1;;41785:149:0::1;;;41951:12;;41944:19;;;;;;41402:1321;42009:24;42036:52;13051:5;42036:42;42057:20;13051:5:::0;42066:10;42057:8:::1;:20::i;42036:52::-;42009:79;;42122:19;:17;:19::i;:::-;42103:16;:38;42099:204;;;42167:16;:35:::0;;;42099:204:::1;;;42272:19;:17;:19::i;:::-;42253:16;:38:::0;42099:204:::1;42404:16;::::0;42355:11:::1;::::0;-1:-1:-1;;;;;42355:11:0::1;42347:20;::::0;;;:7:::1;:20;::::0;;;;;42332:111:::1;::::0;13005:5:::1;::::0;42332:89:::1;::::0;42404:16;42332:53:::1;::::0;42347:37:::1;::::0;42372:11;42347:24:::1;:37::i;42332:111::-;42315:12;:130:::0;42475:16:::1;::::0;42461:31:::1;::::0;;;;;;42468:5;;42461:31:::1;::::0;;;;;::::1;::::0;;::::1;42512:14;;;;;;;;;-1:-1:-1::0;;;;;42512:14:0::1;-1:-1:-1::0;;;;;42497:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42544:9;42539:149;42563:11;:18:::0;42559:22;::::1;42539:149;;;42594:25;42622:11;42634:1;42622:14;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;42642:40:::1;::::0;;-1:-1:-1;;;;;;42642:40:0;;;;-1:-1:-1;;;;;42622:14:0;;::::1;::::0;-1:-1:-1;42622:14:0;;42642:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;42622:14;;42642:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42583:3:0::1;::::0;;::::1;::::0;-1:-1:-1;42539:149:0::1;::::0;-1:-1:-1;;42539:149:0::1;13975:43:::0;;;;:::o;14081:35::-;;;;:::o;9707:76::-;9769:8;;-1:-1:-1;;;;;9769:8:0;9707:76;:::o;14022:48::-;;;;:::o;12924:28::-;;;-1:-1:-1;;;;;12924:28:0;;:::o;8191:79::-;8229:7;8256:6;-1:-1:-1;;;;;8256:6:0;8191:79;:::o;40585:141::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;40673:16:::1;:45:::0;;-1:-1:-1;;;;;40673:45:0;;::::1;;;-1:-1:-1::0;;;;;;40673:45:0;;::::1;::::0;;;::::1;::::0;;40585:141::o;13488:50::-;;;;;;;;;;;;;;;:::o;12649:30::-;;;;;;;;;;;;;;;-1:-1:-1;;12649:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43235:174;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;43315:21:::1;:32:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;43315:32:0;;::::1;::::0;;;::::1;::::0;;;43363:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;43235:174:::0;:::o;43415:114::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;43473:14:::1;:21:::0;;-1:-1:-1;;43473:21:0::1;::::0;::::1;::::0;;43505:16:::1;::::0;::::1;::::0;43473:21;;43505:16:::1;43415:114::o:0;19543:525::-;19689:10;19630:4;19671:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19671:38:0;;;;;;;;;;19724:27;;;19720:232;;19795:10;19818:1;19777:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19777:38:0;;;;;;;;;:42;19720:232;;;19911:29;:8;19924:15;19911:12;:29::i;:::-;19888:10;19870:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19870:38:0;;;;;;;;;:70;19720:232;19978:10;19999:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19969:69:0;;19999:38;;;;;;;;;;;19969:69;;;;;;;;;19978:10;19969:69;;;;;;;;;;;-1:-1:-1;20056:4:0;;19543:525;-1:-1:-1;;;19543:525:0:o;16485:184::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;16585:32:::1;::::0;;-1:-1:-1;;;;;16585:32:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;16628:18:0;;;::::1;;::::0;;;:11:::1;:18;::::0;;;;:33;;-1:-1:-1;;16628:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16485:184::o;17963:158::-;18032:4;18049:42;18059:12;:10;:12::i;:::-;18073:9;18084:6;18049:9;:42::i;40461:112::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;40539:16:::1;:26:::0;40461:112::o;18904:149::-;-1:-1:-1;;;;;19011:25:0;;;18979:7;19011:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;18904:149::o;13809:20::-;;;;;;;;;:::o;16961:152::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;17036:2:::1;17030:3;:8;;;17022:58;;;;-1:-1:-1::0;;;17022:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17091:8;:14:::0;;-1:-1:-1;;17091:14:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;16961:152::o;13623:29::-;;;-1:-1:-1;;;;;13623:29:0;;:::o;9136:244::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9225:22:0;::::1;9217:73;;;;-1:-1:-1::0;;;9217:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9327:6;::::0;;9306:38:::1;::::0;-1:-1:-1;;;;;9306:38:0;;::::1;::::0;9327:6;::::1;::::0;9306:38:::1;::::0;::::1;9355:6;:17:::0;;-1:-1:-1;;;;;;9355:17:0::1;-1:-1:-1::0;;;;;9355:17:0;;;::::1;::::0;;;::::1;::::0;;9136:244::o;43581:182::-;43665:90;;43629:12;;43673:42;;43729:21;;43629:12;43665:90;43629:12;43665:90;43729:21;43673:42;43665:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;43581:182:0:o;40337:112::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;40417:13:::1;:24:::0;;-1:-1:-1;;;;;;40417:24:0::1;-1:-1:-1::0;;;;;40417:24:0;;;::::1;::::0;;;::::1;::::0;;40337:112::o;17122:190::-;8413:12;:10;:12::i;:::-;8403:6;;-1:-1:-1;;;;;8403:6:0;;;:22;;;8395:67;;;;;-1:-1:-1;;;8395:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8395:67:0;;;;;;;;;;;;;;;17224:34:::1;::::0;;-1:-1:-1;;;;;17224:34:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;17269:20:0;;;::::1;;::::0;;;:13:::1;:20;::::0;;;;:35;;-1:-1:-1;;17269:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17122:190::o;45967:471::-;46025:7;46270:6;46266:47;;-1:-1:-1;46300:1:0;46293:8;;46266:47;46337:5;;;46341:1;46337;:5;:1;46361:5;;;;;:10;46353:56;;;;-1:-1:-1;;;46353:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46914:132;46972:7;46999:39;47003:1;47006;46999:39;;;;;;;;;;;;;;;;;:3;:39::i;49258:232::-;49321:7;49349:6;49341:30;;;;;-1:-1:-1;;;49341:30:0;;;;;;;;;;;;-1:-1:-1;;;49341:30:0;;;;;;;;;;;;;;;49382:9;49398:1;49394;:5;;;;;;49382:17;;49418:1;49414;:5;;;;;;:10;49410:52;;49449:1;49445:5;;49258:232;-1:-1:-1;;;49258:232:0:o;45077:136::-;45135:7;45162:43;45166:1;45169;45162:43;;;;;;;;;;;;;;;;;:3;:43::i;6829:106::-;6917:10;6829:106;:::o;20074:339::-;-1:-1:-1;;;;;20167:19:0;;20159:66;;;;-1:-1:-1;;;20159:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20244:21:0;;20236:66;;;;;-1:-1:-1;;;20236:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20315:24:0;;;;;;;:17;:24;;;;;;;;:33;;;;;;;;;;;;;:42;;;20373:32;;;;;;;;;;;;;;;;;20074:339;;;:::o;22861:2096::-;-1:-1:-1;;;;;22965:20:0;;22957:75;;;;-1:-1:-1;;;22957:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23051:23:0;;23043:76;;;;-1:-1:-1;;;23043:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23147:1;23138:6;:10;23130:69;;;;-1:-1:-1;;;23130:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23221:7;:5;:7::i;:::-;-1:-1:-1;;;;;23211:17:0;:6;-1:-1:-1;;;;;23211:17:0;;;:41;;;;;23245:7;:5;:7::i;:::-;-1:-1:-1;;;;;23232:20:0;:9;-1:-1:-1;;;;;23232:20:0;;;23211:41;:62;;;;-1:-1:-1;23257:16:0;;;;23256:17;23211:62;23208:354;;;23308:12;;23298:6;:22;;23290:80;;;;-1:-1:-1;;;23290:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23405:18;;-1:-1:-1;;;;;23405:18:0;23389:12;:10;:12::i;:::-;-1:-1:-1;;;;;23389:34:0;;:79;;;;23451:16;-1:-1:-1;;;;;23427:41:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;23427:41:0;;23389:79;23388:100;;;;-1:-1:-1;23474:14:0;;;;;;;23473:15;23388:100;23385:165;;;23507:43;;;-1:-1:-1;;;23507:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23582:28;23613:24;23631:4;23613:9;:24::i;:::-;23703:20;;23749:16;;23582:55;;-1:-1:-1;23679:44:0;;;;23749:16;;23748:17;:42;;;;-1:-1:-1;23769:21:0;;;;;;;23748:42;:77;;;;-1:-1:-1;23807:18:0;;-1:-1:-1;;;;;23794:31:0;;;23807:18;;23794:31;23748:77;23744:589;;;23846:23;23842:162;;;23913:20;;23890:43;;23952:32;23963:20;23952:10;:32::i;:::-;24073:14;;24033:21;;24073:14;;;;;:47;;;;;24109:10;24091:7;:29;24073:47;24069:253;;;24173:17;;24163:7;:27;24159:81;;;-1:-1:-1;24223:17:0;;24159:81;24277:29;24291:14;:7;24303:1;24291:11;:14::i;:::-;24277:13;:29::i;:::-;23744:589;;-1:-1:-1;;;;;24357:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24381:22:0;;;;;;:11;:22;;;;;;;;24380:23;24357:46;24353:597;;;24420:48;24442:6;24450:9;24461:6;24420:21;:48::i;:::-;24353:597;;;-1:-1:-1;;;;;24491:19:0;;;;;;:11;:19;;;;;;;;24490:20;:46;;;;-1:-1:-1;;;;;;24514:22:0;;;;;;:11;:22;;;;;;;;24490:46;24486:464;;;24553:46;24573:6;24581:9;24592:6;24553:19;:46::i;24486:464::-;-1:-1:-1;;;;;24622:19:0;;;;;;:11;:19;;;;;;;;24621:20;:47;;;;-1:-1:-1;;;;;;24646:22:0;;;;;;:11;:22;;;;;;;;24645:23;24621:47;24617:333;;;24685:44;24703:6;24711:9;24722:6;24685:17;:44::i;24617:333::-;-1:-1:-1;;;;;24751:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;24774:22:0;;;;;;:11;:22;;;;;;;;24751:45;24747:203;;;24813:48;24835:6;24843:9;24854:6;24813:21;:48::i;24747:203::-;24894:44;24912:6;24920:9;24931:6;24894:17;:44::i;:::-;22861:2096;;;;;:::o;45516:192::-;45602:7;45638:12;45630:6;;;;45622:29;;;;-1:-1:-1;;;45622:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45674:5:0;;;45516:192::o;44613:181::-;44671:7;44703:5;;;44727:6;;;;44719:46;;;;;-1:-1:-1;;;44719:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21770:257;21837:7;21879;;21868;:18;;21860:73;;;;-1:-1:-1;;;21860:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21944:19;21967:10;:8;:10::i;:::-;21944:33;-1:-1:-1;21995:24:0;:7;21944:33;21995:11;:24::i;38355:178::-;38411:7;38430:20;38453:50;13005:5;38453:28;38464:16;;38453:6;:10;;:28;;;;:::i;39579:166::-;39620:7;39644:15;39661;39680:19;:17;:19::i;:::-;39643:56;;-1:-1:-1;39643:56:0;-1:-1:-1;39717:20:0;39643:56;;39717:11;:20::i;:::-;39710:27;;;;39579:166;:::o;17648:308::-;17700:7;17938:10;;-1:-1:-1;;17924:24:0;;;;;;17917:31;;17648:308;:::o;47542:278::-;47628:7;47663:12;47656:5;47648:28;;;;-1:-1:-1;;;47648:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47687:9;47703:1;47699;:5;;;;;;;47542:278;-1:-1:-1;;;;;47542:278:0:o;24969:420::-;14994:16;:23;;-1:-1:-1;;14994:23:0;15013:4;14994:23;;;25084:21:::1;25116:38;25133:20:::0;25116:16:::1;:38::i;:::-;25165:26;25194:41;:21;25220:14:::0;25194:25:::1;:41::i;:::-;25298:16;::::0;25353::::1;::::0;25339:8:::1;::::0;25165:70;;-1:-1:-1;25277:94:0::1;::::0;25298:16:::1;::::0;;::::1;-1:-1:-1::0;;;;;25298:16:0::1;::::0;25316:54:::1;::::0;25353:16;25316:32:::1;::::0;25165:70;;25339:8:::1;;25316:22;:32::i;:54::-;25277:20;:94::i;:::-;-1:-1:-1::0;;15040:16:0;:24;;-1:-1:-1;;15040:24:0;;;-1:-1:-1;24969:420:0:o;25539:135::-;14994:16;:23;;-1:-1:-1;;14994:23:0;15013:4;14994:23;;;25610:10;;25606:61:::1;;25634:24;25651:6;25634:16;:24::i;:::-;-1:-1:-1::0;15040:16:0;:24;;-1:-1:-1;;15040:24:0;;;25539:135::o;32699:1617::-;32798:19;32821:10;:8;:10::i;:::-;32798:33;;32836:15;32854:51;32888:16;;32854:29;13005:5;32854:7;:11;;:29;;;;:::i;:51::-;32836:69;-1:-1:-1;32910:15:0;32928:24;32836:69;32940:11;32928;:24::i;:::-;-1:-1:-1;;;;;32981:15:0;;;;;;:7;:15;;;;;;32910:42;;-1:-1:-1;32981:28:0;;33001:7;32981:19;:28::i;:::-;-1:-1:-1;;;;;32963:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33032:7;:15;;;;:28;;33052:7;33032:19;:28::i;:::-;-1:-1:-1;;;;;33014:15:0;;;;;;:7;:15;;;;;:46;33072:16;;;;33069:1240;;;-1:-1:-1;;;;;33126:18:0;;;;;;:7;:18;;;;;;:31;;33149:7;33126:22;:31::i;:::-;-1:-1:-1;;;;;33105:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;33177:36;;;;;;;33105:18;;33177:36;;;;-1:-1:-1;;;;;;;;;;;33177:36:0;;;;;;;;33069:1240;;;33235:32;33257:9;33235:21;:32::i;:::-;33232:1077;;;33284:11;33298:20;33310:7;33298:11;:20::i;:::-;33284:34;;33324:23;33349:18;33371:38;33383:7;33392:3;33397:11;33371;:38::i;:::-;33323:86;;;;33415:23;33440:18;33462:25;33474:7;33483:3;33462:11;:25::i;:::-;33414:73;;-1:-1:-1;33414:73:0;-1:-1:-1;33528:102:0;33554:6;33562:9;33573:15;33590:10;33414:73;;33528:25;:102::i;:::-;33232:1077;;;;;;;;33685:33;33700:6;33708:9;33685:14;:33::i;:::-;33681:617;;33742:11;33756:18;33766:7;33756:9;:18::i;33681:617::-;-1:-1:-1;;;;;34190:18:0;;;;;;:7;:18;;;;;;:31;;34213:7;34190:22;:31::i;:::-;-1:-1:-1;;;;;34169:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;34245:36;;;;;;;34169:18;;34245:36;;;;-1:-1:-1;;;;;;;;;;;34245:36:0;;;;;;;;33681:617;32699:1617;;;;;;:::o;30188:1468::-;30285:19;30308:10;:8;:10::i;:::-;30285:33;;30323:15;30341:51;30375:16;;30341:29;13005:5;30341:7;:11;;:29;;;;:::i;:51::-;30323:69;-1:-1:-1;30397:15:0;30415:24;30323:69;30427:11;30415;:24::i;:::-;-1:-1:-1;;;;;30468:15:0;;;;;;:7;:15;;;;;;30397:42;;-1:-1:-1;30468:28:0;;30397:42;30468:19;:28::i;:::-;-1:-1:-1;;;;;30450:15:0;;;;;;:7;:15;;;;;:46;30506:16;;;;30503:1146;;;-1:-1:-1;;;;;30560:18:0;;;;;;:7;:18;;;;;;:31;;30583:7;30560:22;:31::i;30503:1146::-;30669:32;30691:9;30669:21;:32::i;:::-;30666:983;;;30718:11;30732:20;30744:7;30732:11;:20::i;:::-;30718:34;;30760:18;30782:38;30794:7;30803:3;30808:11;30782;:38::i;:::-;30757:63;;;30826:23;30851:18;30873:25;30885:7;30894:3;30873:11;:25::i;:::-;30825:73;;-1:-1:-1;30825:73:0;-1:-1:-1;30939:83:0;30963:6;30971:9;30982:10;30825:73;;30939:23;:83::i;:::-;30666:983;;;;;;;31077:33;31092:6;31100:9;31077:14;:33::i;:::-;31073:565;;31134:11;31148:18;31158:7;31148:9;:18::i;31073:565::-;-1:-1:-1;;;;;31530:18:0;;;;;;:7;:18;;;;;;:31;;31553:7;31530:22;:31::i;:::-;-1:-1:-1;;;;;31509:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;31585:36;;;;;;;31509:18;;31585:36;;;;-1:-1:-1;;;;;;;;;;;31585:36:0;;;;;;;;30188:1468;;;;;;:::o;27525:1548::-;27623:19;27646:10;:8;:10::i;:::-;27623:33;;27661:15;27679:51;27713:16;;27679:29;13005:5;27679:7;:11;;:29;;;;:::i;:51::-;27661:69;-1:-1:-1;27735:15:0;27753:24;27661:69;27765:11;27753;:24::i;:::-;-1:-1:-1;;;;;27800:15:0;;;;;;:7;:15;;;;;;27735:42;;-1:-1:-1;27800:28:0;;27735:42;27800:19;:28::i;35388:1740::-;35490:19;35513:10;:8;:10::i;:::-;35490:33;;35528:15;35546:51;35580:16;;35546:29;13005:5;35546:7;:11;;:29;;;;:::i;:51::-;35528:69;-1:-1:-1;35602:15:0;35620:24;35528:69;35632:11;35620;:24::i;:::-;-1:-1:-1;;;;;35673:15:0;;;;;;:7;:15;;;;;;35602:42;;-1:-1:-1;35673:28:0;;35693:7;35673:19;:28::i;:::-;-1:-1:-1;;;;;35655:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35724:7;:15;;;;:28;;35744:7;35724:19;:28::i;:::-;-1:-1:-1;;;;;35706:15:0;;;;;;:7;:15;;;;;:46;35764:16;;;;35761:1360;;;-1:-1:-1;;;;;35818:18:0;;;;;;:7;:18;;;;;;:31;;35841:7;35818:22;:31::i;35761:1360::-;35933:32;35955:9;35933:21;:32::i;:::-;35930:1191;;;35982:11;35996:20;36008:7;35996:11;:20::i;:::-;35982:34;;36022:23;36047:18;36069:38;36081:7;36090:3;36095:11;36069;:38::i;:::-;36021:86;;;;36113:23;36138:18;36160:25;36172:7;36181:3;36160:11;:25::i;:::-;36112:73;;-1:-1:-1;36112:73:0;-1:-1:-1;36256:102:0;36282:6;36290:9;36301:15;36318:10;36112:73;;36256:25;:102::i;35930:1191::-;36427:33;36442:6;36450:9;36427:14;:33::i;:::-;36423:687;;36484:11;36498:18;36508:7;36498:9;:18::i;36423:687::-;-1:-1:-1;;;;;36943:18:0;;;;;;:7;:18;;;;;;:31;;36966:7;36943:22;:31::i;:::-;-1:-1:-1;;;;;36922:18:0;;;;;;:7;:18;;;;;;;;:52;;;;37002:7;:18;;;;:31;;37025:7;37002:22;:31::i;39753:576::-;39853:7;;39889:10;;39803:7;;;;;39916:292;39940:9;:16;39936:20;;39916:292;;;40006:7;39982;:21;39990:9;40000:1;39990:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39990:12:0;39982:21;;;;;;;;;;;;;:31;;:66;;;40041:7;40017;:21;40025:9;40035:1;40025:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40025:12:0;40017:21;;;;;;;;;;;;;:31;39982:66;39978:100;;;40058:7;;40067:10;;40050:28;;;;;;;;;39978:100;40103:34;40115:7;:21;40123:9;40133:1;40123:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40123:12:0;40115:21;;;;;;;;;;;;;40103:7;;:11;:34::i;:::-;40093:44;;40162:34;40174:7;:21;40182:9;40192:1;40182:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40182:12:0;40174:21;;;;;;;;;;;;;40162:7;;:11;:34::i;:::-;40152:44;-1:-1:-1;39958:3:0;;39916:292;;;-1:-1:-1;40244:10:0;;40232:7;;:23;;:11;:23::i;:::-;40222:7;:33;40218:67;;;40265:7;;40274:10;;40257:28;;;;;;;;40218:67;40304:7;;-1:-1:-1;40313:7:0;-1:-1:-1;39753:576:0;;;:::o;25686:669::-;25836:16;;;25850:1;25836:16;;;25812:21;25836:16;;;;;25812:21;25836:16;;;;;;;;;;-1:-1:-1;25836:16:0;25812:40;;25881:4;25863;25868:1;25863:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;25863:23:0;;;-1:-1:-1;;;;;25863:23:0;;;;;25907:16;-1:-1:-1;;;;;25907:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25907:23:0;25897:7;;:4;;25902:1;;25897:7;;;;;;;;;;;:33;-1:-1:-1;;;;;25897:33:0;;;-1:-1:-1;;;;;25897:33:0;;;;;25943:63;25960:4;25975:16;25994:11;25943:8;:63::i;:::-;26045:16;-1:-1:-1;;;;;26045:67:0;;26127:11;26153:1;26197:4;26224;26260:15;26045:241;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26045:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26312:35;26329:11;26342:4;26312:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25686:669;;:::o;25401:126::-;25493:26;;-1:-1:-1;;;;;25493:18:0;;;:26;;;;;25512:6;;25493:26;;;;25512:6;25493:18;:26;;;;;;;;;;;;;;;;;;;;;25401:126;;:::o;26367:580::-;26512:16;;;26526:1;26512:16;;;26488:21;26512:16;;;;;26488:21;26512:16;;;;;;;;;;-1:-1:-1;26512:16:0;26488:40;;26549:16;-1:-1:-1;;;;;26549:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26549:23:0;26539:7;;:4;;26544:1;;26539:7;;;;;;;;;:33;-1:-1:-1;;;;;26539:33:0;;;-1:-1:-1;;;;;26539:33:0;;;;;26601:4;26583;26588:1;26583:7;;;;;;;;-1:-1:-1;;;;;26583:23:0;;;:7;;;;;;;;;:23;26806:11;;26643:16;:67;;;;;26718:6;;26740:1;;26787:4;;26806:11;26848:24;:15;26868:3;26848:19;:24::i;:::-;26643:240;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26643:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26909:30;26926:6;26934:4;26909:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16346:131;-1:-1:-1;;;;;16444:25:0;16415:4;16444:25;;;:18;:25;;;;;;;;;16346:131::o;15838:169::-;15950:8;;15896:7;;;;15940:33;;15969:3;;15940:19;;:5;;15950:8;;15940:9;:19::i;:::-;:28;;:33::i;39085:281::-;39180:7;;;39227:20;:3;39235:11;39227:7;:20::i;:::-;39206:41;;39252:23;39278:33;39291:7;39300:10;39278:12;:33::i;:::-;39252:59;39347:10;;-1:-1:-1;39085:281:0;;-1:-1:-1;;;;;39085:281:0:o;38835:241::-;38908:7;;38958:3;38908:7;38998:23;:7;38958:3;38998:11;:23::i;:::-;38972:49;39057:10;;-1:-1:-1;38835:241:0;;-1:-1:-1;;;;38835:241:0:o;34328:507::-;-1:-1:-1;;;;;34549:18:0;;;;;;:7;:18;;;;;;:39;;34572:15;34549:22;:39::i;:::-;-1:-1:-1;;;;;34528:18:0;;;;;;;:7;:18;;;;;;:60;;;;34636:13;;;;;34628:22;;;;:38;;34655:10;34628:26;:38::i;:::-;34611:13;;-1:-1:-1;;;;;34611:13:0;;;34603:22;;;;:7;:22;;;;;:63;;;;34686:54;;;;;;-1:-1:-1;;;;;;;;;;;34714:25:0;34723:15;34714:8;:25::i;:::-;34686:54;;;;;;;;;;;;;;;34791:13;;-1:-1:-1;;;;;34791:13:0;;;;34774:53;;-1:-1:-1;;;;;;;;;;;34806:20:0;34815:10;34806:8;:20::i;:::-;34774:53;;;;;;;;;;;;;;;34328:507;;;;;;:::o;16188:150::-;-1:-1:-1;;;;;16292:20:0;;16263:4;16292:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;16314:16:0;;;;;:11;:16;;;;;;;;;16188:150;-1:-1:-1;16188:150:0:o;16015:165::-;16125:6;;16071:7;;;;16115:31;;16142:3;;16115:17;;:5;;16125:6;;;;;16115:9;:17::i;31668:491::-;-1:-1:-1;;;;;31863:18:0;;;;;;:7;:18;;;;;;:39;;31886:15;31863:22;:39::i;:::-;-1:-1:-1;;;;;31842:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;31950:13;;;;;31942:22;;:7;:22;;;;;:38;;31969:10;31942:26;:38::i;:::-;31925:13;;-1:-1:-1;;;;;31925:13:0;;;31917:22;;;;:7;:22;;;;;:63;;;;32000:54;;;;;;-1:-1:-1;;;;;;;;;;;32028:25:0;32037:15;32028:8;:25::i;:::-;32000:54;;;;;;;;;;;;;;;32105:13;;-1:-1:-1;;;;;32105:13:0;;;;32088:53;;-1:-1:-1;;;;;;;;;;;32120:20:0;32129:10;32120:8;:20::i;:::-;32088:53;;;;;;;;;;;;;;;31668:491;;;;;:::o;37140:591::-;-1:-1:-1;;;;;37364:18:0;;;;;;:7;:18;;;;;;:39;;37387:15;37364:22;:39::i;:::-;-1:-1:-1;;;;;37343:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37430:7;:18;;;;:39;;37453:15;37430:22;:39::i;:::-;-1:-1:-1;;;;;37409:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;37517:13;;;;;37509:22;;:7;:22;;;;;:38;;37536:10;37509:26;:38::i;:::-;37492:13;;-1:-1:-1;;;;;37492:13:0;;;37484:22;;;;:7;:22;;;;;:63;;;;37572:54;;;;;;-1:-1:-1;;;;;;;;;;;37600:25:0;37609:15;37600:8;:25::i;39372:196::-;39453:7;;39502:23;:7;39514:10;39502:11;:23::i;:::-;39476:49;39372:196;-1:-1:-1;;;;39372:196:0:o

Swarm Source

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