ETH Price: $2,482.36 (-1.24%)

Token

One Million Pixel (OMPC)
 

Overview

Max Total Supply

100,000,000 OMPC

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 OMPC

Value
$0.00
0xa492a35499f221b1fcebc67dda2fbb1305a0c080
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:
OneMillionPixelToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-19
*/

// SPDX-License-Identifier: Unlicensed

/*

  One Million Pixel Token | $OMPC
  🌎 Advertise on the world's largest pixel map for life! 10x10 pixel = $1 #ETH. 
  0% Tax - Ownership Renounced - LP Burned

  Website: 1millionpixel.club
  Telegram: t.me/OneMPC
  
*/

pragma solidity 0.8.7;
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }
    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

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

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


contract OneMillionPixelToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public rewardFee = 0;
    string private _name = "One Million Pixel";
    string private _symbol = "OMPC";
    uint8 private _decimals = 9;
    address public marketWallet = 0xC8fabD9ca4B2f69156054e85e0b641698fC888c0;
    uint256 public marketingTax = 0;
    uint256 public autolpTax = 0;
    uint256 private _previousMarketingTax = marketingTax;
    uint256 private _previousAutolpTax = autolpTax;
    uint256 public numTokensSellToAddToLiquidity = 1000000 * 10**9;
    uint256 public maxTxAmount = 100000000 * 10**9;
    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketWallet] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    receive() external payable {}

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

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

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

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(rewardFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(autolpTax).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(autolpTax == 0 && marketingTax==0) return;
        _previousAutolpTax = autolpTax;
        _previousMarketingTax = marketingTax;
        autolpTax = 0;
        marketingTax = 0;
    }

    function restoreAllFee() private {
        autolpTax = _previousAutolpTax;
        marketingTax = _previousMarketingTax;
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) private
    {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
           removeAllFee();
        }
        else
        {
            require(amount <= maxTxAmount, "Maximum Transfer Amount Error!");
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            restoreAllFee();
        }
    }

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

    function takeCharity(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256)
    {
        if(marketingTax==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tCharity = tAmount.div(100).mul(marketingTax);
        uint256 rCharity = tCharity.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rCharity);
        tTransferAmount = tTransferAmount.sub(tCharity);
        _rOwned[marketWallet] = _rOwned[marketWallet].add(rCharity);
        emit Transfer(sender, marketWallet, tCharity);
        return(tTransferAmount, rTransferAmount);
    }

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

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

}

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":[{"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":[],"name":"autolpTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFee","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"}]

