ETH Price: $3,267.40 (+4.92%)
 

Overview

Max Total Supply

100,000,000,000 $CCC

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
860,207,463.184108869 $CCC

Value
$0.00
0x7fa031f83bbc6869de4807fbd05f7b2498721a22
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:
ClaimChainCapital

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 9: CCC.sol
//Claim Chain Capital($CCC)
//Launch at 16:00 UTC
//-Deflationary DeFi-as-a-Service(DaaS) Token, 50%burned

//-Dividend ETH to every $CCC holders.

//-Resolution of the community DAO board of directors, no project devs. 
//DAO invests firstly on multiple token($Gala, People, Raca) and return the profits to $CCC holders.

//Tokenomics:
//- Max buy: 1% of total
//- Buy / Sell Tax: 12%
//- 3% of each buy goes to eth reflections
//- 5% of each sell to treasury wallet
//- 4% add liquidity

//Medium: https://medium.com/@ClaimChainCapital

//Twitter: https://twitter.com/CCC_TOKEN

//TG Channel: https://t.me/ClaimChainCapital


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./Ownable.sol";
import "./IERC20.sol";
import "./location.sol";
import "./SafeMath.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claimDividend(address holder) external;
    function manualSendDividend(uint256 amount, address holder) external;
}


contract ClaimChainCapitalDividendTracker is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 200000000000000; // 0.0002 ETH minimum auto send  
    uint256 public minimumTokenBalanceForDividends = 10000000 * (10**9); // Must hold 10,000,000 token to receive ETH

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor () {
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        minimumTokenBalanceForDividends = _minimumTokenBalanceForDividends;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > minimumTokenBalanceForDividends && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount <= minimumTokenBalanceForDividends && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function manualSendDividend(uint256 amount, address holder) external override onlyToken {
        uint256 contractETHBalance = address(this).balance;
        payable(holder).transfer(amount > 0 ? amount : contractETHBalance);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            payable(shareholder).transfer(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
    
    function getAccount(address _account) public view returns(
        address account,
        uint256 pendingReward,
        uint256 totalRealised,
        uint256 lastClaimTime,
        uint256 nextClaimTime,
        uint256 secondsUntilAutoClaimAvailable,
        uint256 _totalDistributed){
        account = _account;
        
        Share storage userInfo = shares[_account];
        pendingReward = getUnpaidEarnings(account);
        totalRealised = shares[_account].totalRealised;
        lastClaimTime = shareholderClaims[_account];
        nextClaimTime = lastClaimTime + minPeriod;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
                                                    nextClaimTime.sub(block.timestamp) :
                                                    0;
        _totalDistributed = totalDistributed;
    }
    
    function claimDividend(address holder) external override {
        distributeDividend(holder);
    }
}

contract ClaimChainCapital is Ownable, IERC20 {
    using SafeMath for uint256;
    
	struct FeeSet {
		uint256 reflectionFee;
		uint256 treasuryFee;
		uint256 liquidityFee;
		uint256 totalFee;
	}
    
    address WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

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

    string _name = "ClaimChainCapital";
    string _symbol = "$CCC";
    uint8 constant _decimals = 9;
    uint256 public _totalSupply = 100000000000 * (10 ** _decimals);
    uint256 public _maxWallet = _totalSupply.mul(3).div(100); 
    uint256 public _maxTxAmount = _totalSupply.mul(1).div(100);

    mapping (address => bool) excludeFee;
    mapping (address => bool) excludeMaxTxn;
    mapping (address => bool) excludeDividend;
    
	FeeSet public buyFees;
	FeeSet public sellFees;
    uint256 feeDenominator = 100;
    
    address treasuryWallet = address(0x130B907A953108a94A8714f9dB89fFA601E6f457);
    address liquidityWallet;

    IUniswapV2Router02 public router;
    address pair;

    ClaimChainCapitalDividendTracker public dividendTracker;

    uint256 lastSwap;
    uint256 interval = 5 minutes;
    bool public swapEnabled = true;
    bool ignoreLimit = true;

    bool isOpen = false;

    uint256 public swapThreshold = _totalSupply / 5000; // 0.02%
    bool inSwap;
    
    modifier swapping() { inSwap = true; _; inSwap = false; }
    modifier open(address from, address to) {
        require(isOpen || from == owner() || to == owner(), "Not Open");
        _;
    }

    constructor () {

        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IUniswapV2Factory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = ~uint256(0);

        dividendTracker = new ClaimChainCapitalDividendTracker();

        address owner_ = msg.sender;
        liquidityWallet = owner_;

        excludeFee[liquidityWallet] = true;
        excludeFee[owner_] = true;
        excludeFee[address(this)] = true;

        excludeMaxTxn[liquidityWallet] = true;
        excludeMaxTxn[owner_] = true;
        excludeMaxTxn[address(this)] = true;

        excludeDividend[pair] = true;
        excludeDividend[address(this)] = true;
        excludeDividend[DEAD] = true;
        
		setBuyFees(3, 5, 4);
		setSellFees(3, 5, 4);
	
        _balances[owner_] = _totalSupply;
        emit Transfer(address(0), owner_, _totalSupply);
    }

    receive() external payable { }

    function setName(string memory newName, string memory newSymbol) public onlyOwner{
        _name = newName;
        _symbol = newSymbol;
    }
    
    function totalSupply() external override view returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external returns (string memory) { 
        return _symbol; 
    }
    function name() external returns (string memory) { 
        return _name; 
    }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
	
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, ~uint256(0));
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != ~uint256(0)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal open(sender, recipient) returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, recipient, amount);

        if(lastSwap + interval <= block.timestamp){
            if(canSwap())
                swapBack();
        }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        uint256 amountReceived = takeFee(sender, recipient, amount);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!excludeDividend[sender]){ try dividendTracker.setShare(sender, _balances[sender]) {} catch {} }
        if(!excludeDividend[recipient]){ try dividendTracker.setShare(recipient, _balances[recipient]) {} catch {} }

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function manualSendDividend(uint256 amount, address holder) external onlyOwner {
        dividendTracker.manualSendDividend(amount, holder);
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        require(amount <= _maxTxAmount || excludeMaxTxn[sender], "TX Limit Exceeded");
        
        if (sender != owner() && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != treasuryWallet && recipient != liquidityWallet){
            uint256 currentBalance = balanceOf(recipient);
            require(excludeMaxTxn[recipient] || (currentBalance + amount <= _maxWallet));
        }
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if (excludeFee[sender] || excludeFee[recipient]) 
            return amount;
        
        uint256 totalFee;
        if(sender == pair)
            totalFee = buyFees.totalFee;
        else
            totalFee = sellFees.totalFee;
            
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function canSwap() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 swapAmount = _balances[address(this)];
        if(!ignoreLimit)
            swapAmount = swapThreshold;

        lastSwap = block.timestamp;
        FeeSet memory fee = sellFees;
        uint256 totalFee = fee.totalFee;
        uint256 dynamicLiquidityFee = fee.liquidityFee;
        uint256 treasuryFee = fee.treasuryFee;
        uint256 reflectionFee = fee.reflectionFee;
        
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityWallet,
                block.timestamp
            );
        }
        
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
        try dividendTracker.deposit{value: amountETHReflection}() {} catch {}
        
        uint256 amountETHTreasury = address(this).balance;
        payable(treasuryWallet).transfer(amountETHTreasury);
    }

    function setExcludeDividend(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && holder != pair);
        excludeDividend[holder] = exempt;
        if(exempt){
            dividendTracker.setShare(holder, 0);
        }else{
            dividendTracker.setShare(holder, _balances[holder]);
        }
    }

    function setExcludeFeeMultiple(address[] calldata _users, bool exempt) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            excludeFee[_users[i]] = exempt;
        }
    }
    
    function setExcludeTxMultiple(address[] calldata _users, bool exempt) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            excludeMaxTxn[_users[i]] = exempt;
        }
    }
    
    function setReceiver(address _treasuryWallet, address _liquidityWallet) external onlyOwner {
        treasuryWallet = _treasuryWallet;
        liquidityWallet = _liquidityWallet;
    }

    function rescueToken(address _token, uint256 _amount) external onlyOwner {
        IERC20(_token).transfer(msg.sender, _amount);
    }

    function rescueETH(uint256 _amount) external onlyOwner{
        payable(msg.sender).transfer(_amount);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount, bool _ignoreLimit, uint256 _interval) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _amount;
        ignoreLimit = _ignoreLimit;
        interval = _interval;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external onlyOwner {
        dividendTracker.setDistributionCriteria(_minPeriod, _minDistribution, _minimumTokenBalanceForDividends);
    }
    
    function setTxLimit(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 2000);
        _maxTxAmount = amount;
    }
    
    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }
    
    function claim() public {
        dividendTracker.claimDividend(msg.sender);
    }

    function setBuyFees(uint256 _reflectionFee, uint256 _treasuryFee, uint256 _liquidityFee) public onlyOwner {
		buyFees = FeeSet({
			reflectionFee: _reflectionFee,
			treasuryFee: _treasuryFee,
			liquidityFee: _liquidityFee,
			totalFee: _reflectionFee + _treasuryFee + _liquidityFee
		});
	}

	function setSellFees(uint256 _reflectionFee, uint256 _treasuryFee, uint256 _liquidityFee) public onlyOwner {
		sellFees = FeeSet({
			reflectionFee: _reflectionFee,
			treasuryFee: _treasuryFee,
			liquidityFee: _liquidityFee,
			totalFee: _reflectionFee + _treasuryFee + _liquidityFee
		});
	}
}

File 2 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 4 of 9: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT
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;
}

File 5 of 9: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT
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;
}

File 6 of 9: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

interface IUniswapV2Router02 {
    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 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;
}

