ETH Price: $2,508.16 (+0.32%)

Token

The Hitchhikers Guide to the Galaxy (H2G2)
 

Overview

Max Total Supply

1,000,000,000,000 H2G2

Holders

207

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,051,469.300982240291330097 H2G2

Value
$0.00
0x3A739ab15D1fBC6275017a7f54D3ae74aFDEa20a
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:
H2G2

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-11-29
*/

//SPDX-License-Identifier: UNLICENSED



//The Hitchhiker’s Guide to the Galaxy (H2G2) is Elon Musk's favorite book and the official model for Grok AI. Without H2G2, there would be no Grok. $H2G2 is Grok’s origin.

//Website: https://h2g2.vip/
//TG: https://t.me/h2g2_erc
//X (Twitter): https://x.com/H2G2_ETH





pragma solidity ^0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - 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)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    
    function _tokengeneration(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: generation to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

contract H2G2 is ERC20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _liquidityMutex = false;
    bool private  providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 private  tokenLiquidityThreshold = 9000000000 * 10**18;
    uint256 public maxWalletLimit = 10000000000 * 10**18;

    uint256 private  genesis_block;
    uint256 private deadline = 1;
    uint256 private launchtax = 95;

    address private  marketingWallet = 0x3bD609C3783891f2490087B52f0517A2AE757b8f;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
    }

    Taxes public taxes = Taxes(20, 2);
    Taxes public sellTaxes = Taxes(36, 4);

    mapping(address => bool) public exemptFee;
    


    modifier mutexLock() {
        if (!_liquidityMutex) {
            _liquidityMutex = true;
            _;
            _liquidityMutex = false;
        }
    }

    constructor() ERC20("The Hitchhikers Guide to the Galaxy", "H2G2") {
        _tokengeneration(msg.sender, 1000000000000 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a pair for this new token
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[deadWallet] = true;
        
    }

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_liquidityMutex) {
            require(balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_liquidityMutex) {
           
            if (recipient != pair) {
                require(balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (_liquidityMutex || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing ;
            feesum = feeswap;
            currentTaxes = sellTaxes;
        } else if (!useLaunchFee) {
            feeswap =
                taxes.liquidity +
                taxes.marketing ;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) handle_fees(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function handle_fees(uint256 feeswap, Taxes memory swapTaxes) private mutexLock {

	if(feeswap == 0){
            return;
        }	

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadWallet,
            block.timestamp
        );
    }

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function UpdateBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity
    ) external onlyOwner {
        taxes = Taxes(_marketing, _liquidity);
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _liquidity
    ) external onlyOwner {
        sellTaxes = Taxes(_marketing, _liquidity);
    }

   function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        deadline = _deadline;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function AddExemptFee(address _address) external onlyOwner {
        exemptFee[_address] = true;
    }

    function RemoveExemptFee(address _address) external onlyOwner {
        exemptFee[_address] = false;
    }


    function updateMaxWalletLimit(uint256 maxWallet) external onlyOwner {
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), amount);
    }

    // fallbacks
    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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"AddExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"RemoveExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"SetSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"UpdateBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6007805462ffffff60a01b191690556b1d14a0219e548224280000006008556b204fce5e3e250261100000006009556001600b55605f600c55600d80546001600160a01b031916733bd609c3783891f2490087b52f0517a2ae757b8f17905560146080819052600260a0819052600e91909155600f55610100604052602460c0819052600460e08190526010919091556011553480156200009f57600080fd5b50604051806060016040528060238152602001620026dd602391396040805180820190915260048152632419239960e11b60208201526003620000e3838262000503565b506004620000f2828262000503565b5050506200010f620001096200034760201b60201c565b6200034b565b6200013933620001226012600a620006e4565b620001339064e8d4a51000620006fc565b6200039d565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000716565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000716565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000716565b600680546001600160a01b03199081166001600160a01b0395861617909155600780549091169184169190911790555030600090815260126020526040808220805460ff1990811660019081179092553384528284208054821683179055600d549094168352908220805484168217905561dead9091527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f7805490921617905562000741565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004065760405162461bcd60e51b815260206004820152602560248201527f45524332303a2067656e65726174696f6e20746f20746865207a65726f206164604482015264647265737360d81b606482015260840160405180910390fd5b60028190556001600160a01b038216600081815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200048a57607f821691505b602082108103620004ab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200045a57600081815260208120601f850160051c81016020861015620004da5750805b601f850160051c820191505b81811015620004fb57828155600101620004e6565b505050505050565b81516001600160401b038111156200051f576200051f6200045f565b620005378162000530845462000475565b84620004b1565b602080601f8311600181146200056f5760008415620005565750858301515b600019600386901b1c1916600185901b178555620004fb565b600085815260208120601f198616915b82811015620005a0578886015182559484019460019091019084016200057f565b5085821015620005bf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006265781600019048211156200060a576200060a620005cf565b808516156200061857918102915b93841c9390800290620005ea565b509250929050565b6000826200063f57506001620006de565b816200064e57506000620006de565b8160018114620006675760028114620006725762000692565b6001915050620006de565b60ff841115620006865762000686620005cf565b50506001821b620006de565b5060208310610133831016604e8410600b8410161715620006b7575081810a620006de565b620006c38383620005e5565b8060001904821115620006da57620006da620005cf565b0290505b92915050565b6000620006f560ff8416836200062e565b9392505050565b8082028115828204841417620006de57620006de620005cf565b6000602082840312156200072957600080fd5b81516001600160a01b0381168114620006f557600080fd5b611f8c80620007516000396000f3fe6080604052600436106101fd5760003560e01c80638a8c523c1161010d578063aacebbe3116100a0578063edaa11681161006f578063edaa1168146105ff578063f2fde38b1461061f578063f52be97c1461063f578063f66895a31461065f578063f887ea401461067a57600080fd5b8063aacebbe314610549578063c5d32bb214610569578063d695609b14610599578063dd62ed3e146105b957600080fd5b80639e252f00116100dc5780639e252f00146104c9578063a457c2d7146104e9578063a8aa1b3114610509578063a9059cbb1461052957600080fd5b80638a8c523c146104615780638cd4426d146104765780638da5cb5b1461049657806395d89b41146104b457600080fd5b80634324deae1161019057806370a082311161015f57806370a0823114610398578063715018a6146103ce578063728f8eea146103e3578063832c2bd21461041357806385141a771461043357600080fd5b80634324deae146103215780634ada218b146103415780635dbdb7e31461036257806366a88d961461038257600080fd5b806323b872dd116101cc57806323b872dd146102a5578063313ce567146102c557806339509351146102e157806342b6fa111461030157600080fd5b806306fdde0314610209578063095ea7b3146102345780631340538f1461026457806318160ddd1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069a565b60405161022b9190611afd565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611b60565b61072c565b604051901515815260200161022b565b34801561027057600080fd5b5061028461027f366004611b9a565b610743565b005b34801561029257600080fd5b506002545b60405190815260200161022b565b3480156102b157600080fd5b506102546102c0366004611bbe565b610794565b3480156102d157600080fd5b506040516012815260200161022b565b3480156102ed57600080fd5b506102546102fc366004611b60565b610845565b34801561030d57600080fd5b5061028461031c366004611bff565b61087c565b34801561032d57600080fd5b5061028461033c366004611bff565b6108c2565b34801561034d57600080fd5b5060075461025490600160b01b900460ff1681565b34801561036e57600080fd5b5061028461037d366004611c18565b610908565b34801561038e57600080fd5b5061029760095481565b3480156103a457600080fd5b506102976103b3366004611c18565b6001600160a01b031660009081526020819052604090205490565b3480156103da57600080fd5b50610284610956565b3480156103ef57600080fd5b50600e54600f546103fe919082565b6040805192835260208301919091520161022b565b34801561041f57600080fd5b5061028461042e366004611c18565b61098c565b34801561043f57600080fd5b5061044961dead81565b6040516001600160a01b03909116815260200161022b565b34801561046d57600080fd5b506102846109d7565b34801561048257600080fd5b50610284610491366004611b60565b610a76565b3480156104a257600080fd5b506005546001600160a01b0316610449565b3480156104c057600080fd5b5061021e610b37565b3480156104d557600080fd5b506102846104e4366004611bff565b610b46565b3480156104f557600080fd5b50610254610504366004611b60565b610bae565b34801561051557600080fd5b50600754610449906001600160a01b031681565b34801561053557600080fd5b50610254610544366004611b60565b610c49565b34801561055557600080fd5b50610284610564366004611c18565b610c56565b34801561057557600080fd5b50610254610584366004611c18565b60126020526000908152604090205460ff1681565b3480156105a557600080fd5b506102846105b4366004611c35565b610ca2565b3480156105c557600080fd5b506102976105d4366004611c57565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561060b57600080fd5b5061028461061a366004611bff565b610cea565b34801561062b57600080fd5b5061028461063a366004611c18565b610d81565b34801561064b57600080fd5b5061028461065a366004611c35565b610e1c565b34801561066b57600080fd5b506010546011546103fe919082565b34801561068657600080fd5b50600654610449906001600160a01b031681565b6060600380546106a990611c90565b80601f01602080910402602001604051908101604052809291908181526020018280546106d590611c90565b80156107225780601f106106f757610100808354040283529160200191610722565b820191906000526020600020905b81548152906001019060200180831161070557829003601f168201915b5050505050905090565b6000610739338484610e64565b5060015b92915050565b6005546001600160a01b031633146107765760405162461bcd60e51b815260040161076d90611cca565b60405180910390fd5b60078054911515600160a81b0260ff60a81b19909216919091179055565b60006107a1848484610f88565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108265760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161076d565b61083a85336108358685611d15565b610e64565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610739918590610835908690611d28565b6005546001600160a01b031633146108a65760405162461bcd60e51b815260040161076d90611cca565b6108b26012600a611e1f565b6108bc9082611e2e565b60085550565b6005546001600160a01b031633146108ec5760405162461bcd60e51b815260040161076d90611cca565b6108f86012600a611e1f565b6109029082611e2e565b60095550565b6005546001600160a01b031633146109325760405162461bcd60e51b815260040161076d90611cca565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6005546001600160a01b031633146109805760405162461bcd60e51b815260040161076d90611cca565b61098a6000611471565b565b6005546001600160a01b031633146109b65760405162461bcd60e51b815260040161076d90611cca565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b03163314610a015760405162461bcd60e51b815260040161076d90611cca565b600754600160b01b900460ff1615610a5b5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c6564000000000000604482015260640161076d565b6007805461ffff60a81b191661010160a81b17905543600a55565b6005546001600160a01b03163314610aa05760405162461bcd60e51b815260040161076d90611cca565b816001600160a01b031663a9059cbb610ac16005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b329190611e45565b505050565b6060600480546106a990611c90565b6005546001600160a01b03163314610b705760405162461bcd60e51b815260040161076d90611cca565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610baa573d6000803e3d6000fd5b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c305760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076d565b610c3f33856108358685611d15565b5060019392505050565b6000610739338484610f88565b6005546001600160a01b03163314610c805760405162461bcd60e51b815260040161076d90611cca565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ccc5760405162461bcd60e51b815260040161076d90611cca565b60408051808201909152828152602001819052600e91909155600f55565b6005546001600160a01b03163314610d145760405162461bcd60e51b815260040161076d90611cca565b600754600160b01b900460ff1615610d7c5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b606482015260840161076d565b600b55565b6005546001600160a01b03163314610dab5760405162461bcd60e51b815260040161076d90611cca565b6001600160a01b038116610e105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b610e1981611471565b50565b6005546001600160a01b03163314610e465760405162461bcd60e51b815260040161076d90611cca565b60408051808201909152828152602001819052601091909155601155565b6001600160a01b038316610ec65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b6001600160a01b038216610f275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610fea5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161076d565b6001600160a01b03831660009081526012602052604090205460ff1615801561102c57506001600160a01b03821660009081526012602052604090205460ff16155b1561108057600754600160b01b900460ff166110805760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b604482015260640161076d565b6007546001600160a01b0384811691161480156110b657506001600160a01b03821660009081526012602052604090205460ff16155b80156110cc5750600754600160a01b900460ff16155b1561114c57600954816110f4846001600160a01b031660009081526020819052604090205490565b6110fe9190611d28565b111561114c5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161076d565b6007546001600160a01b0384811691161480159061118357506001600160a01b03821660009081526012602052604090205460ff16155b80156111a857506001600160a01b03831660009081526012602052604090205460ff16155b80156111be5750600754600160a01b900460ff16155b15611253576007546001600160a01b0383811691161461125357600954816111fb846001600160a01b031660009081526020819052604090205490565b6112059190611d28565b11156112535760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161076d565b6000806000611275604051806040016040528060008152602001600081525090565b6001600160a01b03871660009081526012602052604081205460ff161580156112b757506001600160a01b03871660009081526012602052604090205460ff16155b80156112d15750600b54600a546112ce9190611d28565b43105b600754909150600160a01b900460ff168061130457506001600160a01b03881660009081526012602052604090205460ff165b8061132757506001600160a01b03871660009081526012602052604090205460ff165b1561133557600092506113d1565b6007546001600160a01b038881169116148015611350575080155b15611389576010546011546113659190611d28565b604080518082019091526010548152601154602082015290955085945091506113d1565b806113c257600e54600f5461139e9190611d28565b60408051808201909152600e548152600f54602082015290955085945091506113d1565b80156113d157600c5494508493505b60646113dd8588611e2e565b6113e79190611e62565b600754909350600160a81b900460ff16801561141157506007546001600160a01b03898116911614155b156114205761142085836114c3565b611434888861142f868a611d15565b611600565b8215611467578415611467576000606461144e8789611e2e565b6114589190611e62565b9050611465893083611600565b505b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600754600160a01b900460ff16610baa576007805460ff60a01b1916600160a01b17905581156115ef573060009081526020819052604090205460085481106115ed576001600854111561151657506008545b6000611523846002611e2e565b90506000818460200151846115389190611e2e565b6115429190611e62565b905060006115508285611d15565b90504761155c826117d8565b60006115688247611d15565b9050600087602001518661157c9190611d15565b6115869083611e62565b9050600088602001518261159a9190611e2e565b905080156115ac576115ac8682611932565b88516000906115bc846002611e2e565b6115c69190611e2e565b905080156115e457600d546115e4906001600160a01b0316826119e4565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b0383166116645760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161076d565b6001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161076d565b6001600160a01b0383166000908152602081905260409020548181101561173e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161076d565b6117488282611d15565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061177e908490611d28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ca91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061180d5761180d611e84565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190611e9a565b8160018151811061189d5761189d611e84565b6001600160a01b0392831660209182029290920101526006546118c39130911684610e64565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906118fc908590600090869030904290600401611eb7565b600060405180830381600087803b15801561191657600080fd5b505af115801561192a573d6000803e3d6000fd5b505050505050565b60065461194a9030906001600160a01b031684610e64565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156119b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119dd9190611f28565b5050505050565b80471015611a345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161076d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a81576040519150601f19603f3d011682016040523d82523d6000602084013e611a86565b606091505b5050905080610b325760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161076d565b600060208083528351808285015260005b81811015611b2a57858101830151858201604001528201611b0e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e1957600080fd5b60008060408385031215611b7357600080fd5b8235611b7e81611b4b565b946020939093013593505050565b8015158114610e1957600080fd5b600060208284031215611bac57600080fd5b8135611bb781611b8c565b9392505050565b600080600060608486031215611bd357600080fd5b8335611bde81611b4b565b92506020840135611bee81611b4b565b929592945050506040919091013590565b600060208284031215611c1157600080fd5b5035919050565b600060208284031215611c2a57600080fd5b8135611bb781611b4b565b60008060408385031215611c4857600080fd5b50508035926020909101359150565b60008060408385031215611c6a57600080fd5b8235611c7581611b4b565b91506020830135611c8581611b4b565b809150509250929050565b600181811c90821680611ca457607f821691505b602082108103611cc457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073d5761073d611cff565b8082018082111561073d5761073d611cff565b600181815b80851115611d76578160001904821115611d5c57611d5c611cff565b80851615611d6957918102915b93841c9390800290611d40565b509250929050565b600082611d8d5750600161073d565b81611d9a5750600061073d565b8160018114611db05760028114611dba57611dd6565b600191505061073d565b60ff841115611dcb57611dcb611cff565b50506001821b61073d565b5060208310610133831016604e8410600b8410161715611df9575081810a61073d565b611e038383611d3b565b8060001904821115611e1757611e17611cff565b029392505050565b6000611bb760ff841683611d7e565b808202811582820484141761073d5761073d611cff565b600060208284031215611e5757600080fd5b8151611bb781611b8c565b600082611e7f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611eac57600080fd5b8151611bb781611b4b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f075784516001600160a01b031683529383019391830191600101611ee2565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f3d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e22e6a93a1743519c69183c9116866d6b498df3f0a7e70b2a5a4a0ce75331f7064736f6c6343000813003354686520486974636868696b65727320477569646520746f207468652047616c617879

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80638a8c523c1161010d578063aacebbe3116100a0578063edaa11681161006f578063edaa1168146105ff578063f2fde38b1461061f578063f52be97c1461063f578063f66895a31461065f578063f887ea401461067a57600080fd5b8063aacebbe314610549578063c5d32bb214610569578063d695609b14610599578063dd62ed3e146105b957600080fd5b80639e252f00116100dc5780639e252f00146104c9578063a457c2d7146104e9578063a8aa1b3114610509578063a9059cbb1461052957600080fd5b80638a8c523c146104615780638cd4426d146104765780638da5cb5b1461049657806395d89b41146104b457600080fd5b80634324deae1161019057806370a082311161015f57806370a0823114610398578063715018a6146103ce578063728f8eea146103e3578063832c2bd21461041357806385141a771461043357600080fd5b80634324deae146103215780634ada218b146103415780635dbdb7e31461036257806366a88d961461038257600080fd5b806323b872dd116101cc57806323b872dd146102a5578063313ce567146102c557806339509351146102e157806342b6fa111461030157600080fd5b806306fdde0314610209578063095ea7b3146102345780631340538f1461026457806318160ddd1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069a565b60405161022b9190611afd565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611b60565b61072c565b604051901515815260200161022b565b34801561027057600080fd5b5061028461027f366004611b9a565b610743565b005b34801561029257600080fd5b506002545b60405190815260200161022b565b3480156102b157600080fd5b506102546102c0366004611bbe565b610794565b3480156102d157600080fd5b506040516012815260200161022b565b3480156102ed57600080fd5b506102546102fc366004611b60565b610845565b34801561030d57600080fd5b5061028461031c366004611bff565b61087c565b34801561032d57600080fd5b5061028461033c366004611bff565b6108c2565b34801561034d57600080fd5b5060075461025490600160b01b900460ff1681565b34801561036e57600080fd5b5061028461037d366004611c18565b610908565b34801561038e57600080fd5b5061029760095481565b3480156103a457600080fd5b506102976103b3366004611c18565b6001600160a01b031660009081526020819052604090205490565b3480156103da57600080fd5b50610284610956565b3480156103ef57600080fd5b50600e54600f546103fe919082565b6040805192835260208301919091520161022b565b34801561041f57600080fd5b5061028461042e366004611c18565b61098c565b34801561043f57600080fd5b5061044961dead81565b6040516001600160a01b03909116815260200161022b565b34801561046d57600080fd5b506102846109d7565b34801561048257600080fd5b50610284610491366004611b60565b610a76565b3480156104a257600080fd5b506005546001600160a01b0316610449565b3480156104c057600080fd5b5061021e610b37565b3480156104d557600080fd5b506102846104e4366004611bff565b610b46565b3480156104f557600080fd5b50610254610504366004611b60565b610bae565b34801561051557600080fd5b50600754610449906001600160a01b031681565b34801561053557600080fd5b50610254610544366004611b60565b610c49565b34801561055557600080fd5b50610284610564366004611c18565b610c56565b34801561057557600080fd5b50610254610584366004611c18565b60126020526000908152604090205460ff1681565b3480156105a557600080fd5b506102846105b4366004611c35565b610ca2565b3480156105c557600080fd5b506102976105d4366004611c57565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561060b57600080fd5b5061028461061a366004611bff565b610cea565b34801561062b57600080fd5b5061028461063a366004611c18565b610d81565b34801561064b57600080fd5b5061028461065a366004611c35565b610e1c565b34801561066b57600080fd5b506010546011546103fe919082565b34801561068657600080fd5b50600654610449906001600160a01b031681565b6060600380546106a990611c90565b80601f01602080910402602001604051908101604052809291908181526020018280546106d590611c90565b80156107225780601f106106f757610100808354040283529160200191610722565b820191906000526020600020905b81548152906001019060200180831161070557829003601f168201915b5050505050905090565b6000610739338484610e64565b5060015b92915050565b6005546001600160a01b031633146107765760405162461bcd60e51b815260040161076d90611cca565b60405180910390fd5b60078054911515600160a81b0260ff60a81b19909216919091179055565b60006107a1848484610f88565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108265760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161076d565b61083a85336108358685611d15565b610e64565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610739918590610835908690611d28565b6005546001600160a01b031633146108a65760405162461bcd60e51b815260040161076d90611cca565b6108b26012600a611e1f565b6108bc9082611e2e565b60085550565b6005546001600160a01b031633146108ec5760405162461bcd60e51b815260040161076d90611cca565b6108f86012600a611e1f565b6109029082611e2e565b60095550565b6005546001600160a01b031633146109325760405162461bcd60e51b815260040161076d90611cca565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6005546001600160a01b031633146109805760405162461bcd60e51b815260040161076d90611cca565b61098a6000611471565b565b6005546001600160a01b031633146109b65760405162461bcd60e51b815260040161076d90611cca565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b03163314610a015760405162461bcd60e51b815260040161076d90611cca565b600754600160b01b900460ff1615610a5b5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c6564000000000000604482015260640161076d565b6007805461ffff60a81b191661010160a81b17905543600a55565b6005546001600160a01b03163314610aa05760405162461bcd60e51b815260040161076d90611cca565b816001600160a01b031663a9059cbb610ac16005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b329190611e45565b505050565b6060600480546106a990611c90565b6005546001600160a01b03163314610b705760405162461bcd60e51b815260040161076d90611cca565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610baa573d6000803e3d6000fd5b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c305760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076d565b610c3f33856108358685611d15565b5060019392505050565b6000610739338484610f88565b6005546001600160a01b03163314610c805760405162461bcd60e51b815260040161076d90611cca565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ccc5760405162461bcd60e51b815260040161076d90611cca565b60408051808201909152828152602001819052600e91909155600f55565b6005546001600160a01b03163314610d145760405162461bcd60e51b815260040161076d90611cca565b600754600160b01b900460ff1615610d7c5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b606482015260840161076d565b600b55565b6005546001600160a01b03163314610dab5760405162461bcd60e51b815260040161076d90611cca565b6001600160a01b038116610e105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b610e1981611471565b50565b6005546001600160a01b03163314610e465760405162461bcd60e51b815260040161076d90611cca565b60408051808201909152828152602001819052601091909155601155565b6001600160a01b038316610ec65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b6001600160a01b038216610f275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610fea5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161076d565b6001600160a01b03831660009081526012602052604090205460ff1615801561102c57506001600160a01b03821660009081526012602052604090205460ff16155b1561108057600754600160b01b900460ff166110805760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b604482015260640161076d565b6007546001600160a01b0384811691161480156110b657506001600160a01b03821660009081526012602052604090205460ff16155b80156110cc5750600754600160a01b900460ff16155b1561114c57600954816110f4846001600160a01b031660009081526020819052604090205490565b6110fe9190611d28565b111561114c5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161076d565b6007546001600160a01b0384811691161480159061118357506001600160a01b03821660009081526012602052604090205460ff16155b80156111a857506001600160a01b03831660009081526012602052604090205460ff16155b80156111be5750600754600160a01b900460ff16155b15611253576007546001600160a01b0383811691161461125357600954816111fb846001600160a01b031660009081526020819052604090205490565b6112059190611d28565b11156112535760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604482015260640161076d565b6000806000611275604051806040016040528060008152602001600081525090565b6001600160a01b03871660009081526012602052604081205460ff161580156112b757506001600160a01b03871660009081526012602052604090205460ff16155b80156112d15750600b54600a546112ce9190611d28565b43105b600754909150600160a01b900460ff168061130457506001600160a01b03881660009081526012602052604090205460ff165b8061132757506001600160a01b03871660009081526012602052604090205460ff165b1561133557600092506113d1565b6007546001600160a01b038881169116148015611350575080155b15611389576010546011546113659190611d28565b604080518082019091526010548152601154602082015290955085945091506113d1565b806113c257600e54600f5461139e9190611d28565b60408051808201909152600e548152600f54602082015290955085945091506113d1565b80156113d157600c5494508493505b60646113dd8588611e2e565b6113e79190611e62565b600754909350600160a81b900460ff16801561141157506007546001600160a01b03898116911614155b156114205761142085836114c3565b611434888861142f868a611d15565b611600565b8215611467578415611467576000606461144e8789611e2e565b6114589190611e62565b9050611465893083611600565b505b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600754600160a01b900460ff16610baa576007805460ff60a01b1916600160a01b17905581156115ef573060009081526020819052604090205460085481106115ed576001600854111561151657506008545b6000611523846002611e2e565b90506000818460200151846115389190611e2e565b6115429190611e62565b905060006115508285611d15565b90504761155c826117d8565b60006115688247611d15565b9050600087602001518661157c9190611d15565b6115869083611e62565b9050600088602001518261159a9190611e2e565b905080156115ac576115ac8682611932565b88516000906115bc846002611e2e565b6115c69190611e2e565b905080156115e457600d546115e4906001600160a01b0316826119e4565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b0383166116645760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161076d565b6001600160a01b0382166116c65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161076d565b6001600160a01b0383166000908152602081905260409020548181101561173e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161076d565b6117488282611d15565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061177e908490611d28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ca91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061180d5761180d611e84565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190611e9a565b8160018151811061189d5761189d611e84565b6001600160a01b0392831660209182029290920101526006546118c39130911684610e64565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906118fc908590600090869030904290600401611eb7565b600060405180830381600087803b15801561191657600080fd5b505af115801561192a573d6000803e3d6000fd5b505050505050565b60065461194a9030906001600160a01b031684610e64565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156119b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119dd9190611f28565b5050505050565b80471015611a345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161076d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a81576040519150601f19603f3d011682016040523d82523d6000602084013e611a86565b606091505b5050905080610b325760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161076d565b600060208083528351808285015260005b81811015611b2a57858101830151858201604001528201611b0e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e1957600080fd5b60008060408385031215611b7357600080fd5b8235611b7e81611b4b565b946020939093013593505050565b8015158114610e1957600080fd5b600060208284031215611bac57600080fd5b8135611bb781611b8c565b9392505050565b600080600060608486031215611bd357600080fd5b8335611bde81611b4b565b92506020840135611bee81611b4b565b929592945050506040919091013590565b600060208284031215611c1157600080fd5b5035919050565b600060208284031215611c2a57600080fd5b8135611bb781611b4b565b60008060408385031215611c4857600080fd5b50508035926020909101359150565b60008060408385031215611c6a57600080fd5b8235611c7581611b4b565b91506020830135611c8581611b4b565b809150509250929050565b600181811c90821680611ca457607f821691505b602082108103611cc457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073d5761073d611cff565b8082018082111561073d5761073d611cff565b600181815b80851115611d76578160001904821115611d5c57611d5c611cff565b80851615611d6957918102915b93841c9390800290611d40565b509250929050565b600082611d8d5750600161073d565b81611d9a5750600061073d565b8160018114611db05760028114611dba57611dd6565b600191505061073d565b60ff841115611dcb57611dcb611cff565b50506001821b61073d565b5060208310610133831016604e8410600b8410161715611df9575081810a61073d565b611e038383611d3b565b8060001904821115611e1757611e17611cff565b029392505050565b6000611bb760ff841683611d7e565b808202811582820484141761073d5761073d611cff565b600060208284031215611e5757600080fd5b8151611bb781611b8c565b600082611e7f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611eac57600080fd5b8151611bb781611b4b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f075784516001600160a01b031683529383019391830191600101611ee2565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f3d57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e22e6a93a1743519c69183c9116866d6b498df3f0a7e70b2a5a4a0ce75331f7064736f6c63430008130033

Deployed Bytecode Sourcemap

8380:10022:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2311:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10064:161;;;;;;;;;;-1:-1:-1;10064:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10064:161:0;1023:187:1;16490:152:0;;;;;;;;;;-1:-1:-1;16490:152:0;;;;;:::i;:::-;;:::i;:::-;;2650:108;;;;;;;;;;-1:-1:-1;2738:12:0;;2650:108;;;1730:25:1;;;1718:2;1703:18;2650:108:0;1584:177:1;10233:448:0;;;;;;;;;;-1:-1:-1;10233:448:0;;;;;:::i;:::-;;:::i;2543:93::-;;;;;;;;;;-1:-1:-1;2543:93:0;;2626:2;2369:36:1;;2357:2;2342:18;2543:93:0;2227:184:1;10689:248:0;;;;;;;;;;-1:-1:-1;10689:248:0;;;;;:::i;:::-;;:::i;16650:177::-;;;;;;;;;;-1:-1:-1;16650:177:0;;;;;:::i;:::-;;:::i;17950:131::-;;;;;;;;;;-1:-1:-1;17950:131:0;;;;;:::i;:::-;;:::i;8607:34::-;;;;;;;;;;-1:-1:-1;8607:34:0;;;;-1:-1:-1;;;8607:34:0;;;;;;17720:104;;;;;;;;;;-1:-1:-1;17720:104:0;;;;;:::i;:::-;;:::i;8719:52::-;;;;;;;;;;;;;;;;2772:127;;;;;;;;;;-1:-1:-1;2772:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2873:18:0;2846:7;2873:18;;;;;;;;;;;;2772:127;7043:94;;;;;;;;;;;;;:::i;9145:33::-;;;;;;;;;;-1:-1:-1;9145:33:0;;;;;;;;;;;;;3027:25:1;;;3083:2;3068:18;;3061:34;;;;3000:18;9145:33:0;2853:248:1;17832:108:0;;;;;;;;;;-1:-1:-1;17832:108:0;;;;;:::i;:::-;;:::i;8972:79::-;;;;;;;;;;;;9009:42;8972:79;;;;;-1:-1:-1;;;;;3270:32:1;;;3252:51;;3240:2;3225:18;8972:79:0;3106:203:1;17180:224:0;;;;;;;;;;;;;:::i;18209:135::-;;;;;;;;;;-1:-1:-1;18209:135:0;;;;;:::i;:::-;;:::i;6820:87::-;;;;;;;;;;-1:-1:-1;6893:6:0;;-1:-1:-1;;;;;6893:6:0;6820:87;;2425:104;;;;;;;;;;;;;:::i;18089:112::-;;;;;;;;;;-1:-1:-1;18089:112:0;;;;;:::i;:::-;;:::i;10945:410::-;;;;;;;;;;-1:-1:-1;10945:410:0;;;;;:::i;:::-;;:::i;8489:19::-;;;;;;;;;;-1:-1:-1;8489:19:0;;;;-1:-1:-1;;;;;8489:19:0;;;11363:165;;;;;;;;;;-1:-1:-1;11363:165:0;;;;;:::i;:::-;;:::i;17597:115::-;;;;;;;;;;-1:-1:-1;17597:115:0;;;;;:::i;:::-;;:::i;9231:41::-;;;;;;;;;;-1:-1:-1;9231:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16835:164;;;;;;;;;;-1:-1:-1;16835:164:0;;;;;:::i;:::-;;:::i;3143:201::-;;;;;;;;;;-1:-1:-1;3143:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3309:18:0;;;3277:7;3309:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3143:201;17412:177;;;;;;;;;;-1:-1:-1;17412:177:0;;;;;:::i;:::-;;:::i;7145:192::-;;;;;;;;;;-1:-1:-1;7145:192:0;;;;;:::i;:::-;;:::i;17007:166::-;;;;;;;;;;-1:-1:-1;17007:166:0;;;;;:::i;:::-;;:::i;9185:37::-;;;;;;;;;;-1:-1:-1;9185:37:0;;;;;;;;;8461:21;;;;;;;;;;-1:-1:-1;8461:21:0;;;;-1:-1:-1;;;;;8461:21:0;;;2311:100;2365:13;2398:5;2391:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2311:100;:::o;10064:161::-;10139:4;10156:39;474:10;10179:7;10188:6;10156:8;:39::i;:::-;-1:-1:-1;10213:4:0;10064:161;;;;;:::o;16490:152::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;;;;;;;;;16608:18:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;16608:26:0::1;-1:-1:-1::0;;;;16608:26:0;;::::1;::::0;;;::::1;::::0;;16490:152::o;10233:448::-;10365:4;10382:36;10392:6;10400:9;10411:6;10382:9;:36::i;:::-;-1:-1:-1;;;;;10458:19:0;;10431:24;10458:19;;;:11;:19;;;;;;;;474:10;10458:33;;;;;;;;10510:26;;;;10502:79;;;;-1:-1:-1;;;10502:79:0;;5131:2:1;10502:79:0;;;5113:21:1;5170:2;5150:18;;;5143:30;5209:34;5189:18;;;5182:62;-1:-1:-1;;;5260:18:1;;;5253:38;5308:19;;10502:79:0;4929:404:1;10502:79:0;10592:57;10601:6;474:10;10623:25;10642:6;10623:16;:25;:::i;:::-;10592:8;:57::i;:::-;-1:-1:-1;10669:4:0;;10233:448;-1:-1:-1;;;;10233:448:0:o;10689:248::-;474:10;10805:4;10859:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10859:34:0;;;;;;;;;;10805:4;;10827:80;;10850:7;;10859:47;;10896:10;;10859:47;:::i;16650:177::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;16805:14:::1;2626:2:::0;16805::::1;:14;:::i;:::-;16792:27;::::0;:10;:27:::1;:::i;:::-;16766:23;:53:::0;-1:-1:-1;16650:177:0:o;17950:131::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;18058:14:::1;2626:2:::0;18058::::1;:14;:::i;:::-;18046:26;::::0;:9;:26:::1;:::i;:::-;18029:14;:43:::0;-1:-1:-1;17950:131:0:o;17720:104::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17790:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;17790:26:0::1;17812:4;17790:26;::::0;;17720:104::o;7043:94::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;7108:21:::1;7126:1;7108:9;:21::i;:::-;7043:94::o:0;17832:108::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17905:19:0::1;17927:5;17905:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;17905:27:0::1;::::0;;17832:108::o;17180:224::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;17244:14:::1;::::0;-1:-1:-1;;;17244:14:0;::::1;;;17243:15;17235:54;;;::::0;-1:-1:-1;;;17235:54:0;;7491:2:1;17235:54:0::1;::::0;::::1;7473:21:1::0;7530:2;7510:18;;;7503:30;7569:28;7549:18;;;7542:56;7615:18;;17235:54:0::1;7289:350:1::0;17235:54:0::1;17300:14;:21:::0;;-1:-1:-1;;;;17332:25:0;-1:-1:-1;;;17332:25:0;;;17384:12:::1;17368:13;:28:::0;17180:224::o;18209:135::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;18301:8:::1;-1:-1:-1::0;;;;;18294:25:0::1;;18320:7;6893:6:::0;;-1:-1:-1;;;;;6893:6:0;;6820:87;18320:7:::1;18294:42;::::0;-1:-1:-1;;;;;;18294:42:0::1;::::0;;;;;;-1:-1:-1;;;;;7836:32:1;;;18294:42:0::1;::::0;::::1;7818:51:1::0;7885:18;;;7878:34;;;7791:18;;18294:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18209:135:::0;;:::o;2425:104::-;2481:13;2514:7;2507:14;;;;;:::i;18089:112::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;6893:6;;18157:36:::1;::::0;-1:-1:-1;;;;;6893:6:0;;;;18157:36;::::1;;;::::0;18183:9;;18157:36:::1;::::0;;;18183:9;6893:6;18157:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18089:112:::0;:::o;10945:410::-;474:10;11066:4;11115:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11115:34:0;;;;;;;;;;11168:35;;;;11160:85;;;;-1:-1:-1;;;11160:85:0;;8375:2:1;11160:85:0;;;8357:21:1;8414:2;8394:18;;;8387:30;8453:34;8433:18;;;8426:62;-1:-1:-1;;;8504:18:1;;;8497:35;8549:19;;11160:85:0;8173:401:1;11160:85:0;11256:67;474:10;11279:7;11288:34;11307:15;11288:16;:34;:::i;11256:67::-;-1:-1:-1;11343:4:0;;10945:410;-1:-1:-1;;;10945:410:0:o;11363:165::-;11441:4;11458:40;11468:10;11480:9;11491:6;11458:9;:40::i;17597:115::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;17677:15:::1;:27:::0;;-1:-1:-1;;;;;;17677:27:0::1;-1:-1:-1::0;;;;;17677:27:0;;;::::1;::::0;;;::::1;::::0;;17597:115::o;16835:164::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;16962:29:::1;::::0;;;;::::1;::::0;;;;;;::::1;;::::0;;;16954:5:::1;:37:::0;;;;;;16835:164::o;17412:177::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;17494:14:::1;::::0;-1:-1:-1;;;17494:14:0;::::1;;;17493:15;17485:65;;;::::0;-1:-1:-1;;;17485:65:0;;8781:2:1;17485:65:0::1;::::0;::::1;8763:21:1::0;8820:2;8800:18;;;8793:30;8859:34;8839:18;;;8832:62;-1:-1:-1;;;8910:18:1;;;8903:35;8955:19;;17485:65:0::1;8579:401:1::0;17485:65:0::1;17561:8;:20:::0;17412:177::o;7145:192::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7234:22:0;::::1;7226:73;;;::::0;-1:-1:-1;;;7226:73:0;;9187:2:1;7226:73:0::1;::::0;::::1;9169:21:1::0;9226:2;9206:18;;;9199:30;9265:34;9245:18;;;9238:62;-1:-1:-1;;;9316:18:1;;;9309:36;9362:19;;7226:73:0::1;8985:402:1::0;7226:73:0::1;7310:19;7320:8;7310:9;:19::i;:::-;7145:192:::0;:::o;17007:166::-;6893:6;;-1:-1:-1;;;;;6893:6:0;474:10;6955:23;6947:68;;;;-1:-1:-1;;;6947:68:0;;;;;;;:::i;:::-;17136:29:::1;::::0;;;;::::1;::::0;;;;;;::::1;;::::0;;;17124:9:::1;:41:::0;;;;;;17007:166::o;5714:380::-;-1:-1:-1;;;;;5850:19:0;;5842:68;;;;-1:-1:-1;;;5842:68:0;;9594:2:1;5842:68:0;;;9576:21:1;9633:2;9613:18;;;9606:30;9672:34;9652:18;;;9645:62;-1:-1:-1;;;9723:18:1;;;9716:34;9767:19;;5842:68:0;9392:400:1;5842:68:0;-1:-1:-1;;;;;5929:21:0;;5921:68;;;;-1:-1:-1;;;5921:68:0;;9999:2:1;5921:68:0;;;9981:21:1;10038:2;10018:18;;;10011:30;10077:34;10057:18;;;10050:62;-1:-1:-1;;;10128:18:1;;;10121:32;10170:19;;5921:68:0;9797:398:1;5921:68:0;-1:-1:-1;;;;;6002:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6054:32;;1730:25:1;;;6054:32:0;;1703:18:1;6054:32:0;;;;;;;5714:380;;;:::o;11536:2474::-;11686:1;11677:6;:10;11669:64;;;;-1:-1:-1;;;11669:64:0;;10402:2:1;11669:64:0;;;10384:21:1;10441:2;10421:18;;;10414:30;10480:34;10460:18;;;10453:62;-1:-1:-1;;;10531:18:1;;;10524:39;10580:19;;11669:64:0;10200:405:1;11669:64:0;-1:-1:-1;;;;;11761:17:0;;;;;;:9;:17;;;;;;;;11760:18;:43;;;;-1:-1:-1;;;;;;11783:20:0;;;;;;:9;:20;;;;;;;;11782:21;11760:43;11756:122;;;11828:14;;-1:-1:-1;;;11828:14:0;;;;11820:46;;;;-1:-1:-1;;;11820:46:0;;10812:2:1;11820:46:0;;;10794:21:1;10851:2;10831:18;;;10824:30;-1:-1:-1;;;10870:18:1;;;10863:49;10929:18;;11820:46:0;10610:343:1;11820:46:0;11904:4;;-1:-1:-1;;;;;11894:14:0;;;11904:4;;11894:14;:39;;;;-1:-1:-1;;;;;;11913:20:0;;;;;;:9;:20;;;;;;;;11912:21;11894:39;:59;;;;-1:-1:-1;11938:15:0;;-1:-1:-1;;;11938:15:0;;;;11937:16;11894:59;11890:215;;;12011:14;;12001:6;11978:20;11988:9;-1:-1:-1;;;;;2873:18:0;2846:7;2873:18;;;;;;;;;;;;2772:127;11978:20;:29;;;;:::i;:::-;:47;;11970:123;;;;-1:-1:-1;;;11970:123:0;;11160:2:1;11970:123:0;;;11142:21:1;;;11179:18;;;11172:30;11238:34;11218:18;;;11211:62;11290:18;;11970:123:0;10958:356:1;11970:123:0;12131:4;;-1:-1:-1;;;;;12121:14:0;;;12131:4;;12121:14;;;;:39;;-1:-1:-1;;;;;;12140:20:0;;;;;;:9;:20;;;;;;;;12139:21;12121:39;:61;;;;-1:-1:-1;;;;;;12165:17:0;;;;;;:9;:17;;;;;;;;12164:18;12121:61;:81;;;;-1:-1:-1;12187:15:0;;-1:-1:-1;;;12187:15:0;;;;12186:16;12121:81;12117:315;;;12249:4;;-1:-1:-1;;;;;12236:17:0;;;12249:4;;12236:17;12232:189;;12315:14;;12305:6;12282:20;12292:9;-1:-1:-1;;;;;2873:18:0;2846:7;2873:18;;;;;;;;;;;;2772:127;12282:20;:29;;;;:::i;:::-;:47;;12274:131;;;;-1:-1:-1;;;12274:131:0;;11160:2:1;12274:131:0;;;11142:21:1;;;11179:18;;;11172:30;11238:34;11218:18;;;11211:62;11290:18;;12274:131:0;10958:356:1;12274:131:0;12444:15;12470:14;12495:11;12517:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;12517:25:0;-1:-1:-1;;;;;12576:17:0;;12555;12576;;;:9;:17;;;;;;;;12575:18;:56;;;;-1:-1:-1;;;;;;12611:20:0;;;;;;:9;:20;;;;;;;;12610:21;12575:56;:112;;;;;12679:8;;12663:13;;:24;;;;:::i;:::-;12648:12;:39;12575:112;12775:15;;12555:132;;-1:-1:-1;;;;12775:15:0;;;;;:36;;-1:-1:-1;;;;;;12794:17:0;;;;;;:9;:17;;;;;;;;12775:36;:60;;;-1:-1:-1;;;;;;12815:20:0;;;;;;:9;:20;;;;;;;;12775:60;12771:655;;;12856:1;12850:7;;12771:655;;;12921:4;;-1:-1:-1;;;;;12908:17:0;;;12921:4;;12908:17;:34;;;;;12930:12;12929:13;12908:34;12904:522;;;13025:9;:19;12986;;:58;;13025:19;12986:58;:::i;:::-;13091:24;;;;;;;;;13106:9;13091:24;;;;;;;;;12959:85;;-1:-1:-1;12959:85:0;;-1:-1:-1;13091:24:0;-1:-1:-1;12904:522:0;;;13138:12;13133:293;;13229:5;:15;13194;;:50;;13229:15;13194:50;:::i;:::-;13291:20;;;;;;;;;13306:5;13291:20;;;;;;;;;13167:77;;-1:-1:-1;13167:77:0;;-1:-1:-1;13291:20:0;-1:-1:-1;13133:293:0;;;13333:12;13329:97;;;13372:9;;;-1:-1:-1;13372:9:0;;-1:-1:-1;13329:97:0;13464:3;13445:15;13454:6;13445;:15;:::i;:::-;13444:23;;;;:::i;:::-;13581:18;;13438:29;;-1:-1:-1;;;;13581:18:0;;;;:36;;;;-1:-1:-1;13613:4:0;;-1:-1:-1;;;;;13603:14:0;;;13613:4;;13603:14;;13581:36;13577:76;;;13619:34;13631:7;13640:12;13619:11;:34::i;:::-;13695:48;13711:6;13719:9;13730:12;13739:3;13730:6;:12;:::i;:::-;13695:15;:48::i;:::-;13758:7;;13754:249;;13830:11;;13826:164;;13862:17;13903:3;13883:16;13892:7;13883:6;:16;:::i;:::-;13882:24;;;;:::i;:::-;13862:44;;13925:49;13941:6;13957:4;13964:9;13925:15;:49::i;:::-;13843:147;13826:164;11658:2352;;;;;11536:2474;;;:::o;7345:173::-;7420:6;;;-1:-1:-1;;;;;7437:17:0;;;-1:-1:-1;;;;;;7437:17:0;;;;;;;7470:40;;7420:6;;;7437:17;7420:6;;7470:40;;7401:16;;7470:40;7390:128;7345:173;:::o;14018:1422::-;9326:15;;-1:-1:-1;;;9326:15:0;;;;9321:125;;9358:15;:22;;-1:-1:-1;;;;9358:22:0;-1:-1:-1;;;9358:22:0;;;14104:49;;14135:7:::1;14104:49;14210:4;14166:23;2873:18:::0;;;;;;;;;;;14250:23:::1;::::0;14231:42;::::1;14227:1206;;14320:1;14294:23;;:27;14290:109;;;-1:-1:-1::0;14360:23:0::1;::::0;14290:109:::1;14470:19;14492:11;:7:::0;14502:1:::1;14492:11;:::i;:::-;14470:33;;14518:32;14612:11;14572:9;:19;;;14554:15;:37;;;;:::i;:::-;14553:70;;;;:::i;:::-;14518:105:::0;-1:-1:-1;14638:14:0::1;14655:42;14518:105:::0;14655:15;:42:::1;:::i;:::-;14638:59:::0;-1:-1:-1;14739:21:0::1;14777:24;14638:59:::0;14777:16:::1;:24::i;:::-;14818:20;14841:38;14865:14:::0;14841:21:::1;:38;:::i;:::-;14818:61;;14894:19;14946:9;:19;;;14932:11;:33;;;;:::i;:::-;14916:50;::::0;:12;:50:::1;:::i;:::-;14894:72;;14981:29;15027:9;:19;;;15013:11;:33;;;;:::i;:::-;14981:65:::0;-1:-1:-1;15067:25:0;;15063:161:::1;;15147:61;15160:24;15186:21;15147:12;:61::i;:::-;15281:19:::0;;15240:20:::1;::::0;15263:15:::1;:11:::0;15277:1:::1;15263:15;:::i;:::-;:37;;;;:::i;:::-;15240:60:::0;-1:-1:-1;15319:16:0;;15315:105:::1;;15364:15;::::0;15356:48:::1;::::0;-1:-1:-1;;;;;15364:15:0::1;15391:12:::0;15356:34:::1;:48::i;:::-;14275:1158;;;;;;;;14227:1206;14098:1342;9395:1;9411:15:::0;:23;;-1:-1:-1;;;;9411:23:0;;;14018:1422;;:::o;4695:638::-;-1:-1:-1;;;;;4835:20:0;;4827:70;;;;-1:-1:-1;;;4827:70:0;;11743:2:1;4827:70:0;;;11725:21:1;11782:2;11762:18;;;11755:30;11821:34;11801:18;;;11794:62;-1:-1:-1;;;11872:18:1;;;11865:35;11917:19;;4827:70:0;11541:401:1;4827:70:0;-1:-1:-1;;;;;4916:23:0;;4908:71;;;;-1:-1:-1;;;4908:71:0;;12149:2:1;4908:71:0;;;12131:21:1;12188:2;12168:18;;;12161:30;12227:34;12207:18;;;12200:62;-1:-1:-1;;;12278:18:1;;;12271:33;12321:19;;4908:71:0;11947:399:1;4908:71:0;-1:-1:-1;;;;;5076:17:0;;5052:21;5076:17;;;;;;;;;;;5112:23;;;;5104:74;;;;-1:-1:-1;;;5104:74:0;;12553:2:1;5104:74:0;;;12535:21:1;12592:2;12572:18;;;12565:30;12631:34;12611:18;;;12604:62;-1:-1:-1;;;12682:18:1;;;12675:36;12728:19;;5104:74:0;12351:402:1;5104:74:0;5209:22;5225:6;5209:13;:22;:::i;:::-;-1:-1:-1;;;;;5189:17:0;;;:9;:17;;;;;;;;;;;:42;;;;5242:20;;;;;;;;:30;;5266:6;;5189:9;5242:30;;5266:6;;5242:30;:::i;:::-;;;;;;;;5307:9;-1:-1:-1;;;;;5290:35:0;5299:6;-1:-1:-1;;;;;5290:35:0;;5318:6;5290:35;;;;1730:25:1;;1718:2;1703:18;;1584:177;5290:35:0;;;;;;;;4816:517;4695:638;;;:::o;15448:526::-;15590:16;;;15604:1;15590:16;;;;;;;;15566:21;;15590:16;;;;;;;;;;-1:-1:-1;15590:16:0;15566:40;;15635:4;15617;15622:1;15617:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15617:23:0;;;:7;;;;;;;;;;:23;;;;15661:6;;:13;;;-1:-1:-1;;;15661:13:0;;;;:6;;;;;:11;;:13;;;;;15617:7;;15661:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15651:4;15656:1;15651:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15651:23:0;;;:7;;;;;;;;;:23;15719:6;;15687:53;;15704:4;;15719:6;15728:11;15687:8;:53::i;:::-;15779:6;;:187;;-1:-1:-1;;;15779:187:0;;-1:-1:-1;;;;;15779:6:0;;;;:57;;:187;;15851:11;;15779:6;;15893:4;;15920;;15940:15;;15779:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15503:471;15448:526;:::o;15982:500::-;16162:6;;16130:53;;16147:4;;-1:-1:-1;;;;;16162:6:0;16171:11;16130:8;:53::i;:::-;16226:6;;:248;;-1:-1:-1;;;16226:248:0;;16291:4;16226:248;;;14604:34:1;14654:18;;;14647:34;;;16226:6:0;14697:18:1;;;14690:34;;;14740:18;;;14733:34;9009:42:0;14783:19:1;;;14776:44;16448:15:0;14836:19:1;;;14829:35;-1:-1:-1;;;;;16226:6:0;;;;:22;;16257:9;;14538:19:1;;16226:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15982:500;;:::o;6263:319::-;6378:6;6353:21;:31;;6345:73;;;;-1:-1:-1;;;6345:73:0;;15388:2:1;6345:73:0;;;15370:21:1;15427:2;15407:18;;;15400:30;15466:31;15446:18;;;15439:59;15515:18;;6345:73:0;15186:353:1;6345:73:0;6432:12;6450:9;-1:-1:-1;;;;;6450:14:0;6473:6;6450:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6431:54;;;6504:7;6496:78;;;;-1:-1:-1;;;6496:78:0;;15956:2:1;6496:78:0;;;15938:21:1;15995:2;15975:18;;;15968:30;16034:34;16014:18;;;16007:62;16105:28;16085:18;;;16078:56;16151:19;;6496:78:0;15754:422:1;14:548;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;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;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:241;1394:6;1447:2;1435:9;1426:7;1422:23;1418:32;1415:52;;;1463:1;1460;1453:12;1415:52;1502:9;1489:23;1521:28;1543:5;1521:28;:::i;:::-;1568:5;1338:241;-1:-1:-1;;;1338:241:1:o;1766:456::-;1843:6;1851;1859;1912:2;1900:9;1891:7;1887:23;1883:32;1880:52;;;1928:1;1925;1918:12;1880:52;1967:9;1954:23;1986:31;2011:5;1986:31;:::i;:::-;2036:5;-1:-1:-1;2093:2:1;2078:18;;2065:32;2106:33;2065:32;2106:33;:::i;:::-;1766:456;;2158:7;;-1:-1:-1;;;2212:2:1;2197:18;;;;2184:32;;1766:456::o;2416:180::-;2475:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:52;;;2544:1;2541;2534:12;2496:52;-1:-1:-1;2567:23:1;;2416:180;-1:-1:-1;2416:180:1:o;2601:247::-;2660:6;2713:2;2701:9;2692:7;2688:23;2684:32;2681:52;;;2729:1;2726;2719:12;2681:52;2768:9;2755:23;2787:31;2812:5;2787:31;:::i;3314:248::-;3382:6;3390;3443:2;3431:9;3422:7;3418:23;3414:32;3411:52;;;3459:1;3456;3449:12;3411:52;-1:-1:-1;;3482:23:1;;;3552:2;3537:18;;;3524:32;;-1:-1:-1;3314:248:1:o;3567:388::-;3635:6;3643;3696:2;3684:9;3675:7;3671:23;3667:32;3664:52;;;3712:1;3709;3702:12;3664:52;3751:9;3738:23;3770:31;3795:5;3770:31;:::i;:::-;3820:5;-1:-1:-1;3877:2:1;3862:18;;3849:32;3890:33;3849:32;3890:33;:::i;:::-;3942:7;3932:17;;;3567:388;;;;;:::o;4183:380::-;4262:1;4258:12;;;;4305;;;4326:61;;4380:4;4372:6;4368:17;4358:27;;4326:61;4433:2;4425:6;4422:14;4402:18;4399:38;4396:161;;4479:10;4474:3;4470:20;4467:1;4460:31;4514:4;4511:1;4504:15;4542:4;4539:1;4532:15;4396:161;;4183:380;;;:::o;4568:356::-;4770:2;4752:21;;;4789:18;;;4782:30;4848:34;4843:2;4828:18;;4821:62;4915:2;4900:18;;4568:356::o;5338:127::-;5399:10;5394:3;5390:20;5387:1;5380:31;5430:4;5427:1;5420:15;5454:4;5451:1;5444:15;5470:128;5537:9;;;5558:11;;;5555:37;;;5572:18;;:::i;5603:125::-;5668:9;;;5689:10;;;5686:36;;;5702:18;;:::i;5733:422::-;5822:1;5865:5;5822:1;5879:270;5900:7;5890:8;5887:21;5879:270;;;5959:4;5955:1;5951:6;5947:17;5941:4;5938:27;5935:53;;;5968:18;;:::i;:::-;6018:7;6008:8;6004:22;6001:55;;;6038:16;;;;6001:55;6117:22;;;;6077:15;;;;5879:270;;;5883:3;5733:422;;;;;:::o;6160:806::-;6209:5;6239:8;6229:80;;-1:-1:-1;6280:1:1;6294:5;;6229:80;6328:4;6318:76;;-1:-1:-1;6365:1:1;6379:5;;6318:76;6410:4;6428:1;6423:59;;;;6496:1;6491:130;;;;6403:218;;6423:59;6453:1;6444:10;;6467:5;;;6491:130;6528:3;6518:8;6515:17;6512:43;;;6535:18;;:::i;:::-;-1:-1:-1;;6591:1:1;6577:16;;6606:5;;6403:218;;6705:2;6695:8;6692:16;6686:3;6680:4;6677:13;6673:36;6667:2;6657:8;6654:16;6649:2;6643:4;6640:12;6636:35;6633:77;6630:159;;;-1:-1:-1;6742:19:1;;;6774:5;;6630:159;6821:34;6846:8;6840:4;6821:34;:::i;:::-;6891:6;6887:1;6883:6;6879:19;6870:7;6867:32;6864:58;;;6902:18;;:::i;:::-;6940:20;;6160:806;-1:-1:-1;;;6160:806:1:o;6971:140::-;7029:5;7058:47;7099:4;7089:8;7085:19;7079:4;7058:47;:::i;7116:168::-;7189:9;;;7220;;7237:15;;;7231:22;;7217:37;7207:71;;7258:18;;:::i;7923:245::-;7990:6;8043:2;8031:9;8022:7;8018:23;8014:32;8011:52;;;8059:1;8056;8049:12;8011:52;8091:9;8085:16;8110:28;8132:5;8110:28;:::i;11319:217::-;11359:1;11385;11375:132;;11429:10;11424:3;11420:20;11417:1;11410:31;11464:4;11461:1;11454:15;11492:4;11489:1;11482:15;11375:132;-1:-1:-1;11521:9:1;;11319:217::o;12890:127::-;12951:10;12946:3;12942:20;12939:1;12932:31;12982:4;12979:1;12972:15;13006:4;13003:1;12996:15;13022:251;13092:6;13145:2;13133:9;13124:7;13120:23;13116:32;13113:52;;;13161:1;13158;13151:12;13113:52;13193:9;13187:16;13212:31;13237:5;13212:31;:::i;13278:980::-;13540:4;13588:3;13577:9;13573:19;13619:6;13608:9;13601:25;13645:2;13683:6;13678:2;13667:9;13663:18;13656:34;13726:3;13721:2;13710:9;13706:18;13699:31;13750:6;13785;13779:13;13816:6;13808;13801:22;13854:3;13843:9;13839:19;13832:26;;13893:2;13885:6;13881:15;13867:29;;13914:1;13924:195;13938:6;13935:1;13932:13;13924:195;;;14003:13;;-1:-1:-1;;;;;13999:39:1;13987:52;;14094:15;;;;14059:12;;;;14035:1;13953:9;13924:195;;;-1:-1:-1;;;;;;;14175:32:1;;;;14170:2;14155:18;;14148:60;-1:-1:-1;;;14239:3:1;14224:19;14217:35;14136:3;13278:980;-1:-1:-1;;;13278:980:1:o;14875:306::-;14963:6;14971;14979;15032:2;15020:9;15011:7;15007:23;15003:32;15000:52;;;15048:1;15045;15038:12;15000:52;15077:9;15071:16;15061:26;;15127:2;15116:9;15112:18;15106:25;15096:35;;15171:2;15160:9;15156:18;15150:25;15140:35;;14875:306;;;;;:::o

Swarm Source

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