608060405267016345785d8a00006007819055620000209060001962000538565b6200002e90600019620004d5565b6008556000600a556040805180820190915260118082527013db9948135a5b1b1a5bdb88141a5e195b607a1b60209092019182526200007091600b91620003fd565b50604080518082019091526004808252634f4d504360e01b60209092019182526200009e91600c91620003fd565b50600d805474c8fabd9ca4b2f69156054e85e0b641698fc888c0096001600160a81b03199091161790556000600e819055600f819055601081905560115566038d7ea4c6800060125567016345785d8a00006013556015805460ff60a81b1916600160a81b1790553480156200011357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506008543360009081526001602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001b757600080fd5b505afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f29190620004a3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023b57600080fd5b505afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002769190620004a3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002bf57600080fd5b505af1158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa9190620004a3565b601580546001600160a01b03199081166001600160a01b039384161790915560148054909116918316919091179055600160046000620003426000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d5461010090049091168152600490925280822080548416600190811790915530835291208054909216179055620003a63390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620003ee91815260200190565b60405180910390a3506200055b565b8280546200040b90620004fb565b90600052602060002090601f0160209004810192826200042f57600085556200047a565b82601f106200044a57805160ff19168380011785556200047a565b828001600101855582156200047a579182015b828111156200047a5782518255916020019190600101906200045d565b50620004889291506200048c565b5090565b5b808211156200048857600081556001016200048d565b600060208284031215620004b657600080fd5b81516001600160a01b0381168114620004ce57600080fd5b9392505050565b600082821015620004f657634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200051057607f821691505b602082108114156200053257634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200055657634e487b7160e01b600052601260045260246000fd5b500690565b6121ed806200056b6000396000f3fe6080604052600436106101c65760003560e01c806352390c02116100f75780638c0b5e2211610095578063a9059cbb11610064578063a9059cbb1461051b578063d12a76881461053b578063dd62ed3e14610551578063e4440a861461059757600080fd5b80638c0b5e22146104b25780638da5cb5b146104c857806395d89b41146104e6578063a457c2d7146104fb57600080fd5b806370a08231116100d157806370a082311461042e578063715018a61461044e57806388f82020146104635780638b4242671461049c57600080fd5b806352390c02146103bf5780635342acb4146103df5780635c3bd3321461041857600080fd5b8063313ce567116101645780633bd5d1731161013e5780633bd5d1731461033e5780634549b0391461035e57806349bd5a5e1461037e5780634a74bb021461039e57600080fd5b8063313ce567146102da5780633685d419146102fc578063395093511461031e57600080fd5b806318160ddd116101a057806318160ddd146102655780631d2cb02d1461028457806323b872dd1461029a5780632d838119146102ba57600080fd5b806306fdde03146101d2578063095ea7b3146101fd5780631694505e1461022d57600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76105bc565b6040516101f49190611f4f565b60405180910390f35b34801561020957600080fd5b5061021d610218366004611eb2565b61064e565b60405190151581526020016101f4565b34801561023957600080fd5b5060145461024d906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b34801561027157600080fd5b506007545b6040519081526020016101f4565b34801561029057600080fd5b50610276600e5481565b3480156102a657600080fd5b5061021d6102b5366004611e71565b610665565b3480156102c657600080fd5b506102766102d5366004611ede565b6106ce565b3480156102e657600080fd5b50600d5460405160ff90911681526020016101f4565b34801561030857600080fd5b5061031c610317366004611dfe565b610757565b005b34801561032a57600080fd5b5061021d610339366004611eb2565b61090e565b34801561034a57600080fd5b5061031c610359366004611ede565b610944565b34801561036a57600080fd5b50610276610379366004611ef7565b610a2e565b34801561038a57600080fd5b5060155461024d906001600160a01b031681565b3480156103aa57600080fd5b5060155461021d90600160a81b900460ff1681565b3480156103cb57600080fd5b5061031c6103da366004611dfe565b610abb565b3480156103eb57600080fd5b5061021d6103fa366004611dfe565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561042457600080fd5b50610276600f5481565b34801561043a57600080fd5b50610276610449366004611dfe565b610c0e565b34801561045a57600080fd5b5061031c610c6d565b34801561046f57600080fd5b5061021d61047e366004611dfe565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156104a857600080fd5b50610276600a5481565b3480156104be57600080fd5b5061027660135481565b3480156104d457600080fd5b506000546001600160a01b031661024d565b3480156104f257600080fd5b506101e7610ce1565b34801561050757600080fd5b5061021d610516366004611eb2565b610cf0565b34801561052757600080fd5b5061021d610536366004611eb2565b610d3f565b34801561054757600080fd5b5061027660125481565b34801561055d57600080fd5b5061027661056c366004611e38565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156105a357600080fd5b50600d5461024d9061010090046001600160a01b031681565b6060600b80546105cb906120ba565b80601f01602080910402602001604051908101604052809291908181526020018280546105f7906120ba565b80156106445780601f1061061957610100808354040283529160200191610644565b820191906000526020600020905b81548152906001019060200180831161062757829003601f168201915b5050505050905090565b600061065b338484610d4c565b5060015b92915050565b6000610672848484610e70565b6106c484336106bf8560405180606001604052806028815260200161216b602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190610fb6565b610d4c565b5060019392505050565b600060085482111561073a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610744610ff0565b90506107508382611013565b9392505050565b6000546001600160a01b031633146107815760405162461bcd60e51b815260040161073190611fa4565b6001600160a01b03811660009081526005602052604090205460ff166107e95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610731565b60005b60065481101561090a57816001600160a01b0316600682815481106108135761081361213c565b6000918252602090912001546001600160a01b031614156108f8576006805461083e906001906120a3565b8154811061084e5761084e61213c565b600091825260209091200154600680546001600160a01b03909216918390811061087a5761087a61213c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806108d2576108d2612126565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610902816120f5565b9150506107ec565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161065b9185906106bf9086611055565b3360008181526005602052604090205460ff16156109b95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610731565b60006109c4836110b4565b505050506001600160a01b0384166000908152600160205260409020549192506109f091905082611103565b6001600160a01b038316600090815260016020526040902055600854610a169082611103565b600855600954610a269084611055565b600955505050565b6000600754831115610a825760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610731565b81610aa1576000610a92846110b4565b5093955061065f945050505050565b6000610aac846110b4565b5092955061065f945050505050565b6000546001600160a01b03163314610ae55760405162461bcd60e51b815260040161073190611fa4565b6001600160a01b03811660009081526005602052604090205460ff1615610b4e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610731565b6001600160a01b03811660009081526001602052604090205415610ba8576001600160a01b038116600090815260016020526040902054610b8e906106ce565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610c4b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461065f906106ce565b6000546001600160a01b03163314610c975760405162461bcd60e51b815260040161073190611fa4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600c80546105cb906120ba565b600061065b33846106bf85604051806060016040528060258152602001612193602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190610fb6565b600061065b338484610e70565b6001600160a01b038316610dae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610731565b6001600160a01b038216610e0f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610731565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ed45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610731565b60008111610f365760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610731565b6000610f4130610c0e565b60125490915081108015908190610f625750601554600160a01b900460ff16155b8015610f7c57506015546001600160a01b03868116911614155b8015610f915750601554600160a81b900460ff165b15610fa4576012549150610fa482611145565b610faf8585856111ec565b5050505050565b60008184841115610fda5760405162461bcd60e51b81526004016107319190611f4f565b506000610fe784866120a3565b95945050505050565b6000806000610ffd61143d565b909250905061100c8282611013565b9250505090565b600061075083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115bf565b600080611062838561204a565b9050838110156107505760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610731565b60008060008060008060008060006110cb8a6115ed565b92509250925060008060006110e98d86866110e4610ff0565b61162f565b919f909e50909c50959a5093985091965092945050505050565b600061075083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fb6565b6015805460ff60a01b1916600160a01b1790556000611165826002611013565b905060006111738383611103565b90504761117f8361167f565b600061118b4783611103565b905061119783826117e8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff60a01b19169055505050565b6001600160a01b03831660009081526004602052604090205460ff168061122b57506001600160a01b03821660009081526004602052604090205460ff165b1561123d576112386118c5565b61128f565b60135481111561128f5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d205472616e7366657220416d6f756e74204572726f722100006044820152606401610731565b6001600160a01b03831660009081526005602052604090205460ff1680156112d057506001600160a01b03821660009081526005602052604090205460ff16155b156112e5576112e08383836118f3565b6113e3565b6001600160a01b03831660009081526005602052604090205460ff1615801561132657506001600160a01b03821660009081526005602052604090205460ff165b15611336576112e0838383611a19565b6001600160a01b03831660009081526005602052604090205460ff1615801561137857506001600160a01b03821660009081526005602052604090205460ff16155b15611388576112e0838383611ac2565b6001600160a01b03831660009081526005602052604090205460ff1680156113c857506001600160a01b03821660009081526005602052604090205460ff165b156113d8576112e0838383611b15565b6113e3838383611ac2565b6001600160a01b03831660009081526004602052604090205460ff168061142257506001600160a01b03821660009081526004602052604090205460ff165b1561143857611438601154600f55601054600e55565b505050565b6008546007546000918291825b60065481101561158f5782600160006006848154811061146c5761146c61213c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806114d757508160026000600684815481106114b0576114b061213c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156114ed57600854600754945094505050509091565b61153360016000600684815481106115075761150761213c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611103565b925061157b600260006006848154811061154f5761154f61213c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611103565b915080611587816120f5565b91505061144a565b5060075460085461159f91611013565b8210156115b6576008546007549350935050509091565b90939092509050565b600081836115e05760405162461bcd60e51b81526004016107319190611f4f565b506000610fe78486612062565b6000806000806115fc85611b88565b9050600061160986611baa565b905060006116218261161b8986611103565b90611103565b979296509094509092505050565b600080808061163e8886611bc6565b9050600061164c8887611bc6565b9050600061165a8888611bc6565b9050600061166c8261161b8686611103565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106116b4576116b461213c565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561170857600080fd5b505afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190611e1b565b816001815181106117535761175361213c565b6001600160a01b0392831660209182029290920101526014546117799130911684610d4c565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac947906117b2908590600090869030904290600401611fd9565b600060405180830381600087803b1580156117cc57600080fd5b505af11580156117e0573d6000803e3d6000fd5b505050505050565b6014546118009030906001600160a01b031684610d4c565b6014546001600160a01b031663f305d7198230856000806118296000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561188c57600080fd5b505af11580156118a0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610faf9190611f21565b600f541580156118d55750600e54155b156118dc57565b600f8054601155600e805460105560009182905555565b600080600080600080611905876110b4565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506119379088611103565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546119669087611103565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546119959086611055565b6001600160a01b0389166000908152600160205260409020556119b781611c45565b6119c18483611ccd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611a0691815260200190565b60405180910390a3505050505050505050565b600080600080600080611a2b876110b4565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150611a5d9087611103565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054611a939084611055565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546119959086611055565b600080600080600080611ad4876110b4565b955095509550955095509550611aec8984878a611cf1565b6001600160a01b038b166000908152600160205260409020549096509093506119669087611103565b600080600080600080611b27876110b4565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150611b599088611103565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611a5d9087611103565b600061065f6064611ba4600a5485611bc690919063ffffffff16565b90611013565b600061065f6064611ba4600f5485611bc690919063ffffffff16565b600082611bd55750600061065f565b6000611be18385612084565b905082611bee8583612062565b146107505760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610731565b6000611c4f610ff0565b90506000611c5d8383611bc6565b30600090815260016020526040902054909150611c7a9082611055565b3060009081526001602090815260408083209390935560059052205460ff16156114385730600090815260026020526040902054611cb89084611055565b30600090815260026020526040902055505050565b600854611cda9083611103565b600855600954611cea9082611055565b6009555050565b600080600e5460001415611d09575083905082611df5565b600e54600090611d2490611d1e866064611013565b90611bc6565b90506000611d3a611d33610ff0565b8390611bc6565b9050611d468682611103565b9550611d528783611103565b600d5461010090046001600160a01b0316600090815260016020526040902054909750611d7f9082611055565b600d80546001600160a01b036101009182900481166000908152600160205260409081902094909455915492519204811691908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611de49086815260200190565b60405180910390a386869350935050505b94509492505050565b600060208284031215611e1057600080fd5b813561075081612152565b600060208284031215611e2d57600080fd5b815161075081612152565b60008060408385031215611e4b57600080fd5b8235611e5681612152565b91506020830135611e6681612152565b809150509250929050565b600080600060608486031215611e8657600080fd5b8335611e9181612152565b92506020840135611ea181612152565b929592945050506040919091013590565b60008060408385031215611ec557600080fd5b8235611ed081612152565b946020939093013593505050565b600060208284031215611ef057600080fd5b5035919050565b60008060408385031215611f0a57600080fd5b8235915060208301358015158114611e6657600080fd5b600080600060608486031215611f3657600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015611f7c57858101830151858201604001528201611f60565b81811115611f8e576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120295784516001600160a01b031683529383019391830191600101612004565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561205d5761205d612110565b500190565b60008261207f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561209e5761209e612110565b500290565b6000828210156120b5576120b5612110565b500390565b600181811c908216806120ce57607f821691505b602082108114156120ef57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561210957612109612110565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461216757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015b7f9f9624b753796697c190c56570cce0a1b22de99ea3666795b6d31ca2fb664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c806352390c02116100f75780638c0b5e2211610095578063a9059cbb11610064578063a9059cbb1461051b578063d12a76881461053b578063dd62ed3e14610551578063e4440a861461059757600080fd5b80638c0b5e22146104b25780638da5cb5b146104c857806395d89b41146104e6578063a457c2d7146104fb57600080fd5b806370a08231116100d157806370a082311461042e578063715018a61461044e57806388f82020146104635780638b4242671461049c57600080fd5b806352390c02146103bf5780635342acb4146103df5780635c3bd3321461041857600080fd5b8063313ce567116101645780633bd5d1731161013e5780633bd5d1731461033e5780634549b0391461035e57806349bd5a5e1461037e5780634a74bb021461039e57600080fd5b8063313ce567146102da5780633685d419146102fc578063395093511461031e57600080fd5b806318160ddd116101a057806318160ddd146102655780631d2cb02d1461028457806323b872dd1461029a5780632d838119146102ba57600080fd5b806306fdde03146101d2578063095ea7b3146101fd5780631694505e1461022d57600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76105bc565b6040516101f49190611f4f565b60405180910390f35b34801561020957600080fd5b5061021d610218366004611eb2565b61064e565b60405190151581526020016101f4565b34801561023957600080fd5b5060145461024d906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b34801561027157600080fd5b506007545b6040519081526020016101f4565b34801561029057600080fd5b50610276600e5481565b3480156102a657600080fd5b5061021d6102b5366004611e71565b610665565b3480156102c657600080fd5b506102766102d5366004611ede565b6106ce565b3480156102e657600080fd5b50600d5460405160ff90911681526020016101f4565b34801561030857600080fd5b5061031c610317366004611dfe565b610757565b005b34801561032a57600080fd5b5061021d610339366004611eb2565b61090e565b34801561034a57600080fd5b5061031c610359366004611ede565b610944565b34801561036a57600080fd5b50610276610379366004611ef7565b610a2e565b34801561038a57600080fd5b5060155461024d906001600160a01b031681565b3480156103aa57600080fd5b5060155461021d90600160a81b900460ff1681565b3480156103cb57600080fd5b5061031c6103da366004611dfe565b610abb565b3480156103eb57600080fd5b5061021d6103fa366004611dfe565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561042457600080fd5b50610276600f5481565b34801561043a57600080fd5b50610276610449366004611dfe565b610c0e565b34801561045a57600080fd5b5061031c610c6d565b34801561046f57600080fd5b5061021d61047e366004611dfe565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156104a857600080fd5b50610276600a5481565b3480156104be57600080fd5b5061027660135481565b3480156104d457600080fd5b506000546001600160a01b031661024d565b3480156104f257600080fd5b506101e7610ce1565b34801561050757600080fd5b5061021d610516366004611eb2565b610cf0565b34801561052757600080fd5b5061021d610536366004611eb2565b610d3f565b34801561054757600080fd5b5061027660125481565b34801561055d57600080fd5b5061027661056c366004611e38565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156105a357600080fd5b50600d5461024d9061010090046001600160a01b031681565b6060600b80546105cb906120ba565b80601f01602080910402602001604051908101604052809291908181526020018280546105f7906120ba565b80156106445780601f1061061957610100808354040283529160200191610644565b820191906000526020600020905b81548152906001019060200180831161062757829003601f168201915b5050505050905090565b600061065b338484610d4c565b5060015b92915050565b6000610672848484610e70565b6106c484336106bf8560405180606001604052806028815260200161216b602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190610fb6565b610d4c565b5060019392505050565b600060085482111561073a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610744610ff0565b90506107508382611013565b9392505050565b6000546001600160a01b031633146107815760405162461bcd60e51b815260040161073190611fa4565b6001600160a01b03811660009081526005602052604090205460ff166107e95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610731565b60005b60065481101561090a57816001600160a01b0316600682815481106108135761081361213c565b6000918252602090912001546001600160a01b031614156108f8576006805461083e906001906120a3565b8154811061084e5761084e61213c565b600091825260209091200154600680546001600160a01b03909216918390811061087a5761087a61213c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806108d2576108d2612126565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610902816120f5565b9150506107ec565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161065b9185906106bf9086611055565b3360008181526005602052604090205460ff16156109b95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610731565b60006109c4836110b4565b505050506001600160a01b0384166000908152600160205260409020549192506109f091905082611103565b6001600160a01b038316600090815260016020526040902055600854610a169082611103565b600855600954610a269084611055565b600955505050565b6000600754831115610a825760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610731565b81610aa1576000610a92846110b4565b5093955061065f945050505050565b6000610aac846110b4565b5092955061065f945050505050565b6000546001600160a01b03163314610ae55760405162461bcd60e51b815260040161073190611fa4565b6001600160a01b03811660009081526005602052604090205460ff1615610b4e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610731565b6001600160a01b03811660009081526001602052604090205415610ba8576001600160a01b038116600090815260016020526040902054610b8e906106ce565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610c4b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461065f906106ce565b6000546001600160a01b03163314610c975760405162461bcd60e51b815260040161073190611fa4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600c80546105cb906120ba565b600061065b33846106bf85604051806060016040528060258152602001612193602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190610fb6565b600061065b338484610e70565b6001600160a01b038316610dae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610731565b6001600160a01b038216610e0f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610731565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ed45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610731565b60008111610f365760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610731565b6000610f4130610c0e565b60125490915081108015908190610f625750601554600160a01b900460ff16155b8015610f7c57506015546001600160a01b03868116911614155b8015610f915750601554600160a81b900460ff165b15610fa4576012549150610fa482611145565b610faf8585856111ec565b5050505050565b60008184841115610fda5760405162461bcd60e51b81526004016107319190611f4f565b506000610fe784866120a3565b95945050505050565b6000806000610ffd61143d565b909250905061100c8282611013565b9250505090565b600061075083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115bf565b600080611062838561204a565b9050838110156107505760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610731565b60008060008060008060008060006110cb8a6115ed565b92509250925060008060006110e98d86866110e4610ff0565b61162f565b919f909e50909c50959a5093985091965092945050505050565b600061075083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fb6565b6015805460ff60a01b1916600160a01b1790556000611165826002611013565b905060006111738383611103565b90504761117f8361167f565b600061118b4783611103565b905061119783826117e8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff60a01b19169055505050565b6001600160a01b03831660009081526004602052604090205460ff168061122b57506001600160a01b03821660009081526004602052604090205460ff165b1561123d576112386118c5565b61128f565b60135481111561128f5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d205472616e7366657220416d6f756e74204572726f722100006044820152606401610731565b6001600160a01b03831660009081526005602052604090205460ff1680156112d057506001600160a01b03821660009081526005602052604090205460ff16155b156112e5576112e08383836118f3565b6113e3565b6001600160a01b03831660009081526005602052604090205460ff1615801561132657506001600160a01b03821660009081526005602052604090205460ff165b15611336576112e0838383611a19565b6001600160a01b03831660009081526005602052604090205460ff1615801561137857506001600160a01b03821660009081526005602052604090205460ff16155b15611388576112e0838383611ac2565b6001600160a01b03831660009081526005602052604090205460ff1680156113c857506001600160a01b03821660009081526005602052604090205460ff165b156113d8576112e0838383611b15565b6113e3838383611ac2565b6001600160a01b03831660009081526004602052604090205460ff168061142257506001600160a01b03821660009081526004602052604090205460ff165b1561143857611438601154600f55601054600e55565b505050565b6008546007546000918291825b60065481101561158f5782600160006006848154811061146c5761146c61213c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806114d757508160026000600684815481106114b0576114b061213c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156114ed57600854600754945094505050509091565b61153360016000600684815481106115075761150761213c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611103565b925061157b600260006006848154811061154f5761154f61213c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611103565b915080611587816120f5565b91505061144a565b5060075460085461159f91611013565b8210156115b6576008546007549350935050509091565b90939092509050565b600081836115e05760405162461bcd60e51b81526004016107319190611f4f565b506000610fe78486612062565b6000806000806115fc85611b88565b9050600061160986611baa565b905060006116218261161b8986611103565b90611103565b979296509094509092505050565b600080808061163e8886611bc6565b9050600061164c8887611bc6565b9050600061165a8888611bc6565b9050600061166c8261161b8686611103565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106116b4576116b461213c565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561170857600080fd5b505afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190611e1b565b816001815181106117535761175361213c565b6001600160a01b0392831660209182029290920101526014546117799130911684610d4c565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac947906117b2908590600090869030904290600401611fd9565b600060405180830381600087803b1580156117cc57600080fd5b505af11580156117e0573d6000803e3d6000fd5b505050505050565b6014546118009030906001600160a01b031684610d4c565b6014546001600160a01b031663f305d7198230856000806118296000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561188c57600080fd5b505af11580156118a0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610faf9190611f21565b600f541580156118d55750600e54155b156118dc57565b600f8054601155600e805460105560009182905555565b600080600080600080611905876110b4565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506119379088611103565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546119669087611103565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546119959086611055565b6001600160a01b0389166000908152600160205260409020556119b781611c45565b6119c18483611ccd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611a0691815260200190565b60405180910390a3505050505050505050565b600080600080600080611a2b876110b4565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150611a5d9087611103565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054611a939084611055565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546119959086611055565b600080600080600080611ad4876110b4565b955095509550955095509550611aec8984878a611cf1565b6001600160a01b038b166000908152600160205260409020549096509093506119669087611103565b600080600080600080611b27876110b4565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150611b599088611103565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611a5d9087611103565b600061065f6064611ba4600a5485611bc690919063ffffffff16565b90611013565b600061065f6064611ba4600f5485611bc690919063ffffffff16565b600082611bd55750600061065f565b6000611be18385612084565b905082611bee8583612062565b146107505760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610731565b6000611c4f610ff0565b90506000611c5d8383611bc6565b30600090815260016020526040902054909150611c7a9082611055565b3060009081526001602090815260408083209390935560059052205460ff16156114385730600090815260026020526040902054611cb89084611055565b30600090815260026020526040902055505050565b600854611cda9083611103565b600855600954611cea9082611055565b6009555050565b600080600e5460001415611d09575083905082611df5565b600e54600090611d2490611d1e866064611013565b90611bc6565b90506000611d3a611d33610ff0565b8390611bc6565b9050611d468682611103565b9550611d528783611103565b600d5461010090046001600160a01b0316600090815260016020526040902054909750611d7f9082611055565b600d80546001600160a01b036101009182900481166000908152600160205260409081902094909455915492519204811691908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611de49086815260200190565b60405180910390a386869350935050505b94509492505050565b600060208284031215611e1057600080fd5b813561075081612152565b600060208284031215611e2d57600080fd5b815161075081612152565b60008060408385031215611e4b57600080fd5b8235611e5681612152565b91506020830135611e6681612152565b809150509250929050565b600080600060608486031215611e8657600080fd5b8335611e9181612152565b92506020840135611ea181612152565b929592945050506040919091013590565b60008060408385031215611ec557600080fd5b8235611ed081612152565b946020939093013593505050565b600060208284031215611ef057600080fd5b5035919050565b60008060408385031215611f0a57600080fd5b8235915060208301358015158114611e6657600080fd5b600080600060608486031215611f3657600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015611f7c57858101830151858201604001528201611f60565b81811115611f8e576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120295784516001600160a01b031683529383019391830191600101612004565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561205d5761205d612110565b500190565b60008261207f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561209e5761209e612110565b500290565b6000828210156120b5576120b5612110565b500390565b600181811c908216806120ce57607f821691505b602082108114156120ef57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561210957612109612110565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461216757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015b7f9f9624b753796697c190c56570cce0a1b22de99ea3666795b6d31ca2fb664736f6c63430008070033