File 7 of 9: location.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 8 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 9 of 9: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","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":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract ClaimChainCapitalDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSendDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_minimumTokenBalanceForDividends","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeFeeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeTxMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"},{"internalType":"string","name":"newSymbol","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_ignoreLimit","type":"bool"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

600280546001600160a01b031990811661dead1790915560038054909116905560c0604052601160808190527010db185a5b50da185a5b90d85c1a5d185b607a1b60a09081526200005491600691906200069b565b50604080518082019091526004808252632443434360e01b602090920191825262000082916007916200069b565b50620000916009600a62000862565b620000a29064174876e80062000873565b600855620000dc6064620000c86003600854620004d660201b620012461790919060201c565b620004ed60201b620012521790919060201c565b600955620001026064620000c86001600854620004d660201b620012461790919060201c565b600a556064601655601780546001600160a01b03191673130b907a953108a94a8714f9db89ffa601e6f45717905561012c601d55601e805462ffffff191661010117905560085462000158906113889062000895565b601f553480156200016857600080fd5b506200017433620004fb565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015620001d457600080fd5b505afa158015620001e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020f9190620008b8565b600180546001600160a01b0319166001600160a01b039283161790556019546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200026957600080fd5b505afa1580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a49190620008b8565b6001546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002f157600080fd5b505af115801562000306573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032c9190620008b8565b601a80546001600160a01b0319166001600160a01b03928316179055306000908152600560209081526040808320601954909416835292905281902060001990555162000379906200072a565b604051809103906000f08015801562000396573d6000803e3d6000fd5b50601b80546001600160a01b03199081166001600160a01b039384161790915560188054339216821781556000828152600b60209081526040808320805460ff199081166001908117909255308086528386208054831684179055955488168552600c8452828520805482168317905586855282852080548216831790558585528285208054821683179055601a5488168552600d9093528184208054841682179055938352808320805483168517905560025490951682529390208054909316179091556200046b6003600560046200054b565b6200047b600360056004620005f5565b6008546001600160a01b038216600081815260046020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000942565b6000620004e4828462000873565b90505b92915050565b6000620004e4828462000895565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200059a5760405162461bcd60e51b81526020600482018190526024820152600080516020620037a383398151915260448201526064015b60405180910390fd5b6040518060800160405280848152602001838152602001828152602001828486620005c69190620008ea565b620005d29190620008ea565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b03163314620006405760405162461bcd60e51b81526020600482018190526024820152600080516020620037a3833981519152604482015260640162000591565b60405180608001604052808481526020018381526020018281526020018284866200066c9190620008ea565b620006789190620008ea565b905280516012556020810151601355604081015160145560600151601555505050565b828054620006a99062000905565b90600052602060002090601f016020900481019282620006cd576000855562000718565b82601f10620006e857805160ff191683800117855562000718565b8280016001018555821562000718579182015b8281111562000718578251825591602001919060010190620006fb565b506200072692915062000738565b5090565b610ae88062002cbb83390190565b5b8082111562000726576000815560010162000739565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007a65781600019048211156200078a576200078a6200074f565b808516156200079857918102915b93841c93908002906200076a565b509250929050565b600082620007bf57506001620004e7565b81620007ce57506000620004e7565b8160018114620007e75760028114620007f25762000812565b6001915050620004e7565b60ff8411156200080657620008066200074f565b50506001821b620004e7565b5060208310610133831016604e8410600b841016171562000837575081810a620004e7565b62000843838362000765565b80600019048211156200085a576200085a6200074f565b029392505050565b6000620004e460ff841683620007ae565b60008160001904831182151516156200089057620008906200074f565b500290565b600082620008b357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008cb57600080fd5b81516001600160a01b0381168114620008e357600080fd5b9392505050565b600082198211156200090057620009006200074f565b500190565b600181811c908216806200091a57607f821691505b602082108114156200093c57634e487b7160e01b600052602260045260246000fd5b50919050565b61236980620009526000396000f3fe6080604052600436106102295760003560e01c8063715018a6116101235780639e252f00116100ab578063e4748b9e1161006f578063e4748b9e146106d2578063f15cd8bd146106f5578063f2fde38b14610715578063f887ea4014610735578063fb201b1d1461075557600080fd5b80639e252f00146105aa578063a9059cbb146105ca578063ad56c13c146105ea578063dd62ed3e14610649578063e0f3ccf51461068f57600080fd5b806386dcb95e116100f257806386dcb95e146105175780638da5cb5b146105375780638e1269441461055557806395d89b41146105755780639c3182021461058a57600080fd5b8063715018a6146104b6578063778089e6146104cb5780637d1db4a5146104eb57806382247ec01461050157600080fd5b8063313ce567116101b1578063571ac8b011610175578063571ac8b0146104065780635c707f07146104265780635c85974f146104465780636ddd17131461046657806370a082311461048057600080fd5b8063313ce5671461037f57806333f3d6281461039b57806336790a84146103bb5780633eaaf86b146103db5780634e71d92d146103f157600080fd5b80630d075d9c116101f85780630d075d9c146102d25780630f683e90146102f257806318160ddd1461031257806323b872dd146103275780632c1f52161461034757600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102805780630ca61cb1146102b057600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601f5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027361076a565b6040516102559190611d46565b34801561028c57600080fd5b506102a061029b366004611db0565b6107fc565b6040519015158152602001610255565b3480156102bc57600080fd5b506102d06102cb366004611ddc565b610868565b005b3480156102de57600080fd5b506102d06102ed366004611ddc565b61090c565b3480156102fe57600080fd5b506102d061030d366004611ddc565b61098d565b34801561031e57600080fd5b5060085461024b565b34801561033357600080fd5b506102a0610342366004611e08565b610a0e565b34801561035357600080fd5b50601b54610367906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561038b57600080fd5b5060405160098152602001610255565b3480156103a757600080fd5b506102d06103b6366004611db0565b610ad0565b3480156103c757600080fd5b506102d06103d6366004611e57565b610b7f565b3480156103e757600080fd5b5061024b60085481565b3480156103fd57600080fd5b506102d0610c26565b34801561041257600080fd5b506102a0610421366004611edd565b610c7f565b34801561043257600080fd5b506102d0610441366004611f9d565b610c93565b34801561045257600080fd5b506102d0610461366004612001565b610ce4565b34801561047257600080fd5b50601e546102a09060ff1681565b34801561048c57600080fd5b5061024b61049b366004611edd565b6001600160a01b031660009081526004602052604090205490565b3480156104c257600080fd5b506102d0610d2f565b3480156104d757600080fd5b506102d06104e636600461201a565b610d65565b3480156104f757600080fd5b5061024b600a5481565b34801561050d57600080fd5b5061024b60095481565b34801561052357600080fd5b506102d0610532366004612053565b610ea5565b34801561054357600080fd5b506000546001600160a01b0316610367565b34801561056157600080fd5b506102d0610570366004612081565b610efd565b34801561058157600080fd5b50610273610f60565b34801561059657600080fd5b506102d06105a5366004611e57565b610f6f565b3480156105b657600080fd5b506102d06105c5366004612001565b611010565b3480156105d657600080fd5b506102a06105e5366004611db0565b611067565b3480156105f657600080fd5b5061060a610605366004611edd565b611074565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610255565b34801561065557600080fd5b5061024b610664366004612053565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561069b57600080fd5b506012546013546014546015546106b29392919084565b604080519485526020850193909352918301526060820152608001610255565b3480156106de57600080fd5b50600e54600f546010546011546106b29392919084565b34801561070157600080fd5b506102d06107103660046120a6565b611115565b34801561072157600080fd5b506102d0610730366004611edd565b61116e565b34801561074157600080fd5b50601954610367906001600160a01b031681565b34801561076157600080fd5b506102d0611209565b606060068054610779906120ee565b80601f01602080910402602001604051908101604052809291908181526020018280546107a5906120ee565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579086815260200190565b60405180910390a350600192915050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b815260040161089290612129565b60405180910390fd5b601b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146109365760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109609190612174565b61096a9190612174565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146109b75760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109e19190612174565b6109eb9190612174565b905280516012556020810151601355604081015160145560600151601555505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610abb576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600582528381203382529091529190912054610a9691849061125e565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610ac684848461128a565b90505b9392505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b815260040161089290612129565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a919061218c565b505050565b6000546001600160a01b03163314610ba95760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600c600086868560ff16818110610bd157610bd16121a9565b9050602002016020810190610be69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c18816121bf565b915050610bac565b50505050565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c20573d6000803e3d6000fd5b6000610c8d826000196107fc565b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b815260040161089290612129565b8151610cd0906006906020850190611cad565b508051610b7a906007906020840190611cad565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b815260040161089290612129565b6107d0600854610d1e91906121df565b811015610d2a57600080fd5b600a55565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089290612129565b610d63600061158a565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089290612129565b6001600160a01b0382163014801590610db65750601a546001600160a01b03838116911614155b610dbf57600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff19168215801591909117909155610e5757601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401610e21565b5050565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b815260040161089290612129565b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161089290612129565b601b546040516323849a5160e21b8152600481018490526001600160a01b03838116602483015290911690638e12694490604401610e21565b606060078054610779906120ee565b6000546001600160a01b03163314610f995760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600b600086868560ff16818110610fc157610fc16121a9565b9050602002016020810190610fd69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611008816121bf565b915050610f9c565b6000546001600160a01b0316331461103a5760405162461bcd60e51b815260040161089290612129565b604051339082156108fc029083906000818181858888f19350505050158015610ea1573d6000803e3d6000fd5b6000610ac933848461128a565b601b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392169063fbcbc0f19060240160e06040518083038186803b1580156110c657600080fd5b505afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe9190612201565b959e949d50929b5090995097509550909350915050565b6000546001600160a01b0316331461113f5760405162461bcd60e51b815260040161089290612129565b601e8054601f9490945561ffff1990931693151561ff0019169390931761010091151591909102179055601d55565b6000546001600160a01b031633146111985760405162461bcd60e51b815260040161089290612129565b6001600160a01b0381166111fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610892565b6112068161158a565b50565b6000546001600160a01b031633146112335760405162461bcd60e51b815260040161089290612129565b601e805462ff0000191662010000179055565b6000610ac9828461225e565b6000610ac982846121df565b600081848411156112825760405162461bcd60e51b81526004016108929190611d46565b505050900390565b60008383601e60029054906101000a900460ff16806112b657506000546001600160a01b038381169116145b806112ce57506000546001600160a01b038281169116145b6113055760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610892565b60205460ff16156113225761131b8686866115da565b9250611581565b61132d8686866116c0565b42601d54601c5461133e9190612174565b116113585761134b611804565b1561135857611358611855565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600490915291909120546113aa91869061125e565b6001600160a01b0387166000908152600460205260408120919091556113d1878787611b85565b6001600160a01b0387166000908152600460205260409020549091506113f79082611c95565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600d909152205460ff1661149c57601b546001600160a01b03888116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561148957600080fd5b505af192505050801561149a575060015b505b6001600160a01b0386166000908152600d602052604090205460ff1661152e57601b546001600160a01b03878116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561151b57600080fd5b505af192505050801561152c575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157391815260200190565b60405180910390a360019350505b50509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260049091529182205461162b91849061125e565b6001600160a01b03808616600090815260046020526040808220939093559085168152205461165a9083611c95565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ae9086815260200190565b60405180910390a35060019392505050565b600a54811115806116e957506001600160a01b0383166000908152600c602052604090205460ff165b6117295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610892565b6000546001600160a01b0384811691161480159061175057506001600160a01b0382163014155b801561176a57506002546001600160a01b03838116911614155b80156117845750601a546001600160a01b03838116911614155b801561179e57506017546001600160a01b03838116911614155b80156117b857506018546001600160a01b03838116911614155b15610b7a576001600160a01b038216600090815260046020908152604080832054600c9092529091205460ff16806117fb57506009546117f88383612174565b11155b610c2057600080fd5b601a546000906001600160a01b03163314801590611825575060205460ff16155b80156118335750601e5460ff165b80156118505750601f543060009081526004602052604090205410155b905090565b6020805460ff1916600117815530600090815260049091526040902054601e54610100900460ff166118865750601f545b42601c5560408051608081018252601254808252601354602083018190526014549383018490526015546060840181905292939160006118d360026118cd87818b89611246565b90611252565b905060006118e18883611ca1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061191b5761191b6121a9565b6001600160a01b039283166020918202929092010152600180548351921691839190811061194b5761194b6121a9565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac9479061199590869060009087903090429060040161227d565b600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505060006119dc8247611ca190919063ffffffff16565b905060006119f56119ee8a6002611252565b8b90611ca1565b90506000611a0a60026118cd8481878f611246565b90508615611aba5760195460185460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ab691906122ee565b5050505b6000611aca836118cd868c611246565b9050601b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b1c57600080fd5b505af193505050508015611b2e575060015b5060175460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b50506020805460ff191690555050505050505050505050505050565b6001600160a01b0383166000908152600b602052604081205460ff1680611bc457506001600160a01b0383166000908152600b602052604090205460ff165b15611bd0575080610ac9565b601a546000906001600160a01b0386811691161415611bf25750601154611bf7565b506015545b601654600090611c0b906118cd8685611246565b30600090815260046020526040902054909150611c289082611c95565b30600081815260046020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c799085815260200190565b60405180910390a3611c8b8482611ca1565b9695505050505050565b6000610ac98284612174565b6000610ac9828461231c565b828054611cb9906120ee565b90600052602060002090601f016020900481019282611cdb5760008555611d21565b82601f10611cf457805160ff1916838001178555611d21565b82800160010185558215611d21579182015b82811115611d21578251825591602001919060010190611d06565b50611d2d929150611d31565b5090565b5b80821115611d2d5760008155600101611d32565b600060208083528351808285015260005b81811015611d7357858101830151858201604001528201611d57565b81811115611d85576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461120657600080fd5b60008060408385031215611dc357600080fd5b8235611dce81611d9b565b946020939093013593505050565b600080600060608486031215611df157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e1d57600080fd5b8335611e2881611d9b565b92506020840135611e3881611d9b565b929592945050506040919091013590565b801515811461120657600080fd5b600080600060408486031215611e6c57600080fd5b833567ffffffffffffffff80821115611e8457600080fd5b818601915086601f830112611e9857600080fd5b813581811115611ea757600080fd5b8760208260051b8501011115611ebc57600080fd5b60209283019550935050840135611ed281611e49565b809150509250925092565b600060208284031215611eef57600080fd5b8135610ac981611d9b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f2157600080fd5b813567ffffffffffffffff80821115611f3c57611f3c611efa565b604051601f8301601f19908116603f01168101908282118183101715611f6457611f64611efa565b81604052838152866020858801011115611f7d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215611fb057600080fd5b823567ffffffffffffffff80821115611fc857600080fd5b611fd486838701611f10565b93506020850135915080821115611fea57600080fd5b50611ff785828601611f10565b9150509250929050565b60006020828403121561201357600080fd5b5035919050565b6000806040838503121561202d57600080fd5b823561203881611d9b565b9150602083013561204881611e49565b809150509250929050565b6000806040838503121561206657600080fd5b823561207181611d9b565b9150602083013561204881611d9b565b6000806040838503121561209457600080fd5b82359150602083013561204881611d9b565b600080600080608085870312156120bc57600080fd5b84356120c781611e49565b93506020850135925060408501356120de81611e49565b9396929550929360600135925050565b600181811c9082168061210257607f821691505b6020821081141561212357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156121875761218761215e565b500190565b60006020828403121561219e57600080fd5b8151610ac981611e49565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8114156121d6576121d661215e565b60010192915050565b6000826121fc57634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600060e0888a03121561221c57600080fd5b875161222781611d9b565b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b60008160001904831182151516156122785761227861215e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122cd5784516001600160a01b0316835293830193918301916001016122a8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561230357600080fd5b8351925060208401519150604084015190509250925092565b60008282101561232e5761232e61215e565b50039056fea2646970667358221220b1a0e26e06425707462efdeeebd258283f3fefa4f17629f011bb289667b1650864736f6c6343000809003360806040526ec097ce7bc90715b34b9f1000000000600955610e10600a5565b5e620f48000600b55662386f26fc10000600c5534801561003e57600080fd5b50600080546001600160a01b03191633179055610a88806100606000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063e2d2e21911610059578063e2d2e2191461027a578063efca2eed14610290578063fbcbc0f1146102a6578063ffd49c841461030557600080fd5b8063997664d7146101ef578063be10b61414610205578063ce7c2ac21461021b578063d0e30db01461027257600080fd5b806328fd3198116100c657806328fd3198146101835780633a98ef39146101a35780634fab0ae8146101b95780638e126944146101cf57600080fd5b80630ca61cb1146100f857806311ce023d1461011a57806314b6ca961461014357806315f7e05e14610163575b600080fd5b34801561010457600080fd5b506101186101133660046108e7565b61031b565b005b34801561012657600080fd5b5061013060095481565b6040519081526020015b60405180910390f35b34801561014f57600080fd5b5061011861015e36600461092f565b610340565b34801561016f57600080fd5b5061011861017e366004610959565b6104bc565b34801561018f57600080fd5b5061013061019e366004610959565b6104c8565b3480156101af57600080fd5b5061013060055481565b3480156101c557600080fd5b50610130600b5481565b3480156101db57600080fd5b506101186101ea366004610974565b610551565b3480156101fb57600080fd5b5061013060065481565b34801561021157600080fd5b50610130600c5481565b34801561022757600080fd5b50610257610236366004610959565b60046020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161013a565b6101186105b1565b34801561028657600080fd5b5061013060085481565b34801561029c57600080fd5b5061013060075481565b3480156102b257600080fd5b506102c66102c1366004610959565b610607565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161013a565b34801561031157600080fd5b50610130600a5481565b6000546001600160a01b0316331461033257600080fd5b600a92909255600b55600c55565b6000546001600160a01b0316331461035757600080fd5b6001600160a01b0382166000908152600460205260409020541561037e5761037e8261069f565b600c54811180156103a557506001600160a01b038216600090815260046020526040902054155b1561040a57600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055610441565b600c54811115801561043357506001600160a01b03821660009081526004602052604090205415155b15610441576104418261077a565b6001600160a01b03821660009081526004602052604090205460055461047291839161046c9161088d565b906108a0565b6005556001600160a01b0382166000908152600460205260409020819055610499816108ac565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6104c58161069f565b50565b6001600160a01b0381166000908152600460205260408120546104ed57506000919050565b6001600160a01b03821660009081526004602052604081205461050f906108ac565b6001600160a01b03841660009081526004602052604090206001015490915080821161053f575060009392505050565b610549828261088d565b949350505050565b6000546001600160a01b0316331461056857600080fd5b476001600160a01b0382166108fc846105815782610583565b845b6040518115909202916000818181858888f193505050501580156105ab573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146105c857600080fd5b60065434906105d790826108a0565b600655600554600954610601916105f8916105f290856108cf565b906108db565b600854906108a0565b60085550565b6001600160a01b038116600090815260046020526040812082919081908190819081908190610635886104c8565b6001600160a01b038a16600090815260046020908152604080832060020154600390925290912054600a54929950909750955061067290866109b6565b935042841161068257600061068c565b61068c844261088d565b9250600754915050919395979092949650565b6001600160a01b0381166000908152600460205260409020546106bf5750565b60006106ca826104c8565b90508015610776576007546106df90826108a0565b6007556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610718573d6000803e3d6000fd5b506001600160a01b0382166000908152600360209081526040808320429055600490915290206002015461074c90826108a0565b6001600160a01b0383166000908152600460205260409020600281019190915554610499906108ac565b5050565b600180546107899082906109ce565b81548110610799576107996109e5565b60009182526020808320909101546001600160a01b03848116845260029092526040909220546001805492909316929181106107d7576107d76109e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600291829052604081205460018054919392916108229082906109ce565b81548110610832576108326109e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610868576108686109fb565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089982846109ce565b9392505050565b600061089982846109b6565b60006108c96009546105f2600854856108cf90919063ffffffff16565b92915050565b60006108998284610a11565b60006108998284610a30565b6000806000606084860312156108fc57600080fd5b505081359360208301359350604090920135919050565b80356001600160a01b038116811461092a57600080fd5b919050565b6000806040838503121561094257600080fd5b61094b83610913565b946020939093013593505050565b60006020828403121561096b57600080fd5b61089982610913565b6000806040838503121561098757600080fd5b8235915061099760208401610913565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600082198211156109c9576109c96109a0565b500190565b6000828210156109e0576109e06109a0565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615610a2b57610a2b6109a0565b500290565b600082610a4d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015f99e4032ec1302b1b37d74ee99de70dc2ea0a8ded858a7bd0c5c043a93a1d464736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063715018a6116101235780639e252f00116100ab578063e4748b9e1161006f578063e4748b9e146106d2578063f15cd8bd146106f5578063f2fde38b14610715578063f887ea4014610735578063fb201b1d1461075557600080fd5b80639e252f00146105aa578063a9059cbb146105ca578063ad56c13c146105ea578063dd62ed3e14610649578063e0f3ccf51461068f57600080fd5b806386dcb95e116100f257806386dcb95e146105175780638da5cb5b146105375780638e1269441461055557806395d89b41146105755780639c3182021461058a57600080fd5b8063715018a6146104b6578063778089e6146104cb5780637d1db4a5146104eb57806382247ec01461050157600080fd5b8063313ce567116101b1578063571ac8b011610175578063571ac8b0146104065780635c707f07146104265780635c85974f146104465780636ddd17131461046657806370a082311461048057600080fd5b8063313ce5671461037f57806333f3d6281461039b57806336790a84146103bb5780633eaaf86b146103db5780634e71d92d146103f157600080fd5b80630d075d9c116101f85780630d075d9c146102d25780630f683e90146102f257806318160ddd1461031257806323b872dd146103275780632c1f52161461034757600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102805780630ca61cb1146102b057600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601f5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027361076a565b6040516102559190611d46565b34801561028c57600080fd5b506102a061029b366004611db0565b6107fc565b6040519015158152602001610255565b3480156102bc57600080fd5b506102d06102cb366004611ddc565b610868565b005b3480156102de57600080fd5b506102d06102ed366004611ddc565b61090c565b3480156102fe57600080fd5b506102d061030d366004611ddc565b61098d565b34801561031e57600080fd5b5060085461024b565b34801561033357600080fd5b506102a0610342366004611e08565b610a0e565b34801561035357600080fd5b50601b54610367906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561038b57600080fd5b5060405160098152602001610255565b3480156103a757600080fd5b506102d06103b6366004611db0565b610ad0565b3480156103c757600080fd5b506102d06103d6366004611e57565b610b7f565b3480156103e757600080fd5b5061024b60085481565b3480156103fd57600080fd5b506102d0610c26565b34801561041257600080fd5b506102a0610421366004611edd565b610c7f565b34801561043257600080fd5b506102d0610441366004611f9d565b610c93565b34801561045257600080fd5b506102d0610461366004612001565b610ce4565b34801561047257600080fd5b50601e546102a09060ff1681565b34801561048c57600080fd5b5061024b61049b366004611edd565b6001600160a01b031660009081526004602052604090205490565b3480156104c257600080fd5b506102d0610d2f565b3480156104d757600080fd5b506102d06104e636600461201a565b610d65565b3480156104f757600080fd5b5061024b600a5481565b34801561050d57600080fd5b5061024b60095481565b34801561052357600080fd5b506102d0610532366004612053565b610ea5565b34801561054357600080fd5b506000546001600160a01b0316610367565b34801561056157600080fd5b506102d0610570366004612081565b610efd565b34801561058157600080fd5b50610273610f60565b34801561059657600080fd5b506102d06105a5366004611e57565b610f6f565b3480156105b657600080fd5b506102d06105c5366004612001565b611010565b3480156105d657600080fd5b506102a06105e5366004611db0565b611067565b3480156105f657600080fd5b5061060a610605366004611edd565b611074565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610255565b34801561065557600080fd5b5061024b610664366004612053565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561069b57600080fd5b506012546013546014546015546106b29392919084565b604080519485526020850193909352918301526060820152608001610255565b3480156106de57600080fd5b50600e54600f546010546011546106b29392919084565b34801561070157600080fd5b506102d06107103660046120a6565b611115565b34801561072157600080fd5b506102d0610730366004611edd565b61116e565b34801561074157600080fd5b50601954610367906001600160a01b031681565b34801561076157600080fd5b506102d0611209565b606060068054610779906120ee565b80601f01602080910402602001604051908101604052809291908181526020018280546107a5906120ee565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579086815260200190565b60405180910390a350600192915050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b815260040161089290612129565b60405180910390fd5b601b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146109365760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109609190612174565b61096a9190612174565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146109b75760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109e19190612174565b6109eb9190612174565b905280516012556020810151601355604081015160145560600151601555505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610abb576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600582528381203382529091529190912054610a9691849061125e565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610ac684848461128a565b90505b9392505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b815260040161089290612129565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a919061218c565b505050565b6000546001600160a01b03163314610ba95760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600c600086868560ff16818110610bd157610bd16121a9565b9050602002016020810190610be69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c18816121bf565b915050610bac565b50505050565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c20573d6000803e3d6000fd5b6000610c8d826000196107fc565b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b815260040161089290612129565b8151610cd0906006906020850190611cad565b508051610b7a906007906020840190611cad565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b815260040161089290612129565b6107d0600854610d1e91906121df565b811015610d2a57600080fd5b600a55565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089290612129565b610d63600061158a565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089290612129565b6001600160a01b0382163014801590610db65750601a546001600160a01b03838116911614155b610dbf57600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff19168215801591909117909155610e5757601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401610e21565b5050565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b815260040161089290612129565b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161089290612129565b601b546040516323849a5160e21b8152600481018490526001600160a01b03838116602483015290911690638e12694490604401610e21565b606060078054610779906120ee565b6000546001600160a01b03163314610f995760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600b600086868560ff16818110610fc157610fc16121a9565b9050602002016020810190610fd69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611008816121bf565b915050610f9c565b6000546001600160a01b0316331461103a5760405162461bcd60e51b815260040161089290612129565b604051339082156108fc029083906000818181858888f19350505050158015610ea1573d6000803e3d6000fd5b6000610ac933848461128a565b601b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392169063fbcbc0f19060240160e06040518083038186803b1580156110c657600080fd5b505afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe9190612201565b959e949d50929b5090995097509550909350915050565b6000546001600160a01b0316331461113f5760405162461bcd60e51b815260040161089290612129565b601e8054601f9490945561ffff1990931693151561ff0019169390931761010091151591909102179055601d55565b6000546001600160a01b031633146111985760405162461bcd60e51b815260040161089290612129565b6001600160a01b0381166111fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610892565b6112068161158a565b50565b6000546001600160a01b031633146112335760405162461bcd60e51b815260040161089290612129565b601e805462ff0000191662010000179055565b6000610ac9828461225e565b6000610ac982846121df565b600081848411156112825760405162461bcd60e51b81526004016108929190611d46565b505050900390565b60008383601e60029054906101000a900460ff16806112b657506000546001600160a01b038381169116145b806112ce57506000546001600160a01b038281169116145b6113055760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610892565b60205460ff16156113225761131b8686866115da565b9250611581565b61132d8686866116c0565b42601d54601c5461133e9190612174565b116113585761134b611804565b1561135857611358611855565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600490915291909120546113aa91869061125e565b6001600160a01b0387166000908152600460205260408120919091556113d1878787611b85565b6001600160a01b0387166000908152600460205260409020549091506113f79082611c95565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600d909152205460ff1661149c57601b546001600160a01b03888116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561148957600080fd5b505af192505050801561149a575060015b505b6001600160a01b0386166000908152600d602052604090205460ff1661152e57601b546001600160a01b03878116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561151b57600080fd5b505af192505050801561152c575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157391815260200190565b60405180910390a360019350505b50509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260049091529182205461162b91849061125e565b6001600160a01b03808616600090815260046020526040808220939093559085168152205461165a9083611c95565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ae9086815260200190565b60405180910390a35060019392505050565b600a54811115806116e957506001600160a01b0383166000908152600c602052604090205460ff165b6117295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610892565b6000546001600160a01b0384811691161480159061175057506001600160a01b0382163014155b801561176a57506002546001600160a01b03838116911614155b80156117845750601a546001600160a01b03838116911614155b801561179e57506017546001600160a01b03838116911614155b80156117b857506018546001600160a01b03838116911614155b15610b7a576001600160a01b038216600090815260046020908152604080832054600c9092529091205460ff16806117fb57506009546117f88383612174565b11155b610c2057600080fd5b601a546000906001600160a01b03163314801590611825575060205460ff16155b80156118335750601e5460ff165b80156118505750601f543060009081526004602052604090205410155b905090565b6020805460ff1916600117815530600090815260049091526040902054601e54610100900460ff166118865750601f545b42601c5560408051608081018252601254808252601354602083018190526014549383018490526015546060840181905292939160006118d360026118cd87818b89611246565b90611252565b905060006118e18883611ca1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061191b5761191b6121a9565b6001600160a01b039283166020918202929092010152600180548351921691839190811061194b5761194b6121a9565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac9479061199590869060009087903090429060040161227d565b600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505060006119dc8247611ca190919063ffffffff16565b905060006119f56119ee8a6002611252565b8b90611ca1565b90506000611a0a60026118cd8481878f611246565b90508615611aba5760195460185460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ab691906122ee565b5050505b6000611aca836118cd868c611246565b9050601b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b1c57600080fd5b505af193505050508015611b2e575060015b5060175460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b50506020805460ff191690555050505050505050505050505050565b6001600160a01b0383166000908152600b602052604081205460ff1680611bc457506001600160a01b0383166000908152600b602052604090205460ff165b15611bd0575080610ac9565b601a546000906001600160a01b0386811691161415611bf25750601154611bf7565b506015545b601654600090611c0b906118cd8685611246565b30600090815260046020526040902054909150611c289082611c95565b30600081815260046020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c799085815260200190565b60405180910390a3611c8b8482611ca1565b9695505050505050565b6000610ac98284612174565b6000610ac9828461231c565b828054611cb9906120ee565b90600052602060002090601f016020900481019282611cdb5760008555611d21565b82601f10611cf457805160ff1916838001178555611d21565b82800160010185558215611d21579182015b82811115611d21578251825591602001919060010190611d06565b50611d2d929150611d31565b5090565b5b80821115611d2d5760008155600101611d32565b600060208083528351808285015260005b81811015611d7357858101830151858201604001528201611d57565b81811115611d85576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461120657600080fd5b60008060408385031215611dc357600080fd5b8235611dce81611d9b565b946020939093013593505050565b600080600060608486031215611df157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e1d57600080fd5b8335611e2881611d9b565b92506020840135611e3881611d9b565b929592945050506040919091013590565b801515811461120657600080fd5b600080600060408486031215611e6c57600080fd5b833567ffffffffffffffff80821115611e8457600080fd5b818601915086601f830112611e9857600080fd5b813581811115611ea757600080fd5b8760208260051b8501011115611ebc57600080fd5b60209283019550935050840135611ed281611e49565b809150509250925092565b600060208284031215611eef57600080fd5b8135610ac981611d9b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f2157600080fd5b813567ffffffffffffffff80821115611f3c57611f3c611efa565b604051601f8301601f19908116603f01168101908282118183101715611f6457611f64611efa565b81604052838152866020858801011115611f7d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215611fb057600080fd5b823567ffffffffffffffff80821115611fc857600080fd5b611fd486838701611f10565b93506020850135915080821115611fea57600080fd5b50611ff785828601611f10565b9150509250929050565b60006020828403121561201357600080fd5b5035919050565b6000806040838503121561202d57600080fd5b823561203881611d9b565b9150602083013561204881611e49565b809150509250929050565b6000806040838503121561206657600080fd5b823561207181611d9b565b9150602083013561204881611d9b565b6000806040838503121561209457600080fd5b82359150602083013561204881611d9b565b600080600080608085870312156120bc57600080fd5b84356120c781611e49565b93506020850135925060408501356120de81611e49565b9396929550929360600135925050565b600181811c9082168061210257607f821691505b6020821081141561212357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156121875761218761215e565b500190565b60006020828403121561219e57600080fd5b8151610ac981611e49565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8114156121d6576121d661215e565b60010192915050565b6000826121fc57634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600060e0888a03121561221c57600080fd5b875161222781611d9b565b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b60008160001904831182151516156122785761227861215e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122cd5784516001600160a01b0316835293830193918301916001016122a8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561230357600080fd5b8351925060208401519150604084015190509250925092565b60008282101561232e5761232e61215e565b50039056fea2646970667358221220b1a0e26e06425707462efdeeebd258283f3fefa4f17629f011bb289667b1650864736f6c63430008090033

Deployed Bytecode Sourcemap

7089:12081:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8504:50;;;;;;;;;;;;;;;;;;;160:25:9;;;148:2;133:18;8504:50:0;;;;;;;;10252:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10593:216::-;;;;;;;;;;-1:-1:-1;10593:216:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:9;;1412:22;1394:41;;1382:2;1367:18;10593:216:0;1254:187:9;17730:262:0;;;;;;;;;;-1:-1:-1;17730:262:0;;;;;:::i;:::-;;:::i;:::-;;18562:299;;;;;;;;;;-1:-1:-1;18562:299:0;;;;;:::i;:::-;;:::i;18866:301::-;;;;;;;;;;-1:-1:-1;18866:301:0;;;;;:::i;:::-;;:::i;9989:88::-;;;;;;;;;;-1:-1:-1;10062:12:0;;9989:88;;11105:364;;;;;;;;;;-1:-1:-1;11105:364:0;;;;;:::i;:::-;;:::i;8285:55::-;;;;;;;;;;-1:-1:-1;8285:55:0;;;;-1:-1:-1;;;;;8285:55:0;;;;;;-1:-1:-1;;;;;2432:32:9;;;2414:51;;2402:2;2387:18;8285:55:0;2228:243:9;10083:71:0;;;;;;;;;;-1:-1:-1;10083:71:0;;7667:1;2618:36:9;;2606:2;2591:18;10083:71:0;2476:184:9;17199:136:0;;;;;;;;;;-1:-1:-1;17199:136:0;;;;;:::i;:::-;;:::i;16784:208::-;;;;;;;;;;-1:-1:-1;16784:208:0;;;;;:::i;:::-;;:::i;7675:62::-;;;;;;;;;;;;;;;;18470:84;;;;;;;;;;;;;:::i;10817:116::-;;;;;;;;;;-1:-1:-1;10817:116:0;;;;;:::i;:::-;;:::i;9832:145::-;;;;;;;;;;-1:-1:-1;9832:145:0;;;;;:::i;:::-;;:::i;18004:144::-;;;;;;;;;;-1:-1:-1;18004:144:0;;;;;:::i;:::-;;:::i;8407:30::-;;;;;;;;;;-1:-1:-1;8407:30:0;;;;;;;;10340:105;;;;;;;;;;-1:-1:-1;10340:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;10424:18:0;10406:7;10424:18;;;:9;:18;;;;;;;10340:105;1714:103:6;;;;;;;;;;;;;:::i;16206:352:0:-;;;;;;;;;;-1:-1:-1;16206:352:0;;;;;:::i;:::-;;:::i;7808:58::-;;;;;;;;;;;;;;;;7744:56;;;;;;;;;;;;;;;;17004:187;;;;;;;;;;-1:-1:-1;17004:187:0;;;;;:::i;:::-;;:::i;1063:87:6:-;;;;;;;;;;-1:-1:-1;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;1063:87;;12834:148:0;;;;;;;;;;-1:-1:-1;12834:148:0;;;;;:::i;:::-;;:::i;10160:86::-;;;;;;;;;;;;;:::i;16566:206::-;;;;;;;;;;-1:-1:-1;16566:206:0;;;;;:::i;:::-;;:::i;17343:110::-;;;;;;;;;;-1:-1:-1;17343:110:0;;;;;:::i;:::-;;:::i;10941:156::-;;;;;;;;;;-1:-1:-1;10941:156:0;;;;;:::i;:::-;;:::i;18160:298::-;;;;;;;;;;-1:-1:-1;18160:298:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7025:32:9;;;7007:51;;7089:2;7074:18;;7067:34;;;;7117:18;;;7110:34;;;;7175:2;7160:18;;7153:34;;;;7218:3;7203:19;;7196:35;7045:3;7247:19;;7240:35;7306:3;7291:19;;7284:35;6994:3;6979:19;18160:298:0;6692:633:9;10451:133:0;;;;;;;;;;-1:-1:-1;10451:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10553:19:0;;;10535:7;10553:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10451:133;8040:22;;;;;;;;;;-1:-1:-1;8040:22:0;;;;;;;;;;;;;;;;;;;7561:25:9;;;7617:2;7602:18;;7595:34;;;;7645:18;;;7638:34;7703:2;7688:18;;7681:34;7548:3;7533:19;8040:22:0;7330:391:9;8015:21:0;;;;;;;;;;-1:-1:-1;8015:21:0;;;;;;;;;;;;;;;17461:261;;;;;;;;;;-1:-1:-1;17461:261:0;;;;;:::i;:::-;;:::i;1972:201:6:-;;;;;;;;;;-1:-1:-1;1972:201:6;;;;;:::i;:::-;;:::i;8225:32:0:-;;;;;;;;;;-1:-1:-1;8225:32:0;;;;-1:-1:-1;;;;;8225:32:0;;;11477:72;;;;;;;;;;;;;:::i;10252:82::-;10286:13;10320:5;10313:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10252:82;:::o;10593:216::-;10697:10;10668:4;10685:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10685:32:0;;;;;;;;;;:41;;;10742:37;10668:4;;10685:32;;10742:37;;;;10720:6;160:25:9;;148:2;133:18;;14:177;10742:37:0;;;;;;;;-1:-1:-1;10797:4:0;10593:216;;;;:::o;17730:262::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;;;;;;;;;17881:15:0::1;::::0;:103:::1;::::0;-1:-1:-1;;;17881:103:0;;::::1;::::0;::::1;9427:25:9::0;;;9468:18;;;9461:34;;;9511:18;;;9504:34;;;-1:-1:-1;;;;;17881:15:0;;::::1;::::0;:39:::1;::::0;9400:18:9;;17881:103:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17730:262:::0;;;:::o;18562:299::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;18683:173:0::1;;;;;;;;18711:14;18683:173;;;;18744:12;18683:173;;;;18776:13;18683:173;;;;18837:13;18822:12;18805:14;:29;;;;:::i;:::-;:45;;;;:::i;:::-;18683:173:::0;;18673:183;;:7:::1;:183:::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;-1:-1:-1;;;18562:299:0:o;18866:301::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;18989:173:0::1;;;;;;;;19017:14;18989:173;;;;19050:12;18989:173;;;;19082:13;18989:173;;;;19143:13;19128:12;19111:14;:29;;;;:::i;:::-;:45;;;;:::i;:::-;18989:173:::0;;18978:184;;:8:::1;:184:::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;-1:-1:-1;;;18866:301:0:o;11105:364::-;-1:-1:-1;;;;;11225:19:0;;11205:4;11225:19;;;:11;:19;;;;;;;;11245:10;11225:31;;;;;;;;-1:-1:-1;;11225:46:0;11222:180;;11321:69;;;;;;;;;;;-1:-1:-1;;;11321:69:0;;;;;;;;-1:-1:-1;;;;;11321:19:0;;-1:-1:-1;11321:19:0;;;:11;:19;;;;;11341:10;11321:31;;;;;;;;;;:69;;11357:6;;11321:35;:69::i;:::-;-1:-1:-1;;;;;11287:19:0;;;;;;:11;:19;;;;;;;;11307:10;11287:31;;;;;;;:103;11222:180;11421:40;11435:6;11443:9;11454:6;11421:13;:40::i;:::-;11414:47;;11105:364;;;;;;:::o;17199:136::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17283:44:0::1;::::0;-1:-1:-1;;;17283:44:0;;17307:10:::1;17283:44;::::0;::::1;9988:51:9::0;10055:18;;;10048:34;;;-1:-1:-1;;;;;17283:23:0;::::1;::::0;::::1;::::0;9961:18:9;;17283:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17199:136:::0;;:::o;16784:208::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;16888:7:0::1;16884:101;16901:17;::::0;::::1;::::0;-1:-1:-1;16884:101:0::1;;;16967:6;16940:13;:24;16954:6;;16961:1;16954:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16940:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16940:24:0;:33;;-1:-1:-1;;16940:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16920:3;::::1;::::0;::::1;:::i;:::-;;;;16884:101;;;;16784:208:::0;;;:::o;18470:84::-;18505:15;;:41;;-1:-1:-1;;;18505:41:0;;18535:10;18505:41;;;2414:51:9;-1:-1:-1;;;;;18505:15:0;;;;:29;;2387:18:9;;18505:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10817:116;10872:4;10896:29;10904:7;-1:-1:-1;;10896:7:0;:29::i;:::-;10889:36;10817:116;-1:-1:-1;;10817:116:0:o;9832:145::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;9924:15:0;;::::1;::::0;:5:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9950:19:0;;::::1;::::0;:7:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;18004:144::-:0;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;18103:4:0::1;18088:12;;:19;;;;:::i;:::-;18078:6;:29;;18070:38;;;::::0;::::1;;18119:12;:21:::0;18004:144::o;1714:103:6:-;1109:7;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;16206:352:0:-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;16301:23:0;::::1;16319:4;16301:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;16338:4:0::1;::::0;-1:-1:-1;;;;;16328:14:0;;::::1;16338:4:::0;::::1;16328:14;;16301:41;16293:50;;;::::0;::::1;;-1:-1:-1::0;;;;;16354:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;16354:32:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;16397:154:::1;;16422:15;::::0;:35:::1;::::0;-1:-1:-1;;;16422:35:0;;-1:-1:-1;;;;;10006:32:9;;;16422:35:0::1;::::0;::::1;9988:51:9::0;16422:15:0::1;10055:18:9::0;;;10048:34;16422:15:0;;::::1;::::0;:24:::1;::::0;9961:18:9;;16422:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16206:352:::0;;:::o;16397:154::-:1;16488:15;::::0;-1:-1:-1;;;;;16521:17:0;;::::1;16488:15;16521:17:::0;;;:9:::1;:17;::::0;;;;;;;;;16488:51;;-1:-1:-1;;;16488:51:0;;;;::::1;9988::9::0;;;;10055:18;;;10048:34;16488:15:0;::::1;::::0;:24:::1;::::0;9961:18:9;;16488:51:0::1;9814:274:9::0;16397:154:0::1;16206:352:::0;;:::o;17004:187::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17106:14:0::1;:32:::0;;-1:-1:-1;;;;;17106:32:0;;::::1;-1:-1:-1::0;;;;;;17106:32:0;;::::1;;::::0;;;17149:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;17004:187::o;12834:148::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;12924:15:0::1;::::0;:50:::1;::::0;-1:-1:-1;;;12924:50:0;;::::1;::::0;::::1;11338:25:9::0;;;-1:-1:-1;;;;;11399:32:9;;;11379:18;;;11372:60;12924:15:0;;::::1;::::0;:34:::1;::::0;11311:18:9;;12924:50:0::1;11164:274:9::0;10160:86:0;10196:13;10230:7;10223:14;;;;;:::i;16566:206::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;16671:7:0::1;16667:98;16684:17;::::0;::::1;::::0;-1:-1:-1;16667:98:0::1;;;16747:6;16723:10;:21;16734:6;;16741:1;16734:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16723:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16723:21:0;:30;;-1:-1:-1;;16723:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16703:3;::::1;::::0;::::1;:::i;:::-;;;;16667:98;;17343:110:::0;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17408:37:0::1;::::0;17416:10:::1;::::0;17408:37;::::1;;;::::0;17437:7;;17408:37:::1;::::0;;;17437:7;17416:10;17408:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;10941:156:::0;11021:4;11045:44;11059:10;11071:9;11082:6;11045:13;:44::i;18160:298::-;18415:15;;:35;;-1:-1:-1;;;18415:35:0;;-1:-1:-1;;;;;2432:32:9;;;18415:35:0;;;2414:51:9;18256:7:0;;;;;;;;;;;;;;18415:15;;:26;;2387:18:9;;18415:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18408:42;;;;-1:-1:-1;18408:42:0;;-1:-1:-1;18408:42:0;;-1:-1:-1;18408:42:0;-1:-1:-1;18408:42:0;-1:-1:-1;18408:42:0;;-1:-1:-1;18160:298:0;-1:-1:-1;;18160:298:0:o;17461:261::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17590:11:0::1;:22:::0;;17623:13:::1;:23:::0;;;;-1:-1:-1;;17657:26:0;;;17590:22;::::1;;-1:-1:-1::0;;17657:26:0;;;;;17590:22:::1;17657:26:::0;::::1;;::::0;;;::::1;;::::0;;17694:8:::1;:20:::0;17461:261::o;1972:201:6:-;1109:7;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;2061:22:6;::::1;2053:73;;;::::0;-1:-1:-1;;;2053:73:6;;12271:2:9;2053:73:6::1;::::0;::::1;12253:21:9::0;12310:2;12290:18;;;12283:30;12349:34;12329:18;;;12322:62;-1:-1:-1;;;12400:18:9;;;12393:36;12446:19;;2053:73:6::1;12069:402:9::0;2053:73:6::1;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;11477:72:0:-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;11528:6:0::1;:13:::0;;-1:-1:-1;;11528:13:0::1;::::0;::::1;::::0;;11477:72::o;3571:98:7:-;3629:7;3656:5;3660:1;3656;:5;:::i;3970:98::-;4028:7;4055:5;4059:1;4055;:5;:::i;5112:240::-;5232:7;5293:12;5285:6;;;;5277:29;;;;-1:-1:-1;;;5277:29:7;;;;;;;;:::i;:::-;-1:-1:-1;;;5328:5:7;;;5112:240::o;11557:927:0:-;11673:4;11645:6;11653:9;8716:6;;;;;;;;;;;:25;;;-1:-1:-1;1109:7:6;1136:6;-1:-1:-1;;;;;8726:15:0;;;1136:6:6;;8726:15:0;8716:25;:42;;;-1:-1:-1;1109:7:6;1136:6;-1:-1:-1;;;;;8745:13:0;;;1136:6:6;;8745:13:0;8716:42;8708:63;;;;-1:-1:-1;;;8708:63:0;;12851:2:9;8708:63:0;;;12833:21:9;12890:1;12870:18;;;12863:29;-1:-1:-1;;;12908:18:9;;;12901:38;12956:18;;8708:63:0;12649:331:9;8708:63:0;11693:6:::1;::::0;::::1;;11690:63;;;11709:41;11724:6;11732:9;11743:6;11709:14;:41::i;:::-;11702:48;;;;11690:63;11773:39;11786:6;11794:9;11805:6;11773:12;:39::i;:::-;11851:15;11839:8;;11828;;:19;;;;:::i;:::-;:38;11825:110;;11885:9;:7;:9::i;:::-;11882:41;;;11913:10;:8;:10::i;:::-;11967:53;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;11967:53:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;11967:17:0;::::1;-1:-1:-1::0;11967:17:0;;;:9:::1;:17:::0;;;;;;;;:53:::1;::::0;11989:6;;11967:21:::1;:53::i;:::-;-1:-1:-1::0;;;;;11947:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;:73;;;;12056:34:::1;11957:6:::0;12072:9;12083:6;12056:7:::1;:34::i;:::-;-1:-1:-1::0;;;;;12124:20:0;::::1;;::::0;;;:9:::1;:20;::::0;;;;;12031:59;;-1:-1:-1;12124:40:0::1;::::0;12031:59;12124:24:::1;:40::i;:::-;-1:-1:-1::0;;;;;12101:20:0;;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;;:63;;;;12181:23;;::::1;::::0;;:15:::1;:23:::0;;;;;::::1;;12177:99;;12211:15;::::0;-1:-1:-1;;;;;12244:17:0;;::::1;12211:15;12244:17:::0;;;:9:::1;:17;::::0;;;;;;;;;12211:51;;-1:-1:-1;;;12211:51:0;;;;::::1;9988::9::0;;;;10055:18;;;10048:34;12211:15:0;::::1;::::0;:24:::1;::::0;9961:18:9;;12211:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12207:67:::0;::::1;-1:-1:-1::0;;;;;12290:26:0;::::1;;::::0;;;:15:::1;:26;::::0;;;;;::::1;;12286:108;;12323:15;::::0;-1:-1:-1;;;;;12359:20:0;;::::1;12323:15;12359:20:::0;;;:9:::1;:20;::::0;;;;;;;;;12323:57;;-1:-1:-1;;;12323:57:0;;;;::::1;9988:51:9::0;;;;10055:18;;;10048:34;12323:15:0;::::1;::::0;:24:::1;::::0;9961:18:9;;12323:57:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12319:73:::0;::::1;12428:9;-1:-1:-1::0;;;;;12411:43:0::1;12420:6;-1:-1:-1::0;;;;;12411:43:0::1;;12439:14;12411:43;;;;160:25:9::0;;148:2;133:18;;14:177;12411:43:0::1;;;;;;;;12472:4;12465:11;;;8782:1;11557:927:::0;;;;;;;:::o;2333:191:6:-;2407:16;2426:6;;-1:-1:-1;;;;;2443:17:6;;;-1:-1:-1;;;;;;2443:17:6;;;;;;2476:40;;2426:6;;;;;;;2476:40;;2407:16;2476:40;2396:128;2333:191;:::o;12496:330:0:-;12626:53;;;;;;;;;;;-1:-1:-1;;;12626:53:0;;;;;;;;-1:-1:-1;;;;;12626:17:0;;12589:4;12626:17;;;:9;:17;;;;;;;:53;;12648:6;;12626:21;:53::i;:::-;-1:-1:-1;;;;;12606:17:0;;;;;;;:9;:17;;;;;;:73;;;;12713:20;;;;;;;:32;;12738:6;12713:24;:32::i;:::-;-1:-1:-1;;;;;12690:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12761:35;;;;;;;;;;12789:6;160:25:9;;148:2;133:18;;14:177;12761:35:0;;;;;;;;-1:-1:-1;12814:4:0;12496:330;;;;;:::o;12990:533::-;13106:12;;13096:6;:22;;:47;;;-1:-1:-1;;;;;;13122:21:0;;;;;;:13;:21;;;;;;;;13096:47;13088:77;;;;-1:-1:-1;;;13088:77:0;;13187:2:9;13088:77:0;;;13169:21:9;13226:2;13206:18;;;13199:30;-1:-1:-1;;;13245:18:9;;;13238:47;13302:18;;13088:77:0;12985:341:9;13088:77:0;1109:7:6;1136:6;-1:-1:-1;;;;;13190:17:0;;;1136:6:6;;13190:17:0;;;;:47;;-1:-1:-1;;;;;;13211:26:0;;13232:4;13211:26;;13190:47;:78;;;;-1:-1:-1;13263:4:0;;-1:-1:-1;;;;;13242:26:0;;;13263:4;;13242:26;;13190:78;:99;;;;-1:-1:-1;13285:4:0;;-1:-1:-1;;;;;13272:17:0;;;13285:4;;13272:17;;13190:99;:130;;;;-1:-1:-1;13306:14:0;;-1:-1:-1;;;;;13293:27:0;;;13306:14;;13293:27;;13190:130;:162;;;;-1:-1:-1;13337:15:0;;-1:-1:-1;;;;;13324:28:0;;;13337:15;;13324:28;;13190:162;13186:330;;;-1:-1:-1;;;;;10424:18:0;;13368:22;10424:18;;;:9;:18;;;;;;;;;13436:13;:24;;;;;;;;;;:67;;-1:-1:-1;13492:10:0;;13465:23;13482:6;13465:14;:23;:::i;:::-;:37;;13436:67;13428:76;;;;;14154:190;14234:4;;14196;;-1:-1:-1;;;;;14234:4:0;14220:10;:18;;;;:38;;-1:-1:-1;14252:6:0;;;;14251:7;14220:38;:62;;;;-1:-1:-1;14271:11:0;;;;14220:62;:116;;;;-1:-1:-1;14323:13:0;;14313:4;14295:24;;;;:9;:24;;;;;;:41;;14220:116;14213:123;;14154:190;:::o;14352:1846::-;8616:6;:13;;-1:-1:-1;;8616:13:0;8625:4;8616:13;;;14440:4:::1;8616:6:::0;14422:24;;;:9:::1;:24:::0;;;;;;;14461:11:::1;::::0;8616:13;14461:11;::::1;8616:13:::0;14461:11:::1;14457:56;;-1:-1:-1::0;14500:13:0::1;::::0;14457:56:::1;14537:15;14526:8;:26:::0;14563:28:::1;::::0;;::::1;::::0;::::1;::::0;;14583:8:::1;14563:28:::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;:17:::1;14837:56;14563:28;14837:49;14563:28:::0;14837:49;:10;14563:28;14837:14:::1;:35::i;:::-;:39:::0;::::1;:49::i;:56::-;14811:82:::0;-1:-1:-1;14904:20:0::1;14927:31;:10:::0;14811:82;14927:14:::1;:31::i;:::-;14995:16;::::0;;15009:1:::1;14995:16:::0;;;;;::::1;::::0;;14904:54;;-1:-1:-1;14971:21:0::1;::::0;14995:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;14995:16:0::1;14971:40;;15040:4;15022;15027:1;15022:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15022:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;15066:4:::1;::::0;;15056:7;;15066:4;::::1;::::0;15056;;15066;15056:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;15056:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;15141:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;15141:188:0;;15107:21:::1;::::0;15141:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;15213:12;;15083:21:::1;::::0;15256:4;;15283::::1;::::0;15303:15:::1;::::0;15141:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15342:17;15362:40;15388:13;15362:21;:25;;:40;;;;:::i;:::-;15342:60:::0;-1:-1:-1;15415:19:0::1;15437:40;15450:26;:19:::0;15474:1:::1;15450:23;:26::i;:::-;15437:8:::0;;:12:::1;:40::i;:::-;15415:62:::0;-1:-1:-1;15498:26:0::1;15527:58;15583:1;15527:51;15415:62:::0;15527:51;:9;15541:19;15527:13:::1;:34::i;:58::-;15498:87:::0;-1:-1:-1;15599:19:0;;15596:288:::1;;15634:6;::::0;15808:15:::1;::::0;15634:238:::1;::::0;-1:-1:-1;;;15634:238:0;;15710:4:::1;15634:238;::::0;::::1;14657:34:9::0;14707:18;;;14700:34;;;15634:6:0::1;14750:18:9::0;;;14743:34;;;14793:18;;;14786:34;-1:-1:-1;;;;;15808:15:0;;::::1;14836:19:9::0;;;14829:44;15842:15:0::1;14889:19:9::0;;;14882:35;15634:6:0;::::1;::::0;:22:::1;::::0;15664:18;;14591:19:9;;15634:238:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15596:288;15904:27;15934:45;15967:11:::0;15934:28:::1;:9:::0;15948:13;15934::::1;:28::i;:45::-;15904:75;;15994:15;;;;;;;;;-1:-1:-1::0;;;;;15994:15:0::1;-1:-1:-1::0;;;;;15994:23:0::1;;16025:19;15994:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;15990:69:::0;16147:14:::1;::::0;16139:51:::1;::::0;16107:21:::1;::::0;-1:-1:-1;;;;;16147:14:0::1;::::0;16139:51;::::1;;;::::0;16107:21;;16079:25:::1;16139:51:::0;16079:25;16139:51;16107:21;16147:14;16139:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8634:6:0;:14;;-1:-1:-1;;8634:14:0;;;-1:-1:-1;;;;;;;;;;;;;;14352:1846:0:o;13531:615::-;-1:-1:-1;;;;;13641:18:0;;13617:7;13641:18;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;13663:21:0;;;;;;:10;:21;;;;;;;;13641:43;13637:76;;;-1:-1:-1;13707:6:0;13700:13;;13637:76;13774:4;;13734:16;;-1:-1:-1;;;;;13764:14:0;;;13774:4;;13764:14;13761:116;;;-1:-1:-1;13804:16:0;;13761:116;;;-1:-1:-1;13860:17:0;;13761:116;13947:14;;13902:17;;13922:40;;:20;:6;13933:8;13922:10;:20::i;:40::-;14018:4;14000:24;;;;:9;:24;;;;;;13902:60;;-1:-1:-1;14000:39:0;;13902:60;14000:28;:39::i;:::-;13991:4;13973:24;;;;:9;:24;;;;;;;:66;;;;14055:42;;-1:-1:-1;;;;;14055:42:0;;;;;;;14087:9;160:25:9;;148:2;133:18;;14:177;14055:42:0;;;;;;;;14117:21;:6;14128:9;14117:10;:21::i;:::-;14110:28;13531:615;-1:-1:-1;;;;;;13531:615:0:o;2833:98:7:-;2891:7;2918:5;2922:1;2918;:5;:::i;3214:98::-;3272:7;3299:5;3303:1;3299;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:597:9;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:9;756:15;-1:-1:-1;;752:29:9;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:9:o;798:131::-;-1:-1:-1;;;;;873:31:9;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:9:o;1446:316::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;-1:-1:-1;;1631:23:9;;;1701:2;1686:18;;1673:32;;-1:-1:-1;1752:2:9;1737:18;;;1724:32;;1446:316;-1:-1:-1;1446:316:9:o;1767:456::-;1844:6;1852;1860;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1968:9;1955:23;1987:31;2012:5;1987:31;:::i;:::-;2037:5;-1:-1:-1;2094:2:9;2079:18;;2066:32;2107:33;2066:32;2107:33;:::i;:::-;1767:456;;2159:7;;-1:-1:-1;;;2213:2:9;2198:18;;;;2185:32;;1767:456::o;2665:118::-;2751:5;2744:13;2737:21;2730:5;2727:32;2717:60;;2773:1;2770;2763:12;2788:750;2880:6;2888;2896;2949:2;2937:9;2928:7;2924:23;2920:32;2917:52;;;2965:1;2962;2955:12;2917:52;3005:9;2992:23;3034:18;3075:2;3067:6;3064:14;3061:34;;;3091:1;3088;3081:12;3061:34;3129:6;3118:9;3114:22;3104:32;;3174:7;3167:4;3163:2;3159:13;3155:27;3145:55;;3196:1;3193;3186:12;3145:55;3236:2;3223:16;3262:2;3254:6;3251:14;3248:34;;;3278:1;3275;3268:12;3248:34;3333:7;3326:4;3316:6;3313:1;3309:14;3305:2;3301:23;3297:34;3294:47;3291:67;;;3354:1;3351;3344:12;3291:67;3385:4;3377:13;;;;-1:-1:-1;3409:6:9;-1:-1:-1;;3450:20:9;;3437:34;3480:28;3437:34;3480:28;:::i;:::-;3527:5;3517:15;;;2788:750;;;;;:::o;3543:247::-;3602:6;3655:2;3643:9;3634:7;3630:23;3626:32;3623:52;;;3671:1;3668;3661:12;3623:52;3710:9;3697:23;3729:31;3754:5;3729:31;:::i;3795:127::-;3856:10;3851:3;3847:20;3844:1;3837:31;3887:4;3884:1;3877:15;3911:4;3908:1;3901:15;3927:719;3970:5;4023:3;4016:4;4008:6;4004:17;4000:27;3990:55;;4041:1;4038;4031:12;3990:55;4077:6;4064:20;4103:18;4140:2;4136;4133:10;4130:36;;;4146:18;;:::i;:::-;4221:2;4215:9;4189:2;4275:13;;-1:-1:-1;;4271:22:9;;;4295:2;4267:31;4263:40;4251:53;;;4319:18;;;4339:22;;;4316:46;4313:72;;;4365:18;;:::i;:::-;4405:10;4401:2;4394:22;4440:2;4432:6;4425:18;4486:3;4479:4;4474:2;4466:6;4462:15;4458:26;4455:35;4452:55;;;4503:1;4500;4493:12;4452:55;4567:2;4560:4;4552:6;4548:17;4541:4;4533:6;4529:17;4516:54;4614:1;4607:4;4602:2;4594:6;4590:15;4586:26;4579:37;4634:6;4625:15;;;;;;3927:719;;;;:::o;4651:543::-;4739:6;4747;4800:2;4788:9;4779:7;4775:23;4771:32;4768:52;;;4816:1;4813;4806:12;4768:52;4856:9;4843:23;4885:18;4926:2;4918:6;4915:14;4912:34;;;4942:1;4939;4932:12;4912:34;4965:50;5007:7;4998:6;4987:9;4983:22;4965:50;:::i;:::-;4955:60;;5068:2;5057:9;5053:18;5040:32;5024:48;;5097:2;5087:8;5084:16;5081:36;;;5113:1;5110;5103:12;5081:36;;5136:52;5180:7;5169:8;5158:9;5154:24;5136:52;:::i;:::-;5126:62;;;4651:543;;;;;:::o;5199:180::-;5258:6;5311:2;5299:9;5290:7;5286:23;5282:32;5279:52;;;5327:1;5324;5317:12;5279:52;-1:-1:-1;5350:23:9;;5199:180;-1:-1:-1;5199:180:9:o;5384:382::-;5449:6;5457;5510:2;5498:9;5489:7;5485:23;5481:32;5478:52;;;5526:1;5523;5516:12;5478:52;5565:9;5552:23;5584:31;5609:5;5584:31;:::i;:::-;5634:5;-1:-1:-1;5691:2:9;5676:18;;5663:32;5704:30;5663:32;5704:30;:::i;:::-;5753:7;5743:17;;;5384:382;;;;;:::o;5771:388::-;5839:6;5847;5900:2;5888:9;5879:7;5875:23;5871:32;5868:52;;;5916:1;5913;5906:12;5868:52;5955:9;5942:23;5974:31;5999:5;5974:31;:::i;:::-;6024:5;-1:-1:-1;6081:2:9;6066:18;;6053:32;6094:33;6053:32;6094:33;:::i;6372:315::-;6440:6;6448;6501:2;6489:9;6480:7;6476:23;6472:32;6469:52;;;6517:1;6514;6507:12;6469:52;6553:9;6540:23;6530:33;;6613:2;6602:9;6598:18;6585:32;6626:31;6651:5;6626:31;:::i;7726:513::-;7806:6;7814;7822;7830;7883:3;7871:9;7862:7;7858:23;7854:33;7851:53;;;7900:1;7897;7890:12;7851:53;7939:9;7926:23;7958:28;7980:5;7958:28;:::i;:::-;8005:5;-1:-1:-1;8057:2:9;8042:18;;8029:32;;-1:-1:-1;8113:2:9;8098:18;;8085:32;8126:30;8085:32;8126:30;:::i;:::-;7726:513;;;;-1:-1:-1;8175:7:9;;8229:2;8214:18;8201:32;;-1:-1:-1;;7726:513:9:o;8479:380::-;8558:1;8554:12;;;;8601;;;8622:61;;8676:4;8668:6;8664:17;8654:27;;8622:61;8729:2;8721:6;8718:14;8698:18;8695:38;8692:161;;;8775:10;8770:3;8766:20;8763:1;8756:31;8810:4;8807:1;8800:15;8838:4;8835:1;8828:15;8692:161;;8479:380;;;:::o;8864:356::-;9066:2;9048:21;;;9085:18;;;9078:30;9144:34;9139:2;9124:18;;9117:62;9211:2;9196:18;;8864:356::o;9549:127::-;9610:10;9605:3;9601:20;9598:1;9591:31;9641:4;9638:1;9631:15;9665:4;9662:1;9655:15;9681:128;9721:3;9752:1;9748:6;9745:1;9742:13;9739:39;;;9758:18;;:::i;:::-;-1:-1:-1;9794:9:9;;9681:128::o;10093:245::-;10160:6;10213:2;10201:9;10192:7;10188:23;10184:32;10181:52;;;10229:1;10226;10219:12;10181:52;10261:9;10255:16;10280:28;10302:5;10280:28;:::i;10343:127::-;10404:10;10399:3;10395:20;10392:1;10385:31;10435:4;10432:1;10425:15;10459:4;10456:1;10449:15;10475:175;10512:3;10556:4;10549:5;10545:16;10585:4;10576:7;10573:17;10570:43;;;10593:18;;:::i;:::-;10642:1;10629:15;;10475:175;-1:-1:-1;;10475:175:9:o;10655:217::-;10695:1;10721;10711:132;;10765:10;10760:3;10756:20;10753:1;10746:31;10800:4;10797:1;10790:15;10828:4;10825:1;10818:15;10711:132;-1:-1:-1;10857:9:9;;10655:217::o;11443:621::-;11567:6;11575;11583;11591;11599;11607;11615;11668:3;11656:9;11647:7;11643:23;11639:33;11636:53;;;11685:1;11682;11675:12;11636:53;11717:9;11711:16;11736:31;11761:5;11736:31;:::i;:::-;11831:2;11816:18;;11810:25;11875:2;11860:18;;11854:25;11919:2;11904:18;;11898:25;11963:3;11948:19;;11942:26;12008:3;11993:19;;11987:26;12053:3;12038:19;;;12032:26;11786:5;;11810:25;;-1:-1:-1;11854:25:9;;11898;;-1:-1:-1;11942:26:9;;-1:-1:-1;11987:26:9;-1:-1:-1;12032:26:9;;-1:-1:-1;11443:621:9;-1:-1:-1;;;11443:621:9:o;12476:168::-;12516:7;12582:1;12578;12574:6;12570:14;12567:1;12564:21;12559:1;12552:9;12545:17;12541:45;12538:71;;;12589:18;;:::i;:::-;-1:-1:-1;12629:9:9;;12476:168::o;13331:980::-;13593:4;13641:3;13630:9;13626:19;13672:6;13661:9;13654:25;13698:2;13736:6;13731:2;13720:9;13716:18;13709:34;13779:3;13774:2;13763:9;13759:18;13752:31;13803:6;13838;13832:13;13869:6;13861;13854:22;13907:3;13896:9;13892:19;13885:26;;13946:2;13938:6;13934:15;13920:29;;13967:1;13977:195;13991:6;13988:1;13985:13;13977:195;;;14056:13;;-1:-1:-1;;;;;14052:39:9;14040:52;;14147:15;;;;14112:12;;;;14088:1;14006:9;13977:195;;;-1:-1:-1;;;;;;;14228:32:9;;;;14223:2;14208:18;;14201:60;-1:-1:-1;;;14292:3:9;14277:19;14270:35;14189:3;13331:980;-1:-1:-1;;;13331:980:9:o;14928:306::-;15016:6;15024;15032;15085:2;15073:9;15064:7;15060:23;15056:32;15053:52;;;15101:1;15098;15091:12;15053:52;15130:9;15124:16;15114:26;;15180:2;15169:9;15165:18;15159:25;15149:35;;15224:2;15213:9;15209:18;15203:25;15193:35;;14928:306;;;;;:::o;15239:125::-;15279:4;15307:1;15304;15301:8;15298:34;;;15312:18;;:::i;:::-;-1:-1:-1;15349:9:9;;15239:125::o

Swarm Source

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