ETH Price: $3,065.24 (+0.91%)
Gas: 4 Gwei

Token

KamiKazeRocket (KamiKaze)
 

Overview

Max Total Supply

1,000,000,000 KamiKaze

Holders

120

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
372,350.646412795 KamiKaze

Value
$0.00
0xb057f79b53ca5ee518dfcacb8971a054b5c29b29
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:
KAMIKAZEROCKET

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.1;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

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

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract KAMIKAZEROCKET is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    address deadAddress = 0x000000000000000000000000000000000000dEaD;

    string private _name = "KamiKazeRocket";
    string private _symbol = "KamiKaze";
    uint8 private _decimals = 9;    
    uint256 private initialsupply = 1_000_000_000;
    uint256 private _tTotal = initialsupply * 10 ** _decimals;
    address payable private _marketingWallet;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping(address => uint256) private buycooldown;
    mapping(address => uint256) private sellcooldown;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isBlacklisted;
    address[] private _excluded;

    bool private cooldownEnabled = true;
    uint256 public cooldown = 30 seconds;
    uint256 public cooldownLimit = 60 seconds;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _liquidityFee = 2;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public _marketingFee = 9;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 public _buyTaxFee = 0;
    uint256 private _previousBuyTaxFee = _buyTaxFee;    
    uint256 public _buyLiquidityFee = 2;
    uint256 private _previousBuyLiquidityFee = _buyLiquidityFee;
    uint256 public _buyMarketingFee = 9;
    uint256 private _previousBuyMarketingFee = _buyMarketingFee;

    uint256 private maxBuyPercent = 1;
    uint256 private maxBuyDivisor = 100;
    uint256 public _maxBuyAmount = (_tTotal * maxBuyPercent) / maxBuyDivisor;
   
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    
    uint256 private numTokensSellToAddToLiquidity = _tTotal.mul(1).div(100);
    
    event ToMarketing(uint256 ETHSent);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor (address marketingWallet) {
        _rOwned[_msgSender()] = _rTotal;
         _marketingWallet = payable(marketingWallet);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWallet] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {return _name;}
    function symbol() public view returns (string memory) {return _symbol;}
    function decimals() public view returns (uint8) {return _decimals;}
    function totalSupply() public view override returns (uint256) {return _tTotal;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function setNumTokensSellToAddToLiquidity(uint256 percent, uint256 divisor) external onlyOwner() {
        uint256 swapAmount = _tTotal.mul(percent).div(divisor);
        numTokensSellToAddToLiquidity = swapAmount;
    }
        
    function setSellFee(uint256 liquidityFee, uint256 marketingFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
        _marketingFee = marketingFee;
    }    
    
    function setBuyFee(uint256 marketingFee, uint256 liquidityFee) external onlyOwner() {
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
    }    
    
    function setCooldown(uint256 amount) external onlyOwner() {
        require(amount <= cooldownLimit);
        cooldown = amount;
    }
    
    function setMaxBuyPercent(uint256 percent, uint divisor) external onlyOwner {
        require(percent >= 1 && divisor <= 1000); // cannot set lower than .1%
        uint256 new_tx = _tTotal.mul(percent).div(divisor);
        _maxBuyAmount = new_tx;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function setBlacklistStatus(address account, bool Blacklisted) external onlyOwner {
    		if (Blacklisted = true) {
                _isBlacklisted[account] = true; 
    		} else if(Blacklisted = false) {
                _isBlacklisted[account] = false;
                }
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

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

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

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function isBlacklisted(address account) public view returns(bool) {
        return _isBlacklisted[account];
    }

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

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

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

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(_taxFee).div(100);
        uint256 tMarketing = tAmount.mul(_marketingFee).div(100);
        uint256 tLiquidity = tAmount.mul(_liquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing).sub(tLiquidity);
        return (tTransferAmount, tFee, tMarketing, tLiquidity);
    }

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

    function _getValuesBuy(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValuesBuy(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValuesBuy(tAmount, tFee, tLiquidity, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getTValuesBuy(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(_buyTaxFee).div(100);
        uint256 tLiquidity = tAmount.mul(_buyLiquidityFee).div(100);
        uint256 tMarketing = tAmount.mul(_buyMarketingFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing);
        return (tTransferAmount, tFee, tMarketing, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }    
    
    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _buyMarketingFee == 0 && _buyTaxFee == 0 && _buyLiquidityFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBuyTaxFee = _buyTaxFee;
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _buyTaxFee = 0;
        _buyMarketingFee = 0;
        _buyLiquidityFee = 0;
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
        _buyLiquidityFee = _previousBuyLiquidityFee;
        _buyMarketingFee = _previousBuyMarketingFee;
        _buyTaxFee = _previousBuyTaxFee;
    }

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

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

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 marketingTokenBalance = contractTokenBalance.mul(85).div(100);
        uint256 liquidityTokenBalance = contractTokenBalance.sub(marketingTokenBalance);
        uint256 tokenBalanceToLiquifyAsETH = liquidityTokenBalance.div(2);
        uint256 tokenBalanceToLiquify = liquidityTokenBalance.sub(tokenBalanceToLiquifyAsETH);
        uint256 initialBalance = address(this).balance;
        uint256 tokensToSwapToETH = tokenBalanceToLiquifyAsETH.add(marketingTokenBalance);
        swapTokensForEth(tokensToSwapToETH);
        uint256 ETHSwapped = address(this).balance.sub(initialBalance);
        uint256 ETHToLiquify = ETHSwapped.mul(10).div(100);
        addLiquidity(tokenBalanceToLiquify, ETHToLiquify);
        emit SwapAndLiquify(tokenBalanceToLiquifyAsETH, ETHToLiquify, tokenBalanceToLiquify);
        uint256 marketingETH = ETHSwapped.sub(ETHToLiquify);
        _marketingWallet.transfer(marketingETH);
        emit ToMarketing(marketingETH);
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        require(amountPercentage <= 100);
        uint256 amountETH = address(this).balance;
        payable(_marketingWallet).transfer(amountETH.mul(amountPercentage).div(100));
    }

    function clearStuckToken(address to) external onlyOwner {
        uint256 _balance = balanceOf(address(this));
        _transfer(address(this), to, _balance);
    }

    function clearStuckTokens(address _token, address _to) external onlyOwner returns (bool _sent){
        require(_token != address(0));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    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),
            block.timestamp
        );
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(_isBlacklisted[from] == false, "Hehe");
        require(_isBlacklisted[to] == false, "Hehe");
        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] && cooldownEnabled) {
                require(amount <= _maxBuyAmount);
                require(buycooldown[to] < block.timestamp);
                buycooldown[to] = block.timestamp.add(cooldown);        
            } else if(from != uniswapV2Pair && cooldownEnabled && !_isExcludedFromFee[to]) {
            require(sellcooldown[from] <= block.timestamp);
            sellcooldown[from] = block.timestamp.add(cooldown);
        }
            
        uint256 contractTokenBalance = balanceOf(address(this));

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

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled            
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }

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

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

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

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

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

        if (sender == uniswapV2Pair && recipient != address(uniswapV2Router)) {
            _transferStandardBuy(sender, recipient, amount);
        } else 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);
        }

        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

    function cooldownStatus() public view returns (bool) {
        return cooldownEnabled;
    }
    
    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ETHSent","type":"uint256"}],"name":"ToMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"clearStuckTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownStatus","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"Blacklisted","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxBuyPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600380546001600160a01b03191661dead179055610100604052600e60c08190526d12d85b5a52d85e99549bd8dad95d60921b60e0908152620000469160049190620005da565b50604080518082019091526008808252674b616d694b617a6560c01b60209092019182526200007891600591620005da565b506006805460ff19166009908117909155633b9aca006007556200009e90600a62000763565b600754620000ad919062000822565b60088190556013805460ff19166001179055601e601455603c601555620000d7906000196200089b565b620000e59060001962000844565b60165560006018556018546019556002601a55601a54601b556009601c55601c54601d556000601e55601e54601f55600260205560205460215560096022556022546023556001602455606460255560255460245460085462000149919062000822565b62000155919062000703565b6026556027805461010061ff0019909116179055600854620001a1906064906200018d906001620004c0602090811b620018ff17901c565b6200055460201b6200197e1790919060201c565b602855348015620001b157600080fd5b5060405162003da138038062003da1833981016040819052620001d49162000680565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601654336000908152600a602090815260409182902092909255600980546001600160a01b0319166001600160a01b038516179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200029257600080fd5b505afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd919062000680565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031657600080fd5b505afa1580156200032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000351919062000680565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200039a57600080fd5b505af1158015620003af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d5919062000680565b6001600160601b0319606091821b811660a0529082901b166080526001600f6000620004096000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600f909352818320805485166001908117909155600954909116835291208054909216179055620004683390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620004b091815260200190565b60405180910390a35050620008de565b600082620004d1575060006200054e565b6000620004df838562000822565b905082620004ee858362000703565b146200054b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200054b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200059e60201b60201c565b60008183620005c25760405162461bcd60e51b8152600401620005429190620006ab565b506000620005d1848662000703565b95945050505050565b828054620005e8906200085e565b90600052602060002090601f0160209004810192826200060c576000855562000657565b82601f106200062757805160ff191683800117855562000657565b8280016001018555821562000657579182015b82811115620006575782518255916020019190600101906200063a565b506200066592915062000669565b5090565b5b808211156200066557600081556001016200066a565b6000602082840312156200069357600080fd5b81516001600160a01b03811681146200054b57600080fd5b600060208083528351808285015260005b81811015620006da57858101830151858201604001528201620006bc565b81811115620006ed576000604083870101525b50601f01601f1916929092016040019392505050565b600082620007155762000715620008c8565b500490565b600181815b808511156200075b5781600019048211156200073f576200073f620008b2565b808516156200074d57918102915b93841c93908002906200071f565b509250929050565b60006200054b60ff8416836000826200077f575060016200054e565b816200078e575060006200054e565b8160018114620007a75760028114620007b257620007d2565b60019150506200054e565b60ff841115620007c657620007c6620008b2565b50506001821b6200054e565b5060208310610133831016604e8410600b8410161715620007f7575081810a6200054e565b6200080383836200071a565b80600019048211156200081a576200081a620008b2565b029392505050565b60008160001904831182151516156200083f576200083f620008b2565b500290565b600082821015620008595762000859620008b2565b500390565b600181811c908216806200087357607f821691505b602082108114156200089557634e487b7160e01b600052602260045260246000fd5b50919050565b600082620008ad57620008ad620008c8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c60a05160601c61344a620009576000396000818161057d01528181611cb201528181611dbc01528181611eb001526122620152600081816103b801528181611cee0152818161229e0152818161272e015281816127f601528181612832015281816128a401526128cb015261344a6000f3fe6080604052600436106102e85760003560e01c80636ac9a87011610190578063a9059cbb116100dc578063dd46706411610095578063efcc52de1161006f578063efcc52de146108f9578063f2fde38b1461090f578063fb0ecfa41461092f578063fe575a871461094f57600080fd5b8063dd46706414610873578063dd62ed3e14610893578063ea2f0b37146108d957600080fd5b8063a9059cbb146107d2578063b6c52324146107f2578063c40fedc614610807578063c49b9a8014610827578063c5d2418914610847578063dc44b6a01461085d57600080fd5b806388f820201161014957806395d89b411161012357806395d89b41146107685780639be953b31461077d578063a457c2d71461079d578063a69df4b5146107bd57600080fd5b806388f82020146106f15780638da5cb5b1461072a5780638fcc250d1461074857600080fd5b80636ac9a870146106585780636bc87c3a1461067857806370a082311461068e578063715018a6146106ae578063787a08a6146106c3578063809157c5146106d957600080fd5b80633685d4191161024f57806347f2914c116102085780634fc3f41a116101e25780634fc3f41a146105bf57806352390c02146105df5780635342acb4146105ff5780635932ead11461063857600080fd5b806347f2914c1461055557806349bd5a5e1461056b5780634f6625661461059f57600080fd5b80633685d4191461049f57806339509351146104bf5780633b124fe7146104df5780633bd5d173146104f5578063437823ec146105155780634549b0391461053557600080fd5b806318160ddd116102a157806318160ddd146103f25780631da1db5e1461040757806322976e0d1461042757806323b872dd1461043d5780632d8381191461045d578063313ce5671461047d57600080fd5b806303d29d28146102f45780630492f0551461031657806306fdde031461033f578063095ea7b31461036157806313114a9d146103915780631694505e146103a657600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004613043565b610988565b005b34801561032257600080fd5b5061032c60265481565b6040519081526020015b60405180910390f35b34801561034b57600080fd5b506103546109e6565b604051610336919061317e565b34801561036d57600080fd5b5061038161037c366004613071565b610a78565b6040519015158152602001610336565b34801561039d57600080fd5b5060175461032c565b3480156103b257600080fd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610336565b3480156103fe57600080fd5b5060085461032c565b34801561041357600080fd5b506103146104223660046130d7565b610a8f565b34801561043357600080fd5b5061032c601c5481565b34801561044957600080fd5b50610381610458366004613002565b610b1a565b34801561046957600080fd5b5061032c6104783660046130d7565b610b83565b34801561048957600080fd5b5060065460405160ff9091168152602001610336565b3480156104ab57600080fd5b506103146104ba366004612f8f565b610c07565b3480156104cb57600080fd5b506103816104da366004613071565b610dba565b3480156104eb57600080fd5b5061032c60185481565b34801561050157600080fd5b506103146105103660046130d7565b610df0565b34801561052157600080fd5b50610314610530366004612f8f565b610edc565b34801561054157600080fd5b5061032c610550366004613109565b610f2a565b34801561056157600080fd5b5061032c60155481565b34801561057757600080fd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ab57600080fd5b506103146105ba36600461312e565b610fb9565b3480156105cb57600080fd5b506103146105da3660046130d7565b611022565b3480156105eb57600080fd5b506103146105fa366004612f8f565b611060565b34801561060b57600080fd5b5061038161061a366004612f8f565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561064457600080fd5b5061031461065336600461309d565b61122b565b34801561066457600080fd5b5061031461067336600461312e565b611268565b34801561068457600080fd5b5061032c601a5481565b34801561069a57600080fd5b5061032c6106a9366004612f8f565b61129d565b3480156106ba57600080fd5b506103146112fc565b3480156106cf57600080fd5b5061032c60145481565b3480156106e557600080fd5b5060135460ff16610381565b3480156106fd57600080fd5b5061038161070c366004612f8f565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561073657600080fd5b506000546001600160a01b03166103da565b34801561075457600080fd5b5061031461076336600461312e565b61135e565b34801561077457600080fd5b506103546113ab565b34801561078957600080fd5b50610314610798366004612f8f565b6113ba565b3480156107a957600080fd5b506103816107b8366004613071565b6113fc565b3480156107c957600080fd5b5061031461144b565b3480156107de57600080fd5b506103816107ed366004613071565b611551565b3480156107fe57600080fd5b5060025461032c565b34801561081357600080fd5b50610381610822366004612fc9565b61155e565b34801561083357600080fd5b5061031461084236600461309d565b6116a4565b34801561085357600080fd5b5061032c60225481565b34801561086957600080fd5b5061032c60205481565b34801561087f57600080fd5b5061031461088e3660046130d7565b611722565b34801561089f57600080fd5b5061032c6108ae366004612fc9565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b3480156108e557600080fd5b506103146108f4366004612f8f565b6117a7565b34801561090557600080fd5b5061032c601e5481565b34801561091b57600080fd5b5061031461092a366004612f8f565b6117f2565b34801561093b57600080fd5b5061031461094a36600461312e565b6118ca565b34801561095b57600080fd5b5061038161096a366004612f8f565b6001600160a01b031660009081526011602052604090205460ff1690565b6000546001600160a01b031633146109bb5760405162461bcd60e51b81526004016109b2906131d3565b60405180910390fd5b5060016001600160a01b0382166000908152601160205260409020805460ff191660011790555b5050565b6060600480546109f5906132e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a21906132e9565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a853384846119c0565b5060015b92915050565b6000546001600160a01b03163314610ab95760405162461bcd60e51b81526004016109b2906131d3565b6064811115610ac757600080fd5b60095447906001600160a01b03166108fc610aed6064610ae785876118ff565b9061197e565b6040518115909202916000818181858888f19350505050158015610b15573d6000803e3d6000fd5b505050565b6000610b27848484611ae4565b610b798433610b74856040518060600160405280602881526020016133a8602891396001600160a01b038a166000908152600e602090815260408083203384529091529020549190611f6a565b6119c0565b5060019392505050565b6000601654821115610bea5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109b2565b6000610bf4611fa4565b9050610c00838261197e565b9392505050565b6000546001600160a01b03163314610c315760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03811660009081526010602052604090205460ff16610c995760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109b2565b60005b6012548110156109e257816001600160a01b031660128281548110610cc357610cc361336b565b6000918252602090912001546001600160a01b03161415610da85760128054610cee906001906132d2565b81548110610cfe57610cfe61336b565b600091825260209091200154601280546001600160a01b039092169183908110610d2a57610d2a61336b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b82526040808220829055601090925220805460ff191690556012805480610d8257610d82613355565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610db281613324565b915050610c9c565b336000818152600e602090815260408083206001600160a01b03871684529091528120549091610a85918590610b749086611fc7565b3360008181526010602052604090205460ff1615610e655760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109b2565b6000610e7083612026565b5050506001600160a01b0386166000908152600a6020526040902054939450610e9e93925084915050612081565b6001600160a01b0383166000908152600a6020526040902055601654610ec49082612081565b601655601754610ed49084611fc7565b601755505050565b6000546001600160a01b03163314610f065760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6000600854831115610f7e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109b2565b81610f9e576000610f8e84612026565b50949650610a8995505050505050565b6000610fa984612026565b50939650610a8995505050505050565b6000546001600160a01b03163314610fe35760405162461bcd60e51b81526004016109b2906131d3565b60018210158015610ff657506103e88111155b610fff57600080fd5b600061101a82610ae7856008546118ff90919063ffffffff16565b602655505050565b6000546001600160a01b0316331461104c5760405162461bcd60e51b81526004016109b2906131d3565b60155481111561105b57600080fd5b601455565b6000546001600160a01b0316331461108a5760405162461bcd60e51b81526004016109b2906131d3565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156111025760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016109b2565b6001600160a01b03811660009081526010602052604090205460ff161561116b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109b2565b6001600160a01b0381166000908152600a6020526040902054156111c5576001600160a01b0381166000908152600a60205260409020546111ab90610b83565b6001600160a01b0382166000908152600b60205260409020555b6001600160a01b03166000818152601060205260408120805460ff191660019081179091556012805491820181559091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319169091179055565b6000546001600160a01b031633146112555760405162461bcd60e51b81526004016109b2906131d3565b6013805460ff1916911515919091179055565b6000546001600160a01b031633146112925760405162461bcd60e51b81526004016109b2906131d3565b601a91909155601c55565b6001600160a01b03811660009081526010602052604081205460ff16156112da57506001600160a01b03166000908152600b602052604090205490565b6001600160a01b0382166000908152600a6020526040902054610a8990610b83565b6000546001600160a01b031633146113265760405162461bcd60e51b81526004016109b2906131d3565b600080546040516001600160a01b03909116906000805160206133d0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113885760405162461bcd60e51b81526004016109b2906131d3565b60006113a382610ae7856008546118ff90919063ffffffff16565b602855505050565b6060600580546109f5906132e9565b6000546001600160a01b031633146113e45760405162461bcd60e51b81526004016109b2906131d3565b60006113ef3061129d565b90506109e2308383611ae4565b6000610a853384610b74856040518060600160405280602581526020016133f060259139336000908152600e602090815260408083206001600160a01b038d1684529091529020549190611f6a565b6001546001600160a01b031633146114b15760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109b2565b60025442116115025760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109b2565b600154600080546040516001600160a01b0393841693909116916000805160206133d083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a85338484611ae4565b600080546001600160a01b031633146115895760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03831661159c57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156115de57600080fd5b505afa1580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161691906130f0565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561166457600080fd5b505af1158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c91906130ba565b949350505050565b6000546001600160a01b031633146116ce5760405162461bcd60e51b81526004016109b2906131d3565b602780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061171790831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461174c5760405162461bcd60e51b81526004016109b2906131d3565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561177b8142613279565b600255600080546040516001600160a01b03909116906000805160206133d0833981519152908390a350565b6000546001600160a01b031633146117d15760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000546001600160a01b0316331461181c5760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b0381166118815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b2565b600080546040516001600160a01b03808516939216916000805160206133d083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118f45760405162461bcd60e51b81526004016109b2906131d3565b602291909155602055565b60008261190e57506000610a89565b600061191a83856132b3565b9050826119278583613291565b14610c005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109b2565b6000610c0083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120c3565b6001600160a01b038316611a225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b2565b6001600160a01b038216611a835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b2565b6001600160a01b038381166000818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b2565b6001600160a01b038216611baa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b2565b60008111611c0c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109b2565b6001600160a01b03831660009081526011602052604090205460ff1615611c5e5760405162461bcd60e51b81526004016109b2906020808252600490820152634865686560e01b604082015260600190565b6001600160a01b03821660009081526011602052604090205460ff1615611cb05760405162461bcd60e51b81526004016109b2906020808252600490820152634865686560e01b604082015260600190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611d2357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611d4857506001600160a01b0382166000908152600f602052604090205460ff16155b8015611d56575060135460ff165b15611dba57602654811115611d6a57600080fd5b6001600160a01b0382166000908152600c60205260409020544211611d8e57600080fd5b601454611d9c904290611fc7565b6001600160a01b0383166000908152600c6020526040902055611e75565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015611dfe575060135460ff165b8015611e2357506001600160a01b0382166000908152600f602052604090205460ff16155b15611e75576001600160a01b0383166000908152600d6020526040902054421015611e4d57600080fd5b601454611e5b904290611fc7565b6001600160a01b0384166000908152600d60205260409020555b6000611e803061129d565b90506028548110611e9057506028545b60285481108015908190611ea7575060275460ff16155b8015611ee557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611ef85750602754610100900460ff165b15611f0b576028549150611f0b826120f1565b6001600160a01b0385166000908152600f602052604090205460019060ff1680611f4d57506001600160a01b0385166000908152600f602052604090205460ff165b15611f56575060005b611f6286868684612253565b505050505050565b60008184841115611f8e5760405162461bcd60e51b81526004016109b2919061317e565b506000611f9b84866132d2565b95945050505050565b6000806000611fb161246b565b9092509050611fc0828261197e565b9250505090565b600080611fd48385613279565b905083811015610c005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109b2565b60008060008060008060008060008060006120408c6125ed565b935093509350935060008060006120618f87878761205c611fa4565b612675565b919f509d509b509599509397509195509350505050919395979092949650565b6000610c0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f6a565b600081836120e45760405162461bcd60e51b81526004016109b2919061317e565b506000611f9b8486613291565b6027805460ff1916600117905560006121106064610ae78460556118ff565b9050600061211e8383612081565b9050600061212d82600261197e565b9050600061213b8383612081565b905047600061214a8487611fc7565b9050612155816126d7565b60006121614784612081565b905060006121756064610ae784600a6118ff565b9050612181858261289e565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a160006121ce8383612081565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612209573d6000803e3d6000fd5b506040518181527f4d5c7c4ddada689ed3a12644234d0a26ec361d8a6f55c9b05805a57bd636f14b9060200160405180910390a150506027805460ff191690555050505050505050565b80612260576122606129b3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156122d357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156122e8576122e3848484612a3c565b612437565b6001600160a01b03841660009081526010602052604090205460ff16801561232957506001600160a01b03831660009081526010602052604090205460ff16155b15612339576122e3848484612b53565b6001600160a01b03841660009081526010602052604090205460ff1615801561237a57506001600160a01b03831660009081526010602052604090205460ff165b1561238a576122e3848484612c36565b6001600160a01b03841660009081526010602052604090205460ff161580156123cc57506001600160a01b03831660009081526010602052604090205460ff16155b156123dc576122e3848484612cf5565b6001600160a01b03841660009081526010602052604090205460ff16801561241c57506001600160a01b03831660009081526010602052604090205460ff165b1561242c576122e3848484612d4f565b612437848484612cf5565b8061246557612465601954601855601d54601c55601b54601a55602154602055602354602255601f54601e55565b50505050565b6016546008546000918291825b6012548110156125bd5782600a60006012848154811061249a5761249a61336b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612505575081600b6000601284815481106124de576124de61336b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561251b57601654600854945094505050509091565b612561600a6000601284815481106125355761253561336b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612081565b92506125a9600b60006012848154811061257d5761257d61336b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612081565b9150806125b581613324565b915050612478565b506008546016546125cd9161197e565b8210156125e4576016546008549350935050509091565b90939092509050565b600080600080600061260f6064610ae7601854896118ff90919063ffffffff16565b9050600061262d6064610ae7601c548a6118ff90919063ffffffff16565b9050600061264b6064610ae7601a548b6118ff90919063ffffffff16565b905060006126658261265f85818d89612081565b90612081565b9993985091965094509092505050565b600080808061268489866118ff565b9050600061269289876118ff565b905060006126a088886118ff565b905060006126ae8a896118ff565b905060006126c28361265f84818989612081565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061270c5761270c61336b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561278557600080fd5b505afa158015612799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bd9190612fac565b816001815181106127d0576127d061336b565b60200260200101906001600160a01b031690816001600160a01b03168152505061281b307f0000000000000000000000000000000000000000000000000000000000000000846119c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612870908590600090869030904290600401613208565b600060405180830381600087803b15801561288a57600080fd5b505af1158015611f62573d6000803e3d6000fd5b6128c9307f0000000000000000000000000000000000000000000000000000000000000000846119c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806129106000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561297357600080fd5b505af1158015612987573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129ac9190613150565b5050505050565b6018541580156129c35750601a54155b80156129cf5750601c54155b80156129db5750602254155b80156129e75750601e54155b80156129f35750602054155b156129fa57565b60188054601955601c8054601d55601a8054601b55601e8054601f55602280546023556020805460215560009283905590829055819055928390559082905555565b6000806000806000806000612a5088612dd8565b9650965096509650965096509650612a9687600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b03808c166000908152600a602052604080822093909355908b1681522054612ac59087611fc7565b6001600160a01b038a166000908152600a6020526040902055612ae781612e13565b612af082612e13565b612afa8584612e9b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b3f91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612b6788612026565b9650965096509650965096509650612bad88600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b038b166000908152600b6020908152604080832093909355600a90522054612bdc9088612081565b6001600160a01b03808c166000908152600a602052604080822093909355908b1681522054612c0b9087611fc7565b6001600160a01b038a166000908152600a6020526040902055612c2d82612e13565b612af081612e13565b6000806000806000806000612c4a88612026565b9650965096509650965096509650612c9087600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b03808c166000908152600a6020908152604080832094909455918c168152600b9091522054612cc69085611fc7565b6001600160a01b038a166000908152600b6020908152604080832093909355600a90522054612c0b9087611fc7565b6000806000806000806000612d0988612026565b9650965096509650965096509650612bdc87600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6000806000806000806000612d6388612026565b9650965096509650965096509650612da988600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b038b166000908152600b6020908152604080832093909355600a90522054612c909088612081565b6000806000806000806000806000806000612df28c612ebf565b935093509350935060008060006120618f878787612e0e611fa4565b612f42565b6000612e1d611fa4565b90506000612e2b83836118ff565b306000908152600a6020526040902054909150612e489082611fc7565b306000908152600a602090815260408083209390935560109052205460ff1615610b1557306000908152600b6020526040902054612e869084611fc7565b306000908152600b6020526040902055505050565b601654612ea89083612081565b601655601754612eb89082611fc7565b6017555050565b6000806000806000612ee16064610ae7601e54896118ff90919063ffffffff16565b90506000612eff6064610ae76020548a6118ff90919063ffffffff16565b90506000612f1d6064610ae76022548b6118ff90919063ffffffff16565b90506000612f318261265f85818d89612081565b975092955093509150509193509193565b6000808080612f5189866118ff565b90506000612f5f89876118ff565b90506000612f6d89886118ff565b90506000612f7b89896118ff565b905060006126c28261265f85818989612081565b600060208284031215612fa157600080fd5b8135610c0081613381565b600060208284031215612fbe57600080fd5b8151610c0081613381565b60008060408385031215612fdc57600080fd5b8235612fe781613381565b91506020830135612ff781613381565b809150509250929050565b60008060006060848603121561301757600080fd5b833561302281613381565b9250602084013561303281613381565b929592945050506040919091013590565b6000806040838503121561305657600080fd5b823561306181613381565b91506020830135612ff781613399565b6000806040838503121561308457600080fd5b823561308f81613381565b946020939093013593505050565b6000602082840312156130af57600080fd5b8135610c0081613399565b6000602082840312156130cc57600080fd5b8151610c0081613399565b6000602082840312156130e957600080fd5b5035919050565b60006020828403121561310257600080fd5b5051919050565b6000806040838503121561311c57600080fd5b823591506020830135612ff781613399565b6000806040838503121561314157600080fd5b50508035926020909101359150565b60008060006060848603121561316557600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156131ab5785810183015185820160400152820161318f565b818111156131bd576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132585784516001600160a01b031683529383019391830191600101613233565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561328c5761328c61333f565b500190565b6000826132ae57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156132cd576132cd61333f565b500290565b6000828210156132e4576132e461333f565b500390565b600181811c908216806132fd57607f821691505b6020821081141561331e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133385761333861333f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461339657600080fd5b50565b801515811461339657600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206d75b74053ed05b21aca11c2e7a6231c5d08be7020df45a0e9b7bff418a7e2fe64736f6c6343000807003300000000000000000000000004902d338d5f04c392468aac6dcc925b20f808b0

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80636ac9a87011610190578063a9059cbb116100dc578063dd46706411610095578063efcc52de1161006f578063efcc52de146108f9578063f2fde38b1461090f578063fb0ecfa41461092f578063fe575a871461094f57600080fd5b8063dd46706414610873578063dd62ed3e14610893578063ea2f0b37146108d957600080fd5b8063a9059cbb146107d2578063b6c52324146107f2578063c40fedc614610807578063c49b9a8014610827578063c5d2418914610847578063dc44b6a01461085d57600080fd5b806388f820201161014957806395d89b411161012357806395d89b41146107685780639be953b31461077d578063a457c2d71461079d578063a69df4b5146107bd57600080fd5b806388f82020146106f15780638da5cb5b1461072a5780638fcc250d1461074857600080fd5b80636ac9a870146106585780636bc87c3a1461067857806370a082311461068e578063715018a6146106ae578063787a08a6146106c3578063809157c5146106d957600080fd5b80633685d4191161024f57806347f2914c116102085780634fc3f41a116101e25780634fc3f41a146105bf57806352390c02146105df5780635342acb4146105ff5780635932ead11461063857600080fd5b806347f2914c1461055557806349bd5a5e1461056b5780634f6625661461059f57600080fd5b80633685d4191461049f57806339509351146104bf5780633b124fe7146104df5780633bd5d173146104f5578063437823ec146105155780634549b0391461053557600080fd5b806318160ddd116102a157806318160ddd146103f25780631da1db5e1461040757806322976e0d1461042757806323b872dd1461043d5780632d8381191461045d578063313ce5671461047d57600080fd5b806303d29d28146102f45780630492f0551461031657806306fdde031461033f578063095ea7b31461036157806313114a9d146103915780631694505e146103a657600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004613043565b610988565b005b34801561032257600080fd5b5061032c60265481565b6040519081526020015b60405180910390f35b34801561034b57600080fd5b506103546109e6565b604051610336919061317e565b34801561036d57600080fd5b5061038161037c366004613071565b610a78565b6040519015158152602001610336565b34801561039d57600080fd5b5060175461032c565b3480156103b257600080fd5b506103da7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610336565b3480156103fe57600080fd5b5060085461032c565b34801561041357600080fd5b506103146104223660046130d7565b610a8f565b34801561043357600080fd5b5061032c601c5481565b34801561044957600080fd5b50610381610458366004613002565b610b1a565b34801561046957600080fd5b5061032c6104783660046130d7565b610b83565b34801561048957600080fd5b5060065460405160ff9091168152602001610336565b3480156104ab57600080fd5b506103146104ba366004612f8f565b610c07565b3480156104cb57600080fd5b506103816104da366004613071565b610dba565b3480156104eb57600080fd5b5061032c60185481565b34801561050157600080fd5b506103146105103660046130d7565b610df0565b34801561052157600080fd5b50610314610530366004612f8f565b610edc565b34801561054157600080fd5b5061032c610550366004613109565b610f2a565b34801561056157600080fd5b5061032c60155481565b34801561057757600080fd5b506103da7f000000000000000000000000bcf0a507d8253ddb81f8a82c4139eb18a98a010d81565b3480156105ab57600080fd5b506103146105ba36600461312e565b610fb9565b3480156105cb57600080fd5b506103146105da3660046130d7565b611022565b3480156105eb57600080fd5b506103146105fa366004612f8f565b611060565b34801561060b57600080fd5b5061038161061a366004612f8f565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561064457600080fd5b5061031461065336600461309d565b61122b565b34801561066457600080fd5b5061031461067336600461312e565b611268565b34801561068457600080fd5b5061032c601a5481565b34801561069a57600080fd5b5061032c6106a9366004612f8f565b61129d565b3480156106ba57600080fd5b506103146112fc565b3480156106cf57600080fd5b5061032c60145481565b3480156106e557600080fd5b5060135460ff16610381565b3480156106fd57600080fd5b5061038161070c366004612f8f565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561073657600080fd5b506000546001600160a01b03166103da565b34801561075457600080fd5b5061031461076336600461312e565b61135e565b34801561077457600080fd5b506103546113ab565b34801561078957600080fd5b50610314610798366004612f8f565b6113ba565b3480156107a957600080fd5b506103816107b8366004613071565b6113fc565b3480156107c957600080fd5b5061031461144b565b3480156107de57600080fd5b506103816107ed366004613071565b611551565b3480156107fe57600080fd5b5060025461032c565b34801561081357600080fd5b50610381610822366004612fc9565b61155e565b34801561083357600080fd5b5061031461084236600461309d565b6116a4565b34801561085357600080fd5b5061032c60225481565b34801561086957600080fd5b5061032c60205481565b34801561087f57600080fd5b5061031461088e3660046130d7565b611722565b34801561089f57600080fd5b5061032c6108ae366004612fc9565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b3480156108e557600080fd5b506103146108f4366004612f8f565b6117a7565b34801561090557600080fd5b5061032c601e5481565b34801561091b57600080fd5b5061031461092a366004612f8f565b6117f2565b34801561093b57600080fd5b5061031461094a36600461312e565b6118ca565b34801561095b57600080fd5b5061038161096a366004612f8f565b6001600160a01b031660009081526011602052604090205460ff1690565b6000546001600160a01b031633146109bb5760405162461bcd60e51b81526004016109b2906131d3565b60405180910390fd5b5060016001600160a01b0382166000908152601160205260409020805460ff191660011790555b5050565b6060600480546109f5906132e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a21906132e9565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a853384846119c0565b5060015b92915050565b6000546001600160a01b03163314610ab95760405162461bcd60e51b81526004016109b2906131d3565b6064811115610ac757600080fd5b60095447906001600160a01b03166108fc610aed6064610ae785876118ff565b9061197e565b6040518115909202916000818181858888f19350505050158015610b15573d6000803e3d6000fd5b505050565b6000610b27848484611ae4565b610b798433610b74856040518060600160405280602881526020016133a8602891396001600160a01b038a166000908152600e602090815260408083203384529091529020549190611f6a565b6119c0565b5060019392505050565b6000601654821115610bea5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109b2565b6000610bf4611fa4565b9050610c00838261197e565b9392505050565b6000546001600160a01b03163314610c315760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03811660009081526010602052604090205460ff16610c995760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109b2565b60005b6012548110156109e257816001600160a01b031660128281548110610cc357610cc361336b565b6000918252602090912001546001600160a01b03161415610da85760128054610cee906001906132d2565b81548110610cfe57610cfe61336b565b600091825260209091200154601280546001600160a01b039092169183908110610d2a57610d2a61336b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b82526040808220829055601090925220805460ff191690556012805480610d8257610d82613355565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610db281613324565b915050610c9c565b336000818152600e602090815260408083206001600160a01b03871684529091528120549091610a85918590610b749086611fc7565b3360008181526010602052604090205460ff1615610e655760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109b2565b6000610e7083612026565b5050506001600160a01b0386166000908152600a6020526040902054939450610e9e93925084915050612081565b6001600160a01b0383166000908152600a6020526040902055601654610ec49082612081565b601655601754610ed49084611fc7565b601755505050565b6000546001600160a01b03163314610f065760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6000600854831115610f7e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109b2565b81610f9e576000610f8e84612026565b50949650610a8995505050505050565b6000610fa984612026565b50939650610a8995505050505050565b6000546001600160a01b03163314610fe35760405162461bcd60e51b81526004016109b2906131d3565b60018210158015610ff657506103e88111155b610fff57600080fd5b600061101a82610ae7856008546118ff90919063ffffffff16565b602655505050565b6000546001600160a01b0316331461104c5760405162461bcd60e51b81526004016109b2906131d3565b60155481111561105b57600080fd5b601455565b6000546001600160a01b0316331461108a5760405162461bcd60e51b81526004016109b2906131d3565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156111025760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016109b2565b6001600160a01b03811660009081526010602052604090205460ff161561116b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109b2565b6001600160a01b0381166000908152600a6020526040902054156111c5576001600160a01b0381166000908152600a60205260409020546111ab90610b83565b6001600160a01b0382166000908152600b60205260409020555b6001600160a01b03166000818152601060205260408120805460ff191660019081179091556012805491820181559091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319169091179055565b6000546001600160a01b031633146112555760405162461bcd60e51b81526004016109b2906131d3565b6013805460ff1916911515919091179055565b6000546001600160a01b031633146112925760405162461bcd60e51b81526004016109b2906131d3565b601a91909155601c55565b6001600160a01b03811660009081526010602052604081205460ff16156112da57506001600160a01b03166000908152600b602052604090205490565b6001600160a01b0382166000908152600a6020526040902054610a8990610b83565b6000546001600160a01b031633146113265760405162461bcd60e51b81526004016109b2906131d3565b600080546040516001600160a01b03909116906000805160206133d0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113885760405162461bcd60e51b81526004016109b2906131d3565b60006113a382610ae7856008546118ff90919063ffffffff16565b602855505050565b6060600580546109f5906132e9565b6000546001600160a01b031633146113e45760405162461bcd60e51b81526004016109b2906131d3565b60006113ef3061129d565b90506109e2308383611ae4565b6000610a853384610b74856040518060600160405280602581526020016133f060259139336000908152600e602090815260408083206001600160a01b038d1684529091529020549190611f6a565b6001546001600160a01b031633146114b15760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109b2565b60025442116115025760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109b2565b600154600080546040516001600160a01b0393841693909116916000805160206133d083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a85338484611ae4565b600080546001600160a01b031633146115895760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03831661159c57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156115de57600080fd5b505afa1580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161691906130f0565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561166457600080fd5b505af1158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c91906130ba565b949350505050565b6000546001600160a01b031633146116ce5760405162461bcd60e51b81526004016109b2906131d3565b602780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061171790831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461174c5760405162461bcd60e51b81526004016109b2906131d3565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561177b8142613279565b600255600080546040516001600160a01b03909116906000805160206133d0833981519152908390a350565b6000546001600160a01b031633146117d15760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000546001600160a01b0316331461181c5760405162461bcd60e51b81526004016109b2906131d3565b6001600160a01b0381166118815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b2565b600080546040516001600160a01b03808516939216916000805160206133d083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118f45760405162461bcd60e51b81526004016109b2906131d3565b602291909155602055565b60008261190e57506000610a89565b600061191a83856132b3565b9050826119278583613291565b14610c005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109b2565b6000610c0083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120c3565b6001600160a01b038316611a225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b2565b6001600160a01b038216611a835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b2565b6001600160a01b038381166000818152600e602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b2565b6001600160a01b038216611baa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b2565b60008111611c0c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109b2565b6001600160a01b03831660009081526011602052604090205460ff1615611c5e5760405162461bcd60e51b81526004016109b2906020808252600490820152634865686560e01b604082015260600190565b6001600160a01b03821660009081526011602052604090205460ff1615611cb05760405162461bcd60e51b81526004016109b2906020808252600490820152634865686560e01b604082015260600190565b7f000000000000000000000000bcf0a507d8253ddb81f8a82c4139eb18a98a010d6001600160a01b0316836001600160a01b0316148015611d2357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611d4857506001600160a01b0382166000908152600f602052604090205460ff16155b8015611d56575060135460ff165b15611dba57602654811115611d6a57600080fd5b6001600160a01b0382166000908152600c60205260409020544211611d8e57600080fd5b601454611d9c904290611fc7565b6001600160a01b0383166000908152600c6020526040902055611e75565b7f000000000000000000000000bcf0a507d8253ddb81f8a82c4139eb18a98a010d6001600160a01b0316836001600160a01b031614158015611dfe575060135460ff165b8015611e2357506001600160a01b0382166000908152600f602052604090205460ff16155b15611e75576001600160a01b0383166000908152600d6020526040902054421015611e4d57600080fd5b601454611e5b904290611fc7565b6001600160a01b0384166000908152600d60205260409020555b6000611e803061129d565b90506028548110611e9057506028545b60285481108015908190611ea7575060275460ff16155b8015611ee557507f000000000000000000000000bcf0a507d8253ddb81f8a82c4139eb18a98a010d6001600160a01b0316856001600160a01b031614155b8015611ef85750602754610100900460ff165b15611f0b576028549150611f0b826120f1565b6001600160a01b0385166000908152600f602052604090205460019060ff1680611f4d57506001600160a01b0385166000908152600f602052604090205460ff165b15611f56575060005b611f6286868684612253565b505050505050565b60008184841115611f8e5760405162461bcd60e51b81526004016109b2919061317e565b506000611f9b84866132d2565b95945050505050565b6000806000611fb161246b565b9092509050611fc0828261197e565b9250505090565b600080611fd48385613279565b905083811015610c005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109b2565b60008060008060008060008060008060006120408c6125ed565b935093509350935060008060006120618f87878761205c611fa4565b612675565b919f509d509b509599509397509195509350505050919395979092949650565b6000610c0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f6a565b600081836120e45760405162461bcd60e51b81526004016109b2919061317e565b506000611f9b8486613291565b6027805460ff1916600117905560006121106064610ae78460556118ff565b9050600061211e8383612081565b9050600061212d82600261197e565b9050600061213b8383612081565b905047600061214a8487611fc7565b9050612155816126d7565b60006121614784612081565b905060006121756064610ae784600a6118ff565b9050612181858261289e565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a160006121ce8383612081565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612209573d6000803e3d6000fd5b506040518181527f4d5c7c4ddada689ed3a12644234d0a26ec361d8a6f55c9b05805a57bd636f14b9060200160405180910390a150506027805460ff191690555050505050505050565b80612260576122606129b3565b7f000000000000000000000000bcf0a507d8253ddb81f8a82c4139eb18a98a010d6001600160a01b0316846001600160a01b03161480156122d357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b156122e8576122e3848484612a3c565b612437565b6001600160a01b03841660009081526010602052604090205460ff16801561232957506001600160a01b03831660009081526010602052604090205460ff16155b15612339576122e3848484612b53565b6001600160a01b03841660009081526010602052604090205460ff1615801561237a57506001600160a01b03831660009081526010602052604090205460ff165b1561238a576122e3848484612c36565b6001600160a01b03841660009081526010602052604090205460ff161580156123cc57506001600160a01b03831660009081526010602052604090205460ff16155b156123dc576122e3848484612cf5565b6001600160a01b03841660009081526010602052604090205460ff16801561241c57506001600160a01b03831660009081526010602052604090205460ff165b1561242c576122e3848484612d4f565b612437848484612cf5565b8061246557612465601954601855601d54601c55601b54601a55602154602055602354602255601f54601e55565b50505050565b6016546008546000918291825b6012548110156125bd5782600a60006012848154811061249a5761249a61336b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612505575081600b6000601284815481106124de576124de61336b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561251b57601654600854945094505050509091565b612561600a6000601284815481106125355761253561336b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612081565b92506125a9600b60006012848154811061257d5761257d61336b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612081565b9150806125b581613324565b915050612478565b506008546016546125cd9161197e565b8210156125e4576016546008549350935050509091565b90939092509050565b600080600080600061260f6064610ae7601854896118ff90919063ffffffff16565b9050600061262d6064610ae7601c548a6118ff90919063ffffffff16565b9050600061264b6064610ae7601a548b6118ff90919063ffffffff16565b905060006126658261265f85818d89612081565b90612081565b9993985091965094509092505050565b600080808061268489866118ff565b9050600061269289876118ff565b905060006126a088886118ff565b905060006126ae8a896118ff565b905060006126c28361265f84818989612081565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061270c5761270c61336b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561278557600080fd5b505afa158015612799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bd9190612fac565b816001815181106127d0576127d061336b565b60200260200101906001600160a01b031690816001600160a01b03168152505061281b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612870908590600090869030904290600401613208565b600060405180830381600087803b15801561288a57600080fd5b505af1158015611f62573d6000803e3d6000fd5b6128c9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119c0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806129106000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561297357600080fd5b505af1158015612987573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129ac9190613150565b5050505050565b6018541580156129c35750601a54155b80156129cf5750601c54155b80156129db5750602254155b80156129e75750601e54155b80156129f35750602054155b156129fa57565b60188054601955601c8054601d55601a8054601b55601e8054601f55602280546023556020805460215560009283905590829055819055928390559082905555565b6000806000806000806000612a5088612dd8565b9650965096509650965096509650612a9687600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b03808c166000908152600a602052604080822093909355908b1681522054612ac59087611fc7565b6001600160a01b038a166000908152600a6020526040902055612ae781612e13565b612af082612e13565b612afa8584612e9b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b3f91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612b6788612026565b9650965096509650965096509650612bad88600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b038b166000908152600b6020908152604080832093909355600a90522054612bdc9088612081565b6001600160a01b03808c166000908152600a602052604080822093909355908b1681522054612c0b9087611fc7565b6001600160a01b038a166000908152600a6020526040902055612c2d82612e13565b612af081612e13565b6000806000806000806000612c4a88612026565b9650965096509650965096509650612c9087600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b03808c166000908152600a6020908152604080832094909455918c168152600b9091522054612cc69085611fc7565b6001600160a01b038a166000908152600b6020908152604080832093909355600a90522054612c0b9087611fc7565b6000806000806000806000612d0988612026565b9650965096509650965096509650612bdc87600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6000806000806000806000612d6388612026565b9650965096509650965096509650612da988600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000205461208190919063ffffffff16565b6001600160a01b038b166000908152600b6020908152604080832093909355600a90522054612c909088612081565b6000806000806000806000806000806000612df28c612ebf565b935093509350935060008060006120618f878787612e0e611fa4565b612f42565b6000612e1d611fa4565b90506000612e2b83836118ff565b306000908152600a6020526040902054909150612e489082611fc7565b306000908152600a602090815260408083209390935560109052205460ff1615610b1557306000908152600b6020526040902054612e869084611fc7565b306000908152600b6020526040902055505050565b601654612ea89083612081565b601655601754612eb89082611fc7565b6017555050565b6000806000806000612ee16064610ae7601e54896118ff90919063ffffffff16565b90506000612eff6064610ae76020548a6118ff90919063ffffffff16565b90506000612f1d6064610ae76022548b6118ff90919063ffffffff16565b90506000612f318261265f85818d89612081565b975092955093509150509193509193565b6000808080612f5189866118ff565b90506000612f5f89876118ff565b90506000612f6d89886118ff565b90506000612f7b89896118ff565b905060006126c28261265f85818989612081565b600060208284031215612fa157600080fd5b8135610c0081613381565b600060208284031215612fbe57600080fd5b8151610c0081613381565b60008060408385031215612fdc57600080fd5b8235612fe781613381565b91506020830135612ff781613381565b809150509250929050565b60008060006060848603121561301757600080fd5b833561302281613381565b9250602084013561303281613381565b929592945050506040919091013590565b6000806040838503121561305657600080fd5b823561306181613381565b91506020830135612ff781613399565b6000806040838503121561308457600080fd5b823561308f81613381565b946020939093013593505050565b6000602082840312156130af57600080fd5b8135610c0081613399565b6000602082840312156130cc57600080fd5b8151610c0081613399565b6000602082840312156130e957600080fd5b5035919050565b60006020828403121561310257600080fd5b5051919050565b6000806040838503121561311c57600080fd5b823591506020830135612ff781613399565b6000806040838503121561314157600080fd5b50508035926020909101359150565b60008060006060848603121561316557600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156131ab5785810183015185820160400152820161318f565b818111156131bd576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132585784516001600160a01b031683529383019391830191600101613233565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561328c5761328c61333f565b500190565b6000826132ae57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156132cd576132cd61333f565b500290565b6000828210156132e4576132e461333f565b500390565b600181811c908216806132fd57607f821691505b6020821081141561331e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133385761333861333f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461339657600080fd5b50565b801515811461339657600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206d75b74053ed05b21aca11c2e7a6231c5d08be7020df45a0e9b7bff418a7e2fe64736f6c63430008070033

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

