ETH Price: $3,478.76 (+0.24%)

Token

Ring of Pyro (RING)
 

Overview

Max Total Supply

99,566.053349725 RING

Holders

293

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,858 RING

Value
$0.00
0x4d9dfbf00d85409172fef1074b3e72a3c91717c7
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:
RingOfPyro

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

/*
https://t.me/RINGofPYRO
ringofpyro.com
https://twitter.com/ringofpyro

$RING Ring of Pyro - V3
The ⭕️ Burn: Contract X.

1% BURN OF $RING
1% AUTO LP
2% BURN $PYRO
2% BURN "CONTRACT X"
2% MKTG

"CONTRACT X" to be variable to be called at anytime,
subject to community votes,
we burn the token we want and/or subject to fees.
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

contract RingOfPyro is Context, IERC20, Ownable {
    using SafeMath for uint256;

    uint256 public _totalBurned;
    uint256 public _totalPyroBurned;
    uint256 public _totalContractXBurned;
    address public contractXaddress;
    bool private swapping = false;
    bool public burnMode = false;
    bool public pyroMode = false;
    bool public contractXMode = false;
    bool public liqMode = true;

    address payable public contractXdead = payable(0x000000000000000000000000000000000000dEaD);
    address payable public dead = payable(0x000000000000000000000000000000000000dEaD);
    address public PYRO = 0x89568569DA9C83CB35E59F92f5Df2F6CA829EEeE;
    address public migrator = 0x4f84943645c16DE8007aecAc2B33120191DD3a8d;
    address payable public mktg = payable(0x9C3543BF2d6f46bFdd3a0789628bba6a2B5DA7de);
    address payable public RING = payable(0x858Ff8811Bf1355047f817D09f3e0D800E7054aa);

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;

    address[] private _excluded;  
    bool public tradingLive = false;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000 * 1e9;

    string private _name = "Ring of Pyro";
    string private _symbol = "RING";
    uint8 private _decimals = 9;

    uint256 public j_burnFee = 0; 
    uint256 public _taxes = 8;
    uint256 public j_jeetTax;
    uint256 public jeetBuy = 0;
    uint256 public jeetSell = 0;

    uint256 private _previousBurnFee = j_burnFee;
    uint256 private _previousTaxes = _taxes;
    uint256 private j_previousJeetTax = j_jeetTax;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public j_maxtxn;
    uint256 public _maxWalletAmount;
    uint256 public swapAmount = 70 * 1e9;

    uint256 liqDivisor = 8;  
    uint256 pyroDivisor = 4; 
    uint256 contractXDivisor = 4; 
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _tOwned[address(RING)] = _tTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[RING] = true;
        _isExcludedFromFee[mktg] = true;
        _isExcludedFromFee[dead] = true;
        _isExcludedFromFee[migrator] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), address(RING), _tTotal);
    }

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

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

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

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

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

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

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

    function totalBurned() public view returns (uint256) {
        return _totalBurned;
    }

    function burning(address _sender, uint tokensToBurn) private {  
        require( tokensToBurn <= balanceOf(_sender));
        _tOwned[_sender] = _tOwned[_sender].sub(tokensToBurn);
        _tTotal = _tTotal.sub(tokensToBurn);
        _totalBurned = _totalBurned.add(tokensToBurn);
        emit Transfer(_sender, address(0), tokensToBurn);
    }     
    
    function excludeFromFee(address account) external {
        require(_msgSender() == RING);
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external {
        require(_msgSender() == RING);
        _isExcludedFromFee[account] = false;
    }
       
    function setMaxTxAmount(uint256 maxTxAmount) external {
        require(_msgSender() == RING);
        j_maxtxn = maxTxAmount * 1e9;
    }

    function setMaxWallet(uint256 maxWallet) external {
        require(_msgSender() == RING);
        _maxWalletAmount = maxWallet * 1e9;
    }
    
    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external {
        require(_msgSender() == RING);
        swapAmount = SwapThresholdAmount * 1e9;
    }
    
    function claimETH (address walletaddress) external {
        require(_msgSender() == RING);
        payable(walletaddress).transfer(address(this).balance);
    }

    function claimAltTokens(IERC20 tokenAddress, address walletaddress) external {
        require(_msgSender() == RING);
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }
    
    function clearStuckBalance (address payable walletaddress) external {
        require(_msgSender() == RING);
        walletaddress.transfer(address(this).balance);
    }
    
    function blacklist (address _address) external {
        require(_msgSender() == RING);
        bots[_address] = true;
    }
    
    function removeFromBlacklist (address _address) external {
        require(_msgSender() == RING);
        bots[_address] = false;
    }
    
    function getIsBlacklistedStatus (address _address) external view returns (bool) {
        return bots[_address];
    }
    
    function allowTrades() external onlyOwner {
        require(!tradingLive,"trading is already open");
        _maxWalletAmount = 2000 * 1e9; //2%
        j_maxtxn = 2000 * 1e9; //2% 
        tradingLive = true;
        contractXaddress = (0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE);
    }

    function setSwapAndLiquifyEnabled (bool _enabled) external {
        require(_msgSender() == RING);
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
    
    function removeAllFee() private {
        if(j_burnFee == 0 && _taxes == 0) return;
        
        _previousBurnFee = j_burnFee;
        _previousTaxes = _taxes;
        
        j_burnFee = 0;
        _taxes = 0;
    }
    
    function restoreAllFee() private {
        j_burnFee = _previousBurnFee;
        _taxes = _previousTaxes;
    }
    
    function isExcludedFromFee (address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner() && from != address(this) && to != address(this)) {
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ((!_isExcludedFromFee[from] || !_isExcludedFromFee[to]))) {
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "You are being greedy. Exceeding Max Wallet.");
                require(amount <= j_maxtxn, "Slow down buddy...there is a max transaction");
            }
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !bots[to] && !bots[from]) {
                j_burnFee;
                _taxes;
                j_jeetTax = jeetBuy;
            }
                
            if (to == uniswapV2Pair && from != address(uniswapV2Router) && !bots[to] && !bots[from]) {
                j_burnFee;
                _taxes;
                j_jeetTax = jeetSell;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));        
        if(contractTokenBalance >= j_maxtxn){
            contractTokenBalance = j_maxtxn;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= swapAmount;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = swapAmount;
            swapAndLiquify(contractTokenBalance);
        }

        bool takeFee = true;        
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _transferAgain(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiq = (contractTokenBalance.div(liqDivisor));
        uint256 restOfTokens = (contractTokenBalance.sub(tokensForLiq));
        uint256 tokensForPyro = (contractTokenBalance.div(pyroDivisor));
        uint256 tokensForContractX = (contractTokenBalance.div(contractXDivisor));

        if (pyroMode && tokensForPyro > 0) {
            exchangeForPyro(tokensForPyro);
        }

        if (contractXMode && tokensForContractX > 0) {
            exchangeForContractX(tokensForContractX);
        }

        uint256 half = tokensForLiq.div(2);
        uint256 otherHalf = tokensForLiq.sub(half);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
        if (liqMode) {
            addLiquidity(otherHalf, newBalance);
        }

        uint256 nextBalance = address(this).balance;
        swapTokensForEth(restOfTokens);
        uint256 newestBalance = address(this).balance.sub(nextBalance);
        
        sendETHToFee(newestBalance);   
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            RING,
            block.timestamp
        );
    }       
        
    function _transferAgain(address sender, address recipient, uint256 amount, bool takeFee) private {
        require(!bots[sender] && !bots[recipient]);
        if(!tradingLive){
            require(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient], "Trading is not active yet.");
        } 

        if (!takeFee) { 
                removeAllFee();
        }
        
        uint256 tokensToBurn = amount.mul(j_burnFee).div(100);
        uint256 totalTaxTokens = amount.mul(_taxes.add(j_jeetTax)).div(100);

        uint256 tokensToTransfer = amount.sub(totalTaxTokens.add(tokensToBurn));

        uint256 amountPreBurn = amount.sub(tokensToBurn);
        if (burnMode) {
        burning(sender, tokensToBurn);
        }
        
        _tOwned[sender] = _tOwned[sender].sub(amountPreBurn);
        _tOwned[recipient] = _tOwned[recipient].add(tokensToTransfer);
        _tOwned[address(this)] = _tOwned[address(this)].add(totalTaxTokens);
        
        if(burnMode && sender != uniswapV2Pair && sender != address(this) && sender != address(uniswapV2Router) && (recipient == address(uniswapV2Router) || recipient == uniswapV2Pair)) {
            burning(uniswapV2Pair, tokensToBurn);
        }
        
        emit Transfer(sender, recipient, tokensToTransfer);
        if (totalTaxTokens > 0) {
            emit Transfer(sender, address(this), totalTaxTokens);
        }
        restoreAllFee();
    }

    //this is the last step down from the jeet taxes going to normal
    function beginJeetOne() external {
        require(_msgSender() == RING);
        jeetSell = 8;
    }

    //the first step down from jeet taxes
    function beginJeetTwo() external {
        require(_msgSender() == RING);
        contractXMode = true;
        pyroMode = true;
        burnMode = true;
        j_burnFee = 1;
        _taxes = 7;
        jeetSell = 0;
    }

    function exchangeForPyro(uint256 amount) private {
    	if (amount > 0) {
    	    swapRingForPyro(amount);
            _totalPyroBurned = _totalPyroBurned.add(amount);
	    }
    }

    function exchangeForContractX(uint256 amount) private {
    	if (amount > 0) {
    	    swapRingForContractX(amount);
            _totalContractXBurned = _totalContractXBurned.add(amount);
	    }
    }

    function enablePYRO(bool enabled) external {
        pyroMode = enabled;
        require(_msgSender() == RING);
    }

    function enableContractX(bool enabled) external {
        contractXMode = enabled;
        require(_msgSender() == RING);
    }

    function enableBurnMode(bool enabled) external {
        require(_msgSender() == RING);
        burnMode = enabled;
    }
    
    function enableLiqMode(bool enabled) external {
        require(_msgSender() == RING);
        liqMode = enabled;
    }

    function manualSwap() external {
        require(_msgSender() == RING);
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance > 0) {
            swapTokensForEth(contractBalance);
        }
    }

    function manualSend() external {
        require(_msgSender() == RING);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee(contractETHBalance);
        }
    }

    function sendETHToFee(uint256 amount) private {
        uint256 transferAmt = amount.div(2);
        RING.transfer(transferAmt);
        mktg.transfer(amount.sub(transferAmt));
    }   

    function swapRingForContractX(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = address(contractXaddress);

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Tokens
            path,
            contractXdead, // Burn address
            block.timestamp
        );
    }

    function swapRingForPyro(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = address(PYRO);

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Tokens
            path,
            dead, // Burn address
            block.timestamp
        );
    }

    function setContractXaddress(address payable walletAddress, address payable walletDeadAddress) external {
        require(_msgSender() == RING);
        contractXaddress = walletAddress;
        contractXdead = walletDeadAddress;
    }
    
    function setPyroAddress(address payable walletAddress, address payable walletDeadAddress) external {
        require(_msgSender() == RING);
        PYRO = walletAddress;
        dead = walletDeadAddress;
    }

    function setMktg(address payable _address) external {
        require(_msgSender() == RING || _msgSender() == mktg);
        mktg = _address;
    }

    function changeContractX(address payable j_dead, address addressOfContractX) external {
        require(_msgSender() == RING);
        contractXaddress = addressOfContractX;
        contractXdead = j_dead;
    }
    
    function changePYRO(address payable j_dead, address PYROaddress) external {
        require(_msgSender() == RING);
        PYRO = PYROaddress;
        dead = j_dead;
    }

    function changeTax(uint256 burn, uint256 jeetbuy, uint256 jeetsell, uint256 taxes, uint256 _liqDivisor, uint256 _pyroDivide, uint256 _contractXDivide) external {
        require(_msgSender() == RING);
        j_burnFee = burn;
        jeetBuy = jeetbuy;
        jeetSell = jeetsell;
        _taxes = taxes;
        liqDivisor = _liqDivisor;
        pyroDivisor = _pyroDivide;
        contractXDivisor = _contractXDivide;
    }

    function airdrop(address recipient, uint256 amount) external {
        require(_msgSender() == RING);

        removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10**9);
        restoreAllFee();
    }
    
    function airdropInternal(address recipient, uint256 amount) internal {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        restoreAllFee();
    }
    
    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external {
        require(_msgSender() == RING);

        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while(iterator < newholders.length){
            airdropInternal(newholders[iterator], amounts[iterator] * 10**9);
            iterator += 1;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PYRO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RING","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalContractXBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalPyroBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowTrades","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beginJeetOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beginJeetTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"j_dead","type":"address"},{"internalType":"address","name":"addressOfContractX","type":"address"}],"name":"changeContractX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"j_dead","type":"address"},{"internalType":"address","name":"PYROaddress","type":"address"}],"name":"changePYRO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"jeetbuy","type":"uint256"},{"internalType":"uint256","name":"jeetsell","type":"uint256"},{"internalType":"uint256","name":"taxes","type":"uint256"},{"internalType":"uint256","name":"_liqDivisor","type":"uint256"},{"internalType":"uint256","name":"_pyroDivide","type":"uint256"},{"internalType":"uint256","name":"_contractXDivide","type":"uint256"}],"name":"changeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimAltTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractXMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractXaddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractXdead","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableBurnMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableContractX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableLiqMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enablePYRO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getIsBlacklistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"j_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"j_jeetTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"j_maxtxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktg","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pyroMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletAddress","type":"address"},{"internalType":"address payable","name":"walletDeadAddress","type":"address"}],"name":"setContractXaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setMktg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletAddress","type":"address"},{"internalType":"address payable","name":"walletDeadAddress","type":"address"}],"name":"setPyroAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6005805464ffffffffff60a01b1916600160c01b179055600680546001600160a01b031990811661dead9081179092556007805482169092179091556008805482167389568569da9c83cb35e59f92f5df2f6ca829eeee179055600980548216734f84943645c16de8007aecac2b33120191dd3a8d179055600a80548216739c3543bf2d6f46bfdd3a0789628bba6a2b5da7de179055600b805490911673858ff8811bf1355047f817d09f3e0d800e7054aa1790556011805460ff19169055655af3107a400060125560c0604052600c60808190526b52696e67206f66205079726f60a01b60a0908152620000f89160139190620004a0565b506040805180820190915260048082526352494e4760e01b60209092019182526200012691601491620004a0565b506015805460ff1916600917905560006016819055600860178190556019829055601a829055601b91909155601c819055601854601d55601f805460ff60a81b1916600160a81b17905564104c533c00602255602355600460248190556025553480156200019357600080fd5b506000620001a06200048d565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601254600b546001600160a01b03166000908152600c602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d60208110156200028357600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002d457600080fd5b505afa158015620002e9573d6000803e3d6000fd5b505050506040513d60208110156200030057600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200035357600080fd5b505af115801562000368573d6000803e3d6000fd5b505050506040513d60208110156200037f57600080fd5b5051601f80546001600160a01b03199081166001600160a01b0393841617909155601e80549091169183169190911790556001600e6000620003c062000491565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600b805483168252600e8552838220805487166001908117909155600a54841683528483208054881682179055600754841683528483208054881682179055600954841683528483208054881682179055308352848320805490971617909555935460125483519081529251911693927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a3506200054c565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620004d8576000855562000523565b82601f10620004f357805160ff191683800117855562000523565b8280016001018555821562000523579182015b828111156200052357825182559160200191906001019062000506565b506200053192915062000535565b5090565b5b8082111562000531576000815560010162000536565b613264806200055c6000396000f3fe6080604052600436106103fe5760003560e01c8063764d72bf11610213578063b8157fcf11610123578063e7dfb411116100ab578063f79cb4eb1161007a578063f79cb4eb14610e0f578063f9f92be414610e5d578063fc67364114610e90578063fd01bd4c14610ebc578063ff37656e14610ed157610405565b8063e7dfb41114610d88578063ea2f0b3714610d9d578063ec28438a14610dd0578063f429389014610dfa57610405565b8063d4a3883f116100f2578063d4a3883f14610c3f578063d89135cd14610d0e578063dd62ed3e14610d23578063e2c3e4b814610d5e578063e674dfd714610d7357610405565b8063b8157fcf14610b97578063c03d724214610bac578063c49b9a8014610bd8578063c97f269c14610c0457610405565b80638ea78153116101a65780639f6dcf33116101755780639f6dcf3314610ac0578063a457c2d714610afb578063a8c4a13f14610b34578063a9059cbb14610b49578063aa9bae8814610b8257610405565b80638ea7815314610a6c57806392700d4c14610a8157806395d89b4114610a96578063992ce15714610aab57610405565b806381486bf1116101e257806381486bf1146109f45780638a54523214610a095780638ba4cc3c14610a1e5780638da5cb5b14610a5757610405565b8063764d72bf1461099757806378de776f146109ca5780637cd07e47146109df5780637e66c0b91461099757610405565b80633987764f1161030e5780634f69a4fe116102a157806358e1320c1161027057806358e1320c146108fb5780635d0044ca146109105780636c0a24eb1461093a57806370a082311461094f57806371d8a1d11461098257610405565b80634f69a4fe1461085457806351bc3c85146108805780635342acb414610895578063537df3b6146108c857610405565b806349bd5a5e116102dd57806349bd5a5e146107da5780634a74bb02146107ef5780634b5de117146108045780634de08a211461081957610405565b80633987764f146107425780633f9b760714610757578063437823ec1461079257806346cb4304146107c557610405565b80631884ed451161039157806329e04b4a1161036057806329e04b4a1461068a5780632e8fa821146106b4578063313ce567146106c957806336cf7c87146106f4578063395093511461070957610405565b80631884ed45146105d3578063233296f01461060657806323b872dd1461061b578063243aa6f41461065e57610405565b806311704f52116103cd57806311704f521461053b578063143c72ef146105505780631694505e1461058d57806318160ddd146105be57610405565b806306fdde031461040a578063084e4f8a14610494578063095ea7b3146104db5780630a920f201461051457610405565b3661040557005b600080fd5b34801561041657600080fd5b5061041f610ee6565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610459578181015183820152602001610441565b50505050905090810190601f1680156104865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104a057600080fd5b506104c7600480360360208110156104b757600080fd5b50356001600160a01b0316610f7c565b604080519115158252519081900360200190f35b3480156104e757600080fd5b506104c7600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135610f9a565b34801561052057600080fd5b50610529610fb8565b60408051918252519081900360200190f35b34801561054757600080fd5b506104c7610fbe565b34801561055c57600080fd5b5061058b6004803603604081101561057357600080fd5b506001600160a01b0381358116916020013516610fc7565b005b34801561059957600080fd5b506105a261101c565b604080516001600160a01b039092168252519081900360200190f35b3480156105ca57600080fd5b5061052961102b565b3480156105df57600080fd5b5061058b600480360360208110156105f657600080fd5b50356001600160a01b0316611031565b34801561061257600080fd5b5061052961109f565b34801561062757600080fd5b506104c76004803603606081101561063e57600080fd5b506001600160a01b038135811691602081013590911690604001356110a5565b34801561066a57600080fd5b5061058b6004803603602081101561068157600080fd5b5035151561112c565b34801561069657600080fd5b5061058b600480360360208110156106ad57600080fd5b503561116d565b3480156106c057600080fd5b5061052961119f565b3480156106d557600080fd5b506106de6111a5565b6040805160ff9092168252519081900360200190f35b34801561070057600080fd5b506105a26111ae565b34801561071557600080fd5b506104c76004803603604081101561072c57600080fd5b506001600160a01b0381351690602001356111bd565b34801561074e57600080fd5b506104c761120b565b34801561076357600080fd5b5061058b6004803603604081101561077a57600080fd5b506001600160a01b038135811691602001351661121b565b34801561079e57600080fd5b5061058b600480360360208110156107b557600080fd5b50356001600160a01b031661134a565b3480156107d157600080fd5b50610529611395565b3480156107e657600080fd5b506105a261139b565b3480156107fb57600080fd5b506104c76113aa565b34801561081057600080fd5b506104c76113ba565b34801561082557600080fd5b5061058b6004803603604081101561083c57600080fd5b506001600160a01b03813581169160200135166113ca565b34801561086057600080fd5b5061058b6004803603602081101561087757600080fd5b50351515611422565b34801561088c57600080fd5b5061058b611467565b3480156108a157600080fd5b506104c7600480360360208110156108b857600080fd5b50356001600160a01b03166114aa565b3480156108d457600080fd5b5061058b600480360360208110156108eb57600080fd5b50356001600160a01b03166114c8565b34801561090757600080fd5b50610529611510565b34801561091c57600080fd5b5061058b6004803603602081101561093357600080fd5b5035611516565b34801561094657600080fd5b50610529611548565b34801561095b57600080fd5b506105296004803603602081101561097257600080fd5b50356001600160a01b031661154e565b34801561098e57600080fd5b50610529611569565b3480156109a357600080fd5b5061058b600480360360208110156109ba57600080fd5b50356001600160a01b031661156f565b3480156109d657600080fd5b506104c76115cf565b3480156109eb57600080fd5b506105a26115df565b348015610a0057600080fd5b506105296115ee565b348015610a1557600080fd5b5061058b6115f4565b348015610a2a57600080fd5b5061058b60048036036040811015610a4157600080fd5b506001600160a01b03813516906020013561165e565b348015610a6357600080fd5b506105a26116ad565b348015610a7857600080fd5b506104c76116bc565b348015610a8d57600080fd5b506105296116cc565b348015610aa257600080fd5b5061041f6116d2565b348015610ab757600080fd5b50610529611733565b348015610acc57600080fd5b5061058b60048036036040811015610ae357600080fd5b506001600160a01b0381358116916020013516611739565b348015610b0757600080fd5b506104c760048036036040811015610b1e57600080fd5b506001600160a01b038135169060200135611791565b348015610b4057600080fd5b506105a26117f9565b348015610b5557600080fd5b506104c760048036036040811015610b6c57600080fd5b506001600160a01b038135169060200135611808565b348015610b8e57600080fd5b5061058b61181c565b348015610ba357600080fd5b5061058b61184a565b348015610bb857600080fd5b5061058b60048036036020811015610bcf57600080fd5b50351515611950565b348015610be457600080fd5b5061058b60048036036020811015610bfb57600080fd5b50351515611995565b348015610c1057600080fd5b5061058b60048036036040811015610c2757600080fd5b506001600160a01b0381358116916020013516611a0f565b348015610c4b57600080fd5b5061058b60048036036040811015610c6257600080fd5b810190602081018135640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846020830284011164010000000083111715610cb157600080fd5b919390929091602081019035640100000000811115610ccf57600080fd5b820183602082011115610ce157600080fd5b80359060200191846020830284011164010000000083111715610d0357600080fd5b509092509050611a64565b348015610d1a57600080fd5b50610529611b35565b348015610d2f57600080fd5b5061052960048036036040811015610d4657600080fd5b506001600160a01b0381358116916020013516611b3b565b348015610d6a57600080fd5b506105a2611b66565b348015610d7f57600080fd5b506105a2611b75565b348015610d9457600080fd5b506105a2611b84565b348015610da957600080fd5b5061058b60048036036020811015610dc057600080fd5b50356001600160a01b0316611b93565b348015610ddc57600080fd5b5061058b60048036036020811015610df357600080fd5b5035611bdb565b348015610e0657600080fd5b5061058b611c0d565b348015610e1b57600080fd5b5061058b600480360360e0811015610e3257600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135611c44565b348015610e6957600080fd5b5061058b60048036036020811015610e8057600080fd5b50356001600160a01b0316611c8b565b348015610e9c57600080fd5b5061058b60048036036020811015610eb357600080fd5b50351515611cd6565b348015610ec857600080fd5b50610529611d01565b348015610edd57600080fd5b506105a2611d07565b60138054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f725780601f10610f4757610100808354040283529160200191610f72565b820191906000526020600020905b815481529060010190602001808311610f5557829003601f168201915b5050505050905090565b6001600160a01b03166000908152600f602052604090205460ff1690565b6000610fae610fa7611d16565b8484611d1a565b5060015b92915050565b60175481565b60115460ff1681565b600b546001600160a01b0316610fdb611d16565b6001600160a01b031614610fee57600080fd5b600880546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b601e546001600160a01b031681565b60125490565b600b546001600160a01b0316611045611d16565b6001600160a01b031614806110745750600a546001600160a01b0316611069611d16565b6001600160a01b0316145b61107d57600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60205481565b60006110b2848484611e06565b611122846110be611d16565b61111d85604051806060016040528060288152602001613144602891396001600160a01b038a166000908152600d60205260408120906110fc611d16565b6001600160a01b031681526020810191909152604001600020549190612228565b611d1a565b5060019392505050565b6005805460ff60b81b1916600160b81b83151502179055600b546001600160a01b0316611157611d16565b6001600160a01b03161461116a57600080fd5b50565b600b546001600160a01b0316611181611d16565b6001600160a01b03161461119457600080fd5b633b9aca0002602255565b60225481565b60155460ff1690565b6007546001600160a01b031681565b6000610fae6111ca611d16565b8461111d85600d60006111db611d16565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906122bf565b600554600160b01b900460ff1681565b600b546001600160a01b031661122f611d16565b6001600160a01b03161461124257600080fd5b816001600160a01b031663a9059cbb82846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d60208110156112c957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561131a57600080fd5b505af115801561132e573d6000803e3d6000fd5b505050506040513d602081101561134457600080fd5b50505050565b600b546001600160a01b031661135e611d16565b6001600160a01b03161461137157600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b601a5481565b601f546001600160a01b031681565b601f54600160a81b900460ff1681565b600554600160c01b900460ff1681565b600b546001600160a01b03166113de611d16565b6001600160a01b0316146113f157600080fd5b600880546001600160a01b039283166001600160a01b03199182161790915560078054939092169216919091179055565b600b546001600160a01b0316611436611d16565b6001600160a01b03161461144957600080fd5b60058054911515600160a81b0260ff60a81b19909216919091179055565b600b546001600160a01b031661147b611d16565b6001600160a01b03161461148e57600080fd5b60006114993061154e565b9050801561116a5761116a81612320565b6001600160a01b03166000908152600e602052604090205460ff1690565b600b546001600160a01b03166114dc611d16565b6001600160a01b0316146114ef57600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b60185481565b600b546001600160a01b031661152a611d16565b6001600160a01b03161461153d57600080fd5b633b9aca0002602155565b60215481565b6001600160a01b03166000908152600c602052604090205490565b60165481565b600b546001600160a01b0316611583611d16565b6001600160a01b03161461159657600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156115cb573d6000803e3d6000fd5b5050565b600554600160b81b900460ff1681565b6009546001600160a01b031681565b60035481565b600b546001600160a01b0316611608611d16565b6001600160a01b03161461161b57600080fd5b6005805460ff60a81b1960ff60b01b1960ff60b81b19909216600160b81b1791909116600160b01b1716600160a81b179055600160165560076017556000601a55565b600b546001600160a01b0316611672611d16565b6001600160a01b03161461168557600080fd5b61168d6124c7565b6116a5611698611d16565b8383633b9aca0002611e06565b6115cb6124f9565b6000546001600160a01b031690565b600554600160a81b900460ff1681565b60195481565b60148054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f725780601f10610f4757610100808354040283529160200191610f72565b60045481565b600b546001600160a01b031661174d611d16565b6001600160a01b03161461176057600080fd5b600580546001600160a01b039283166001600160a01b03199182161790915560068054939092169216919091179055565b6000610fae61179e611d16565b8461111d8560405180606001604052806025815260200161320a60259139600d60006117c8611d16565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612228565b6005546001600160a01b031681565b6000610fae611815611d16565b8484611e06565b600b546001600160a01b0316611830611d16565b6001600160a01b03161461184357600080fd5b6008601a55565b611852611d16565b6000546001600160a01b039081169116146118b4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60115460ff161561190c576040805162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015290519081900360640190fd5b6501d1a94a200060218190556020556011805460ff19166001179055600580546001600160a01b0319167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce179055565b600b546001600160a01b0316611964611d16565b6001600160a01b03161461197757600080fd5b60058054911515600160c01b0260ff60c01b19909216919091179055565b600b546001600160a01b03166119a9611d16565b6001600160a01b0316146119bc57600080fd5b601f8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b600b546001600160a01b0316611a23611d16565b6001600160a01b031614611a3657600080fd5b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b600b546001600160a01b0316611a78611d16565b6001600160a01b031614611a8b57600080fd5b6000838214611ae1576040805162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e677468000000000000000000604482015290519081900360640190fd5b83811015611b2e57611b26858583818110611af857fe5b905060200201356001600160a01b0316848484818110611b1457fe5b90506020020135633b9aca0002612507565b600101611ae1565b5050505050565b60025490565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b600a546001600160a01b031681565b6008546001600160a01b031681565b6006546001600160a01b031681565b600b546001600160a01b0316611ba7611d16565b6001600160a01b031614611bba57600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19169055565b600b546001600160a01b0316611bef611d16565b6001600160a01b031614611c0257600080fd5b633b9aca0002602055565b600b546001600160a01b0316611c21611d16565b6001600160a01b031614611c3457600080fd5b47801561116a5761116a81612521565b600b546001600160a01b0316611c58611d16565b6001600160a01b031614611c6b57600080fd5b601696909655601994909455601a92909255601755602355602455602555565b600b546001600160a01b0316611c9f611d16565b6001600160a01b031614611cb257600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6005805460ff60b01b1916600160b01b83151502179055600b546001600160a01b0316611157611d16565b60025481565b600b546001600160a01b031681565b3390565b6001600160a01b038316611d5f5760405162461bcd60e51b81526004018080602001828103825260248152602001806131ba6024913960400191505060405180910390fd5b6001600160a01b038216611da45760405162461bcd60e51b81526004018080602001828103825260228152602001806130d66022913960400191505060405180910390fd5b6001600160a01b038084166000818152600d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611e4b5760405162461bcd60e51b81526004018080602001828103825260258152602001806131956025913960400191505060405180910390fd5b6001600160a01b038216611e905760405162461bcd60e51b81526004018080602001828103825260238152602001806130b36023913960400191505060405180910390fd5b60008111611ecf5760405162461bcd60e51b815260040180806020018281038252602981526020018061316c6029913960400191505060405180910390fd5b611ed76116ad565b6001600160a01b0316836001600160a01b031614158015611f115750611efb6116ad565b6001600160a01b0316826001600160a01b031614155b8015611f2657506001600160a01b0383163014155b8015611f3b57506001600160a01b0382163014155b1561214e57601f546001600160a01b038481169116148015611f6b5750601e546001600160a01b03838116911614155b8015611fb357506001600160a01b0383166000908152600e602052604090205460ff161580611fb357506001600160a01b0382166000908152600e602052604090205460ff16155b1561204c57602154611fce82611fc88561154e565b906122bf565b111561200b5760405162461bcd60e51b815260040180806020018281038252602b8152602001806130f8602b913960400191505060405180910390fd5b60205481111561204c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806131de602c913960400191505060405180910390fd5b601f546001600160a01b0384811691161480156120775750601e546001600160a01b03838116911614155b801561209c57506001600160a01b0382166000908152600f602052604090205460ff16155b80156120c157506001600160a01b0383166000908152600f602052604090205460ff16155b156120cd576019546018555b601f546001600160a01b0383811691161480156120f85750601e546001600160a01b03848116911614155b801561211d57506001600160a01b0382166000908152600f602052604090205460ff16155b801561214257506001600160a01b0383166000908152600f602052604090205460ff16155b1561214e57601a546018555b60006121593061154e565b9050602054811061216957506020545b602254811080159081906121875750601f54600160a01b900460ff16155b80156121a15750601f546001600160a01b03868116911614155b80156121b65750601f54600160a81b900460ff165b156121c95760225491506121c9826125b0565b6001600160a01b0385166000908152600e602052604090205460019060ff168061220b57506001600160a01b0385166000908152600e602052604090205460ff165b15612214575060005b61222086868684612732565b505050505050565b600081848411156122b75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561227c578181015183820152602001612264565b50505050905090810190601f1680156122a95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612319576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061234f57fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123a357600080fd5b505afa1580156123b7573d6000803e3d6000fd5b505050506040513d60208110156123cd57600080fd5b50518151829060019081106123de57fe5b6001600160a01b039283166020918202929092010152601e546124049130911684611d1a565b601e5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561248a578181015183820152602001612472565b505050509050019650505050505050600060405180830381600087803b1580156124b357600080fd5b505af1158015612220573d6000803e3d6000fd5b6016541580156124d75750601754155b156124e1576124f7565b60168054601b5560178054601c55600091829055555b565b601b54601655601c54601755565b61250f6124c7565b6116a561251a611d16565b8383611e06565b600061252e826002612a88565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612569573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6125838484612aca565b6040518115909202916000818181858888f193505050501580156125ab573d6000803e3d6000fd5b505050565b601f805460ff60a01b1916600160a01b1790556023546000906125d4908390612a88565b905060006125e28383612aca565b905060006125fb60245485612a8890919063ffffffff16565b9050600061261460255486612a8890919063ffffffff16565b600554909150600160b01b900460ff1680156126305750600082115b1561263e5761263e82612b0c565b600554600160b81b900460ff1680156126575750600081115b156126655761266581612b2e565b6000612672856002612a88565b905060006126808683612aca565b90504761268c83612320565b60006126984783612aca565b600554909150600160c01b900460ff16156126b7576126b78382612b50565b476126c188612320565b60006126cd4783612aca565b90506126d881612521565b604080518781526020810185905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601f805460ff60a01b19169055505050505050505050565b6001600160a01b0384166000908152600f602052604090205460ff1615801561277457506001600160a01b0383166000908152600f602052604090205460ff16155b61277d57600080fd5b60115460ff16612817576001600160a01b0384166000908152600e602052604090205460ff16806127c657506001600160a01b0383166000908152600e602052604090205460ff165b612817576040805162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604482015290519081900360640190fd5b80612824576128246124c7565b6000612846606461284060165486612c0890919063ffffffff16565b90612a88565b9050600061287060646128406128696018546017546122bf90919063ffffffff16565b8790612c08565b9050600061288861288183856122bf565b8690612aca565b905060006128968685612aca565b600554909150600160a81b900460ff16156128b5576128b58885612c61565b6001600160a01b0388166000908152600c60205260409020546128d89082612aca565b6001600160a01b03808a166000908152600c6020526040808220939093559089168152205461290790836122bf565b6001600160a01b0388166000908152600c602052604080822092909255308152205461293390846122bf565b306000908152600c6020526040902055600554600160a81b900460ff16801561296a5750601f546001600160a01b03898116911614155b801561297f57506001600160a01b0388163014155b80156129995750601e546001600160a01b03898116911614155b80156129c95750601e546001600160a01b03888116911614806129c95750601f546001600160a01b038881169116145b156129e457601f546129e4906001600160a01b031685612c61565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a38215612a765760408051848152905130916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b612a7e6124f9565b5050505050505050565b600061231983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d17565b600061231983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612228565b801561116a57612b1b81612d7c565b600354612b2890826122bf565b60035550565b801561116a57612b3d81612f17565b600454612b4a90826122bf565b60045550565b601e54612b689030906001600160a01b031684611d1a565b601e54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612bdd57600080fd5b505af1158015612bf1573d6000803e3d6000fd5b50505050506040513d606081101561134457600080fd5b600082612c1757506000610fb2565b82820282848281612c2457fe5b04146123195760405162461bcd60e51b81526004018080602001828103825260218152602001806131236021913960400191505060405180910390fd5b612c6a8261154e565b811115612c7657600080fd5b6001600160a01b0382166000908152600c6020526040902054612c999082612aca565b6001600160a01b0383166000908152600c6020526040902055601254612cbf9082612aca565b601255600254612ccf90826122bf565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008183612d665760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561227c578181015183820152602001612264565b506000838581612d7257fe5b0495945050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612dad57fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e0157600080fd5b505afa158015612e15573d6000803e3d6000fd5b505050506040513d6020811015612e2b57600080fd5b5051815182906001908110612e3c57fe5b6001600160a01b039283166020918202929092010152600854825191169082906002908110612e6757fe5b6001600160a01b039283166020918202929092010152601e54612e8d9130911684611d1a565b601e54600754604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b831561248a578181015183820152602001612472565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612f4857fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f9c57600080fd5b505afa158015612fb0573d6000803e3d6000fd5b505050506040513d6020811015612fc657600080fd5b5051815182906001908110612fd757fe5b6001600160a01b03928316602091820292909201015260055482519116908290600290811061300257fe5b6001600160a01b039283166020918202929092010152601e546130289130911684611d1a565b601e54600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b831561248a57818101518382015260200161247256fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373596f7520617265206265696e67206772656564792e20457863656564696e67204d61782057616c6c65742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373536c6f7720646f776e2062756464792e2e2e74686572652069732061206d6178207472616e73616374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e488fd357dc645f64160c3449739dea7f76ca653689153ab0ff9412ad1fdd84a64736f6c63430007060033

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c8063764d72bf11610213578063b8157fcf11610123578063e7dfb411116100ab578063f79cb4eb1161007a578063f79cb4eb14610e0f578063f9f92be414610e5d578063fc67364114610e90578063fd01bd4c14610ebc578063ff37656e14610ed157610405565b8063e7dfb41114610d88578063ea2f0b3714610d9d578063ec28438a14610dd0578063f429389014610dfa57610405565b8063d4a3883f116100f2578063d4a3883f14610c3f578063d89135cd14610d0e578063dd62ed3e14610d23578063e2c3e4b814610d5e578063e674dfd714610d7357610405565b8063b8157fcf14610b97578063c03d724214610bac578063c49b9a8014610bd8578063c97f269c14610c0457610405565b80638ea78153116101a65780639f6dcf33116101755780639f6dcf3314610ac0578063a457c2d714610afb578063a8c4a13f14610b34578063a9059cbb14610b49578063aa9bae8814610b8257610405565b80638ea7815314610a6c57806392700d4c14610a8157806395d89b4114610a96578063992ce15714610aab57610405565b806381486bf1116101e257806381486bf1146109f45780638a54523214610a095780638ba4cc3c14610a1e5780638da5cb5b14610a5757610405565b8063764d72bf1461099757806378de776f146109ca5780637cd07e47146109df5780637e66c0b91461099757610405565b80633987764f1161030e5780634f69a4fe116102a157806358e1320c1161027057806358e1320c146108fb5780635d0044ca146109105780636c0a24eb1461093a57806370a082311461094f57806371d8a1d11461098257610405565b80634f69a4fe1461085457806351bc3c85146108805780635342acb414610895578063537df3b6146108c857610405565b806349bd5a5e116102dd57806349bd5a5e146107da5780634a74bb02146107ef5780634b5de117146108045780634de08a211461081957610405565b80633987764f146107425780633f9b760714610757578063437823ec1461079257806346cb4304146107c557610405565b80631884ed451161039157806329e04b4a1161036057806329e04b4a1461068a5780632e8fa821146106b4578063313ce567146106c957806336cf7c87146106f4578063395093511461070957610405565b80631884ed45146105d3578063233296f01461060657806323b872dd1461061b578063243aa6f41461065e57610405565b806311704f52116103cd57806311704f521461053b578063143c72ef146105505780631694505e1461058d57806318160ddd146105be57610405565b806306fdde031461040a578063084e4f8a14610494578063095ea7b3146104db5780630a920f201461051457610405565b3661040557005b600080fd5b34801561041657600080fd5b5061041f610ee6565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610459578181015183820152602001610441565b50505050905090810190601f1680156104865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104a057600080fd5b506104c7600480360360208110156104b757600080fd5b50356001600160a01b0316610f7c565b604080519115158252519081900360200190f35b3480156104e757600080fd5b506104c7600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135610f9a565b34801561052057600080fd5b50610529610fb8565b60408051918252519081900360200190f35b34801561054757600080fd5b506104c7610fbe565b34801561055c57600080fd5b5061058b6004803603604081101561057357600080fd5b506001600160a01b0381358116916020013516610fc7565b005b34801561059957600080fd5b506105a261101c565b604080516001600160a01b039092168252519081900360200190f35b3480156105ca57600080fd5b5061052961102b565b3480156105df57600080fd5b5061058b600480360360208110156105f657600080fd5b50356001600160a01b0316611031565b34801561061257600080fd5b5061052961109f565b34801561062757600080fd5b506104c76004803603606081101561063e57600080fd5b506001600160a01b038135811691602081013590911690604001356110a5565b34801561066a57600080fd5b5061058b6004803603602081101561068157600080fd5b5035151561112c565b34801561069657600080fd5b5061058b600480360360208110156106ad57600080fd5b503561116d565b3480156106c057600080fd5b5061052961119f565b3480156106d557600080fd5b506106de6111a5565b6040805160ff9092168252519081900360200190f35b34801561070057600080fd5b506105a26111ae565b34801561071557600080fd5b506104c76004803603604081101561072c57600080fd5b506001600160a01b0381351690602001356111bd565b34801561074e57600080fd5b506104c761120b565b34801561076357600080fd5b5061058b6004803603604081101561077a57600080fd5b506001600160a01b038135811691602001351661121b565b34801561079e57600080fd5b5061058b600480360360208110156107b557600080fd5b50356001600160a01b031661134a565b3480156107d157600080fd5b50610529611395565b3480156107e657600080fd5b506105a261139b565b3480156107fb57600080fd5b506104c76113aa565b34801561081057600080fd5b506104c76113ba565b34801561082557600080fd5b5061058b6004803603604081101561083c57600080fd5b506001600160a01b03813581169160200135166113ca565b34801561086057600080fd5b5061058b6004803603602081101561087757600080fd5b50351515611422565b34801561088c57600080fd5b5061058b611467565b3480156108a157600080fd5b506104c7600480360360208110156108b857600080fd5b50356001600160a01b03166114aa565b3480156108d457600080fd5b5061058b600480360360208110156108eb57600080fd5b50356001600160a01b03166114c8565b34801561090757600080fd5b50610529611510565b34801561091c57600080fd5b5061058b6004803603602081101561093357600080fd5b5035611516565b34801561094657600080fd5b50610529611548565b34801561095b57600080fd5b506105296004803603602081101561097257600080fd5b50356001600160a01b031661154e565b34801561098e57600080fd5b50610529611569565b3480156109a357600080fd5b5061058b600480360360208110156109ba57600080fd5b50356001600160a01b031661156f565b3480156109d657600080fd5b506104c76115cf565b3480156109eb57600080fd5b506105a26115df565b348015610a0057600080fd5b506105296115ee565b348015610a1557600080fd5b5061058b6115f4565b348015610a2a57600080fd5b5061058b60048036036040811015610a4157600080fd5b506001600160a01b03813516906020013561165e565b348015610a6357600080fd5b506105a26116ad565b348015610a7857600080fd5b506104c76116bc565b348015610a8d57600080fd5b506105296116cc565b348015610aa257600080fd5b5061041f6116d2565b348015610ab757600080fd5b50610529611733565b348015610acc57600080fd5b5061058b60048036036040811015610ae357600080fd5b506001600160a01b0381358116916020013516611739565b348015610b0757600080fd5b506104c760048036036040811015610b1e57600080fd5b506001600160a01b038135169060200135611791565b348015610b4057600080fd5b506105a26117f9565b348015610b5557600080fd5b506104c760048036036040811015610b6c57600080fd5b506001600160a01b038135169060200135611808565b348015610b8e57600080fd5b5061058b61181c565b348015610ba357600080fd5b5061058b61184a565b348015610bb857600080fd5b5061058b60048036036020811015610bcf57600080fd5b50351515611950565b348015610be457600080fd5b5061058b60048036036020811015610bfb57600080fd5b50351515611995565b348015610c1057600080fd5b5061058b60048036036040811015610c2757600080fd5b506001600160a01b0381358116916020013516611a0f565b348015610c4b57600080fd5b5061058b60048036036040811015610c6257600080fd5b810190602081018135640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846020830284011164010000000083111715610cb157600080fd5b919390929091602081019035640100000000811115610ccf57600080fd5b820183602082011115610ce157600080fd5b80359060200191846020830284011164010000000083111715610d0357600080fd5b509092509050611a64565b348015610d1a57600080fd5b50610529611b35565b348015610d2f57600080fd5b5061052960048036036040811015610d4657600080fd5b506001600160a01b0381358116916020013516611b3b565b348015610d6a57600080fd5b506105a2611b66565b348015610d7f57600080fd5b506105a2611b75565b348015610d9457600080fd5b506105a2611b84565b348015610da957600080fd5b5061058b60048036036020811015610dc057600080fd5b50356001600160a01b0316611b93565b348015610ddc57600080fd5b5061058b60048036036020811015610df357600080fd5b5035611bdb565b348015610e0657600080fd5b5061058b611c0d565b348015610e1b57600080fd5b5061058b600480360360e0811015610e3257600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135611c44565b348015610e6957600080fd5b5061058b60048036036020811015610e8057600080fd5b50356001600160a01b0316611c8b565b348015610e9c57600080fd5b5061058b60048036036020811015610eb357600080fd5b50351515611cd6565b348015610ec857600080fd5b50610529611d01565b348015610edd57600080fd5b506105a2611d07565b60138054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f725780601f10610f4757610100808354040283529160200191610f72565b820191906000526020600020905b815481529060010190602001808311610f5557829003601f168201915b5050505050905090565b6001600160a01b03166000908152600f602052604090205460ff1690565b6000610fae610fa7611d16565b8484611d1a565b5060015b92915050565b60175481565b60115460ff1681565b600b546001600160a01b0316610fdb611d16565b6001600160a01b031614610fee57600080fd5b600880546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b601e546001600160a01b031681565b60125490565b600b546001600160a01b0316611045611d16565b6001600160a01b031614806110745750600a546001600160a01b0316611069611d16565b6001600160a01b0316145b61107d57600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60205481565b60006110b2848484611e06565b611122846110be611d16565b61111d85604051806060016040528060288152602001613144602891396001600160a01b038a166000908152600d60205260408120906110fc611d16565b6001600160a01b031681526020810191909152604001600020549190612228565b611d1a565b5060019392505050565b6005805460ff60b81b1916600160b81b83151502179055600b546001600160a01b0316611157611d16565b6001600160a01b03161461116a57600080fd5b50565b600b546001600160a01b0316611181611d16565b6001600160a01b03161461119457600080fd5b633b9aca0002602255565b60225481565b60155460ff1690565b6007546001600160a01b031681565b6000610fae6111ca611d16565b8461111d85600d60006111db611d16565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906122bf565b600554600160b01b900460ff1681565b600b546001600160a01b031661122f611d16565b6001600160a01b03161461124257600080fd5b816001600160a01b031663a9059cbb82846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d60208110156112c957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561131a57600080fd5b505af115801561132e573d6000803e3d6000fd5b505050506040513d602081101561134457600080fd5b50505050565b600b546001600160a01b031661135e611d16565b6001600160a01b03161461137157600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b601a5481565b601f546001600160a01b031681565b601f54600160a81b900460ff1681565b600554600160c01b900460ff1681565b600b546001600160a01b03166113de611d16565b6001600160a01b0316146113f157600080fd5b600880546001600160a01b039283166001600160a01b03199182161790915560078054939092169216919091179055565b600b546001600160a01b0316611436611d16565b6001600160a01b03161461144957600080fd5b60058054911515600160a81b0260ff60a81b19909216919091179055565b600b546001600160a01b031661147b611d16565b6001600160a01b03161461148e57600080fd5b60006114993061154e565b9050801561116a5761116a81612320565b6001600160a01b03166000908152600e602052604090205460ff1690565b600b546001600160a01b03166114dc611d16565b6001600160a01b0316146114ef57600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b60185481565b600b546001600160a01b031661152a611d16565b6001600160a01b03161461153d57600080fd5b633b9aca0002602155565b60215481565b6001600160a01b03166000908152600c602052604090205490565b60165481565b600b546001600160a01b0316611583611d16565b6001600160a01b03161461159657600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156115cb573d6000803e3d6000fd5b5050565b600554600160b81b900460ff1681565b6009546001600160a01b031681565b60035481565b600b546001600160a01b0316611608611d16565b6001600160a01b03161461161b57600080fd5b6005805460ff60a81b1960ff60b01b1960ff60b81b19909216600160b81b1791909116600160b01b1716600160a81b179055600160165560076017556000601a55565b600b546001600160a01b0316611672611d16565b6001600160a01b03161461168557600080fd5b61168d6124c7565b6116a5611698611d16565b8383633b9aca0002611e06565b6115cb6124f9565b6000546001600160a01b031690565b600554600160a81b900460ff1681565b60195481565b60148054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f725780601f10610f4757610100808354040283529160200191610f72565b60045481565b600b546001600160a01b031661174d611d16565b6001600160a01b03161461176057600080fd5b600580546001600160a01b039283166001600160a01b03199182161790915560068054939092169216919091179055565b6000610fae61179e611d16565b8461111d8560405180606001604052806025815260200161320a60259139600d60006117c8611d16565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612228565b6005546001600160a01b031681565b6000610fae611815611d16565b8484611e06565b600b546001600160a01b0316611830611d16565b6001600160a01b03161461184357600080fd5b6008601a55565b611852611d16565b6000546001600160a01b039081169116146118b4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60115460ff161561190c576040805162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015290519081900360640190fd5b6501d1a94a200060218190556020556011805460ff19166001179055600580546001600160a01b0319167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce179055565b600b546001600160a01b0316611964611d16565b6001600160a01b03161461197757600080fd5b60058054911515600160c01b0260ff60c01b19909216919091179055565b600b546001600160a01b03166119a9611d16565b6001600160a01b0316146119bc57600080fd5b601f8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b600b546001600160a01b0316611a23611d16565b6001600160a01b031614611a3657600080fd5b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b600b546001600160a01b0316611a78611d16565b6001600160a01b031614611a8b57600080fd5b6000838214611ae1576040805162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e677468000000000000000000604482015290519081900360640190fd5b83811015611b2e57611b26858583818110611af857fe5b905060200201356001600160a01b0316848484818110611b1457fe5b90506020020135633b9aca0002612507565b600101611ae1565b5050505050565b60025490565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b600a546001600160a01b031681565b6008546001600160a01b031681565b6006546001600160a01b031681565b600b546001600160a01b0316611ba7611d16565b6001600160a01b031614611bba57600080fd5b6001600160a01b03166000908152600e60205260409020805460ff19169055565b600b546001600160a01b0316611bef611d16565b6001600160a01b031614611c0257600080fd5b633b9aca0002602055565b600b546001600160a01b0316611c21611d16565b6001600160a01b031614611c3457600080fd5b47801561116a5761116a81612521565b600b546001600160a01b0316611c58611d16565b6001600160a01b031614611c6b57600080fd5b601696909655601994909455601a92909255601755602355602455602555565b600b546001600160a01b0316611c9f611d16565b6001600160a01b031614611cb257600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6005805460ff60b01b1916600160b01b83151502179055600b546001600160a01b0316611157611d16565b60025481565b600b546001600160a01b031681565b3390565b6001600160a01b038316611d5f5760405162461bcd60e51b81526004018080602001828103825260248152602001806131ba6024913960400191505060405180910390fd5b6001600160a01b038216611da45760405162461bcd60e51b81526004018080602001828103825260228152602001806130d66022913960400191505060405180910390fd5b6001600160a01b038084166000818152600d6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611e4b5760405162461bcd60e51b81526004018080602001828103825260258152602001806131956025913960400191505060405180910390fd5b6001600160a01b038216611e905760405162461bcd60e51b81526004018080602001828103825260238152602001806130b36023913960400191505060405180910390fd5b60008111611ecf5760405162461bcd60e51b815260040180806020018281038252602981526020018061316c6029913960400191505060405180910390fd5b611ed76116ad565b6001600160a01b0316836001600160a01b031614158015611f115750611efb6116ad565b6001600160a01b0316826001600160a01b031614155b8015611f2657506001600160a01b0383163014155b8015611f3b57506001600160a01b0382163014155b1561214e57601f546001600160a01b038481169116148015611f6b5750601e546001600160a01b03838116911614155b8015611fb357506001600160a01b0383166000908152600e602052604090205460ff161580611fb357506001600160a01b0382166000908152600e602052604090205460ff16155b1561204c57602154611fce82611fc88561154e565b906122bf565b111561200b5760405162461bcd60e51b815260040180806020018281038252602b8152602001806130f8602b913960400191505060405180910390fd5b60205481111561204c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806131de602c913960400191505060405180910390fd5b601f546001600160a01b0384811691161480156120775750601e546001600160a01b03838116911614155b801561209c57506001600160a01b0382166000908152600f602052604090205460ff16155b80156120c157506001600160a01b0383166000908152600f602052604090205460ff16155b156120cd576019546018555b601f546001600160a01b0383811691161480156120f85750601e546001600160a01b03848116911614155b801561211d57506001600160a01b0382166000908152600f602052604090205460ff16155b801561214257506001600160a01b0383166000908152600f602052604090205460ff16155b1561214e57601a546018555b60006121593061154e565b9050602054811061216957506020545b602254811080159081906121875750601f54600160a01b900460ff16155b80156121a15750601f546001600160a01b03868116911614155b80156121b65750601f54600160a81b900460ff165b156121c95760225491506121c9826125b0565b6001600160a01b0385166000908152600e602052604090205460019060ff168061220b57506001600160a01b0385166000908152600e602052604090205460ff165b15612214575060005b61222086868684612732565b505050505050565b600081848411156122b75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561227c578181015183820152602001612264565b50505050905090810190601f1680156122a95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612319576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061234f57fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123a357600080fd5b505afa1580156123b7573d6000803e3d6000fd5b505050506040513d60208110156123cd57600080fd5b50518151829060019081106123de57fe5b6001600160a01b039283166020918202929092010152601e546124049130911684611d1a565b601e5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561248a578181015183820152602001612472565b505050509050019650505050505050600060405180830381600087803b1580156124b357600080fd5b505af1158015612220573d6000803e3d6000fd5b6016541580156124d75750601754155b156124e1576124f7565b60168054601b5560178054601c55600091829055555b565b601b54601655601c54601755565b61250f6124c7565b6116a561251a611d16565b8383611e06565b600061252e826002612a88565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612569573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6125838484612aca565b6040518115909202916000818181858888f193505050501580156125ab573d6000803e3d6000fd5b505050565b601f805460ff60a01b1916600160a01b1790556023546000906125d4908390612a88565b905060006125e28383612aca565b905060006125fb60245485612a8890919063ffffffff16565b9050600061261460255486612a8890919063ffffffff16565b600554909150600160b01b900460ff1680156126305750600082115b1561263e5761263e82612b0c565b600554600160b81b900460ff1680156126575750600081115b156126655761266581612b2e565b6000612672856002612a88565b905060006126808683612aca565b90504761268c83612320565b60006126984783612aca565b600554909150600160c01b900460ff16156126b7576126b78382612b50565b476126c188612320565b60006126cd4783612aca565b90506126d881612521565b604080518781526020810185905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601f805460ff60a01b19169055505050505050505050565b6001600160a01b0384166000908152600f602052604090205460ff1615801561277457506001600160a01b0383166000908152600f602052604090205460ff16155b61277d57600080fd5b60115460ff16612817576001600160a01b0384166000908152600e602052604090205460ff16806127c657506001600160a01b0383166000908152600e602052604090205460ff165b612817576040805162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604482015290519081900360640190fd5b80612824576128246124c7565b6000612846606461284060165486612c0890919063ffffffff16565b90612a88565b9050600061287060646128406128696018546017546122bf90919063ffffffff16565b8790612c08565b9050600061288861288183856122bf565b8690612aca565b905060006128968685612aca565b600554909150600160a81b900460ff16156128b5576128b58885612c61565b6001600160a01b0388166000908152600c60205260409020546128d89082612aca565b6001600160a01b03808a166000908152600c6020526040808220939093559089168152205461290790836122bf565b6001600160a01b0388166000908152600c602052604080822092909255308152205461293390846122bf565b306000908152600c6020526040902055600554600160a81b900460ff16801561296a5750601f546001600160a01b03898116911614155b801561297f57506001600160a01b0388163014155b80156129995750601e546001600160a01b03898116911614155b80156129c95750601e546001600160a01b03888116911614806129c95750601f546001600160a01b038881169116145b156129e457601f546129e4906001600160a01b031685612c61565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a38215612a765760408051848152905130916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b612a7e6124f9565b5050505050505050565b600061231983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d17565b600061231983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612228565b801561116a57612b1b81612d7c565b600354612b2890826122bf565b60035550565b801561116a57612b3d81612f17565b600454612b4a90826122bf565b60045550565b601e54612b689030906001600160a01b031684611d1a565b601e54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612bdd57600080fd5b505af1158015612bf1573d6000803e3d6000fd5b50505050506040513d606081101561134457600080fd5b600082612c1757506000610fb2565b82820282848281612c2457fe5b04146123195760405162461bcd60e51b81526004018080602001828103825260218152602001806131236021913960400191505060405180910390fd5b612c6a8261154e565b811115612c7657600080fd5b6001600160a01b0382166000908152600c6020526040902054612c999082612aca565b6001600160a01b0383166000908152600c6020526040902055601254612cbf9082612aca565b601255600254612ccf90826122bf565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008183612d665760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561227c578181015183820152602001612264565b506000838581612d7257fe5b0495945050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612dad57fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e0157600080fd5b505afa158015612e15573d6000803e3d6000fd5b505050506040513d6020811015612e2b57600080fd5b5051815182906001908110612e3c57fe5b6001600160a01b039283166020918202929092010152600854825191169082906002908110612e6757fe5b6001600160a01b039283166020918202929092010152601e54612e8d9130911684611d1a565b601e54600754604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b831561248a578181015183820152602001612472565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612f4857fe5b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f9c57600080fd5b505afa158015612fb0573d6000803e3d6000fd5b505050506040513d6020811015612fc657600080fd5b5051815182906001908110612fd757fe5b6001600160a01b03928316602091820292909201015260055482519116908290600290811061300257fe5b6001600160a01b039283166020918202929092010152601e546130289130911684611d1a565b601e54600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152885160a487015288519690971696635c11d795968a9694958a9590929160c490910190602087810191028083838b831561248a57818101518382015260200161247256fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373596f7520617265206265696e67206772656564792e20457863656564696e67204d61782057616c6c65742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373536c6f7720646f776e2062756464792e2e2e74686572652069732061206d6178207472616e73616374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e488fd357dc645f64160c3449739dea7f76ca653689153ab0ff9412ad1fdd84a64736f6c63430007060033

Deployed Bytecode Sourcemap

8739:20102:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11971:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:120;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15800:120:0;-1:-1:-1;;;;;15800:120:0;;:::i;:::-;;;;;;;;;;;;;;;;;;12677:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12677:161:0;;;;;;;;:::i;10236:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9943:31;;;;;;;;;;;;;:::i;26761:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26761:213:0;;;;;;;;;;:::i;:::-;;10519:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;10519:41:0;;;;;;;;;;;;;;12248:95;;;;;;;;;;;;;:::i;26982:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26982:150:0;-1:-1:-1;;;;;26982:150:0;;:::i;10689:23::-;;;;;;;;;;;;;:::i;12846:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12846:313:0;;;;;;;;;;;;;;;;;:::i;24281:130::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24281:130:0;;;;:::i;14753:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14753:167:0;;:::i;10757:36::-;;;;;;;;;;;;;:::i;12157:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9260:81;;;;;;;;;;;;;:::i;13167:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13167:218:0;;;;;;;;:::i;9053:28::-;;;;;;;;;;;;;:::i;15104:211::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15104:211:0;;;;;;;;;;:::i;14137:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14137:143:0;-1:-1:-1;;;;;14137:143:0;;:::i;10332:27::-;;;;;;;;;;;;;:::i;10567:28::-;;;;;;;;;;;;;:::i;10636:40::-;;;;;;;;;;;;;:::i;9128:26::-;;;;;;;;;;;;;:::i;27367:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27367:175:0;;;;;;;;;;:::i;24419:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24419:124:0;;;;:::i;24685:235::-;;;;;;;;;;;;;:::i;16915:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16915:124:0;-1:-1:-1;;;;;16915:124:0;;:::i;15650:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15650:138:0;-1:-1:-1;;;;;15650:138:0;;:::i;10268:24::-;;;;;;;;;;;;;:::i;14598:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14598:143:0;;:::i;10719:31::-;;;;;;;;;;;;;:::i;17390:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17390:117:0;-1:-1:-1;;;;;17390:117:0;;:::i;10200:28::-;;;;;;;;;;;;;:::i;15327:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15327:172:0;-1:-1:-1;;;;;15327:172:0;;:::i;9088:33::-;;;;;;;;;;;;;:::i;9419:68::-;;;;;;;;;;;;;:::i;8863:31::-;;;;;;;;;;;;;:::i;23505:232::-;;;;;;;;;;;;;:::i;27993:223::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27993:223:0;;;;;;;;:::i;8400:79::-;;;;;;;;;;;;;:::i;9018:28::-;;;;;;;;;;;;;:::i;10299:26::-;;;;;;;;;;;;;:::i;12062:87::-;;;;;;;;;;;;;:::i;8901:36::-;;;;;;;;;;;;;:::i;27140:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27140:215:0;;;;;;;;;;:::i;13393:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13393:269:0;;;;;;;;:::i;8944:31::-;;;;;;;;;;;;;:::i;12351:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12351:167:0;;;;;;;;:::i;23350:104::-;;;;;;;;;;;;;:::i;15932:294::-;;;;;;;;;;;;;:::i;24555:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24555:122:0;;;;:::i;16234:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16234:204:0;;;;:::i;26510:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26510:239:0;;;;;;;;;;:::i;28421:417::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28421:417:0;;-1:-1:-1;28421:417:0;-1:-1:-1;28421:417:0;:::i;13670:91::-;;;;;;;;;;;;;:::i;12526:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12526:143:0;;;;;;;;;;:::i;9494:81::-;;;;;;;;;;;;;:::i;9348:64::-;;;;;;;;;;;;;:::i;9163:90::-;;;;;;;;;;;;;:::i;14292:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14292:142:0;-1:-1:-1;;;;;14292:142:0;;:::i;14449:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14449:141:0;;:::i;24928:237::-;;;;;;;;;;;;;:::i;27550:435::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27550:435:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15511:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15511:127:0;-1:-1:-1;;;;;15511:127:0;;:::i;24153:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24153:120:0;;;;:::i;8829:27::-;;;;;;;;;;;;;:::i;9582:81::-;;;;;;;;;;;;;:::i;11971:83::-;12041:5;12034:12;;;;;;;;-1:-1:-1;;12034:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12008:13;;12034:12;;12041:5;;12034:12;;12041:5;12034:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11971:83;:::o;15800:120::-;-1:-1:-1;;;;;15898:14:0;15874:4;15898:14;;;:4;:14;;;;;;;;;15800:120::o;12677:161::-;12752:4;12769:39;12778:12;:10;:12::i;:::-;12792:7;12801:6;12769:8;:39::i;:::-;-1:-1:-1;12826:4:0;12677:161;;;;;:::o;10236:25::-;;;;:::o;9943:31::-;;;;;;:::o;26761:213::-;26895:4;;-1:-1:-1;;;;;26895:4:0;26879:12;:10;:12::i;:::-;-1:-1:-1;;;;;26879:20:0;;26871:29;;;;;;26911:4;:20;;-1:-1:-1;;;;;26911:20:0;;;-1:-1:-1;;;;;;26911:20:0;;;;;;;26942:4;:24;;;;;;;;;;;26761:213::o;10519:41::-;;;-1:-1:-1;;;;;10519:41:0;;:::o;12248:95::-;12328:7;;12248:95;:::o;26982:150::-;27069:4;;-1:-1:-1;;;;;27069:4:0;27053:12;:10;:12::i;:::-;-1:-1:-1;;;;;27053:20:0;;:44;;;-1:-1:-1;27093:4:0;;-1:-1:-1;;;;;27093:4:0;27077:12;:10;:12::i;:::-;-1:-1:-1;;;;;27077:20:0;;27053:44;27045:53;;;;;;27109:4;:15;;-1:-1:-1;;;;;;27109:15:0;-1:-1:-1;;;;;27109:15:0;;;;;;;;;;26982:150::o;10689:23::-;;;;:::o;12846:313::-;12944:4;12961:36;12971:6;12979:9;12990:6;12961:9;:36::i;:::-;13008:121;13017:6;13025:12;:10;:12::i;:::-;13039:89;13077:6;13039:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13039:19:0;;;;;;:11;:19;;;;;;13059:12;:10;:12::i;:::-;-1:-1:-1;;;;;13039:33:0;;;;;;;;;;;;-1:-1:-1;13039:33:0;;;:89;:37;:89::i;:::-;13008:8;:121::i;:::-;-1:-1:-1;13147:4:0;12846:313;;;;;:::o;24281:130::-;24340:13;:23;;-1:-1:-1;;;;24340:23:0;-1:-1:-1;;;24340:23:0;;;;;;;24398:4;;-1:-1:-1;;;;;24398:4:0;24382:12;:10;:12::i;:::-;-1:-1:-1;;;;;24382:20:0;;24374:29;;;;;;24281:130;:::o;14753:167::-;14858:4;;-1:-1:-1;;;;;14858:4:0;14842:12;:10;:12::i;:::-;-1:-1:-1;;;;;14842:20:0;;14834:29;;;;;;14909:3;14887:25;14874:10;:38;14753:167::o;10757:36::-;;;;:::o;12157:83::-;12223:9;;;;12157:83;:::o;9260:81::-;;;-1:-1:-1;;;;;9260:81:0;;:::o;13167:218::-;13255:4;13272:83;13281:12;:10;:12::i;:::-;13295:7;13304:50;13343:10;13304:11;:25;13316:12;:10;:12::i;:::-;-1:-1:-1;;;;;13304:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;13304:25:0;;;:34;;;;;;;;;;;:38;:50::i;9053:28::-;;;-1:-1:-1;;;9053:28:0;;;;;:::o;15104:211::-;15216:4;;-1:-1:-1;;;;;15216:4:0;15200:12;:10;:12::i;:::-;-1:-1:-1;;;;;15200:20:0;;15192:29;;;;;;15232:12;-1:-1:-1;;;;;15232:21:0;;15254:13;15269:12;-1:-1:-1;;;;;15269:22:0;;15300:4;15269:37;;;;;;;;;;;;;-1:-1:-1;;;;;15269:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15269:37:0;15232:75;;;-1:-1:-1;;;;;;15232:75:0;;;;;;;-1:-1:-1;;;;;15232:75:0;;;;;;;;;;;;;;;;;;;;15269:37;;15232:75;;;;;;;-1:-1:-1;15232:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;15104:211:0:o;14137:143::-;14222:4;;-1:-1:-1;;;;;14222:4:0;14206:12;:10;:12::i;:::-;-1:-1:-1;;;;;14206:20:0;;14198:29;;;;;;-1:-1:-1;;;;;14238:27:0;;;;;:18;:27;;;;;:34;;-1:-1:-1;;14238:34:0;14268:4;14238:34;;;14137:143::o;10332:27::-;;;;:::o;10567:28::-;;;-1:-1:-1;;;;;10567:28:0;;:::o;10636:40::-;;;-1:-1:-1;;;10636:40:0;;;;;:::o;9128:26::-;;;-1:-1:-1;;;9128:26:0;;;;;:::o;27367:175::-;27476:4;;-1:-1:-1;;;;;27476:4:0;27460:12;:10;:12::i;:::-;-1:-1:-1;;;;;27460:20:0;;27452:29;;;;;;27492:4;:18;;-1:-1:-1;;;;;27492:18:0;;;-1:-1:-1;;;;;;27492:18:0;;;;;;;27521:4;:13;;;;;;;;;;;;;;27367:175::o;24419:124::-;24501:4;;-1:-1:-1;;;;;24501:4:0;24485:12;:10;:12::i;:::-;-1:-1:-1;;;;;24485:20:0;;24477:29;;;;;;24517:8;:18;;;;;-1:-1:-1;;;24517:18:0;-1:-1:-1;;;;24517:18:0;;;;;;;;;24419:124::o;24685:235::-;24751:4;;-1:-1:-1;;;;;24751:4:0;24735:12;:10;:12::i;:::-;-1:-1:-1;;;;;24735:20:0;;24727:29;;;;;;24767:23;24793:24;24811:4;24793:9;:24::i;:::-;24767:50;-1:-1:-1;24832:19:0;;24828:85;;24868:33;24885:15;24868:16;:33::i;16915:124::-;-1:-1:-1;;;;;17004:27:0;16980:4;17004:27;;;:18;:27;;;;;;;;;16915:124::o;15650:138::-;15742:4;;-1:-1:-1;;;;;15742:4:0;15726:12;:10;:12::i;:::-;-1:-1:-1;;;;;15726:20:0;;15718:29;;;;;;-1:-1:-1;;;;;15758:14:0;15775:5;15758:14;;;:4;:14;;;;;:22;;-1:-1:-1;;15758:22:0;;;15650:138::o;10268:24::-;;;;:::o;14598:143::-;14683:4;;-1:-1:-1;;;;;14683:4:0;14667:12;:10;:12::i;:::-;-1:-1:-1;;;;;14667:20:0;;14659:29;;;;;;14730:3;14718:15;14699:16;:34;14598:143::o;10719:31::-;;;;:::o;17390:117::-;-1:-1:-1;;;;;17483:16:0;17456:7;17483:16;;;:7;:16;;;;;;;17390:117::o;10200:28::-;;;;:::o;15327:172::-;15430:4;;-1:-1:-1;;;;;15430:4:0;15414:12;:10;:12::i;:::-;-1:-1:-1;;;;;15414:20:0;;15406:29;;;;;;15446:45;;-1:-1:-1;;;;;15446:22:0;;;15469:21;15446:45;;;;;;;;;15469:21;15446:22;:45;;;;;;;;;;;;;;;;;;;;;15327:172;:::o;9088:33::-;;;-1:-1:-1;;;9088:33:0;;;;;:::o;9419:68::-;;;-1:-1:-1;;;;;9419:68:0;;:::o;8863:31::-;;;;:::o;23505:232::-;23573:4;;-1:-1:-1;;;;;23573:4:0;23557:12;:10;:12::i;:::-;-1:-1:-1;;;;;23557:20:0;;23549:29;;;;;;23589:13;:20;;-1:-1:-1;;;;;;;;;;;;23589:20:0;;;-1:-1:-1;;;23589:20:0;23620:15;;;;-1:-1:-1;;;23620:15:0;23646;-1:-1:-1;;;23646:15:0;;;23605:4;23620:8;23672:13;23705:1;23589:13;23696:10;23589:20;23717:8;:12;23505:232::o;27993:223::-;28089:4;;-1:-1:-1;;;;;28089:4:0;28073:12;:10;:12::i;:::-;-1:-1:-1;;;;;28073:20:0;;28065:29;;;;;;28107:14;:12;:14::i;:::-;28132:50;28142:12;:10;:12::i;:::-;28156:9;28167:6;28176:5;28167:14;28132:9;:50::i;:::-;28193:15;:13;:15::i;8400:79::-;8438:7;8465:6;-1:-1:-1;;;;;8465:6:0;8400:79;:::o;9018:28::-;;;-1:-1:-1;;;9018:28:0;;;;;:::o;10299:26::-;;;;:::o;12062:87::-;12134:7;12127:14;;;;;;;;-1:-1:-1;;12127:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12101:13;;12127:14;;12134:7;;12127:14;;12134:7;12127:14;;;;;;;;;;;;;;;;;;;;;;;;8901:36;;;;:::o;27140:215::-;27261:4;;-1:-1:-1;;;;;27261:4:0;27245:12;:10;:12::i;:::-;-1:-1:-1;;;;;27245:20:0;;27237:29;;;;;;27277:16;:37;;-1:-1:-1;;;;;27277:37:0;;;-1:-1:-1;;;;;;27277:37:0;;;;;;;27325:13;:22;;;;;;;;;;;;;;27140:215::o;13393:269::-;13486:4;13503:129;13512:12;:10;:12::i;:::-;13526:7;13535:96;13574:15;13535:96;;;;;;;;;;;;;;;;;:11;:25;13547:12;:10;:12::i;:::-;-1:-1:-1;;;;;13535:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;13535:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;8944:31::-;;;-1:-1:-1;;;;;8944:31:0;;:::o;12351:167::-;12429:4;12446:42;12456:12;:10;:12::i;:::-;12470:9;12481:6;12446:9;:42::i;23350:104::-;23418:4;;-1:-1:-1;;;;;23418:4:0;23402:12;:10;:12::i;:::-;-1:-1:-1;;;;;23402:20:0;;23394:29;;;;;;23445:1;23434:8;:12;23350:104::o;15932:294::-;8537:12;:10;:12::i;:::-;8527:6;;-1:-1:-1;;;;;8527:6:0;;;:22;;;8519:67;;;;;-1:-1:-1;;;8519:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15994:11:::1;::::0;::::1;;15993:12;15985:47;;;::::0;;-1:-1:-1;;;15985:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16062:10;16043:16;:29:::0;;;16088:8:::1;:21:::0;16126:11:::1;:18:::0;;-1:-1:-1;;16126:18:0::1;-1:-1:-1::0;16126:18:0::1;::::0;;16155:16:::1;:63:::0;;-1:-1:-1;;;;;;16155:63:0::1;16175:42;16155:63;::::0;;15932:294::o;24555:122::-;24636:4;;-1:-1:-1;;;;;24636:4:0;24620:12;:10;:12::i;:::-;-1:-1:-1;;;;;24620:20:0;;24612:29;;;;;;24652:7;:17;;;;;-1:-1:-1;;;24652:17:0;-1:-1:-1;;;;24652:17:0;;;;;;;;;24555:122::o;16234:204::-;16328:4;;-1:-1:-1;;;;;16328:4:0;16312:12;:10;:12::i;:::-;-1:-1:-1;;;;;16312:20:0;;16304:29;;;;;;16344:21;:32;;;;;-1:-1:-1;;;16344:32:0;;-1:-1:-1;;;;16344:32:0;;;;;;;;;;16392:38;;;;;;;;;;;;;;;;16234:204;:::o;26510:239::-;26649:4;;-1:-1:-1;;;;;26649:4:0;26633:12;:10;:12::i;:::-;-1:-1:-1;;;;;26633:20:0;;26625:29;;;;;;26665:16;:32;;-1:-1:-1;;;;;26665:32:0;;;-1:-1:-1;;;;;;26665:32:0;;;;;;;26708:13;:33;;;;;;;;;;;26510:239::o;28421:417::-;28546:4;;-1:-1:-1;;;;;28546:4:0;28530:12;:10;:12::i;:::-;-1:-1:-1;;;;;28530:20:0;;28522:29;;;;;;28564:16;28603:35;;;28595:71;;;;;-1:-1:-1;;;28595:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28683:28;;;28677:154;;;28727:64;28743:10;;28754:8;28743:20;;;;;;;;;;;;;-1:-1:-1;;;;;28743:20:0;28765:7;;28773:8;28765:17;;;;;;;;;;;;;28785:5;28765:25;28727:15;:64::i;:::-;28818:1;28806:13;28677:154;;;28421:417;;;;;:::o;13670:91::-;13741:12;;13670:91;:::o;12526:143::-;-1:-1:-1;;;;;12634:18:0;;;12607:7;12634:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12526:143::o;9494:81::-;;;-1:-1:-1;;;;;9494:81:0;;:::o;9348:64::-;;;-1:-1:-1;;;;;9348:64:0;;:::o;9163:90::-;;;-1:-1:-1;;;;;9163:90:0;;:::o;14292:142::-;14375:4;;-1:-1:-1;;;;;14375:4:0;14359:12;:10;:12::i;:::-;-1:-1:-1;;;;;14359:20:0;;14351:29;;;;;;-1:-1:-1;;;;;14391:27:0;14421:5;14391:27;;;:18;:27;;;;;:35;;-1:-1:-1;;14391:35:0;;;14292:142::o;14449:141::-;14538:4;;-1:-1:-1;;;;;14538:4:0;14522:12;:10;:12::i;:::-;-1:-1:-1;;;;;14522:20:0;;14514:29;;;;;;14579:3;14565:17;14554:8;:28;14449:141::o;24928:237::-;24994:4;;-1:-1:-1;;;;;24994:4:0;24978:12;:10;:12::i;:::-;-1:-1:-1;;;;;24978:20:0;;24970:29;;;;;;25039:21;25075:22;;25071:87;;25114:32;25127:18;25114:12;:32::i;27550:435::-;27745:4;;-1:-1:-1;;;;;27745:4:0;27729:12;:10;:12::i;:::-;-1:-1:-1;;;;;27729:20:0;;27721:29;;;;;;27761:9;:16;;;;27788:7;:17;;;;27816:8;:19;;;;27846:6;:14;27871:10;:24;27906:11;:25;27942:16;:35;27550:435::o;15511:127::-;15593:4;;-1:-1:-1;;;;;15593:4:0;15577:12;:10;:12::i;:::-;-1:-1:-1;;;;;15577:20:0;;15569:29;;;;;;-1:-1:-1;;;;;15609:14:0;;;;;:4;:14;;;;;:21;;-1:-1:-1;;15609:21:0;15626:4;15609:21;;;15511:127::o;24153:120::-;24207:8;:18;;-1:-1:-1;;;;24207:18:0;-1:-1:-1;;;24207:18:0;;;;;;;24260:4;;-1:-1:-1;;;;;24260:4:0;24244:12;:10;:12::i;8829:27::-;;;;:::o;9582:81::-;;;-1:-1:-1;;;;;9582:81:0;;:::o;455:98::-;535:10;455:98;:::o;17047:335::-;-1:-1:-1;;;;;17140:19:0;;17132:68;;;;-1:-1:-1;;;17132:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17219:21:0;;17211:68;;;;-1:-1:-1;;;17211:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17290:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17342:32;;;;;;;;;;;;;;;;;17047:335;;;:::o;17515:1904::-;-1:-1:-1;;;;;17603:18:0;;17595:68;;;;-1:-1:-1;;;17595:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17682:16:0;;17674:64;;;;-1:-1:-1;;;17674:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17766:1;17757:6;:10;17749:64;;;;-1:-1:-1;;;17749:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17838:7;:5;:7::i;:::-;-1:-1:-1;;;;;17830:15:0;:4;-1:-1:-1;;;;;17830:15:0;;;:32;;;;;17855:7;:5;:7::i;:::-;-1:-1:-1;;;;;17849:13:0;:2;-1:-1:-1;;;;;17849:13:0;;;17830:32;:57;;;;-1:-1:-1;;;;;;17866:21:0;;17882:4;17866:21;;17830:57;:80;;;;-1:-1:-1;;;;;;17891:19:0;;17905:4;17891:19;;17830:80;17826:902;;;17939:13;;-1:-1:-1;;;;;17931:21:0;;;17939:13;;17931:21;:55;;;;-1:-1:-1;17970:15:0;;-1:-1:-1;;;;;17956:30:0;;;17970:15;;17956:30;;17931:55;:115;;;;-1:-1:-1;;;;;;17993:24:0;;;;;;:18;:24;;;;;;;;17992:25;;:52;;-1:-1:-1;;;;;;18022:22:0;;;;;;:18;:22;;;;;;;;18021:23;17992:52;17927:351;;;18104:16;;18075:25;18093:6;18075:13;18085:2;18075:9;:13::i;:::-;:17;;:25::i;:::-;:45;;18067:101;;;;-1:-1:-1;;;18067:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18205:8;;18195:6;:18;;18187:75;;;;-1:-1:-1;;;18187:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18304:13;;-1:-1:-1;;;;;18296:21:0;;;18304:13;;18296:21;:55;;;;-1:-1:-1;18335:15:0;;-1:-1:-1;;;;;18321:30:0;;;18335:15;;18321:30;;18296:55;:68;;;;-1:-1:-1;;;;;;18356:8:0;;;;;;:4;:8;;;;;;;;18355:9;18296:68;:83;;;;-1:-1:-1;;;;;;18369:10:0;;;;;;:4;:10;;;;;;;;18368:11;18296:83;18292:196;;;18465:7;;18453:9;:19;18292:196;18530:13;;-1:-1:-1;;;;;18524:19:0;;;18530:13;;18524:19;:55;;;;-1:-1:-1;18563:15:0;;-1:-1:-1;;;;;18547:32:0;;;18563:15;;18547:32;;18524:55;:68;;;;-1:-1:-1;;;;;;18584:8:0;;;;;;:4;:8;;;;;;;;18583:9;18524:68;:83;;;;-1:-1:-1;;;;;;18597:10:0;;;;;;:4;:10;;;;;;;;18596:11;18524:83;18520:197;;;18693:8;;18681:9;:20;18520:197;18740:28;18771:24;18789:4;18771:9;:24::i;:::-;18740:55;;18841:8;;18817:20;:32;18814:94;;-1:-1:-1;18888:8:0;;18814:94;18979:10;;18955:34;;;;;;;19004:40;;-1:-1:-1;19028:16:0;;-1:-1:-1;;;19028:16:0;;;;19027:17;19004:40;:65;;;;-1:-1:-1;19056:13:0;;-1:-1:-1;;;;;19048:21:0;;;19056:13;;19048:21;;19004:65;:90;;;;-1:-1:-1;19073:21:0;;-1:-1:-1;;;19073:21:0;;;;19004:90;19000:207;;;19134:10;;19111:33;;19159:36;19174:20;19159:14;:36::i;:::-;-1:-1:-1;;;;;19260:24:0;;19219:12;19260:24;;;:18;:24;;;;;;19234:4;;19260:24;;;:50;;-1:-1:-1;;;;;;19288:22:0;;;;;;:18;:22;;;;;;;;19260:50;19257:96;;;-1:-1:-1;19336:5:0;19257:96;19373:38;19388:4;19393:2;19396:6;19403:7;19373:14;:38::i;:::-;17515:1904;;;;;;:::o;7258:190::-;7344:7;7380:12;7372:6;;;;7364:29;;;;-1:-1:-1;;;7364:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7416:5:0;;;7258:190::o;6927:179::-;6985:7;7017:5;;;7041:6;;;;7033:46;;;;;-1:-1:-1;;;7033:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7097:1;6927:179;-1:-1:-1;;;6927:179:0:o;20693:589::-;20843:16;;;20857:1;20843:16;;;;;;;;20819:21;;20843:16;;;;;;;;;;-1:-1:-1;20843:16:0;20819:40;;20888:4;20870;20875:1;20870:7;;;;;;;;-1:-1:-1;;;;;20870:23:0;;;:7;;;;;;;;;;:23;;;;20914:15;;:22;;;-1:-1:-1;;;20914:22:0;;;;:15;;;;;:20;;:22;;;;;20870:7;;20914:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20914:22:0;20904:7;;:4;;20909:1;;20904:7;;;;;;-1:-1:-1;;;;;20904:32:0;;;:7;;;;;;;;;:32;20981:15;;20949:62;;20966:4;;20981:15;20999:11;20949:8;:62::i;:::-;21050:15;;:224;;-1:-1:-1;;;21050:224:0;;;;;;;;:15;:224;;;;;;21228:4;21050:224;;;;;;21248:15;21050:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21050:15:0;;;;:66;;21131:11;;21201:4;;21228;21248:15;21050:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16548:229;16594:9;;:14;:29;;;;-1:-1:-1;16612:6:0;;:11;16594:29;16591:41;;;16625:7;;16591:41;16671:9;;;16652:16;:28;16708:6;;;16691:14;:23;-1:-1:-1;16735:13:0;;;;16759:10;16548:229;:::o;16789:114::-;16845:16;;16833:9;:28;16881:14;;16872:6;:23;16789:114::o;28228:181::-;28308:14;:12;:14::i;:::-;28333:42;28343:12;:10;:12::i;:::-;28357:9;28368:6;28333:9;:42::i;25173:186::-;25230:19;25252:13;:6;25263:1;25252:10;:13::i;:::-;25276:4;;:26;;25230:35;;-1:-1:-1;;;;;;25276:4:0;;:26;;;;;25230:35;;25276:4;:26;:4;:26;25230:35;25276:4;:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25313:4:0;;-1:-1:-1;;;;;25313:4:0;:38;25327:23;:6;25338:11;25327:10;:23::i;:::-;25313:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25173:186;;:::o;19427:1258::-;11200:16;:23;;-1:-1:-1;;;;11200:23:0;-1:-1:-1;;;11200:23:0;;;19561:10:::1;::::0;11200:23;;19536:36:::1;::::0;:20;;:24:::1;:36::i;:::-;19512:61:::0;-1:-1:-1;19584:20:0::1;19608:38;:20:::0;19512:61;19608:24:::1;:38::i;:::-;19584:63;;19658:21;19683:37;19708:11;;19683:20;:24;;:37;;;;:::i;:::-;19658:63;;19732:26;19762:42;19787:16;;19762:20;:24;;:42;;;;:::i;:::-;19822:8;::::0;19732:73;;-1:-1:-1;;;;19822:8:0;::::1;;;:29:::0;::::1;;;;19850:1;19834:13;:17;19822:29;19818:92;;;19868:30;19884:13;19868:15;:30::i;:::-;19926:13;::::0;-1:-1:-1;;;19926:13:0;::::1;;;:39:::0;::::1;;;;19964:1;19943:18;:22;19926:39;19922:112;;;19982:40;20003:18;19982:20;:40::i;:::-;20046:12;20061:19;:12:::0;20078:1:::1;20061:16;:19::i;:::-;20046:34:::0;-1:-1:-1;20091:17:0::1;20111:22;:12:::0;20046:34;20111:16:::1;:22::i;:::-;20091:42:::0;-1:-1:-1;20172:21:0::1;20204:22;20221:4:::0;20204:16:::1;:22::i;:::-;20237:18;20258:44;:21;20284:17:::0;20258:25:::1;:44::i;:::-;20317:7;::::0;20237:65;;-1:-1:-1;;;;20317:7:0;::::1;;;20313:75;;;20341:35;20354:9;20365:10;20341:12;:35::i;:::-;20422:21;20454:30;20471:12:::0;20454:16:::1;:30::i;:::-;20495:21;20519:38;:21;20545:11:::0;20519:25:::1;:38::i;:::-;20495:62;;20578:27;20591:13;20578:12;:27::i;:::-;20634:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;11246:16:0;:24;;-1:-1:-1;;;;11246:24:0;;;-1:-1:-1;;;;;;;;;19427:1258:0:o;21823:1449::-;-1:-1:-1;;;;;21940:12:0;;;;;;:4;:12;;;;;;;;21939:13;:33;;;;-1:-1:-1;;;;;;21957:15:0;;;;;;:4;:15;;;;;;;;21956:16;21939:33;21931:42;;;;;;21988:11;;;;21984:141;;-1:-1:-1;;;;;22023:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;22053:29:0;;;;;;:18;:29;;;;;;;;22023:59;22015:98;;;;;-1:-1:-1;;;22015:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22143:7;22138:60;;22172:14;:12;:14::i;:::-;22218:20;22241:30;22267:3;22241:21;22252:9;;22241:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;22218:53;;22282:22;22307:42;22345:3;22307:33;22318:21;22329:9;;22318:6;;:10;;:21;;;;:::i;:::-;22307:6;;:10;:33::i;:42::-;22282:67;-1:-1:-1;22362:24:0;22389:44;22400:32;22282:67;22419:12;22400:18;:32::i;:::-;22389:6;;:10;:44::i;:::-;22362:71;-1:-1:-1;22446:21:0;22470:24;:6;22481:12;22470:10;:24::i;:::-;22509:8;;22446:48;;-1:-1:-1;;;;22509:8:0;;;;22505:66;;;22530:29;22538:6;22546:12;22530:7;:29::i;:::-;-1:-1:-1;;;;;22609:15:0;;;;;;:7;:15;;;;;;:34;;22629:13;22609:19;:34::i;:::-;-1:-1:-1;;;;;22591:15:0;;;;;;;:7;:15;;;;;;:52;;;;22675:18;;;;;;;:40;;22698:16;22675:22;:40::i;:::-;-1:-1:-1;;;;;22654:18:0;;;;;;:7;:18;;;;;;:61;;;;22767:4;22751:22;;;;:42;;22778:14;22751:26;:42::i;:::-;22742:4;22726:22;;;;:7;:22;;;;;:67;22817:8;;-1:-1:-1;;;22817:8:0;;;;:35;;;;-1:-1:-1;22839:13:0;;-1:-1:-1;;;;;22829:23:0;;;22839:13;;22829:23;;22817:35;:62;;;;-1:-1:-1;;;;;;22856:23:0;;22874:4;22856:23;;22817:62;:100;;;;-1:-1:-1;22901:15:0;;-1:-1:-1;;;;;22883:34:0;;;22901:15;;22883:34;;22817:100;:173;;;;-1:-1:-1;22943:15:0;;-1:-1:-1;;;;;22922:37:0;;;22943:15;;22922:37;;:67;;-1:-1:-1;22976:13:0;;-1:-1:-1;;;;;22963:26:0;;;22976:13;;22963:26;22922:67;22814:241;;;23015:13;;23007:36;;-1:-1:-1;;;;;23015:13:0;23030:12;23007:7;:36::i;:::-;23097:9;-1:-1:-1;;;;;23080:45:0;23089:6;-1:-1:-1;;;;;23080:45:0;;23108:16;23080:45;;;;;;;;;;;;;;;;;;23140:18;;23136:103;;23180:47;;;;;;;;23205:4;;-1:-1:-1;;;;;23180:47:0;;;;;;;;;;;;23136:103;23249:15;:13;:15::i;:::-;21823:1449;;;;;;;;:::o;7710:132::-;7768:7;7795:39;7799:1;7802;7795:39;;;;;;;;;;;;;;;;;:3;:39::i;7114:136::-;7172:7;7199:43;7203:1;7206;7199:43;;;;;;;;;;;;;;;;;:3;:43::i;23745:186::-;23806:10;;23802:122;;23830:23;23846:6;23830:15;:23::i;:::-;23887:16;;:28;;23908:6;23887:20;:28::i;:::-;23868:16;:47;23745:186;:::o;23939:206::-;24005:10;;24001:137;;24029:28;24050:6;24029:20;:28::i;:::-;24096:21;;:33;;24122:6;24096:25;:33::i;:::-;24072:21;:57;23939:206;:::o;21290:510::-;21470:15;;21438:62;;21455:4;;-1:-1:-1;;;;;21470:15:0;21488:11;21438:8;:62::i;:::-;21543:15;;21747:4;;21543:249;;;-1:-1:-1;;;21543:249:0;;21615:4;21543:249;;;;;;;;;;:15;:249;;;;;;;;;;-1:-1:-1;;;;;21747:4:0;;;21543:249;;;;21766:15;21543:249;;;;;;:15;;;;;:31;;21582:9;;21543:249;;;;;;;;;;;;;;;21582:9;21543:15;:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7456:246;7514:7;7538:6;7534:47;;-1:-1:-1;7568:1:0;7561:8;;7534:47;7603:5;;;7607:1;7603;:5;:1;7627:5;;;;;:10;7619:56;;;;-1:-1:-1;;;7619:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13769:351;13868:18;13878:7;13868:9;:18::i;:::-;13852:12;:34;;13843:44;;;;;;-1:-1:-1;;;;;13917:16:0;;;;;;:7;:16;;;;;;:34;;13938:12;13917:20;:34::i;:::-;-1:-1:-1;;;;;13898:16:0;;;;;;:7;:16;;;;;:53;13972:7;;:25;;13984:12;13972:11;:25::i;:::-;13962:7;:35;14023:12;;:30;;14040:12;14023:16;:30::i;:::-;14008:12;:45;14069:43;;;;;;;;14095:1;;-1:-1:-1;;;;;14069:43:0;;;;;;;;;;;;13769:351;;:::o;7850:189::-;7936:7;7971:12;7964:5;7956:28;;;;-1:-1:-1;;;7956:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7995:9;8011:1;8007;:5;;;;;;;7850:189;-1:-1:-1;;;;;7850:189:0:o;25953:549::-;26042:16;;;26056:1;26042:16;;;;;;;;;26018:21;;26042:16;;;;;;;;;;-1:-1:-1;26042:16:0;26018:40;;26087:4;26069;26074:1;26069:7;;;;;;;;-1:-1:-1;;;;;26069:23:0;;;:7;;;;;;;;;;:23;;;;26113:15;;:22;;;-1:-1:-1;;;26113:22:0;;;;:15;;;;;:20;;:22;;;;;26069:7;;26113:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26113:22:0;26103:7;;:4;;26108:1;;26103:7;;;;;;-1:-1:-1;;;;;26103:32:0;;;:7;;;;;;;;;:32;26164:4;;26146:7;;26164:4;;;26146;;26151:1;;26146:7;;;;;;-1:-1:-1;;;;;26146:23:0;;;:7;;;;;;;;;:23;26214:15;;26182:62;;26199:4;;26214:15;26232:11;26182:8;:62::i;:::-;26257:15;;26433:4;;26257:237;;-1:-1:-1;;;26257:237:0;;;;;;;;-1:-1:-1;26257:237:0;;;;;;-1:-1:-1;;;;;26433:4:0;;;26257:237;;;;;;26468:15;26257:237;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;:237;;-1:-1:-1;;26257:237:0;;;;;;;;;;-1:-1:-1;26257:237:0;;;;;;;;-1:-1:-1;26257:237:0;;;;;;;;;;;;;;;;25370:575;25464:16;;;25478:1;25464:16;;;;;;;;;25440:21;;25464:16;;;;;;;;;;-1:-1:-1;25464:16:0;25440:40;;25509:4;25491;25496:1;25491:7;;;;;;;;-1:-1:-1;;;;;25491:23:0;;;:7;;;;;;;;;;:23;;;;25535:15;;:22;;;-1:-1:-1;;;25535:22:0;;;;:15;;;;;:20;;:22;;;;;25491:7;;25535:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25535:22:0;25525:7;;:4;;25530:1;;25525:7;;;;;;-1:-1:-1;;;;;25525:32:0;;;:7;;;;;;;;;:32;25586:16;;25568:7;;25586:16;;;25568:4;;25573:1;;25568:7;;;;;;-1:-1:-1;;;;;25568:35:0;;;:7;;;;;;;;;:35;25648:15;;25616:62;;25633:4;;25648:15;25666:11;25616:8;:62::i;:::-;25691:15;;25867:13;;25691:246;;-1:-1:-1;;;25691:246:0;;;;;;;;-1:-1:-1;25691:246:0;;;;;;-1:-1:-1;;;;;25867:13:0;;;25691:246;;;;;;25911:15;25691:246;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;:246;;-1:-1:-1;;25691:246:0;;;;;;;;;;-1:-1:-1;25691:246:0;;;;;;;;-1:-1:-1;25691:246:0;;;;;;;;;;;;;;;

Swarm Source

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