Deployed Bytecode Sourcemap

13440:16156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15731:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16629:161;;;;;;;;;;-1:-1:-1;16629:161:0;;;;;:::i;:::-;;:::i;:::-;;;3523:14:1;;3516:22;3498:41;;3486:2;3471:18;16629:161:0;3358:187:1;14623:42:0;;;;;;;;;;-1:-1:-1;14623:42:0;;;;-1:-1:-1;;;;;14623:42:0;;;;;;-1:-1:-1;;;;;2702:32:1;;;2684:51;;2672:2;2657:18;14623:42:0;2538:203:1;16002:95:0;;;;;;;;;;-1:-1:-1;16082:7:0;;16002:95;;;9175:25:1;;;9163:2;9148:18;16002:95:0;9029:177:1;14316:31:0;;;;;;;;;;;;;;;;16796:313;;;;;;;;;;-1:-1:-1;16796:313:0;;;;;:::i;:::-;;:::i;18123:253::-;;;;;;;;;;-1:-1:-1;18123:253:0;;;;;:::i;:::-;;:::i;15913:83::-;;;;;;;;;;-1:-1:-1;15979:9:0;;15913:83;;15979:9;;;;10662:36:1;;10650:2;10635:18;15913:83:0;10520:184:1;18824:479:0;;;;;;;;;;-1:-1:-1;18824:479:0;;;;;:::i;:::-;;:::i;:::-;;17115:218;;;;;;;;;;-1:-1:-1;17115:218:0;;;;;:::i;:::-;;:::i;17740:377::-;;;;;;;;;;-1:-1:-1;17740:377:0;;;;;:::i;:::-;;:::i;18382:436::-;;;;;;;;;;-1:-1:-1;18382:436:0;;;;;:::i;:::-;;:::i;14672:29::-;;;;;;;;;;-1:-1:-1;14672:29:0;;;;-1:-1:-1;;;;;14672:29:0;;;14736:40;;;;;;;;;;-1:-1:-1;14736:40:0;;;;-1:-1:-1;;;14736:40:0;;;;;;19309:333;;;;;;;;;;-1:-1:-1;19309:333:0;;;;;:::i;:::-;;:::i;23494:123::-;;;;;;;;;;-1:-1:-1;23494:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23582:27:0;23558:4;23582:27;;;:18;:27;;;;;;;;;23494:123;14354:28;;;;;;;;;;;;;;;;16103:198;;;;;;;;;;-1:-1:-1;16103:198:0;;;;;:::i;:::-;;:::i;5646:148::-;;;;;;;;;;;;;:::i;17614:120::-;;;;;;;;;;-1:-1:-1;17614:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17706:20:0;17682:4;17706:20;;;:11;:20;;;;;;;;;17614:120;14081:28;;;;;;;;;;;;;;;;14570:46;;;;;;;;;;;;;;;;5432:79;;;;;;;;;;-1:-1:-1;5470:7:0;5497:6;-1:-1:-1;;;;;5497:6:0;5432:79;;15820:87;;;;;;;;;;;;;:::i;17339:269::-;;;;;;;;;;-1:-1:-1;17339:269:0;;;;;:::i;:::-;;:::i;16307:167::-;;;;;;;;;;-1:-1:-1;16307:167:0;;;;;:::i;:::-;;:::i;14501:62::-;;;;;;;;;;;;;;;;16480:143;;;;;;;;;;-1:-1:-1;16480:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16588:18:0;;;16561:7;16588:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16480:143;14237:72;;;;;;;;;;-1:-1:-1;14237:72:0;;;;;;;-1:-1:-1;;;;;14237:72:0;;;15731:83;15768:13;15801:5;15794:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15731:83;:::o;16629:161::-;16704:4;16721:39;433:10;16744:7;16753:6;16721:8;:39::i;:::-;-1:-1:-1;16778:4:0;16629:161;;;;;:::o;16796:313::-;16894:4;16911:36;16921:6;16929:9;16940:6;16911:9;:36::i;:::-;16958:121;16967:6;433:10;16989:89;17027:6;16989:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16989:19:0;;;;;;:11;:19;;;;;;;;433:10;16989:33;;;;;;;;;;:37;:89::i;:::-;16958:8;:121::i;:::-;-1:-1:-1;17097:4:0;16796:313;;;;;:::o;18123:253::-;18189:7;18228;;18217;:18;;18209:73;;;;-1:-1:-1;;;18209:73:0;;4589:2:1;18209:73:0;;;4571:21:1;4628:2;4608:18;;;4601:30;4667:34;4647:18;;;4640:62;-1:-1:-1;;;4718:18:1;;;4711:40;4768:19;;18209:73:0;;;;;;;;;18293:19;18316:10;:8;:10::i;:::-;18293:33;-1:-1:-1;18344:24:0;:7;18293:33;18344:11;:24::i;:::-;18337:31;18123:253;-1:-1:-1;;;18123:253:0:o;18824:479::-;5559:6;;-1:-1:-1;;;;;5559:6:0;433:10;5559:22;5551:67;;;;-1:-1:-1;;;5551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18906:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18898:60;;;::::0;-1:-1:-1;;;18898:60:0;;5759:2:1;18898:60:0::1;::::0;::::1;5741:21:1::0;5798:2;5778:18;;;5771:30;5837:29;5817:18;;;5810:57;5884:18;;18898:60:0::1;5557:351:1::0;18898:60:0::1;18974:9;18969:327;18993:9;:16:::0;18989:20;::::1;18969:327;;;19051:7;-1:-1:-1::0;;;;;19035:23:0::1;:9;19045:1;19035:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19035:12:0::1;:23;19031:254;;;19094:9;19104:16:::0;;:20:::1;::::0;19123:1:::1;::::0;19104:20:::1;:::i;:::-;19094:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19079:9:::1;:12:::0;;-1:-1:-1;;;;;19094:31:0;;::::1;::::0;19089:1;;19079:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19079:46:0::1;-1:-1:-1::0;;;;;19079:46:0;;::::1;;::::0;;19144:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19183:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19183:28:0::1;::::0;;19230:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19230:15:0;;;;;-1:-1:-1;;;;;;19230:15:0::1;::::0;;;;;18969:327:::1;18824:479:::0;:::o;19031:254::-:1;19011:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18969:327;;;;18824:479:::0;:::o;17115:218::-;433:10;17203:4;17252:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17252:34:0;;;;;;;;;;17203:4;;17220:83;;17243:7;;17252:50;;17291:10;17252:38;:50::i;17740:377::-;433:10;17792:14;17841:19;;;:11;:19;;;;;;;;17840:20;17832:77;;;;-1:-1:-1;;;17832:77:0;;8818:2:1;17832:77:0;;;8800:21:1;8857:2;8837:18;;;8830:30;8896:34;8876:18;;;8869:62;-1:-1:-1;;;8947:18:1;;;8940:42;8999:19;;17832:77:0;8616:408:1;17832:77:0;17921:15;17945:19;17956:7;17945:10;:19::i;:::-;-1:-1:-1;;;;;;;;;17993:15:0;;;;;;:7;:15;;;;;;17920:44;;-1:-1:-1;17993:28:0;;:15;-1:-1:-1;17920:44:0;17993:19;:28::i;:::-;-1:-1:-1;;;;;17975:15:0;;;;;;:7;:15;;;;;:46;18042:7;;:20;;18054:7;18042:11;:20::i;:::-;18032:7;:30;18086:10;;:23;;18101:7;18086:14;:23::i;:::-;18073:10;:36;-1:-1:-1;;;17740:377:0:o;18382:436::-;18472:7;18511;;18500;:18;;18492:62;;;;-1:-1:-1;;;18492:62:0;;6115:2:1;18492:62:0;;;6097:21:1;6154:2;6134:18;;;6127:30;6193:33;6173:18;;;6166:61;6244:18;;18492:62:0;5913:355:1;18492:62:0;18570:17;18565:246;;18605:15;18629:19;18640:7;18629:10;:19::i;:::-;-1:-1:-1;18604:44:0;;-1:-1:-1;18663:14:0;;-1:-1:-1;;;;;18663:14:0;18565:246;18712:23;18743:19;18754:7;18743:10;:19::i;:::-;-1:-1:-1;18710:52:0;;-1:-1:-1;18777:22:0;;-1:-1:-1;;;;;18777:22:0;19309:333;5559:6;;-1:-1:-1;;;;;5559:6:0;433:10;5559:22;5551:67;;;;-1:-1:-1;;;5551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19392:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19391:21;19383:61;;;::::0;-1:-1:-1;;;19383:61:0;;5759:2:1;19383:61:0::1;::::0;::::1;5741:21:1::0;5798:2;5778:18;;;5771:30;5837:29;5817:18;;;5810:57;5884:18;;19383:61:0::1;5557:351:1::0;19383:61:0::1;-1:-1:-1::0;;;;;19458:16:0;::::1;19477:1;19458:16:::0;;;:7:::1;:16;::::0;;;;;:20;19455:108:::1;;-1:-1:-1::0;;;;;19534:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19514:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19495:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19455:108:::1;-1:-1:-1::0;;;;;19573:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19573:27:0::1;19596:4;19573:27:::0;;::::1;::::0;;;19611:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19611:23:0::1;::::0;;::::1;::::0;;19309:333::o;16103:198::-;-1:-1:-1;;;;;16193:20:0;;16169:7;16193:20;;;:11;:20;;;;;;;;16189:49;;;-1:-1:-1;;;;;;16222:16:0;;;;;:7;:16;;;;;;;16103:198::o;16189:49::-;-1:-1:-1;;;;;16276:16:0;;;;;;:7;:16;;;;;;16256:37;;:19;:37::i;5646:148::-;5559:6;;-1:-1:-1;;;;;5559:6:0;433:10;5559:22;5551:67;;;;-1:-1:-1;;;5551:67:0;;;;;;;:::i;:::-;5753:1:::1;5737:6:::0;;5716:40:::1;::::0;-1:-1:-1;;;;;5737:6:0;;::::1;::::0;5716:40:::1;::::0;5753:1;;5716:40:::1;5784:1;5767:19:::0;;-1:-1:-1;;;;;;5767:19:0::1;::::0;;5646:148::o;15820:87::-;15859:13;15892:7;15885:14;;;;;:::i;17339:269::-;17432:4;17449:129;433:10;17472:7;17481:96;17520:15;17481:96;;;;;;;;;;;;;;;;;433:10;17481:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17481:34:0;;;;;;;;;;;;:38;:96::i;16307:167::-;16385:4;16402:42;433:10;16426:9;16437:6;16402:9;:42::i;23625:335::-;-1:-1:-1;;;;;23718:19:0;;23710:68;;;;-1:-1:-1;;;23710:68:0;;8054:2:1;23710:68:0;;;8036:21:1;8093:2;8073:18;;;8066:30;8132:34;8112:18;;;8105:62;-1:-1:-1;;;8183:18:1;;;8176:34;8227:19;;23710:68:0;7852:400:1;23710:68:0;-1:-1:-1;;;;;23797:21:0;;23789:68;;;;-1:-1:-1;;;23789:68:0;;5000:2:1;23789:68:0;;;4982:21:1;5039:2;5019:18;;;5012:30;5078:34;5058:18;;;5051:62;-1:-1:-1;;;5129:18:1;;;5122:32;5171:19;;23789:68:0;4798:398:1;23789:68:0;-1:-1:-1;;;;;23868:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23920:32;;9175:25:1;;;23920:32:0;;9148:18:1;23920:32:0;;;;;;;23625:335;;;:::o;23968:795::-;-1:-1:-1;;;;;24090:18:0;;24082:68;;;;-1:-1:-1;;;24082:68:0;;7648:2:1;24082:68:0;;;7630:21:1;7687:2;7667:18;;;7660:30;7726:34;7706:18;;;7699:62;-1:-1:-1;;;7777:18:1;;;7770:35;7822:19;;24082:68:0;7446:401:1;24082:68:0;24178:1;24169:6;:10;24161:64;;;;-1:-1:-1;;;24161:64:0;;7238:2:1;24161:64:0;;;7220:21:1;7277:2;7257:18;;;7250:30;7316:34;7296:18;;;7289:62;-1:-1:-1;;;7367:18:1;;;7360:39;7416:19;;24161:64:0;7036:405:1;24161:64:0;24238:28;24269:24;24287:4;24269:9;:24::i;:::-;24355:29;;24238:55;;-1:-1:-1;24331:53:0;;;;;;;24413;;-1:-1:-1;24450:16:0;;-1:-1:-1;;;24450:16:0;;;;24449:17;24413:53;:91;;;;-1:-1:-1;24491:13:0;;-1:-1:-1;;;;;24483:21:0;;;24491:13;;24483:21;;24413:91;:129;;;;-1:-1:-1;24521:21:0;;-1:-1:-1;;;24521:21:0;;;;24413:129;24395:318;;;24592:29;;24569:52;;24665:36;24680:20;24665:14;:36::i;:::-;24725:30;24740:4;24745:2;24748:6;24725:14;:30::i;:::-;24071:692;;23968:795;;;:::o;1609:192::-;1695:7;1731:12;1723:6;;;;1715:29;;;;-1:-1:-1;;;1715:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1755:9:0;1767:5;1771:1;1767;:5;:::i;:::-;1755:17;1609:192;-1:-1:-1;;;;;1609:192:0:o;21684:163::-;21725:7;21746:15;21763;21782:19;:17;:19::i;:::-;21745:56;;-1:-1:-1;21745:56:0;-1:-1:-1;21819:20:0;21745:56;;21819:11;:20::i;:::-;21812:27;;;;21684:163;:::o;2065:132::-;2123:7;2150:39;2154:1;2157;2150:39;;;;;;;;;;;;;;;;;:3;:39::i;1280:181::-;1338:7;;1370:5;1374:1;1370;:5;:::i;:::-;1358:17;;1399:1;1394;:6;;1386:46;;;;-1:-1:-1;;;1386:46:0;;5403:2:1;1386:46:0;;;5385:21:1;5442:2;5422:18;;;5415:30;5481:29;5461:18;;;5454:57;5528:18;;1386:46:0;5201:351:1;20482:419:0;20541:7;20550;20559;20568;20577;20586;20607:23;20632:12;20646:18;20668:20;20680:7;20668:11;:20::i;:::-;20606:82;;;;;;20700:15;20717:23;20742:12;20758:50;20770:7;20779:4;20785:10;20797;:8;:10::i;:::-;20758:11;:50::i;:::-;20699:109;;;;-1:-1:-1;20699:109:0;;-1:-1:-1;20859:15:0;;-1:-1:-1;20876:4:0;;-1:-1:-1;20882:10:0;;-1:-1:-1;20482:419:0;;-1:-1:-1;;;;;20482:419:0:o;1467:136::-;1525:7;1552:43;1556:1;1559;1552:43;;;;;;;;;;;;;;;;;:3;:43::i;24771:464::-;15073:16;:23;;-1:-1:-1;;;;15073:23:0;-1:-1:-1;;;15073:23:0;;;;24871:27:::1;:20:::0;24896:1:::1;24871:24;:27::i;:::-;24856:42:::0;-1:-1:-1;24909:17:0::1;24929:30;:20:::0;24856:42;24929:24:::1;:30::i;:::-;24909:50:::0;-1:-1:-1;24995:21:0::1;25027:22;25044:4:::0;25027:16:::1;:22::i;:::-;25060:18;25081:41;:21;25107:14:::0;25081:25:::1;:41::i;:::-;25060:62;;25133:35;25146:9;25157:10;25133:12;:35::i;:::-;25184:43;::::0;;10398:25:1;;;10454:2;10439:18;;10432:34;;;10482:18;;;10475:34;;;25184:43:0::1;::::0;10386:2:1;10371:18;25184:43:0::1;;;;;;;-1:-1:-1::0;;15119:16:0;:24;;-1:-1:-1;;;;15119:24:0;;;-1:-1:-1;;;24771:464:0:o;26090:1070::-;-1:-1:-1;;;;;26192:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;26222:29:0;;;;;;:18;:29;;;;;;;;26192:59;26189:228;;;26276:14;:12;:14::i;:::-;26189:228;;;26359:11;;26349:6;:21;;26341:64;;;;-1:-1:-1;;;26341:64:0;;8459:2:1;26341:64:0;;;8441:21:1;8498:2;8478:18;;;8471:30;8537:32;8517:18;;;8510:60;8587:18;;26341:64:0;8257:354:1;26341:64:0;-1:-1:-1;;;;;26433:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;26457:22:0;;;;;;:11;:22;;;;;;;;26456:23;26433:46;26429:597;;;26496:48;26518:6;26526:9;26537:6;26496:21;:48::i;:::-;26429:597;;;-1:-1:-1;;;;;26567:19:0;;;;;;:11;:19;;;;;;;;26566:20;:46;;;;-1:-1:-1;;;;;;26590:22:0;;;;;;:11;:22;;;;;;;;26566:46;26562:464;;;26629:46;26649:6;26657:9;26668:6;26629:19;:46::i;26562:464::-;-1:-1:-1;;;;;26698:19:0;;;;;;:11;:19;;;;;;;;26697:20;:47;;;;-1:-1:-1;;;;;;26722:22:0;;;;;;:11;:22;;;;;;;;26721:23;26697:47;26693:333;;;26761:44;26779:6;26787:9;26798:6;26761:17;:44::i;26693:333::-;-1:-1:-1;;;;;26827:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;26850:22:0;;;;;;:11;:22;;;;;;;;26827:45;26823:203;;;26889:48;26911:6;26919:9;26930:6;26889:21;:48::i;26823:203::-;26970:44;26988:6;26996:9;27007:6;26970:17;:44::i;:::-;-1:-1:-1;;;;;27041:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;27071:29:0;;;;;;:18;:29;;;;;;;;27041:59;27038:115;;;27126:15;23413:18;;23401:9;:30;23457:21;;23442:12;:36;23357:129;27126:15;26090:1070;;;:::o;21855:555::-;21952:7;;21988;;21905;;;;;22006:289;22030:9;:16;22026:20;;22006:289;;;22096:7;22072;:21;22080:9;22090:1;22080:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22080:12:0;22072:21;;;;;;;;;;;;;:31;;:66;;;22131:7;22107;:21;22115:9;22125:1;22115:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22115:12:0;22107:21;;;;;;;;;;;;;:31;22072:66;22068:97;;;22148:7;;22157;;22140:25;;;;;;;21855:555;;:::o;22068:97::-;22190:34;22202:7;:21;22210:9;22220:1;22210:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22210:12:0;22202:21;;;;;;;;;;;;;22190:7;;:11;:34::i;:::-;22180:44;;22249:34;22261:7;:21;22269:9;22279:1;22269:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22269:12:0;22261:21;;;;;;;;;;;;;22249:7;;:11;:34::i;:::-;22239:44;-1:-1:-1;22048:3:0;;;;:::i;:::-;;;;22006:289;;;-1:-1:-1;22331:7:0;;22319;;:20;;:11;:20::i;:::-;22309:7;:30;22305:61;;;22349:7;;22358;;22341:25;;;;;;21855:555;;:::o;22305:61::-;22385:7;;22394;;-1:-1:-1;21855:555:0;-1:-1:-1;21855:555:0:o;2205:278::-;2291:7;2326:12;2319:5;2311:28;;;;-1:-1:-1;;;2311:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2350:9:0;2362:5;2366:1;2362;:5;:::i;20909:330::-;20969:7;20978;20987;21007:12;21022:24;21038:7;21022:15;:24::i;:::-;21007:39;;21057:18;21078:30;21100:7;21078:21;:30::i;:::-;21057:51;-1:-1:-1;21119:23:0;21145:33;21057:51;21145:17;:7;21157:4;21145:11;:17::i;:::-;:21;;:33::i;:::-;21119:59;21214:4;;-1:-1:-1;21220:10:0;;-1:-1:-1;20909:330:0;;-1:-1:-1;;;20909:330:0:o;21247:429::-;21362:7;;;;21418:24;:7;21430:11;21418;:24::i;:::-;21400:42;-1:-1:-1;21453:12:0;21468:21;:4;21477:11;21468:8;:21::i;:::-;21453:36;-1:-1:-1;21500:18:0;21521:27;:10;21536:11;21521:14;:27::i;:::-;21500:48;-1:-1:-1;21559:23:0;21585:33;21500:48;21585:17;:7;21597:4;21585:11;:17::i;:33::-;21637:7;;;;-1:-1:-1;21663:4:0;;-1:-1:-1;21247:429:0;;-1:-1:-1;;;;;;;21247:429:0:o;25243:471::-;25333:16;;;25347:1;25333:16;;;;;;;;25309:21;;25333:16;;;;;;;;;;-1:-1:-1;25333:16:0;25309:40;;25378:4;25360;25365:1;25360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25360:23:0;;;:7;;;;;;;;;;:23;;;;25404:15;;:22;;;-1:-1:-1;;;25404:22:0;;;;:15;;;;;:20;;:22;;;;;25360:7;;25404:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25394:4;25399:1;25394:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25394:32:0;;;:7;;;;;;;;;:32;25469:15;;25437:62;;25454:4;;25469:15;25487:11;25437:8;:62::i;:::-;25510:15;;:196;;-1:-1:-1;;;25510:196:0;;-1:-1:-1;;;;;25510:15:0;;;;:66;;:196;;25591:11;;25510:15;;25633:4;;25660;;25680:15;;25510:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25298:416;25243:471;:::o;25722:360::-;25835:15;;25803:62;;25820:4;;-1:-1:-1;;;;;25835:15:0;25853:11;25803:8;:62::i;:::-;25876:15;;-1:-1:-1;;;;;25876:15:0;:31;25915:9;25948:4;25968:11;25876:15;;26026:7;5470;5497:6;-1:-1:-1;;;;;5497:6:0;;5432:79;26026:7;25876:198;;;;;;-1:-1:-1;;;;;;25876:198:0;;;-1:-1:-1;;;;;3105:15:1;;;25876:198:0;;;3087:34:1;3137:18;;;3130:34;;;;3180:18;;;3173:34;;;;3223:18;;;3216:34;3287:15;;;3266:19;;;3259:44;26048:15:0;3319:19:1;;;3312:35;3021:19;;25876:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23115:234::-;23161:9;;:14;:33;;;;-1:-1:-1;23179:12:0;;:15;23161:33;23158:45;;;23115:234::o;23158:45::-;23234:9;;;23213:18;:30;23278:12;;;23254:21;:36;-1:-1:-1;23301:13:0;;;;23325:16;23115:234::o;28445:563::-;28548:15;28565:23;28590:12;28604:23;28629:12;28643:18;28665:19;28676:7;28665:10;:19::i;:::-;-1:-1:-1;;;;;28713:15:0;;;;;;:7;:15;;;;;;28547:137;;-1:-1:-1;28547:137:0;;-1:-1:-1;28547:137:0;;-1:-1:-1;28547:137:0;-1:-1:-1;28547:137:0;-1:-1:-1;28547:137:0;-1:-1:-1;28713:28:0;;28733:7;28713:19;:28::i;:::-;-1:-1:-1;;;;;28695:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28770:7;:15;;;;:28;;28790:7;28770:19;:28::i;:::-;-1:-1:-1;;;;;28752:15:0;;;;;;;:7;:15;;;;;;:46;;;;28830:18;;;;;;;:39;;28853:15;28830:22;:39::i;:::-;-1:-1:-1;;;;;28809:18:0;;;;;;:7;:18;;;;;:60;28880:26;28895:10;28880:14;:26::i;:::-;28917:23;28929:4;28935;28917:11;:23::i;:::-;28973:9;-1:-1:-1;;;;;28956:44:0;28965:6;-1:-1:-1;;;;;28956:44:0;;28984:15;28956:44;;;;9175:25:1;;9163:2;9148:18;;9029:177;28956:44:0;;;;;;;;28536:472;;;;;;28445:563;;;:::o;29016:575::-;29117:15;29134:23;29159:12;29173:23;29198:12;29212:18;29234:19;29245:7;29234:10;:19::i;:::-;-1:-1:-1;;;;;29282:15:0;;;;;;:7;:15;;;;;;29116:137;;-1:-1:-1;29116:137:0;;-1:-1:-1;29116:137:0;;-1:-1:-1;29116:137:0;-1:-1:-1;29116:137:0;-1:-1:-1;29116:137:0;-1:-1:-1;29282:28:0;;29116:137;29282:19;:28::i;:::-;-1:-1:-1;;;;;29264:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29342:18;;;;;:7;:18;;;;;:39;;29365:15;29342:22;:39::i;:::-;-1:-1:-1;;;;;29321:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29413:7;:18;;;;:39;;29436:15;29413:22;:39::i;27168:617::-;27272:15;27289:23;27314:12;27328:23;27353:12;27367:18;27389:19;27400:7;27389:10;:19::i;:::-;27271:137;;;;;;;;;;;;27456:62;27468:6;27476:15;27493;27510:7;27456:11;:62::i;:::-;-1:-1:-1;;;;;27547:15:0;;;;;;:7;:15;;;;;;27419:99;;-1:-1:-1;27419:99:0;;-1:-1:-1;27547:28:0;;27567:7;27547:19;:28::i;19648:634::-;19751:15;19768:23;19793:12;19807:23;19832:12;19846:18;19868:19;19879:7;19868:10;:19::i;:::-;-1:-1:-1;;;;;19916:15:0;;;;;;:7;:15;;;;;;19750:137;;-1:-1:-1;19750:137:0;;-1:-1:-1;19750:137:0;;-1:-1:-1;19750:137:0;-1:-1:-1;19750:137:0;-1:-1:-1;19750:137:0;-1:-1:-1;19916:28:0;;19936:7;19916:19;:28::i;:::-;-1:-1:-1;;;;;19898:15:0;;;;;;:7;:15;;;;;;;;:46;;;;19973:7;:15;;;;:28;;19993:7;19973:19;:28::i;22781:156::-;22845:7;22872:57;22913:5;22872:22;22884:9;;22872:7;:11;;:22;;;;:::i;:::-;:26;;:57::i;22945:162::-;23015:7;23042:57;23083:5;23042:22;23054:9;;23042:7;:11;;:22;;;;:::i;1807:250::-;1865:7;1889:6;1885:47;;-1:-1:-1;1919:1:0;1912:8;;1885:47;1944:9;1956:5;1960:1;1956;:5;:::i;:::-;1944:17;-1:-1:-1;1989:1:0;1980:5;1984:1;1944:17;1980:5;:::i;:::-;:10;1972:56;;;;-1:-1:-1;;;1972:56:0;;6475:2:1;1972:56:0;;;6457:21:1;6514:2;6494:18;;;6487:30;6553:34;6533:18;;;6526:62;-1:-1:-1;;;6604:18:1;;;6597:31;6645:19;;1972:56:0;6273:397:1;22418:355:0;22481:19;22504:10;:8;:10::i;:::-;22481:33;-1:-1:-1;22525:18:0;22546:27;:10;22481:33;22546:14;:27::i;:::-;22625:4;22609:22;;;;:7;:22;;;;;;22525:48;;-1:-1:-1;22609:38:0;;22525:48;22609:26;:38::i;:::-;22600:4;22584:22;;;;:7;:22;;;;;;;;:63;;;;22661:11;:26;;;;;;22658:107;;;22743:4;22727:22;;;;:7;:22;;;;;;:38;;22754:10;22727:26;:38::i;:::-;22718:4;22702:22;;;;:7;:22;;;;;:63;22470:303;;22418:355;:::o;20327:147::-;20405:7;;:17;;20417:4;20405:11;:17::i;:::-;20395:7;:27;20446:10;;:20;;20461:4;20446:14;:20::i;:::-;20433:10;:33;-1:-1:-1;;20327:147:0:o;27793:644::-;27919:7;27928;27956:12;;27970:1;27956:15;27953:66;;;-1:-1:-1;27983:15:0;;-1:-1:-1;28000:15:0;27976:40;;27953:66;28069:12;;28029:16;;28048:34;;:16;:7;28060:3;28048:11;:16::i;:::-;:20;;:34::i;:::-;28029:53;;28093:16;28112:24;28125:10;:8;:10::i;:::-;28112:8;;:12;:24::i;:::-;28093:43;-1:-1:-1;28165:29:0;:15;28093:43;28165:19;:29::i;:::-;28147:47;-1:-1:-1;28223:29:0;:15;28243:8;28223:19;:29::i;:::-;28295:12;;;;;-1:-1:-1;;;;;28295:12:0;28287:21;;;;:7;:21;;;;;;28205:47;;-1:-1:-1;28287:35:0;;28313:8;28287:25;:35::i;:::-;28271:12;;;-1:-1:-1;;;;;28271:12:0;;;;;;;28263:21;;;;:7;:21;;;;;;;:59;;;;28355:12;;28338:40;;28355:12;;;;;28338:40;;;;;;;;28369:8;9175:25:1;;9163:2;9148:18;;9029:177;28338:40:0;;;;;;;;28396:15;28413;28389:40;;;;;;27793:644;;;;;;;;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1696:180::-;1755:6;1808:2;1796:9;1787:7;1783:23;1779:32;1776:52;;;1824:1;1821;1814:12;1776:52;-1:-1:-1;1847:23:1;;1696:180;-1:-1:-1;1696:180:1:o;1881:341::-;1946:6;1954;2007:2;1995:9;1986:7;1982:23;1978:32;1975:52;;;2023:1;2020;2013:12;1975:52;2059:9;2046:23;2036:33;;2119:2;2108:9;2104:18;2091:32;2166:5;2159:13;2152:21;2145:5;2142:32;2132:60;;2188:1;2185;2178:12;2227:306;2315:6;2323;2331;2384:2;2372:9;2363:7;2359:23;2355:32;2352:52;;;2400:1;2397;2390:12;2352:52;2429:9;2423:16;2413:26;;2479:2;2468:9;2464:18;2458:25;2448:35;;2523:2;2512:9;2508:18;2502:25;2492:35;;2227:306;;;;;:::o;3785:597::-;3897:4;3926:2;3955;3944:9;3937:21;3987:6;3981:13;4030:6;4025:2;4014:9;4010:18;4003:34;4055:1;4065:140;4079:6;4076:1;4073:13;4065:140;;;4174:14;;;4170:23;;4164:30;4140:17;;;4159:2;4136:26;4129:66;4094:10;;4065:140;;;4223:6;4220:1;4217:13;4214:91;;;4293:1;4288:2;4279:6;4268:9;4264:22;4260:31;4253:42;4214:91;-1:-1:-1;4366:2:1;4345:15;-1:-1:-1;;4341:29:1;4326:45;;;;4373:2;4322:54;;3785:597;-1:-1:-1;;;3785:597:1:o;6675:356::-;6877:2;6859:21;;;6896:18;;;6889:30;6955:34;6950:2;6935:18;;6928:62;7022:2;7007:18;;6675:356::o;9211:980::-;9473:4;9521:3;9510:9;9506:19;9552:6;9541:9;9534:25;9578:2;9616:6;9611:2;9600:9;9596:18;9589:34;9659:3;9654:2;9643:9;9639:18;9632:31;9683:6;9718;9712:13;9749:6;9741;9734:22;9787:3;9776:9;9772:19;9765:26;;9826:2;9818:6;9814:15;9800:29;;9847:1;9857:195;9871:6;9868:1;9865:13;9857:195;;;9936:13;;-1:-1:-1;;;;;9932:39:1;9920:52;;10027:15;;;;9992:12;;;;9968:1;9886:9;9857:195;;;-1:-1:-1;;;;;;;10108:32:1;;;;10103:2;10088:18;;10081:60;-1:-1:-1;;;10172:3:1;10157:19;10150:35;10069:3;9211:980;-1:-1:-1;;;9211:980:1:o;10709:128::-;10749:3;10780:1;10776:6;10773:1;10770:13;10767:39;;;10786:18;;:::i;:::-;-1:-1:-1;10822:9:1;;10709:128::o;10842:217::-;10882:1;10908;10898:132;;10952:10;10947:3;10943:20;10940:1;10933:31;10987:4;10984:1;10977:15;11015:4;11012:1;11005:15;10898:132;-1:-1:-1;11044:9:1;;10842:217::o;11064:168::-;11104:7;11170:1;11166;11162:6;11158:14;11155:1;11152:21;11147:1;11140:9;11133:17;11129:45;11126:71;;;11177:18;;:::i;:::-;-1:-1:-1;11217:9:1;;11064:168::o;11237:125::-;11277:4;11305:1;11302;11299:8;11296:34;;;11310:18;;:::i;:::-;-1:-1:-1;11347:9:1;;11237:125::o;11367:380::-;11446:1;11442:12;;;;11489;;;11510:61;;11564:4;11556:6;11552:17;11542:27;;11510:61;11617:2;11609:6;11606:14;11586:18;11583:38;11580:161;;;11663:10;11658:3;11654:20;11651:1;11644:31;11698:4;11695:1;11688:15;11726:4;11723:1;11716:15;11580:161;;11367:380;;;:::o;11752:135::-;11791:3;-1:-1:-1;;11812:17:1;;11809:43;;;11832:18;;:::i;:::-;-1:-1:-1;11879:1:1;11868:13;;11752:135::o;11892:127::-;11953:10;11948:3;11944:20;11941:1;11934:31;11984:4;11981:1;11974:15;12008:4;12005:1;11998:15;12024:127;12085:10;12080:3;12076:20;12073:1;12066:31;12116:4;12113:1;12106:15;12140:4;12137:1;12130:15;12156:127;12217:10;12212:3;12208:20;12205:1;12198:31;12248:4;12245:1;12238:15;12272:4;12269:1;12262:15;12420:131;-1:-1:-1;;;;;12495:31:1;;12485:42;;12475:70;;12541:1;12538;12531:12;12475:70;12420:131;:::o

Swarm Source

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