00000000000000000000000004902d338d5f04c392468aac6dcc925b20f808b0

-----Decoded View---------------
Arg [0] : marketingWallet (address): 0x04902D338d5F04c392468aac6DCC925B20f808b0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000004902d338d5f04c392468aac6dcc925b20f808b0


Deployed Bytecode Sourcemap

14597:24726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20237:282;;;;;;;;;;-1:-1:-1;20237:282:0;;;;;:::i;:::-;;:::i;:::-;;16528:72;;;;;;;;;;;;;;;;;;;12698:25:1;;;12686:2;12671:18;16528:72:0;;;;;;;;17883:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18528:161::-;;;;;;;;;;-1:-1:-1;18528:161:0;;;;;:::i;:::-;;:::i;:::-;;;5095:14:1;;5088:22;5070:41;;5058:2;5043:18;18528:161:0;4930:187:1;23190:87:0;;;;;;;;;;-1:-1:-1;23259:10:0;;23190:87;;16612:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3995:32:1;;;3977:51;;3965:2;3950:18;16612:51:0;3831:203:1;18106:79:0;;;;;;;;;;-1:-1:-1;18176:7:0;;18106:79;;30520:262;;;;;;;;;;-1:-1:-1;30520:262:0;;;;;:::i;:::-;;:::i;16035:32::-;;;;;;;;;;;;;;;;32379:313;;;;;;;;;;-1:-1:-1;32379:313:0;;;;;:::i;:::-;;:::i;21363:253::-;;;;;;;;;;-1:-1:-1;21363:253:0;;;;;:::i;:::-;;:::i;18033:67::-;;;;;;;;;;-1:-1:-1;18089:9:0;;18033:67;;18089:9;;;;14185:36:1;;14173:2;14158:18;18033:67:0;14043:184:1;22204:479:0;;;;;;;;;;-1:-1:-1;22204:479:0;;;;;:::i;:::-;;:::i;19730:218::-;;;;;;;;;;-1:-1:-1;19730:218:0;;;;;:::i;:::-;;:::i;15855:26::-;;;;;;;;;;;;;;;;20531:378;;;;;;;;;;-1:-1:-1;20531:378:0;;;;;:::i;:::-;;:::i;22691:111::-;;;;;;;;;;-1:-1:-1;22691:111:0;;;;;:::i;:::-;;:::i;20917:438::-;;;;;;;;;;-1:-1:-1;20917:438:0;;;;;:::i;:::-;;:::i;15663:41::-;;;;;;;;;;;;;;;;16670:38;;;;;;;;;;;;;;;19464:258;;;;;;;;;;-1:-1:-1;19464:258:0;;;;;:::i;:::-;;:::i;19315:137::-;;;;;;;;;;-1:-1:-1;19315:137:0;;;;;:::i;:::-;;:::i;21752:444::-;;;;;;;;;;-1:-1:-1;21752:444:0;;;;;:::i;:::-;;:::i;22932:123::-;;;;;;;;;;-1:-1:-1;22932:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23020:27:0;22996:4;23020:27;;;:18;:27;;;;;;;;;22932:123;39217:103;;;;;;;;;;-1:-1:-1;39217:103:0;;;;;:::i;:::-;;:::i;18936:171::-;;;;;;;;;;-1:-1:-1;18936:171:0;;;;;:::i;:::-;;:::i;15936:32::-;;;;;;;;;;;;;;;;18324:198;;;;;;;;;;-1:-1:-1;18324:198:0;;;;;:::i;:::-;;:::i;5489:148::-;;;;;;;;;;;;;:::i;15620:36::-;;;;;;;;;;;;;;;;39111:94;;;;;;;;;;-1:-1:-1;39182:15:0;;;;39111:94;;21624:120;;;;;;;;;;-1:-1:-1;21624:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21716:20:0;21692:4;21716:20;;;:11;:20;;;;;;;;;21624:120;5275:79;;;;;;;;;;-1:-1:-1;5313:7:0;5340:6;-1:-1:-1;;;;;5340:6:0;5275:79;;18697:223;;;;;;;;;;-1:-1:-1;18697:223:0;;;;;:::i;:::-;;:::i;17956:71::-;;;;;;;;;;;;;:::i;30790:167::-;;;;;;;;;;-1:-1:-1;30790:167:0;;;;;:::i;:::-;;:::i;19956:269::-;;;;;;;;;;-1:-1:-1;19956:269:0;;;;;:::i;:::-;;:::i;6232:305::-;;;;;;;;;;;;;:::i;34744:167::-;;;;;;;;;;-1:-1:-1;34744:167:0;;;;;:::i;:::-;;:::i;5897:89::-;;;;;;;;;;-1:-1:-1;5969:9:0;;5897:89;;30965:284;;;;;;;;;;-1:-1:-1;30965:284:0;;;;;:::i;:::-;;:::i;23285:171::-;;;;;;;;;;-1:-1:-1;23285:171:0;;;;;:::i;:::-;;:::i;16336:35::-;;;;;;;;;;;;;;;;16228;;;;;;;;;;;;;;;;5994:226;;;;;;;;;;-1:-1:-1;5994:226:0;;;;;:::i;:::-;;:::i;18191:127::-;;;;;;;;;;-1:-1:-1;18191:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;18289:18:0;;;18272:7;18289:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18191:127;22810:110;;;;;;;;;;-1:-1:-1;22810:110:0;;;;;:::i;:::-;;:::i;16134:29::-;;;;;;;;;;;;;;;;5645:244;;;;;;;;;;-1:-1:-1;5645:244:0;;;;;:::i;:::-;;:::i;19123:176::-;;;;;;;;;;-1:-1:-1;19123:176:0;;;;;:::i;:::-;;:::i;23067:115::-;;;;;;;;;;-1:-1:-1;23067:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;23151:23:0;23127:4;23151:23;;;:14;:23;;;;;;;;;23067:115;20237:282;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;20346:4:0::1;-1:-1:-1::0;;;;;20371:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:30;;-1:-1:-1;;20371:30:0::1;20397:4;20371:30;::::0;;20418:94:::1;20237:282:::0;;:::o;17883:67::-;17920:13;17943:5;17936:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:67;:::o;18528:161::-;18603:4;18620:39;2338:10;18643:7;18652:6;18620:8;:39::i;:::-;-1:-1:-1;18677:4:0;18528:161;;;;;:::o;30520:262::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;30631:3:::1;30611:16;:23;;30603:32;;;::::0;::::1;;30706:16;::::0;30666:21:::1;::::0;-1:-1:-1;;;;;30706:16:0::1;30698:76;30733:40;30769:3;30733:31;30666:21:::0;30747:16;30733:13:::1;:31::i;:::-;:35:::0;::::1;:40::i;:::-;30698:76;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30592:190;30520:262:::0;:::o;32379:313::-;32477:4;32494:36;32504:6;32512:9;32523:6;32494:9;:36::i;:::-;32541:121;32550:6;2338:10;32572:89;32610:6;32572:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32572:19:0;;;;;;:11;:19;;;;;;;;2338:10;32572:33;;;;;;;;;;:37;:89::i;:::-;32541:8;:121::i;:::-;-1:-1:-1;32680:4:0;32379:313;;;;;:::o;21363:253::-;21429:7;21468;;21457;:18;;21449:73;;;;-1:-1:-1;;;21449:73:0;;6565:2:1;21449:73:0;;;6547:21:1;6604:2;6584:18;;;6577:30;6643:34;6623:18;;;6616:62;-1:-1:-1;;;6694:18:1;;;6687:40;6744:19;;21449:73:0;6363:406:1;21449:73:0;21533:19;21556:10;:8;:10::i;:::-;21533:33;-1:-1:-1;21584:24:0;:7;21533:33;21584:11;:24::i;:::-;21577:31;21363:253;-1:-1:-1;;;21363:253:0:o;22204:479::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22286:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22278:60;;;::::0;-1:-1:-1;;;22278:60:0;;8142:2:1;22278:60:0::1;::::0;::::1;8124:21:1::0;8181:2;8161:18;;;8154:30;8220:29;8200:18;;;8193:57;8267:18;;22278:60:0::1;7940:351:1::0;22278:60:0::1;22354:9;22349:327;22373:9;:16:::0;22369:20;::::1;22349:327;;;22431:7;-1:-1:-1::0;;;;;22415:23:0::1;:9;22425:1;22415:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22415:12:0::1;:23;22411:254;;;22474:9;22484:16:::0;;:20:::1;::::0;22503:1:::1;::::0;22484:20:::1;:::i;:::-;22474:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22459:9:::1;:12:::0;;-1:-1:-1;;;;;22474:31:0;;::::1;::::0;22469:1;;22459:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22459:46:0::1;-1:-1:-1::0;;;;;22459:46:0;;::::1;;::::0;;22524:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22563:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22563:28:0::1;::::0;;22610:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22610:15:0;;;;;-1:-1:-1;;;;;;22610:15:0::1;::::0;;;;;20237:282;;:::o;22411:254::-:1;22391:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22349:327;;19730:218:::0;2338:10;19818:4;19867:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19867:34:0;;;;;;;;;;19818:4;;19835:83;;19858:7;;19867:50;;19906:10;19867:38;:50::i;20531:378::-;2338:10;20583:14;20632:19;;;:11;:19;;;;;;;;20631:20;20623:77;;;;-1:-1:-1;;;20623:77:0;;11937:2:1;20623:77:0;;;11919:21:1;11976:2;11956:18;;;11949:30;12015:34;11995:18;;;11988:62;-1:-1:-1;;;12066:18:1;;;12059:42;12118:19;;20623:77:0;11735:408:1;20623:77:0;20712:15;20737:19;20748:7;20737:10;:19::i;:::-;-1:-1:-1;;;;;;;;20785:15:0;;;;;;:7;:15;;;;;;20711:45;;-1:-1:-1;20785:28:0;;:15;-1:-1:-1;20711:45:0;;-1:-1:-1;;20785:19:0;:28::i;:::-;-1:-1:-1;;;;;20767:15:0;;;;;;:7;:15;;;;;:46;20834:7;;:20;;20846:7;20834:11;:20::i;:::-;20824:7;:30;20878:10;;:23;;20893:7;20878:14;:23::i;:::-;20865:10;:36;-1:-1:-1;;;20531:378:0:o;22691:111::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22760:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22760:34:0::1;22790:4;22760:34;::::0;;22691:111::o;20917:438::-;21007:7;21046;;21035;:18;;21027:62;;;;-1:-1:-1;;;21027:62:0;;8498:2:1;21027:62:0;;;8480:21:1;8537:2;8517:18;;;8510:30;8576:33;8556:18;;;8549:61;8627:18;;21027:62:0;8296:355:1;21027:62:0;21105:17;21100:248;;21140:15;21165:19;21176:7;21165:10;:19::i;:::-;-1:-1:-1;21139:45:0;;-1:-1:-1;21199:14:0;;-1:-1:-1;;;;;;21199:14:0;21100:248;21248:23;21280:19;21291:7;21280:10;:19::i;:::-;-1:-1:-1;21246:53:0;;-1:-1:-1;21314:22:0;;-1:-1:-1;;;;;;21314:22:0;19464:258;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;19570:1:::1;19559:7;:12;;:31;;;;;19586:4;19575:7;:15;;19559:31;19551:40;;;::::0;::::1;;19631:14;19648:33;19673:7;19648:20;19660:7;19648;;:11;;:20;;;;:::i;:33::-;19692:13;:22:::0;-1:-1:-1;;;19464:258:0:o;19315:137::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;19402:13:::1;;19392:6;:23;;19384:32;;;::::0;::::1;;19427:8;:17:::0;19315:137::o;21752:444::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;21845:42:::1;-1:-1:-1::0;;;;;21834:53:0;::::1;;;21826:100;;;::::0;-1:-1:-1;;;21826:100:0;;11534:2:1;21826:100:0::1;::::0;::::1;11516:21:1::0;11573:2;11553:18;;;11546:30;11612:34;11592:18;;;11585:62;-1:-1:-1;;;11663:18:1;;;11656:32;11705:19;;21826:100:0::1;11332:398:1::0;21826:100:0::1;-1:-1:-1::0;;;;;21946:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21945:21;21937:61;;;::::0;-1:-1:-1;;;21937:61:0;;8142:2:1;21937:61:0::1;::::0;::::1;8124:21:1::0;8181:2;8161:18;;;8154:30;8220:29;8200:18;;;8193:57;8267:18;;21937:61:0::1;7940:351:1::0;21937:61:0::1;-1:-1:-1::0;;;;;22012:16:0;::::1;22031:1;22012:16:::0;;;:7:::1;:16;::::0;;;;;:20;22009:108:::1;;-1:-1:-1::0;;;;;22088:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22068:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22049:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22009:108:::1;-1:-1:-1::0;;;;;22127:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22127:27:0::1;22150:4;22127:27:::0;;::::1;::::0;;;22165:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22165:23:0::1;::::0;;::::1;::::0;;21752:444::o;39217:103::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;39289:15:::1;:23:::0;;-1:-1:-1;;39289:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39217:103::o;18936:171::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;19032:13:::1;:28:::0;;;;19071:13:::1;:28:::0;18936:171::o;18324:198::-;-1:-1:-1;;;;;18414:20:0;;18390:7;18414:20;;;:11;:20;;;;;;;;18410:49;;;-1:-1:-1;;;;;;18443:16:0;;;;;:7;:16;;;;;;;18324:198::o;18410:49::-;-1:-1:-1;;;;;18497:16:0;;;;;;:7;:16;;;;;;18477:37;;:19;:37::i;5489:148::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;5596:1:::1;5580:6:::0;;5559:40:::1;::::0;-1:-1:-1;;;;;5580:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;5559:40:0;5596:1;;5559:40:::1;5627:1;5610:19:::0;;-1:-1:-1;;;;;;5610:19:0::1;::::0;;5489:148::o;18697:223::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;18805:18:::1;18826:33;18851:7;18826:20;18838:7;18826;;:11;;:20;;;;:::i;:33::-;18870:29;:42:::0;-1:-1:-1;;;18697:223:0:o;17956:71::-;17995:13;18018:7;18011:14;;;;;:::i;30790:167::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;30857:16:::1;30876:24;30894:4;30876:9;:24::i;:::-;30857:43;;30911:38;30929:4;30936:2;30940:8;30911:9;:38::i;19956:269::-:0;20049:4;20066:129;2338:10;20089:7;20098:96;20137:15;20098:96;;;;;;;;;;;;;;;;;2338:10;20098:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20098:34:0;;;;;;;;;;;;:38;:96::i;6232:305::-;6284:14;;-1:-1:-1;;;;;6284:14:0;6302:10;6284:28;6276:76;;;;-1:-1:-1;;;6276:76:0;;12350:2:1;6276:76:0;;;12332:21:1;12389:2;12369:18;;;12362:30;12428:34;12408:18;;;12401:62;-1:-1:-1;;;12479:18:1;;;12472:33;12522:19;;6276:76:0;12148:399:1;6276:76:0;6389:9;;6371:15;:27;6363:72;;;;-1:-1:-1;;;6363:72:0;;11174:2:1;6363:72:0;;;11156:21:1;11213:2;11193:18;;;11186:30;11252:33;11232:18;;;11225:61;11303:18;;6363:72:0;10972:355:1;6363:72:0;6480:14;;;6472:6;;6451:44;;-1:-1:-1;;;;;6480:14:0;;;;6472:6;;;;-1:-1:-1;;;;;;;;;;;6451:44:0;;6515:14;;;6506:23;;-1:-1:-1;;;;;;6506:23:0;-1:-1:-1;;;;;6515:14:0;;;6506:23;;;;;;6232:305::o;34744:167::-;34822:4;34839:42;2338:10;34863:9;34874:6;34839:9;:42::i;30965:284::-;31048:10;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31078:20:0;::::1;31070:29;;;::::0;::::1;;31137:39;::::0;-1:-1:-1;;;31137:39:0;;31170:4:::1;31137:39;::::0;::::1;3977:51:1::0;31110:24:0::1;::::0;-1:-1:-1;;;;;31137:24:0;::::1;::::0;::::1;::::0;3950:18:1;;31137:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31195:46;::::0;-1:-1:-1;;;31195:46:0;;-1:-1:-1;;;;;4231:32:1;;;31195:46:0::1;::::0;::::1;4213:51:1::0;4280:18;;;4273:34;;;31110:66:0;;-1:-1:-1;31195:23:0;;::::1;::::0;::::1;::::0;4186:18:1;;31195:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31187:54:::0;30965:284;-1:-1:-1;;;;30965:284:0:o;23285:171::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;23362:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;23362:32:0;;::::1;;::::0;;23410:38:::1;::::0;::::1;::::0;::::1;::::0;23386:8;5095:14:1;5088:22;5070:41;;5058:2;5043:18;;4930:187;23410:38:0::1;;;;;;;;23285:171:::0;:::o;5994:226::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;6075:6:::1;::::0;;;6058:23;;-1:-1:-1;;;;;;6058:23:0;;::::1;-1:-1:-1::0;;;;;6075:6:0;::::1;6058:23;::::0;;;6092:19:::1;::::0;;6134:22:::1;6152:4:::0;6134:15:::1;:22;:::i;:::-;6122:9;:34:::0;6209:1:::1;6193:6:::0;;6172:40:::1;::::0;-1:-1:-1;;;;;6193:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6172:40:0;6209:1;;6172:40:::1;5994:226:::0;:::o;22810:110::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22877:27:0::1;22907:5;22877:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22877:35:0::1;::::0;;22810:110::o;5645:244::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5734:22:0;::::1;5726:73;;;::::0;-1:-1:-1;;;5726:73:0;;6976:2:1;5726:73:0::1;::::0;::::1;6958:21:1::0;7015:2;6995:18;;;6988:30;7054:34;7034:18;;;7027:62;-1:-1:-1;;;7105:18:1;;;7098:36;7151:19;;5726:73:0::1;6774:402:1::0;5726:73:0::1;5836:6;::::0;;5815:38:::1;::::0;-1:-1:-1;;;;;5815:38:0;;::::1;::::0;5836:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;5815:38:0;::::1;5864:6;:17:::0;;-1:-1:-1;;;;;;5864:17:0::1;-1:-1:-1::0;;;;;5864:17:0;;;::::1;::::0;;;::::1;::::0;;5645:244::o;19123:176::-;5402:6;;-1:-1:-1;;;;;5402:6:0;2338:10;5402:22;5394:67;;;;-1:-1:-1;;;5394:67:0;;;;;;;:::i;:::-;19218:16:::1;:31:::0;;;;19260:16:::1;:31:::0;19123:176::o;1317:250::-;1375:7;1399:6;1395:47;;-1:-1:-1;1429:1:0;1422:8;;1395:47;1454:9;1466:5;1470:1;1466;:5;:::i;:::-;1454:17;-1:-1:-1;1499:1:0;1490:5;1494:1;1454:17;1490:5;:::i;:::-;:10;1482:56;;;;-1:-1:-1;;;1482:56:0;;8858:2:1;1482:56:0;;;8840:21:1;8897:2;8877:18;;;8870:30;8936:34;8916:18;;;8909:62;-1:-1:-1;;;8987:18:1;;;8980:31;9028:19;;1482:56:0;8656:397:1;1575:132:0;1633:7;1660:39;1664:1;1667;1660:39;;;;;;;;;;;;;;;;;:3;:39::i;29106:337::-;-1:-1:-1;;;;;29199:19:0;;29191:68;;;;-1:-1:-1;;;29191:68:0;;10769:2:1;29191:68:0;;;10751:21:1;10808:2;10788:18;;;10781:30;10847:34;10827:18;;;10820:62;-1:-1:-1;;;10898:18:1;;;10891:34;10942:19;;29191:68:0;10567:400:1;29191:68:0;-1:-1:-1;;;;;29278:21:0;;29270:68;;;;-1:-1:-1;;;29270:68:0;;7383:2:1;29270:68:0;;;7365:21:1;7422:2;7402:18;;;7395:30;7461:34;7441:18;;;7434:62;-1:-1:-1;;;7512:18:1;;;7505:32;7554:19;;29270:68:0;7181:398:1;29270:68:0;-1:-1:-1;;;;;29351:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29403:32;;12698:25:1;;;29403:32:0;;12671:18:1;29403:32:0;;;;;;;29106:337;;;:::o;32700:2036::-;-1:-1:-1;;;;;32822:18:0;;32814:68;;;;-1:-1:-1;;;32814:68:0;;10363:2:1;32814:68:0;;;10345:21:1;10402:2;10382:18;;;10375:30;10441:34;10421:18;;;10414:62;-1:-1:-1;;;10492:18:1;;;10485:35;10537:19;;32814:68:0;10161:401:1;32814:68:0;-1:-1:-1;;;;;32901:16:0;;32893:64;;;;-1:-1:-1;;;32893:64:0;;6161:2:1;32893:64:0;;;6143:21:1;6200:2;6180:18;;;6173:30;6239:34;6219:18;;;6212:62;-1:-1:-1;;;6290:18:1;;;6283:33;6333:19;;32893:64:0;5959:399:1;32893:64:0;32985:1;32976:6;:10;32968:64;;;;-1:-1:-1;;;32968:64:0;;9621:2:1;32968:64:0;;;9603:21:1;9660:2;9640:18;;;9633:30;9699:34;9679:18;;;9672:62;-1:-1:-1;;;9750:18:1;;;9743:39;9799:19;;32968:64:0;9419:405:1;32968:64:0;-1:-1:-1;;;;;33051:20:0;;;;;;:14;:20;;;;;;;;:29;33043:46;;;;-1:-1:-1;;;33043:46:0;;;;;;10031:2:1;10013:21;;;10070:1;10050:18;;;10043:29;-1:-1:-1;;;10103:2:1;10088:18;;10081:34;10147:2;10132:18;;9829:327;33043:46:0;-1:-1:-1;;;;;33108:18:0;;;;;;:14;:18;;;;;;;;:27;33100:44;;;;-1:-1:-1;;;33100:44:0;;;;;;10031:2:1;10013:21;;;10070:1;10050:18;;;10043:29;-1:-1:-1;;;10103:2:1;10088:18;;10081:34;10147:2;10132:18;;9829:327;33100:44:0;33167:13;-1:-1:-1;;;;;33159:21:0;:4;-1:-1:-1;;;;;33159:21:0;;:55;;;;;33198:15;-1:-1:-1;;;;;33184:30:0;:2;-1:-1:-1;;;;;33184:30:0;;;33159:55;:82;;;;-1:-1:-1;;;;;;33219:22:0;;;;;;:18;:22;;;;;;;;33218:23;33159:82;:101;;;;-1:-1:-1;33245:15:0;;;;33159:101;33155:525;;;33299:13;;33289:6;:23;;33281:32;;;;;;-1:-1:-1;;;;;33340:15:0;;;;;;:11;:15;;;;;;33358;-1:-1:-1;33332:42:0;;;;;;33431:8;;33411:29;;:15;;:19;:29::i;:::-;-1:-1:-1;;;;;33393:15:0;;;;;;:11;:15;;;;;:47;33155:525;;;33481:13;-1:-1:-1;;;;;33473:21:0;:4;-1:-1:-1;;;;;33473:21:0;;;:40;;;;-1:-1:-1;33498:15:0;;;;33473:40;:67;;;;-1:-1:-1;;;;;;33518:22:0;;;;;;:18;:22;;;;;;;;33517:23;33473:67;33470:210;;;-1:-1:-1;;;;;33565:18:0;;;;;;:12;:18;;;;;;33587:15;-1:-1:-1;33565:37:0;33557:46;;;;;;33659:8;;33639:29;;:15;;:19;:29::i;:::-;-1:-1:-1;;;;;33618:18:0;;;;;;:12;:18;;;;;:50;33470:210;33704:28;33735:24;33753:4;33735:9;:24::i;:::-;33704:55;;33799:29;;33775:20;:53;33772:146;;-1:-1:-1;33877:29:0;;33772:146;33981:29;;33957:53;;;;;;;34039;;-1:-1:-1;34076:16:0;;;;34075:17;34039:53;:91;;;;;34117:13;-1:-1:-1;;;;;34109:21:0;:4;-1:-1:-1;;;;;34109:21:0;;;34039:91;:129;;;;-1:-1:-1;34147:21:0;;;;;;;34039:129;34021:301;;;34230:29;;34207:52;;34274:36;34289:20;34274:14;:36::i;:::-;-1:-1:-1;;;;;34514:24:0;;34395:12;34514:24;;;:18;:24;;;;;;34410:4;;34514:24;;;:50;;-1:-1:-1;;;;;;34542:22:0;;;;;;:18;:22;;;;;;;;34514:50;34511:96;;;-1:-1:-1;34590:5:0;34511:96;34690:38;34705:4;34710:2;34713:6;34720:7;34690:14;:38::i;:::-;32803:1933;;;32700:2036;;;:::o;1117:192::-;1203:7;1239:12;1231:6;;;;1223:29;;;;-1:-1:-1;;;1223:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1263:9:0;1275:5;1279:1;1275;:5;:::i;:::-;1263:17;1117:192;-1:-1:-1;;;;;1117:192:0:o;26665:163::-;26706:7;26727:15;26744;26763:19;:17;:19::i;:::-;26726:56;;-1:-1:-1;26726:56:0;-1:-1:-1;26800:20:0;26726:56;;26800:11;:20::i;:::-;26793:27;;;;26665:163;:::o;784:181::-;842:7;;874:5;878:1;874;:5;:::i;:::-;862:17;;903:1;898;:6;;890:46;;;;-1:-1:-1;;;890:46:0;;7786:2:1;890:46:0;;;7768:21:1;7825:2;7805:18;;;7798:30;7864:29;7844:18;;;7837:57;7911:18;;890:46:0;7584:351:1;23713:472:0;23772:7;23781;23790;23799;23808;23817;23826;23847:23;23872:12;23886:18;23906;23928:20;23940:7;23928:11;:20::i;:::-;23846:102;;;;;;;;23960:15;23977:23;24002:12;24018:62;24030:7;24039:4;24045:10;24057;24069;:8;:10::i;:::-;24018:11;:62::i;:::-;23959:121;;-1:-1:-1;23959:121:0;-1:-1:-1;23959:121:0;-1:-1:-1;24131:15:0;;-1:-1:-1;24148:4:0;;-1:-1:-1;24154:10:0;;-1:-1:-1;24166:10:0;-1:-1:-1;;;;23713:472:0;;;;;;;;;:::o;973:136::-;1031:7;1058:43;1062:1;1065;1058:43;;;;;;;;;;;;;;;;;:3;:43::i;1715:191::-;1801:7;1836:12;1829:5;1821:28;;;;-1:-1:-1;;;1821:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1860:9:0;1872:5;1876:1;1872;:5;:::i;29451:1061::-;17148:16;:23;;-1:-1:-1;;17148:23:0;17167:4;17148:23;;;:16;29568:37:::1;29601:3;29568:28;:20:::0;29593:2:::1;29568:24;:28::i;:37::-;29536:69:::0;-1:-1:-1;29616:29:0::1;29648:47;:20:::0;29536:69;29648:24:::1;:47::i;:::-;29616:79:::0;-1:-1:-1;29706:34:0::1;29743:28;29616:79:::0;29769:1:::1;29743:25;:28::i;:::-;29706:65:::0;-1:-1:-1;29782:29:0::1;29814:53;:21:::0;29706:65;29814:25:::1;:53::i;:::-;29782:85:::0;-1:-1:-1;29903:21:0::1;29878:22;29963:53;:26:::0;29994:21;29963:30:::1;:53::i;:::-;29935:81;;30027:35;30044:17;30027:16;:35::i;:::-;30073:18;30094:41;:21;30120:14:::0;30094:25:::1;:41::i;:::-;30073:62:::0;-1:-1:-1;30146:20:0::1;30169:27;30192:3;30169:18;30073:62:::0;30184:2:::1;30169:14;:18::i;:27::-;30146:50;;30207:49;30220:21;30243:12;30207;:49::i;:::-;30272:79;::::0;;13921:25:1;;;13977:2;13962:18;;13955:34;;;14005:18;;;13998:34;;;30272:79:0::1;::::0;13909:2:1;13894:18;30272:79:0::1;;;;;;;30362:20;30385:28;:10:::0;30400:12;30385:14:::1;:28::i;:::-;30424:16;::::0;:39:::1;::::0;30362:51;;-1:-1:-1;;;;;;30424:16:0::1;::::0;:39;::::1;;;::::0;30362:51;;30424:16:::1;:39:::0;:16;:39;30362:51;30424:16;:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30479:25:0::1;::::0;12698::1;;;30479::0::1;::::0;12686:2:1;12671:18;30479:25:0::1;;;;;;;-1:-1:-1::0;;17194:16:0;:24;;-1:-1:-1;;17194:24:0;;;-1:-1:-1;;;;;;;;29451:1061:0:o;34992:968::-;35103:7;35099:40;;35125:14;:12;:14::i;:::-;35166:13;-1:-1:-1;;;;;35156:23:0;:6;-1:-1:-1;;;;;35156:23:0;;:64;;;;;35204:15;-1:-1:-1;;;;;35183:37:0;:9;-1:-1:-1;;;;;35183:37:0;;;35156:64;35152:747;;;35237:47;35258:6;35266:9;35277:6;35237:20;:47::i;:::-;35152:747;;;-1:-1:-1;;;;;35306:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35330:22:0;;;;;;:11;:22;;;;;;;;35329:23;35306:46;35302:597;;;35369:48;35391:6;35399:9;35410:6;35369:21;:48::i;35302:597::-;-1:-1:-1;;;;;35440:19:0;;;;;;:11;:19;;;;;;;;35439:20;:46;;;;-1:-1:-1;;;;;;35463:22:0;;;;;;:11;:22;;;;;;;;35439:46;35435:464;;;35502:46;35522:6;35530:9;35541:6;35502:19;:46::i;35435:464::-;-1:-1:-1;;;;;35571:19:0;;;;;;:11;:19;;;;;;;;35570:20;:47;;;;-1:-1:-1;;;;;;35595:22:0;;;;;;:11;:22;;;;;;;;35594:23;35570:47;35566:333;;;35634:44;35652:6;35660:9;35671:6;35634:17;:44::i;35566:333::-;-1:-1:-1;;;;;35700:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35723:22:0;;;;;;:11;:22;;;;;;;;35700:45;35696:203;;;35762:48;35784:6;35792:9;35803:6;35762:21;:48::i;35696:203::-;35843:44;35861:6;35869:9;35880:6;35843:17;:44::i;:::-;35915:7;35911:41;;35937:15;28829;;28819:7;:25;28871:21;;28855:13;:37;28919:21;;28903:13;:37;28970:24;;28951:16;:43;29024:24;;29005:16;:43;29072:18;;29059:10;:31;28775:323;35937:15;34992:968;;;;:::o;26836:555::-;26933:7;;26969;;26886;;;;;26987:289;27011:9;:16;27007:20;;26987:289;;;27077:7;27053;:21;27061:9;27071:1;27061:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27061:12:0;27053:21;;;;;;;;;;;;;:31;;:66;;;27112:7;27088;:21;27096:9;27106:1;27096:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27096:12:0;27088:21;;;;;;;;;;;;;:31;27053:66;27049:97;;;27129:7;;27138;;27121:25;;;;;;;26836:555;;:::o;27049:97::-;27171:34;27183:7;:21;27191:9;27201:1;27191:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27191:12:0;27183:21;;;;;;;;;;;;;27171:7;;:11;:34::i;:::-;27161:44;;27230:34;27242:7;:21;27250:9;27260:1;27250:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27250:12:0;27242:21;;;;;;;;;;;;;27230:7;;:11;:34::i;:::-;27220:44;-1:-1:-1;27029:3:0;;;;:::i;:::-;;;;26987:289;;;-1:-1:-1;27312:7:0;;27300;;:20;;:11;:20::i;:::-;27290:7;:30;27286:61;;;27330:7;;27339;;27322:25;;;;;;26836:555;;:::o;27286:61::-;27366:7;;27375;;-1:-1:-1;26836:555:0;-1:-1:-1;26836:555:0:o;24193:444::-;24253:7;24262;24271;24280;24300:12;24315:29;24340:3;24315:20;24327:7;;24315;:11;;:20;;;;:::i;:29::-;24300:44;;24355:18;24376:35;24407:3;24376:26;24388:13;;24376:7;:11;;:26;;;;:::i;:35::-;24355:56;;24422:18;24443:35;24474:3;24443:26;24455:13;;24443:7;:11;;:26;;;;:::i;:35::-;24422:56;-1:-1:-1;24489:23:0;24515:49;24422:56;24515:33;24537:10;24515:33;:7;24527:4;24515:11;:17::i;:::-;:21;;:33::i;:49::-;24489:75;24600:4;;-1:-1:-1;24606:10:0;;-1:-1:-1;24606:10:0;-1:-1:-1;24193:444:0;;-1:-1:-1;;;24193:444:0:o;24645:524::-;24780:7;;;;24836:24;:7;24848:11;24836;:24::i;:::-;24818:42;-1:-1:-1;24871:12:0;24886:21;:4;24895:11;24886:8;:21::i;:::-;24871:36;-1:-1:-1;24918:18:0;24939:27;:10;24954:11;24939:14;:27::i;:::-;24918:48;-1:-1:-1;24977:18:0;24998:27;:10;25013:11;24998:14;:27::i;:::-;24977:48;-1:-1:-1;25036:23:0;25062:49;25100:10;25062:33;24977:48;25062:33;:7;25074:4;25062:11;:17::i;:49::-;25130:7;;;;-1:-1:-1;25156:4:0;;-1:-1:-1;24645:524:0;;-1:-1:-1;;;;;;;;;24645:524:0:o;31257:589::-;31407:16;;;31421:1;31407:16;;;;;;;;31383:21;;31407:16;;;;;;;;;;-1:-1:-1;31407:16:0;31383:40;;31452:4;31434;31439:1;31434:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31434:23:0;;;-1:-1:-1;;;;;31434:23:0;;;;;31478:15;-1:-1:-1;;;;;31478:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31468:4;31473:1;31468:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31468:32:0;;;-1:-1:-1;;;;;31468:32:0;;;;;31513:62;31530:4;31545:15;31563:11;31513:8;:62::i;:::-;31614:224;;-1:-1:-1;;;31614:224:0;;-1:-1:-1;;;;;31614:15:0;:66;;;;:224;;31695:11;;31721:1;;31765:4;;31792;;31812:15;;31614:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31854:513;32002:62;32019:4;32034:15;32052:11;32002:8;:62::i;:::-;32107:15;-1:-1:-1;;;;;32107:31:0;;32146:9;32179:4;32199:11;32225:1;32268;32311:7;5313;5340:6;-1:-1:-1;;;;;5340:6:0;;5275:79;32311:7;32107:252;;;;;;-1:-1:-1;;;;;;32107:252:0;;;-1:-1:-1;;;;;4677:15:1;;;32107:252:0;;;4659:34:1;4709:18;;;4702:34;;;;4752:18;;;4745:34;;;;4795:18;;;4788:34;4859:15;;;4838:19;;;4831:44;32333:15:0;4891:19:1;;;4884:35;4593:19;;32107:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31854:513;;:::o;28133:634::-;28179:7;;:12;:34;;;;-1:-1:-1;28195:13:0;;:18;28179:34;:56;;;;-1:-1:-1;28217:13:0;;:18;28179:56;:81;;;;-1:-1:-1;28239:16:0;;:21;28179:81;:100;;;;-1:-1:-1;28264:10:0;;:15;28179:100;:125;;;;-1:-1:-1;28283:16:0;;:21;28179:125;28176:137;;;28133:634::o;28176:137::-;28341:7;;;28323:15;:25;28383:13;;;28359:21;:37;28431:13;;;28407:21;:37;28476:10;;;28455:18;:31;28524:16;;;28497:24;:43;28578:16;;;28551:24;:43;-1:-1:-1;28605:14:0;;;;28630:20;;;;28661;;;28692:11;;;;28714:17;;;;28742;28133:634::o;35968:566::-;36070:15;36087:23;36112:12;36126:23;36151:12;36165:18;36185;36207:22;36221:7;36207:13;:22::i;:::-;36069:160;;;;;;;;;;;;;;36258:28;36278:7;36258;:15;36266:6;-1:-1:-1;;;;;36258:15:0;-1:-1:-1;;;;;36258:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;36240:15:0;;;;;;;:7;:15;;;;;;:46;;;;36318:18;;;;;;;:39;;36341:15;36318:22;:39::i;:::-;-1:-1:-1;;;;;36297:18:0;;;;;;:7;:18;;;;;:60;36368:26;36383:10;36368:14;:26::i;:::-;36405;36420:10;36405:14;:26::i;:::-;36442:23;36454:4;36460;36442:11;:23::i;:::-;36498:9;-1:-1:-1;;;;;36481:44:0;36490:6;-1:-1:-1;;;;;36481:44:0;;36509:15;36481:44;;;;12698:25:1;;12686:2;12671:18;;12552:177;36481:44:0;;;;;;;;36058:476;;;;;;;35968:566;;;:::o;37765:627::-;37868:15;37885:23;37910:12;37924:23;37949:12;37963:18;37983;38005:19;38016:7;38005:10;:19::i;:::-;37867:157;;;;;;;;;;;;;;38053:28;38073:7;38053;:15;38061:6;-1:-1:-1;;;;;38053:15:0;-1:-1:-1;;;;;38053:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38035:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38110:7;:15;;;;:28;;38130:7;38110:19;:28::i;:::-;-1:-1:-1;;;;;38092:15:0;;;;;;;:7;:15;;;;;;:46;;;;38170:18;;;;;;;:39;;38193:15;38170:22;:39::i;:::-;-1:-1:-1;;;;;38149:18:0;;;;;;:7;:18;;;;;:60;38220:26;38235:10;38220:14;:26::i;:::-;38264;38279:10;38264:14;:26::i;37117:640::-;37218:15;37235:23;37260:12;37274:23;37299:12;37313:18;37333;37355:19;37366:7;37355:10;:19::i;:::-;37217:157;;;;;;;;;;;;;;37403:28;37423:7;37403;:15;37411:6;-1:-1:-1;;;;;37403:15:0;-1:-1:-1;;;;;37403:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;37385:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37463:18;;;;;:7;:18;;;;;:39;;37486:15;37463:22;:39::i;:::-;-1:-1:-1;;;;;37442:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37534:7;:18;;;;:39;;37557:15;37534:22;:39::i;36542:567::-;36641:15;36658:23;36683:12;36697:23;36722:12;36736:18;36756;36778:19;36789:7;36778:10;:19::i;:::-;36640:157;;;;;;;;;;;;;;36826:28;36846:7;36826;:15;36834:6;-1:-1:-1;;;;;36826:15:0;-1:-1:-1;;;;;36826:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;38404:699::-;38507:15;38524:23;38549:12;38563:23;38588:12;38602:18;38622;38644:19;38655:7;38644:10;:19::i;:::-;38506:157;;;;;;;;;;;;;;38692:28;38712:7;38692;:15;38700:6;-1:-1:-1;;;;;38692:15:0;-1:-1:-1;;;;;38692:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38674:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38749:7;:15;;;;:28;;38769:7;38749:19;:28::i;25177:481::-;25239:7;25248;25257;25266;25275;25284;25293;25314:23;25339:12;25353:18;25373;25395:23;25410:7;25395:14;:23::i;:::-;25313:105;;;;;;;;25430:15;25447:23;25472:12;25488:65;25503:7;25512:4;25518:10;25530;25542;:8;:10::i;:::-;25488:14;:65::i;27399:355::-;27462:19;27485:10;:8;:10::i;:::-;27462:33;-1:-1:-1;27506:18:0;27527:27;:10;27462:33;27527:14;:27::i;:::-;27606:4;27590:22;;;;:7;:22;;;;;;27506:48;;-1:-1:-1;27590:38:0;;27506:48;27590:26;:38::i;:::-;27581:4;27565:22;;;;:7;:22;;;;;;;;:63;;;;27642:11;:26;;;;;;27639:107;;;27724:4;27708:22;;;;:7;:22;;;;;;:38;;27735:10;27708:26;:38::i;:::-;27699:4;27683:22;;;;:7;:22;;;;;:63;27451:303;;27399:355;:::o;23558:147::-;23636:7;;:17;;23648:4;23636:11;:17::i;:::-;23626:7;:27;23677:10;;:20;;23692:4;23677:14;:20::i;:::-;23664:10;:33;-1:-1:-1;;23558:147:0:o;25666:456::-;25729:7;25738;25747;25756;25776:12;25791:32;25819:3;25791:23;25803:10;;25791:7;:11;;:23;;;;:::i;:32::-;25776:47;;25834:18;25855:38;25889:3;25855:29;25867:16;;25855:7;:11;;:29;;;;:::i;:38::-;25834:59;;25904:18;25925:38;25959:3;25925:29;25937:16;;25925:7;:11;;:29;;;;:::i;:38::-;25904:59;-1:-1:-1;25974:23:0;26000:49;25904:59;26000:33;26022:10;26000:33;:7;26012:4;26000:11;:17::i;:49::-;25974:75;-1:-1:-1;26085:4:0;;-1:-1:-1;26091:10:0;-1:-1:-1;26103:10:0;-1:-1:-1;;25666:456:0;;;;;:::o;26130:527::-;26268:7;;;;26324:24;:7;26336:11;26324;:24::i;:::-;26306:42;-1:-1:-1;26359:12:0;26374:21;:4;26383:11;26374:8;:21::i;:::-;26359:36;-1:-1:-1;26406:18:0;26427:27;:10;26442:11;26427:14;:27::i;:::-;26406:48;-1:-1:-1;26465:18:0;26486:27;:10;26501:11;26486:14;:27::i;:::-;26465:48;-1:-1:-1;26524:23:0;26550:49;26465:48;26550:33;26572:10;26550:33;:7;26562:4;26550:11;:17::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:184::-;2834:6;2887:2;2875:9;2866:7;2862:23;2858:32;2855:52;;;2903:1;2900;2893:12;2855:52;-1:-1:-1;2926:16:1;;2764:184;-1:-1:-1;2764:184:1:o;2953:309::-;3018:6;3026;3079:2;3067:9;3058:7;3054:23;3050:32;3047:52;;;3095:1;3092;3085:12;3047:52;3131:9;3118:23;3108:33;;3191:2;3180:9;3176:18;3163:32;3204:28;3226:5;3204:28;:::i;3267:248::-;3335:6;3343;3396:2;3384:9;3375:7;3371:23;3367:32;3364:52;;;3412:1;3409;3402:12;3364:52;-1:-1:-1;;3435:23:1;;;3505:2;3490:18;;;3477:32;;-1:-1:-1;3267:248:1:o;3520:306::-;3608:6;3616;3624;3677:2;3665:9;3656:7;3652:23;3648:32;3645:52;;;3693:1;3690;3683:12;3645:52;3722:9;3716:16;3706:26;;3772:2;3761:9;3757:18;3751:25;3741:35;;3816:2;3805:9;3801:18;3795:25;3785:35;;3520:306;;;;;:::o;5357:597::-;5469:4;5498:2;5527;5516:9;5509:21;5559:6;5553:13;5602:6;5597:2;5586:9;5582:18;5575:34;5627:1;5637:140;5651:6;5648:1;5645:13;5637:140;;;5746:14;;;5742:23;;5736:30;5712:17;;;5731:2;5708:26;5701:66;5666:10;;5637:140;;;5795:6;5792:1;5789:13;5786:91;;;5865:1;5860:2;5851:6;5840:9;5836:22;5832:31;5825:42;5786:91;-1:-1:-1;5938:2:1;5917:15;-1:-1:-1;;5913:29:1;5898:45;;;;5945:2;5894:54;;5357:597;-1:-1:-1;;;5357:597:1:o;9058:356::-;9260:2;9242:21;;;9279:18;;;9272:30;9338:34;9333:2;9318:18;;9311:62;9405:2;9390:18;;9058:356::o;12734:980::-;12996:4;13044:3;13033:9;13029:19;13075:6;13064:9;13057:25;13101:2;13139:6;13134:2;13123:9;13119:18;13112:34;13182:3;13177:2;13166:9;13162:18;13155:31;13206:6;13241;13235:13;13272:6;13264;13257:22;13310:3;13299:9;13295:19;13288:26;;13349:2;13341:6;13337:15;13323:29;;13370:1;13380:195;13394:6;13391:1;13388:13;13380:195;;;13459:13;;-1:-1:-1;;;;;13455:39:1;13443:52;;13550:15;;;;13515:12;;;;13491:1;13409:9;13380:195;;;-1:-1:-1;;;;;;;13631:32:1;;;;13626:2;13611:18;;13604:60;-1:-1:-1;;;13695:3:1;13680:19;13673:35;13592:3;12734:980;-1:-1:-1;;;12734:980:1:o;14232:128::-;14272:3;14303:1;14299:6;14296:1;14293:13;14290:39;;;14309:18;;:::i;:::-;-1:-1:-1;14345:9:1;;14232:128::o;14365:217::-;14405:1;14431;14421:132;;14475:10;14470:3;14466:20;14463:1;14456:31;14510:4;14507:1;14500:15;14538:4;14535:1;14528:15;14421:132;-1:-1:-1;14567:9:1;;14365:217::o;14587:168::-;14627:7;14693:1;14689;14685:6;14681:14;14678:1;14675:21;14670:1;14663:9;14656:17;14652:45;14649:71;;;14700:18;;:::i;:::-;-1:-1:-1;14740:9:1;;14587:168::o;14760:125::-;14800:4;14828:1;14825;14822:8;14819:34;;;14833:18;;:::i;:::-;-1:-1:-1;14870:9:1;;14760:125::o;14890:380::-;14969:1;14965:12;;;;15012;;;15033:61;;15087:4;15079:6;15075:17;15065:27;;15033:61;15140:2;15132:6;15129:14;15109:18;15106:38;15103:161;;;15186:10;15181:3;15177:20;15174:1;15167:31;15221:4;15218:1;15211:15;15249:4;15246:1;15239:15;15103:161;;14890:380;;;:::o;15275:135::-;15314:3;-1:-1:-1;;15335:17:1;;15332:43;;;15355:18;;:::i;:::-;-1:-1:-1;15402:1:1;15391:13;;15275:135::o;15415:127::-;15476:10;15471:3;15467:20;15464:1;15457:31;15507:4;15504:1;15497:15;15531:4;15528:1;15521:15;15547:127;15608:10;15603:3;15599:20;15596:1;15589:31;15639:4;15636:1;15629:15;15663:4;15660:1;15653:15;15679:127;15740:10;15735:3;15731:20;15728:1;15721:31;15771:4;15768:1;15761:15;15795:4;15792:1;15785:15;15943:131;-1:-1:-1;;;;;16018:31:1;;16008:42;;15998:70;;16064:1;16061;16054:12;15998:70;15943:131;:::o;16079:118::-;16165:5;16158:13;16151:21;16144:5;16141:32;16131:60;;16187:1;16184;16177:12

Swarm Source

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