ETH Price: $3,262.03 (+2.87%)
Gas: 2 Gwei

Token

Book of Fly (FLY)
 

Overview

Max Total Supply

100,000,000 FLY

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,260,099.415702954554570747 FLY

Value
$0.00
0x7CE636860522bD7f6e3447Cb7044FA504196Cd59
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:
FLY

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-26
*/

/**

A group of cryptocurrency enthusiasts MET at a Springfield coffee shop on a quiet spring afternoon. 
Ned, a PASSIONATE follower of finance and lover of FLY, suggested creating a new cryptocurrency called "Book of Fly", 
inspired by Ned FLYders from The Simpsons and his passion for FLY. 
The idea resonated and they formed a team to develop it.

Website:    https://www.flybase.vip
Telegram:   https://t.me/bookoffly
Twitter:    https://twitter.com/bookoffly

**/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

abstract contract Initializable {
    bool private _initialized;

    bool private _initializing;

    modifier initializer() {
        require(
            _initializing || !_initialized,
            "Initializable: contract is already initialized"
        );

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    function transferOwnership(
        address newOwner
    ) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    function acceptOwnership() public virtual {
        address sender = _msgSender();
        require(
            pendingOwner() == sender,
            "Ownable2Step: caller is not the new owner"
        );
        _transferOwnership(sender);
    }
}

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

    mapping(address => mapping(address => uint256)) private _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 to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        require(
            _balances[from] >= amount || from == to,
            "ERC20: transfer amount exceeds balance"
        );

        uint256 transferAmount = from == to ? 0 : amount;

        unchecked {
            _balances[from] = _balances[from] - amount;
            _balances[to] = _balances[to] + transferAmount;
        }

        emit Transfer(from, to, transferAmount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), 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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract ERC20Burnable is Context, ERC20 {
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract FLY is ERC20, ERC20Burnable, Ownable2Step, Initializable {
    uint16 public swapThresholdRatio;

    uint256 private _maxTaxSwap;
    uint256 private _treasuryPending;

    address public treasuryAddress;
    uint16[3] public treasuryFees;

    mapping(address => bool) public isExcludedFromFees;

    uint16[3] public totalFees;
    bool private _swapping;

    IUniswapV2Router02 public routerV2;
    address public pairV2;
    mapping(address => bool) public AMMPairs;

    event SwapThresholdUpdated(uint16 swapThresholdRatio);
    event treasuryAddressUpdated(address treasuryAddress);
    event treasuryFeesUpdated(
        uint16 buyFee,
        uint16 sellFee,
        uint16 transferFee
    );
    event treasuryFeeSent(address recipient, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event RouterV2Updated(address indexed routerV2);
    event AMMPairsUpdated(address indexed AMMPair, bool isPair);

    constructor() ERC20(unicode"Book of Fly", unicode"FLY") {
        address supplyRecipient = 0x278b402eDc95Ad93Cd01005b5d5D8d3ac6859eA4;

        updateSwapThreshold(2);

        treasuryAddressSetup(0x278b402eDc95Ad93Cd01005b5d5D8d3ac6859eA4);
        treasuryFeesSetup(2000, 2000, 0);

        excludeFromFees(supplyRecipient, true);
        excludeFromFees(address(this), true);
        excludeFromFees(msg.sender, true);

        _maxTaxSwap = 1_000_000 * (10 ** decimals());

        _mint(msg.sender, 100_000_000 * (10 ** decimals()));
    }

    function getSwapThresholdAmount() public view returns (uint256) {
        return (balanceOf(pairV2) * swapThresholdRatio) / 1000000;
    }

    function getAllPending() public view returns (uint256) {
        return 0 + _treasuryPending;
    }

    function treasuryAddressSetup(address _newAddress) public onlyOwner {
        require(
            _newAddress != address(0),
            "TaxesDefaultRouterWallet: Wallet tax recipient cannot be a 0x0 address"
        );

        treasuryAddress = _newAddress;
        excludeFromFees(_newAddress, true);

        emit treasuryAddressUpdated(_newAddress);
    }

    function treasuryFeesSetup(
        uint16 _buyFee,
        uint16 _sellFee,
        uint16 _transferFee
    ) public onlyOwner {
        totalFees[0] = totalFees[0] - treasuryFees[0] + _buyFee;
        totalFees[1] = totalFees[1] - treasuryFees[1] + _sellFee;
        totalFees[2] = totalFees[2] - treasuryFees[2] + _transferFee;
        require(
            totalFees[0] <= 2500 &&
                totalFees[1] <= 2500 &&
                totalFees[2] <= 2500,
            "TaxesDefaultRouter: Cannot exceed max total fee of 25%"
        );

        treasuryFees = [_buyFee, _sellFee, _transferFee];

        emit treasuryFeesUpdated(_buyFee, _sellFee, _transferFee);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function excludeFromFees(
        address account,
        bool isExcluded
    ) public onlyOwner {
        isExcludedFromFees[account] = isExcluded;

        emit ExcludeFromFees(account, isExcluded);
    }

    function rescueETH() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    receive() external payable {}

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

    function startFLYTrading() external onlyOwner() {
        routerV2.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );

        _setAMMPair(pairV2, true);

        emit RouterV2Updated(address(routerV2));
    }

    function setAMMPair(address pair, bool isPair) external onlyOwner {
        require(
            pair != pairV2,
            "DefaultRouter: Cannot remove initial pair from list"
        );

        _setAMMPair(pair, isPair);
    }

    function _setAMMPair(address pair, bool isPair) private {
        AMMPairs[pair] = isPair;

        if (isPair) {}

        emit AMMPairsUpdated(pair, isPair);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "transfer from address zero");
        require(to != address(0), "transfer to address zero");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!isExcludedFromFees[from] || !isExcludedFromFees[to]) {
            require(from != to, "ERC20: cannot transfer to itself");
        }

        if (
            !_swapping &&
            amount > 0 &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]
        ) {
            uint256 fees = 0;
            uint8 txType = 3;

            if (AMMPairs[from]) {
                if (totalFees[0] > 0) txType = 0;
            } else if (AMMPairs[to]) {
                if (totalFees[1] > 0) txType = 1;
            } else if (totalFees[2] > 0) txType = 2;

            if (txType < 3) {
                fees = (amount * totalFees[txType]) / 10000;
                amount -= fees;

                _treasuryPending +=
                    (fees * treasuryFees[txType]) /
                    totalFees[txType];
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= getSwapThresholdAmount() &&
            balanceOf(pairV2) > 0;

        if (
            !_swapping &&
            AMMPairs[to] &&
            canSwap &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]
        ) {
            _swapping = true;

            _swapTokensForCoin(min(amount,min(contractTokenBalance,_maxTaxSwap)));
            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                payable(treasuryAddress).transfer(contractETHBalance);
            }

            _swapping = false;
        }

        super._transfer(from, to, amount);
    }
    
    function _swapTokensForCoin(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = routerV2.WETH();

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

        routerV2.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function updateSwapThreshold(uint16 _swapThresholdRatio) public onlyOwner {
        require(
            _swapThresholdRatio > 0 && _swapThresholdRatio <= 500,
            "SwapThreshold: Cannot exceed limits from 0.01% to 5% for new swap threshold"
        );
        swapThresholdRatio = _swapThresholdRatio;

        emit SwapThresholdUpdated(_swapThresholdRatio);
    }

    function createFLYPair() external onlyOwner() {
        routerV2 = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        pairV2 = IUniswapV2Factory(routerV2.factory()).createPair(
            address(this),
            routerV2.WETH()
        );

        _approve(address(this), address(routerV2), ~uint256(0));
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        super._afterTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"AMMPair","type":"address"},{"indexed":false,"internalType":"bool","name":"isPair","type":"bool"}],"name":"AMMPairsUpdated","type":"event"},{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":"routerV2","type":"address"}],"name":"RouterV2Updated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"swapThresholdRatio","type":"uint16"}],"name":"SwapThresholdUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasuryAddress","type":"address"}],"name":"treasuryAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"treasuryFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"treasuryFeesUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AMMPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createFLYPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapThresholdAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pairV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startFLYTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThresholdRatio","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"treasuryAddressSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyFee","type":"uint16"},{"internalType":"uint16","name":"_sellFee","type":"uint16"},{"internalType":"uint16","name":"_transferFee","type":"uint16"}],"name":"treasuryFeesSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_swapThresholdRatio","type":"uint16"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600b81526020016a426f6f6b206f6620466c7960a81b81525060405180604001604052806003815260200162464c5960e81b8152508160039081620000639190620008f0565b506004620000728282620008f0565b5050506200008f620000896200015660201b60201c565b6200015a565b73278b402edc95ad93cd01005b5d5d8d3ac6859ea4620000b0600262000178565b620000cf73278b402edc95ad93cd01005b5d5d8d3ac6859ea462000280565b620000df6107d080600062000379565b620000ec81600162000588565b620000f930600162000588565b6200010633600162000588565b620001146012600a62000ad1565b6200012390620f424062000ae9565b6007556200014f33620001396012600a62000ad1565b62000149906305f5e10062000ae9565b620005f1565b5062000b5c565b3390565b600680546001600160a01b03191690556200017581620006d0565b50565b6200018262000722565b60008161ffff161180156200019d57506101f48161ffff1611155b620002295760405162461bcd60e51b815260206004820152604b60248201527f537761705468726573686f6c643a2043616e6e6f7420657863656564206c696d60448201527f6974732066726f6d20302e30312520746f20352520666f72206e65772073776160648201526a1c081d1a1c995cda1bdb1960aa1b608482015260a4015b60405180910390fd5b6006805461ffff60b01b1916600160b01b61ffff8416908102919091179091556040519081527fcf1366790fe21e66c9df9dcf67218b1e10acd64d3c99ae8a7429a68de91f1720906020015b60405180910390a150565b6200028a62000722565b6001600160a01b038116620003175760405162461bcd60e51b815260206004820152604660248201527f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460448201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160648201526564647265737360d01b608482015260a40162000220565b600980546001600160a01b0319166001600160a01b0383161790556200033f81600162000588565b6040516001600160a01b03821681527fe4ed70c3d76616a0a0abd9a0dd9a70e8a5ce46146e1e644575e111330e365ce79060200162000275565b6200038362000722565b600a54600c5484916200039e9161ffff918216911662000b03565b620003aa919062000b28565b600c805461ffff191661ffff9283161790819055600a548492620003dc92620100009283900482169290041662000b03565b620003e8919062000b28565b600c805463ffff000019166201000061ffff938416021790819055600a54839262000423926401000000009283900482169290041662000b03565b6200042f919062000b28565b600c805461ffff9283166401000000000261ffff60201b19821681179092556109c4908316919092161711801590620004775750600c546109c46201000090910461ffff1611155b8015620004955750600c546109c464010000000090910461ffff1611155b620005095760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527f64206d617820746f74616c20666565206f662032352500000000000000000000606482015260840162000220565b6040805160608101825261ffff808616825284811660208301528316918101919091526200053c90600a90600362000798565b506040805161ffff8581168252848116602083015283168183015290517faaf77301c7ddcd55669cb55da207bf87362c0fa18fb623452c4401900c9418919181900360600190a1505050565b6200059262000722565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006495760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000220565b620006576000838362000780565b80600260008282546200066b919062000b46565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620006cc6000838362000780565b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200077e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000220565b565b620007938383836001600160e01b038416565b505050565b600183019183908215620008235791602002820160005b83821115620007f157835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620007af565b8015620008215782816101000a81549061ffff0219169055600201602081600101049283019260010302620007f1565b505b506200083192915062000835565b5090565b5b8082111562000831576000815560010162000836565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200087757607f821691505b6020821081036200089857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200079357600081815260208120601f850160051c81016020861015620008c75750805b601f850160051c820191505b81811015620008e857828155600101620008d3565b505050505050565b81516001600160401b038111156200090c576200090c6200084c565b62000924816200091d845462000862565b846200089e565b602080601f8311600181146200095c5760008415620009435750858301515b600019600386901b1c1916600185901b178555620008e8565b600085815260208120601f198616915b828110156200098d578886015182559484019460019091019084016200096c565b5085821015620009ac5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a13578160001904821115620009f757620009f7620009bc565b8085161562000a0557918102915b93841c9390800290620009d7565b509250929050565b60008262000a2c5750600162000acb565b8162000a3b5750600062000acb565b816001811462000a54576002811462000a5f5762000a7f565b600191505062000acb565b60ff84111562000a735762000a73620009bc565b50506001821b62000acb565b5060208310610133831016604e8410600b841016171562000aa4575081810a62000acb565b62000ab08383620009d2565b806000190482111562000ac75762000ac7620009bc565b0290505b92915050565b600062000ae260ff84168362000a1b565b9392505050565b808202811582820484141762000acb5762000acb620009bc565b61ffff82811682821603908082111562000b215762000b21620009bc565b5092915050565b61ffff81811683821601908082111562000b215762000b21620009bc565b8082018082111562000acb5762000acb620009bc565b6123378062000b6c6000396000f3fe6080604052600436106102135760003560e01c806379ba509711610118578063c0246668116100a0578063dd62ed3e1161006f578063dd62ed3e1461063b578063e30c39781461065b578063f112ba7214610679578063f265ced91461068e578063f2fde38b146106a357600080fd5b8063c0246668146105c6578063c5f956af146105e6578063d54f3ce114610606578063d94775261461062657600080fd5b80638fffabed116100e75780638fffabed1461053157806395d89b41146105515780639adad3b114610566578063a457c2d714610586578063a9059cbb146105a657600080fd5b806379ba5097146104be57806379cc6790146104d35780637d7a9573146104f35780638da5cb5b1461051357600080fd5b8063395093511161019b5780634fbee1931161016a5780634fbee193146103d6578063502f74461461040657806370a0823114610443578063715018a614610479578063768565571461048e57600080fd5b80633950935114610341578063408ccbdf1461036157806342966c68146103945780634f011b83146103b457600080fd5b80631a0e718c116101e25780631a0e718c146102b057806320800a00146102d057806323b872dd146102e55780632d99d32e14610305578063313ce5671461032557600080fd5b806306fdde031461021f578063095ea7b31461024a57806310a80b701461027a57806318160ddd1461029157600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b506102346106c3565b6040516102419190611f5c565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611fbf565b610755565b6040519015158152602001610241565b34801561028657600080fd5b5061028f61076f565b005b34801561029d57600080fd5b506002545b604051908152602001610241565b3480156102bc57600080fd5b5061028f6102cb366004612002565b61089c565b3480156102dc57600080fd5b5061028f6109a0565b3480156102f157600080fd5b5061026a61030036600461201d565b6109d7565b34801561031157600080fd5b5061028f61032036600461205e565b6109fb565b34801561033157600080fd5b5060405160128152602001610241565b34801561034d57600080fd5b5061026a61035c366004611fbf565b610a8b565b34801561036d57600080fd5b5061038161037c36600461209c565b610aad565b60405161ffff9091168152602001610241565b3480156103a057600080fd5b5061028f6103af36600461209c565b610adb565b3480156103c057600080fd5b5060065461038190600160b01b900461ffff1681565b3480156103e257600080fd5b5061026a6103f13660046120b5565b600b6020526000908152604090205460ff1681565b34801561041257600080fd5b50600d5461042b9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610241565b34801561044f57600080fd5b506102a261045e3660046120b5565b6001600160a01b031660009081526020819052604090205490565b34801561048557600080fd5b5061028f610ae5565b34801561049a57600080fd5b5061026a6104a93660046120b5565b600f6020526000908152604090205460ff1681565b3480156104ca57600080fd5b5061028f610af9565b3480156104df57600080fd5b5061028f6104ee366004611fbf565b610b70565b3480156104ff57600080fd5b5061028f61050e3660046120b5565b610b85565b34801561051f57600080fd5b506005546001600160a01b031661042b565b34801561053d57600080fd5b50600e5461042b906001600160a01b031681565b34801561055d57600080fd5b50610234610c77565b34801561057257600080fd5b5061038161058136600461209c565b610c86565b34801561059257600080fd5b5061026a6105a1366004611fbf565b610c96565b3480156105b257600080fd5b5061026a6105c1366004611fbf565b610d11565b3480156105d257600080fd5b5061028f6105e136600461205e565b610d1f565b3480156105f257600080fd5b5060095461042b906001600160a01b031681565b34801561061257600080fd5b5061028f6106213660046120d2565b610d87565b34801561063257600080fd5b506102a2610f7c565b34801561064757600080fd5b506102a2610656366004612115565b610fc5565b34801561066757600080fd5b506006546001600160a01b031661042b565b34801561068557600080fd5b506102a2610ff0565b34801561069a57600080fd5b5061028f611001565b3480156106af57600080fd5b5061028f6106be3660046120b5565b6111ce565b6060600380546106d290612143565b80601f01602080910402602001604051908101604052809291908181526020018280546106fe90612143565b801561074b5780601f106107205761010080835404028352916020019161074b565b820191906000526020600020905b81548152906001019060200180831161072e57829003601f168201915b5050505050905090565b60003361076381858561123f565b60019150505b92915050565b610777611363565b600d54306000818152602081905260409020546101009092046001600160a01b03169163f305d7199147916000806107b76005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561081f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610844919061217d565b5050600e5461085e91506001600160a01b031660016113bd565b600d546040516101009091046001600160a01b0316907fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60290600090a2565b6108a4611363565b60008161ffff161180156108be57506101f48161ffff1611155b6109495760405162461bcd60e51b815260206004820152604b60248201527f537761705468726573686f6c643a2043616e6e6f7420657863656564206c696d60448201527f6974732066726f6d20302e30312520746f20352520666f72206e65772073776160648201526a1c081d1a1c995cda1bdb1960aa1b608482015260a4015b60405180910390fd5b6006805461ffff60b01b1916600160b01b61ffff8416908102919091179091556040519081527fcf1366790fe21e66c9df9dcf67218b1e10acd64d3c99ae8a7429a68de91f1720906020015b60405180910390a150565b6109a8611363565b60405133904780156108fc02916000818181858888f193505050501580156109d4573d6000803e3d6000fd5b50565b6000336109e5858285611415565b6109f085858561148f565b506001949350505050565b610a03611363565b600e546001600160a01b0390811690831603610a7d5760405162461bcd60e51b815260206004820152603360248201527f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e696044820152721d1a585b081c185a5c88199c9bdb481b1a5cdd606a1b6064820152608401610940565b610a8782826113bd565b5050565b600033610763818585610a9e8383610fc5565b610aa891906121c1565b61123f565b600c8160038110610abd57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b6109d43382611996565b610aed611363565b610af76000611ac8565b565b60065433906001600160a01b03168114610b675760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610940565b6109d481611ac8565b610b7b823383611415565b610a878282611996565b610b8d611363565b6001600160a01b038116610c185760405162461bcd60e51b815260206004820152604660248201527f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460448201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160648201526564647265737360d01b608482015260a401610940565b600980546001600160a01b0319166001600160a01b038316179055610c3e816001610d1f565b6040516001600160a01b03821681527fe4ed70c3d76616a0a0abd9a0dd9a70e8a5ce46146e1e644575e111330e365ce790602001610995565b6060600480546106d290612143565b600a8160038110610abd57600080fd5b60003381610ca48286610fc5565b905083811015610d045760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610940565b6109f0828686840361123f565b60003361076381858561148f565b610d27611363565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b610d8f611363565b600a54600c548491610da89161ffff91821691166121ea565b610db2919061220c565b600c805461ffff191661ffff9283161790819055600a548492610de29262010000928390048216929004166121ea565b610dec919061220c565b600c805463ffff000019166201000061ffff938416021790819055600a548392610e2592640100000000928390048216929004166121ea565b610e2f919061220c565b600c805461ffff9283166401000000000265ffff0000000019821681179092556109c4908316919092161711801590610e775750600c546109c46201000090910461ffff1611155b8015610e945750600c546109c464010000000090910461ffff1611155b610eff5760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527564206d617820746f74616c20666565206f662032352560501b6064820152608401610940565b6040805160608101825261ffff80861682528481166020830152831691810191909152610f3090600a906003611eb1565b506040805161ffff8581168252848116602083015283168183015290517faaf77301c7ddcd55669cb55da207bf87362c0fa18fb623452c4401900c9418919181900360600190a1505050565b600654600e546001600160a01b03166000908152602081905260408120549091620f424091610fb691600160b01b900461ffff1690612227565b610fc0919061223e565b905090565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006008546000610fc091906121c1565b611009611363565b600d8054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b031990911617908190556040805163c45a015560e01b815290516101009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190612260565b6001600160a01b031663c9c6539630600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a9190612260565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190612260565b600e80546001600160a01b0319166001600160a01b03928316179055600d54610af791309161010090041660001961123f565b6111d6611363565b600680546001600160a01b0383166001600160a01b031990911681179091556112076005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166112a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610940565b6001600160a01b0382166113025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610940565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610af75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610940565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a84559101610d7b565b60006114218484610fc5565b90506000198114611489578181101561147c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610940565b611489848484840361123f565b50505050565b6001600160a01b0383166114e55760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610940565b6001600160a01b03821661153b5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610940565b6000811161159d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610940565b6001600160a01b0383166000908152600b602052604090205460ff1615806115de57506001600160a01b0382166000908152600b602052604090205460ff16155b1561164457816001600160a01b0316836001600160a01b0316036116445760405162461bcd60e51b815260206004820181905260248201527f45524332303a2063616e6e6f74207472616e7366657220746f20697473656c666044820152606401610940565b600d5460ff161580156116575750600081115b801561167c57506001600160a01b0383166000908152600b602052604090205460ff16155b80156116a157506001600160a01b0382166000908152600b602052604090205460ff16155b15611840576001600160a01b0383166000908152600f602052604081205460039060ff16156116df57600c5461ffff16156116da575060005b611732565b6001600160a01b0384166000908152600f602052604090205460ff161561171a57600c5462010000900461ffff16156116da57506001611732565b600c54640100000000900461ffff1615611732575060025b60038160ff16101561182c57612710600c8260ff1660038110611757576117576121d4565b601091828204019190066002029054906101000a900461ffff1661ffff16846117809190612227565b61178a919061223e565b9150611796828461227d565b9250600c8160ff16600381106117ae576117ae6121d4565b601091828204019190066002029054906101000a900461ffff1661ffff16600a8260ff16600381106117e2576117e26121d4565b601091828204019190066002029054906101000a900461ffff1661ffff168361180b9190612227565b611815919061223e565b6008600082825461182691906121c1565b90915550505b811561183d5761183d853084611ae1565b50505b3060009081526020819052604081205490611859610f7c565b82101580156118805750600e546001600160a01b0316600090815260208190526040812054115b600d5490915060ff161580156118ae57506001600160a01b0384166000908152600f602052604090205460ff165b80156118b75750805b80156118dc57506001600160a01b0385166000908152600b602052604090205460ff16155b801561190157506001600160a01b0384166000908152600b602052604090205460ff16155b1561198457600d805460ff191660011790556007546119359061193090859061192b908690611cca565b611cca565b611ce2565b478015611978576009546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611976573d6000803e3d6000fd5b505b50600d805460ff191690555b61198f858585611ae1565b5050505050565b6001600160a01b0382166119f65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610940565b6001600160a01b03821660009081526020819052604090205481811015611a6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610940565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600680546001600160a01b03191690556109d481611e5f565b6001600160a01b038316611b455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610940565b6001600160a01b038216611ba75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610940565b6001600160a01b03831660009081526020819052604090205481111580611bdf5750816001600160a01b0316836001600160a01b0316145b611c3a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610940565b6000826001600160a01b0316846001600160a01b031614611c5b5781611c5e565b60005b6001600160a01b03858116600081815260208181526040808320805489900390559388168083529184902080548601905592518481529394509290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611489565b6000818311611cd95782611cdb565b815b9392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d1757611d176121d4565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae9190612260565b81600181518110611dc157611dc16121d4565b6001600160a01b039283166020918202929092010152600d54611dec9130916101009004168461123f565b600d5460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611e29908590600090869030904290600401612290565b600060405180830381600087803b158015611e4357600080fd5b505af1158015611e57573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600183019183908215611f375791602002820160005b83821115611f0757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302611ec7565b8015611f355782816101000a81549061ffff0219169055600201602081600101049283019260010302611f07565b505b50611f43929150611f47565b5090565b5b80821115611f435760008155600101611f48565b600060208083528351808285015260005b81811015611f8957858101830151858201604001528201611f6d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146109d457600080fd5b60008060408385031215611fd257600080fd5b8235611fdd81611faa565b946020939093013593505050565b803561ffff81168114611ffd57600080fd5b919050565b60006020828403121561201457600080fd5b611cdb82611feb565b60008060006060848603121561203257600080fd5b833561203d81611faa565b9250602084013561204d81611faa565b929592945050506040919091013590565b6000806040838503121561207157600080fd5b823561207c81611faa565b91506020830135801515811461209157600080fd5b809150509250929050565b6000602082840312156120ae57600080fd5b5035919050565b6000602082840312156120c757600080fd5b8135611cdb81611faa565b6000806000606084860312156120e757600080fd5b6120f084611feb565b92506120fe60208501611feb565b915061210c60408501611feb565b90509250925092565b6000806040838503121561212857600080fd5b823561213381611faa565b9150602083013561209181611faa565b600181811c9082168061215757607f821691505b60208210810361217757634e487b7160e01b600052602260045260246000fd5b50919050565b60008060006060848603121561219257600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b80820180821115610769576107696121ab565b634e487b7160e01b600052603260045260246000fd5b61ffff828116828216039080821115612205576122056121ab565b5092915050565b61ffff818116838216019080821115612205576122056121ab565b8082028115828204841417610769576107696121ab565b60008261225b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561227257600080fd5b8151611cdb81611faa565b81810381811115610769576107696121ab565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122e05784516001600160a01b0316835293830193918301916001016122bb565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f1be1de671b846b539a01849357572edf38d33cf59a6bdff3656c2e52061efc564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c806379ba509711610118578063c0246668116100a0578063dd62ed3e1161006f578063dd62ed3e1461063b578063e30c39781461065b578063f112ba7214610679578063f265ced91461068e578063f2fde38b146106a357600080fd5b8063c0246668146105c6578063c5f956af146105e6578063d54f3ce114610606578063d94775261461062657600080fd5b80638fffabed116100e75780638fffabed1461053157806395d89b41146105515780639adad3b114610566578063a457c2d714610586578063a9059cbb146105a657600080fd5b806379ba5097146104be57806379cc6790146104d35780637d7a9573146104f35780638da5cb5b1461051357600080fd5b8063395093511161019b5780634fbee1931161016a5780634fbee193146103d6578063502f74461461040657806370a0823114610443578063715018a614610479578063768565571461048e57600080fd5b80633950935114610341578063408ccbdf1461036157806342966c68146103945780634f011b83146103b457600080fd5b80631a0e718c116101e25780631a0e718c146102b057806320800a00146102d057806323b872dd146102e55780632d99d32e14610305578063313ce5671461032557600080fd5b806306fdde031461021f578063095ea7b31461024a57806310a80b701461027a57806318160ddd1461029157600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b506102346106c3565b6040516102419190611f5c565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611fbf565b610755565b6040519015158152602001610241565b34801561028657600080fd5b5061028f61076f565b005b34801561029d57600080fd5b506002545b604051908152602001610241565b3480156102bc57600080fd5b5061028f6102cb366004612002565b61089c565b3480156102dc57600080fd5b5061028f6109a0565b3480156102f157600080fd5b5061026a61030036600461201d565b6109d7565b34801561031157600080fd5b5061028f61032036600461205e565b6109fb565b34801561033157600080fd5b5060405160128152602001610241565b34801561034d57600080fd5b5061026a61035c366004611fbf565b610a8b565b34801561036d57600080fd5b5061038161037c36600461209c565b610aad565b60405161ffff9091168152602001610241565b3480156103a057600080fd5b5061028f6103af36600461209c565b610adb565b3480156103c057600080fd5b5060065461038190600160b01b900461ffff1681565b3480156103e257600080fd5b5061026a6103f13660046120b5565b600b6020526000908152604090205460ff1681565b34801561041257600080fd5b50600d5461042b9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610241565b34801561044f57600080fd5b506102a261045e3660046120b5565b6001600160a01b031660009081526020819052604090205490565b34801561048557600080fd5b5061028f610ae5565b34801561049a57600080fd5b5061026a6104a93660046120b5565b600f6020526000908152604090205460ff1681565b3480156104ca57600080fd5b5061028f610af9565b3480156104df57600080fd5b5061028f6104ee366004611fbf565b610b70565b3480156104ff57600080fd5b5061028f61050e3660046120b5565b610b85565b34801561051f57600080fd5b506005546001600160a01b031661042b565b34801561053d57600080fd5b50600e5461042b906001600160a01b031681565b34801561055d57600080fd5b50610234610c77565b34801561057257600080fd5b5061038161058136600461209c565b610c86565b34801561059257600080fd5b5061026a6105a1366004611fbf565b610c96565b3480156105b257600080fd5b5061026a6105c1366004611fbf565b610d11565b3480156105d257600080fd5b5061028f6105e136600461205e565b610d1f565b3480156105f257600080fd5b5060095461042b906001600160a01b031681565b34801561061257600080fd5b5061028f6106213660046120d2565b610d87565b34801561063257600080fd5b506102a2610f7c565b34801561064757600080fd5b506102a2610656366004612115565b610fc5565b34801561066757600080fd5b506006546001600160a01b031661042b565b34801561068557600080fd5b506102a2610ff0565b34801561069a57600080fd5b5061028f611001565b3480156106af57600080fd5b5061028f6106be3660046120b5565b6111ce565b6060600380546106d290612143565b80601f01602080910402602001604051908101604052809291908181526020018280546106fe90612143565b801561074b5780601f106107205761010080835404028352916020019161074b565b820191906000526020600020905b81548152906001019060200180831161072e57829003601f168201915b5050505050905090565b60003361076381858561123f565b60019150505b92915050565b610777611363565b600d54306000818152602081905260409020546101009092046001600160a01b03169163f305d7199147916000806107b76005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561081f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610844919061217d565b5050600e5461085e91506001600160a01b031660016113bd565b600d546040516101009091046001600160a01b0316907fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60290600090a2565b6108a4611363565b60008161ffff161180156108be57506101f48161ffff1611155b6109495760405162461bcd60e51b815260206004820152604b60248201527f537761705468726573686f6c643a2043616e6e6f7420657863656564206c696d60448201527f6974732066726f6d20302e30312520746f20352520666f72206e65772073776160648201526a1c081d1a1c995cda1bdb1960aa1b608482015260a4015b60405180910390fd5b6006805461ffff60b01b1916600160b01b61ffff8416908102919091179091556040519081527fcf1366790fe21e66c9df9dcf67218b1e10acd64d3c99ae8a7429a68de91f1720906020015b60405180910390a150565b6109a8611363565b60405133904780156108fc02916000818181858888f193505050501580156109d4573d6000803e3d6000fd5b50565b6000336109e5858285611415565b6109f085858561148f565b506001949350505050565b610a03611363565b600e546001600160a01b0390811690831603610a7d5760405162461bcd60e51b815260206004820152603360248201527f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e696044820152721d1a585b081c185a5c88199c9bdb481b1a5cdd606a1b6064820152608401610940565b610a8782826113bd565b5050565b600033610763818585610a9e8383610fc5565b610aa891906121c1565b61123f565b600c8160038110610abd57600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b6109d43382611996565b610aed611363565b610af76000611ac8565b565b60065433906001600160a01b03168114610b675760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610940565b6109d481611ac8565b610b7b823383611415565b610a878282611996565b610b8d611363565b6001600160a01b038116610c185760405162461bcd60e51b815260206004820152604660248201527f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460448201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160648201526564647265737360d01b608482015260a401610940565b600980546001600160a01b0319166001600160a01b038316179055610c3e816001610d1f565b6040516001600160a01b03821681527fe4ed70c3d76616a0a0abd9a0dd9a70e8a5ce46146e1e644575e111330e365ce790602001610995565b6060600480546106d290612143565b600a8160038110610abd57600080fd5b60003381610ca48286610fc5565b905083811015610d045760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610940565b6109f0828686840361123f565b60003361076381858561148f565b610d27611363565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b610d8f611363565b600a54600c548491610da89161ffff91821691166121ea565b610db2919061220c565b600c805461ffff191661ffff9283161790819055600a548492610de29262010000928390048216929004166121ea565b610dec919061220c565b600c805463ffff000019166201000061ffff938416021790819055600a548392610e2592640100000000928390048216929004166121ea565b610e2f919061220c565b600c805461ffff9283166401000000000265ffff0000000019821681179092556109c4908316919092161711801590610e775750600c546109c46201000090910461ffff1611155b8015610e945750600c546109c464010000000090910461ffff1611155b610eff5760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527564206d617820746f74616c20666565206f662032352560501b6064820152608401610940565b6040805160608101825261ffff80861682528481166020830152831691810191909152610f3090600a906003611eb1565b506040805161ffff8581168252848116602083015283168183015290517faaf77301c7ddcd55669cb55da207bf87362c0fa18fb623452c4401900c9418919181900360600190a1505050565b600654600e546001600160a01b03166000908152602081905260408120549091620f424091610fb691600160b01b900461ffff1690612227565b610fc0919061223e565b905090565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006008546000610fc091906121c1565b611009611363565b600d8054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b031990911617908190556040805163c45a015560e01b815290516101009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190612260565b6001600160a01b031663c9c6539630600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a9190612260565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190612260565b600e80546001600160a01b0319166001600160a01b03928316179055600d54610af791309161010090041660001961123f565b6111d6611363565b600680546001600160a01b0383166001600160a01b031990911681179091556112076005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166112a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610940565b6001600160a01b0382166113025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610940565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610af75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610940565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a84559101610d7b565b60006114218484610fc5565b90506000198114611489578181101561147c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610940565b611489848484840361123f565b50505050565b6001600160a01b0383166114e55760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610940565b6001600160a01b03821661153b5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610940565b6000811161159d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610940565b6001600160a01b0383166000908152600b602052604090205460ff1615806115de57506001600160a01b0382166000908152600b602052604090205460ff16155b1561164457816001600160a01b0316836001600160a01b0316036116445760405162461bcd60e51b815260206004820181905260248201527f45524332303a2063616e6e6f74207472616e7366657220746f20697473656c666044820152606401610940565b600d5460ff161580156116575750600081115b801561167c57506001600160a01b0383166000908152600b602052604090205460ff16155b80156116a157506001600160a01b0382166000908152600b602052604090205460ff16155b15611840576001600160a01b0383166000908152600f602052604081205460039060ff16156116df57600c5461ffff16156116da575060005b611732565b6001600160a01b0384166000908152600f602052604090205460ff161561171a57600c5462010000900461ffff16156116da57506001611732565b600c54640100000000900461ffff1615611732575060025b60038160ff16101561182c57612710600c8260ff1660038110611757576117576121d4565b601091828204019190066002029054906101000a900461ffff1661ffff16846117809190612227565b61178a919061223e565b9150611796828461227d565b9250600c8160ff16600381106117ae576117ae6121d4565b601091828204019190066002029054906101000a900461ffff1661ffff16600a8260ff16600381106117e2576117e26121d4565b601091828204019190066002029054906101000a900461ffff1661ffff168361180b9190612227565b611815919061223e565b6008600082825461182691906121c1565b90915550505b811561183d5761183d853084611ae1565b50505b3060009081526020819052604081205490611859610f7c565b82101580156118805750600e546001600160a01b0316600090815260208190526040812054115b600d5490915060ff161580156118ae57506001600160a01b0384166000908152600f602052604090205460ff165b80156118b75750805b80156118dc57506001600160a01b0385166000908152600b602052604090205460ff16155b801561190157506001600160a01b0384166000908152600b602052604090205460ff16155b1561198457600d805460ff191660011790556007546119359061193090859061192b908690611cca565b611cca565b611ce2565b478015611978576009546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611976573d6000803e3d6000fd5b505b50600d805460ff191690555b61198f858585611ae1565b5050505050565b6001600160a01b0382166119f65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610940565b6001600160a01b03821660009081526020819052604090205481811015611a6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610940565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600680546001600160a01b03191690556109d481611e5f565b6001600160a01b038316611b455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610940565b6001600160a01b038216611ba75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610940565b6001600160a01b03831660009081526020819052604090205481111580611bdf5750816001600160a01b0316836001600160a01b0316145b611c3a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610940565b6000826001600160a01b0316846001600160a01b031614611c5b5781611c5e565b60005b6001600160a01b03858116600081815260208181526040808320805489900390559388168083529184902080548601905592518481529394509290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611489565b6000818311611cd95782611cdb565b815b9392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d1757611d176121d4565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae9190612260565b81600181518110611dc157611dc16121d4565b6001600160a01b039283166020918202929092010152600d54611dec9130916101009004168461123f565b600d5460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611e29908590600090869030904290600401612290565b600060405180830381600087803b158015611e4357600080fd5b505af1158015611e57573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600183019183908215611f375791602002820160005b83821115611f0757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302611ec7565b8015611f355782816101000a81549061ffff0219169055600201602081600101049283019260010302611f07565b505b50611f43929150611f47565b5090565b5b80821115611f435760008155600101611f48565b600060208083528351808285015260005b81811015611f8957858101830151858201604001528201611f6d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146109d457600080fd5b60008060408385031215611fd257600080fd5b8235611fdd81611faa565b946020939093013593505050565b803561ffff81168114611ffd57600080fd5b919050565b60006020828403121561201457600080fd5b611cdb82611feb565b60008060006060848603121561203257600080fd5b833561203d81611faa565b9250602084013561204d81611faa565b929592945050506040919091013590565b6000806040838503121561207157600080fd5b823561207c81611faa565b91506020830135801515811461209157600080fd5b809150509250929050565b6000602082840312156120ae57600080fd5b5035919050565b6000602082840312156120c757600080fd5b8135611cdb81611faa565b6000806000606084860312156120e757600080fd5b6120f084611feb565b92506120fe60208501611feb565b915061210c60408501611feb565b90509250925092565b6000806040838503121561212857600080fd5b823561213381611faa565b9150602083013561209181611faa565b600181811c9082168061215757607f821691505b60208210810361217757634e487b7160e01b600052602260045260246000fd5b50919050565b60008060006060848603121561219257600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b80820180821115610769576107696121ab565b634e487b7160e01b600052603260045260246000fd5b61ffff828116828216039080821115612205576122056121ab565b5092915050565b61ffff818116838216019080821115612205576122056121ab565b8082028115828204841417610769576107696121ab565b60008261225b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561227257600080fd5b8151611cdb81611faa565b81810381811115610769576107696121ab565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122e05784516001600160a01b0316835293830193918301916001016122bb565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f1be1de671b846b539a01849357572edf38d33cf59a6bdff3656c2e52061efc564736f6c63430008130033

Deployed Bytecode Sourcemap

19395:8012:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13567:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14565:226;;;;;;;;;;-1:-1:-1;14565:226:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;14565:226:0;1023:187:1;22874:373:0;;;;;;;;;;;;;:::i;:::-;;13888:108;;;;;;;;;;-1:-1:-1;13976:12:0;;13888:108;;;1361:25:1;;;1349:2;1334:18;13888:108:0;1215:177:1;26258:381:0;;;;;;;;;;-1:-1:-1;26258:381:0;;;;;:::i;:::-;;:::i;22626:110::-;;;;;;;;;;;;;:::i;14799:295::-;;;;;;;;;;-1:-1:-1;14799:295:0;;;;;:::i;:::-;;:::i;23255:238::-;;;;;;;;;;-1:-1:-1;23255:238:0;;;;;:::i;:::-;;:::i;22781:85::-;;;;;;;;;;-1:-1:-1;22781:85:0;;22856:2;2774:36:1;;2762:2;2747:18;22781:85:0;2632:184:1;15102:263:0;;;;;;;;;;-1:-1:-1;15102:263:0;;;;;:::i;:::-;;:::i;19718:26::-;;;;;;;;;;-1:-1:-1;19718:26:0;;;;;:::i;:::-;;:::i;:::-;;;3180:6:1;3168:19;;;3150:38;;3138:2;3123:18;19718:26:0;3006:188:1;19125:91:0;;;;;;;;;;-1:-1:-1;19125:91:0;;;;;:::i;:::-;;:::i;19468:32::-;;;;;;;;;;-1:-1:-1;19468:32:0;;;;-1:-1:-1;;;19468:32:0;;;;;;19659:50;;;;;;;;;;-1:-1:-1;19659:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19782:34;;;;;;;;;;-1:-1:-1;19782:34:0;;;;;;;-1:-1:-1;;;;;19782:34:0;;;;;;-1:-1:-1;;;;;3642:32:1;;;3624:51;;3612:2;3597:18;19782:34:0;3451:230:1;14004:143:0;;;;;;;;;;-1:-1:-1;14004:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;14121:18:0;14094:7;14121:18;;;;;;;;;;;;14004:143;2009:103;;;;;;;;;;;;;:::i;19851:40::-;;;;;;;;;;-1:-1:-1;19851:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3250:253;;;;;;;;;;;;;:::i;19224:164::-;;;;;;;;;;-1:-1:-1;19224:164:0;;;;;:::i;:::-;;:::i;21218:372::-;;;;;;;;;;-1:-1:-1;21218:372:0;;;;;:::i;:::-;;:::i;1774:87::-;;;;;;;;;;-1:-1:-1;1847:6:0;;-1:-1:-1;;;;;1847:6:0;1774:87;;19823:21;;;;;;;;;;-1:-1:-1;19823:21:0;;;;-1:-1:-1;;;;;19823:21:0;;;13675:104;;;;;;;;;;;;;:::i;19621:29::-;;;;;;;;;;-1:-1:-1;19621:29:0;;;;;:::i;:::-;;:::i;15373:498::-;;;;;;;;;;-1:-1:-1;15373:498:0;;;;;:::i;:::-;;:::i;14155:218::-;;;;;;;;;;-1:-1:-1;14155:218:0;;;;;:::i;:::-;;:::i;22404:214::-;;;;;;;;;;-1:-1:-1;22404:214:0;;;;;:::i;:::-;;:::i;19584:30::-;;;;;;;;;;-1:-1:-1;19584:30:0;;;;-1:-1:-1;;;;;19584:30:0;;;21598:692;;;;;;;;;;-1:-1:-1;21598:692:0;;;;;:::i;:::-;;:::i;20961:140::-;;;;;;;;;;;;;:::i;14381:176::-;;;;;;;;;;-1:-1:-1;14381:176:0;;;;;:::i;:::-;;:::i;2772:101::-;;;;;;;;;;-1:-1:-1;2852:13:0;;-1:-1:-1;;;;;2852:13:0;2772:101;;21109;;;;;;;;;;;;;:::i;26647:369::-;;;;;;;;;;;;;:::i;2881:197::-;;;;;;;;;;-1:-1:-1;2881:197:0;;;;;:::i;:::-;;:::i;13567:100::-;13621:13;13654:5;13647:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13567:100;:::o;14565:226::-;14673:4;1195:10;14729:32;1195:10;14745:7;14754:6;14729:8;:32::i;:::-;14779:4;14772:11;;;14565:226;;;;;:::o;22874:373::-;1733:13;:11;:13::i;:::-;22933:8:::1;::::0;23010:4:::1;14094:7:::0;14121:18;;;;;;;;;;;22933:8:::1;::::0;;::::1;-1:-1:-1::0;;;;;22933:8:0::1;::::0;:24:::1;::::0;22965:21:::1;::::0;23069:1:::1;23085::::0;23101:7:::1;1847:6:::0;;-1:-1:-1;;;;;1847:6:0;;1774:87;23101:7:::1;22933:216;::::0;::::1;::::0;;;-1:-1:-1;;;;;;22933:216:0;;;-1:-1:-1;;;;;5364:15:1;;;22933:216:0::1;::::0;::::1;5346:34:1::0;5396:18;;;5389:34;;;;5439:18;;;5432:34;;;;5482:18;;;5475:34;5546:15;;;5525:19;;;5518:44;23123:15:0::1;5578:19:1::0;;;5571:35;5280:19;;22933:216:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23174:6:0::1;::::0;23162:25:::1;::::0;-1:-1:-1;;;;;;23174:6:0::1;::::0;23162:11:::1;:25::i;:::-;23229:8;::::0;23205:34:::1;::::0;23229:8:::1;::::0;;::::1;-1:-1:-1::0;;;;;23229:8:0::1;::::0;23205:34:::1;::::0;;;::::1;22874:373::o:0;26258:381::-;1733:13;:11;:13::i;:::-;26387:1:::1;26365:19;:23;;;:53;;;;;26415:3;26392:19;:26;;;;26365:53;26343:178;;;::::0;-1:-1:-1;;;26343:178:0;;6130:2:1;26343:178:0::1;::::0;::::1;6112:21:1::0;6169:2;6149:18;;;6142:30;6208:34;6188:18;;;6181:62;6279:34;6259:18;;;6252:62;-1:-1:-1;;;6330:19:1;;;6323:42;6382:19;;26343:178:0::1;;;;;;;;;26532:18;:40:::0;;-1:-1:-1;;;;26532:40:0::1;-1:-1:-1::0;;;26532:40:0::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26590:41:::1;::::0;3150:38:1;;;26590:41:0::1;::::0;3138:2:1;3123:18;26590:41:0::1;;;;;;;;26258:381:::0;:::o;22626:110::-;1733:13;:11;:13::i;:::-;22677:51:::1;::::0;22685:10:::1;::::0;22706:21:::1;22677:51:::0;::::1;;;::::0;::::1;::::0;;;22706:21;22685:10;22677:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22626:110::o:0;14799:295::-;14930:4;1195:10;14988:38;15004:4;1195:10;15019:6;14988:15;:38::i;:::-;15037:27;15047:4;15053:2;15057:6;15037:9;:27::i;:::-;-1:-1:-1;15082:4:0;;14799:295;-1:-1:-1;;;;14799:295:0:o;23255:238::-;1733:13;:11;:13::i;:::-;23362:6:::1;::::0;-1:-1:-1;;;;;23362:6:0;;::::1;23354:14:::0;;::::1;::::0;23332:115:::1;;;::::0;-1:-1:-1;;;23332:115:0;;6614:2:1;23332:115:0::1;::::0;::::1;6596:21:1::0;6653:2;6633:18;;;6626:30;6692:34;6672:18;;;6665:62;-1:-1:-1;;;6743:18:1;;;6736:49;6802:19;;23332:115:0::1;6412:415:1::0;23332:115:0::1;23460:25;23472:4;23478:6;23460:11;:25::i;:::-;23255:238:::0;;:::o;15102:263::-;15215:4;1195:10;15271:64;1195:10;15287:7;15324:10;15296:25;1195:10;15287:7;15296:9;:25::i;:::-;:38;;;;:::i;:::-;15271:8;:64::i;19718:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19125:91::-;19181:27;1195:10;19201:6;19181:5;:27::i;2009:103::-;1733:13;:11;:13::i;:::-;2074:30:::1;2101:1;2074:18;:30::i;:::-;2009:103::o:0;3250:253::-;2852:13;;1195:10;;-1:-1:-1;;;;;2852:13:0;3365:24;;3343:115;;;;-1:-1:-1;;;3343:115:0;;7296:2:1;3343:115:0;;;7278:21:1;7335:2;7315:18;;;7308:30;7374:34;7354:18;;;7347:62;-1:-1:-1;;;7425:18:1;;;7418:39;7474:19;;3343:115:0;7094:405:1;3343:115:0;3469:26;3488:6;3469:18;:26::i;19224:164::-;19301:46;19317:7;1195:10;19340:6;19301:15;:46::i;:::-;19358:22;19364:7;19373:6;19358:5;:22::i;21218:372::-;1733:13;:11;:13::i;:::-;-1:-1:-1;;;;;21319:25:0;::::1;21297:145;;;::::0;-1:-1:-1;;;21297:145:0;;7706:2:1;21297:145:0::1;::::0;::::1;7688:21:1::0;7745:2;7725:18;;;7718:30;7784:34;7764:18;;;7757:62;7855:34;7835:18;;;7828:62;-1:-1:-1;;;7906:19:1;;;7899:37;7953:19;;21297:145:0::1;7504:474:1::0;21297:145:0::1;21455:15;:29:::0;;-1:-1:-1;;;;;;21455:29:0::1;-1:-1:-1::0;;;;;21455:29:0;::::1;;::::0;;21495:34:::1;21455:29:::0;-1:-1:-1;21495:15:0::1;:34::i;:::-;21547:35;::::0;-1:-1:-1;;;;;3642:32:1;;3624:51;;21547:35:0::1;::::0;3612:2:1;3597:18;21547:35:0::1;3451:230:1::0;13675:104:0;13731:13;13764:7;13757:14;;;;;:::i;19621:29::-;;;;;;;;;;;15373:498;15491:4;1195:10;15491:4;15574:25;1195:10;15591:7;15574:9;:25::i;:::-;15547:52;;15652:15;15632:16;:35;;15610:122;;;;-1:-1:-1;;;15610:122:0;;8185:2:1;15610:122:0;;;8167:21:1;8224:2;8204:18;;;8197:30;8263:34;8243:18;;;8236:62;-1:-1:-1;;;8314:18:1;;;8307:35;8359:19;;15610:122:0;7983:401:1;15610:122:0;15768:60;15777:5;15784:7;15812:15;15793:16;:34;15768:8;:60::i;14155:218::-;14259:4;1195:10;14315:28;1195:10;14332:2;14336:6;14315:9;:28::i;22404:214::-;1733:13;:11;:13::i;:::-;-1:-1:-1;;;;;22516:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:40;;-1:-1:-1;;22516:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22574:36;;1163:41:1;;;22574:36:0::1;::::0;1136:18:1;22574:36:0::1;;;;;;;;22404:214:::0;;:::o;21598:692::-;1733:13;:11;:13::i;:::-;21771:12:::1;:15:::0;21756:9:::1;:12:::0;21789:7;;21756:30:::1;::::0;21771:15:::1;::::0;;::::1;::::0;21756:12:::1;:30;:::i;:::-;:40;;;;:::i;:::-;21741:9;:55:::0;;-1:-1:-1;;21741:55:0::1;;::::0;;::::1;;::::0;;;;21837:12:::1;:15:::0;21855:8;;21822:30:::1;::::0;21837:15;;;;::::1;::::0;::::1;::::0;21822:12;::::1;;:30;:::i;:::-;:41;;;;:::i;:::-;21807:9;:56:::0;;-1:-1:-1;;21807:56:0::1;::::0;::::1;::::0;;::::1;;;::::0;;;;21904:12:::1;:15:::0;21922:12;;21889:30:::1;::::0;21904:15;;;;::::1;::::0;::::1;::::0;21889:12;::::1;;:30;:::i;:::-;:45;;;;:::i;:::-;21874:9;:60:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;21874:60:0;::::1;::::0;::::1;::::0;;;21983:4:::1;21967:12:::0;;;;;;;;:20:::1;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;22008:9:0::1;:12:::0;22024:4:::1;22008:12:::0;;;::::1;;;:20;;21967:61;:102;;;;-1:-1:-1::0;22049:9:0::1;:12:::0;22065:4:::1;22049:12:::0;;;::::1;;;:20;;21967:102;21945:206;;;::::0;-1:-1:-1;;;21945:206:0;;9072:2:1;21945:206:0::1;::::0;::::1;9054:21:1::0;9111:2;9091:18;;;9084:30;9150:34;9130:18;;;9123:62;-1:-1:-1;;;9201:18:1;;;9194:52;9263:19;;21945:206:0::1;8870:418:1::0;21945:206:0::1;22164:48;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;:12:::1;::::0;:48:::1;;:::i;:::-;-1:-1:-1::0;22230:52:0::1;::::0;;9499:6:1;9532:15;;;9514:34;;9584:15;;;9579:2;9564:18;;9557:43;9636:15;;9616:18;;;9609:43;22230:52:0;;::::1;::::0;;;;9477:2:1;22230:52:0;;::::1;21598:692:::0;;;:::o;20961:140::-;21064:18;;21054:6;;-1:-1:-1;;;;;21054:6:0;21016:7;14121:18;;;;;;;;;;;21016:7;;21086;;21044:38;;-1:-1:-1;;;21064:18:0;;;;;21044:38;:::i;:::-;21043:50;;;;:::i;:::-;21036:57;;20961:140;:::o;14381:176::-;-1:-1:-1;;;;;14522:18:0;;;14495:7;14522:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14381:176::o;21109:101::-;21155:7;21186:16;;21182:1;:20;;;;:::i;26647:369::-;1733:13;:11;:13::i;:::-;26704:8:::1;:97:::0;;;-1:-1:-1;;;;;;26704:97:0;;::::1;;::::0;;;;26841:18:::1;::::0;;-1:-1:-1;;;26841:18:0;;;;26704:97:::1;26841:8:::0;;::::1;-1:-1:-1::0;;;;;26841:8:0::1;::::0;:16:::1;::::0;:18:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:8;:18:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26823:48:0::1;;26894:4;26914:8;;;;;;;;;-1:-1:-1::0;;;;;26914:8:0::1;-1:-1:-1::0;;;;;26914:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26823:117;::::0;-1:-1:-1;;;;;;26823:117:0::1;::::0;;;;;;-1:-1:-1;;;;;10544:15:1;;;26823:117:0::1;::::0;::::1;10526:34:1::0;10596:15;;10576:18;;;10569:43;10461:18;;26823:117:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26814:6;:126:::0;;-1:-1:-1;;;;;;26814:126:0::1;-1:-1:-1::0;;;;;26814:126:0;;::::1;;::::0;;26985:8:::1;::::0;26953:55:::1;::::0;26970:4:::1;::::0;26814:126:::1;26985:8:::0;::::1;;-1:-1:-1::0;;26953:8:0::1;:55::i;2881:197::-:0;1733:13;:11;:13::i;:::-;2987::::1;:24:::0;;-1:-1:-1;;;;;2987:24:0;::::1;-1:-1:-1::0;;;;;;2987:24:0;;::::1;::::0;::::1;::::0;;;3052:7:::1;1847:6:::0;;-1:-1:-1;;;;;1847:6:0;;1774:87;3052:7:::1;-1:-1:-1::0;;;;;3027:43:0::1;;;;;;;;;;;2881:197:::0;:::o;17906:380::-;-1:-1:-1;;;;;18042:19:0;;18034:68;;;;-1:-1:-1;;;18034:68:0;;10825:2:1;18034:68:0;;;10807:21:1;10864:2;10844:18;;;10837:30;10903:34;10883:18;;;10876:62;-1:-1:-1;;;10954:18:1;;;10947:34;10998:19;;18034:68:0;10623:400:1;18034:68:0;-1:-1:-1;;;;;18121:21:0;;18113:68;;;;-1:-1:-1;;;18113:68:0;;11230:2:1;18113:68:0;;;11212:21:1;11269:2;11249:18;;;11242:30;11308:34;11288:18;;;11281:62;-1:-1:-1;;;11359:18:1;;;11352:32;11401:19;;18113:68:0;11028:398:1;18113:68:0;-1:-1:-1;;;;;18194:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18246:32;;1361:25:1;;;18246:32:0;;1334:18:1;18246:32:0;;;;;;;17906:380;;;:::o;1869:132::-;1847:6;;-1:-1:-1;;;;;1847:6:0;1195:10;1933:23;1925:68;;;;-1:-1:-1;;;1925:68:0;;11633:2:1;1925:68:0;;;11615:21:1;;;11652:18;;;11645:30;11711:34;11691:18;;;11684:62;11763:18;;1925:68:0;11431:356:1;23501:171:0;-1:-1:-1;;;;;23568:14:0;;;;;;:8;:14;;;;;;;;;:23;;-1:-1:-1;;23568:23:0;;;;;;;;;;23635:29;;1163:41:1;;;23635:29:0;;1136:18:1;23635:29:0;1023:187:1;18294:502:0;18429:24;18456:25;18466:5;18473:7;18456:9;:25::i;:::-;18429:52;;-1:-1:-1;;18496:16:0;:37;18492:297;;18596:6;18576:16;:26;;18550:117;;;;-1:-1:-1;;;18550:117:0;;11994:2:1;18550:117:0;;;11976:21:1;12033:2;12013:18;;;12006:30;12072:31;12052:18;;;12045:59;12121:18;;18550:117:0;11792:353:1;18550:117:0;18711:51;18720:5;18727:7;18755:6;18736:16;:25;18711:8;:51::i;:::-;18418:378;18294:502;;;:::o;23680:2102::-;-1:-1:-1;;;;;23812:18:0;;23804:57;;;;-1:-1:-1;;;23804:57:0;;12352:2:1;23804:57:0;;;12334:21:1;12391:2;12371:18;;;12364:30;12430:28;12410:18;;;12403:56;12476:18;;23804:57:0;12150:350:1;23804:57:0;-1:-1:-1;;;;;23880:16:0;;23872:53;;;;-1:-1:-1;;;23872:53:0;;12707:2:1;23872:53:0;;;12689:21:1;12746:2;12726:18;;;12719:30;12785:26;12765:18;;;12758:54;12829:18;;23872:53:0;12505:348:1;23872:53:0;23953:1;23944:6;:10;23936:64;;;;-1:-1:-1;;;23936:64:0;;13060:2:1;23936:64:0;;;13042:21:1;13099:2;13079:18;;;13072:30;13138:34;13118:18;;;13111:62;-1:-1:-1;;;13189:18:1;;;13182:39;13238:19;;23936:64:0;12858:405:1;23936:64:0;-1:-1:-1;;;;;24018:24:0;;;;;;:18;:24;;;;;;;;24017:25;;:52;;-1:-1:-1;;;;;;24047:22:0;;;;;;:18;:22;;;;;;;;24046:23;24017:52;24013:140;;;24102:2;-1:-1:-1;;;;;24094:10:0;:4;-1:-1:-1;;;;;24094:10:0;;24086:55;;;;-1:-1:-1;;;24086:55:0;;13470:2:1;24086:55:0;;;13452:21:1;;;13489:18;;;13482:30;13548:34;13528:18;;;13521:62;13600:18;;24086:55:0;13268:356:1;24086:55:0;24184:9;;;;24183:10;:37;;;;;24219:1;24210:6;:10;24183:37;:79;;;;-1:-1:-1;;;;;;24238:24:0;;;;;;:18;:24;;;;;;;;24237:25;24183:79;:119;;;;-1:-1:-1;;;;;;24280:22:0;;;;;;:18;:22;;;;;;;;24279:23;24183:119;24165:838;;;-1:-1:-1;;;;;24397:14:0;;24329:12;24397:14;;;:8;:14;;;;;;24375:1;;24397:14;;24393:216;;;24436:9;:12;;;:16;24432:32;;-1:-1:-1;24463:1:0;24432:32;24393:216;;;-1:-1:-1;;;;;24490:12:0;;;;;;:8;:12;;;;;;;;24486:123;;;24527:9;:12;;;;;;:16;24523:32;;-1:-1:-1;24554:1:0;24486:123;;;24581:9;:12;;;;;;:16;24577:32;;-1:-1:-1;24608:1:0;24577:32;24639:1;24630:6;:10;;;24626:259;;;24699:5;24678:9;24688:6;24678:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24669:26;;:6;:26;;;;:::i;:::-;24668:36;;;;:::i;:::-;24661:43;-1:-1:-1;24723:14:0;24661:43;24723:14;;:::i;:::-;;;24852:9;24862:6;24852:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24799:70;;24807:12;24820:6;24807:20;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24800:27;;:4;:27;;;;:::i;:::-;24799:70;;;;:::i;:::-;24758:16;;:111;;;;;;;:::i;:::-;;;;-1:-1:-1;;24626:259:0;24905:8;;24901:91;;24934:42;24950:4;24964;24971;24934:15;:42::i;:::-;24314:689;;24165:838;25064:4;25015:28;14121:18;;;;;;;;;;;;25122:24;:22;:24::i;:::-;25098:20;:48;;:86;;;;-1:-1:-1;25173:6:0;;-1:-1:-1;;;;;25173:6:0;25183:1;14121:18;;;;;;;;;;;25163:21;25098:86;25216:9;;25083:101;;-1:-1:-1;25216:9:0;;25215:10;:39;;;;-1:-1:-1;;;;;;25242:12:0;;;;;;:8;:12;;;;;;;;25215:39;:63;;;;;25271:7;25215:63;:105;;;;-1:-1:-1;;;;;;25296:24:0;;;;;;:18;:24;;;;;;;;25295:25;25215:105;:145;;;;-1:-1:-1;;;;;;25338:22:0;;;;;;:18;:22;;;;;;;;25337:23;25215:145;25197:532;;;25387:9;:16;;-1:-1:-1;;25387:16:0;25399:4;25387:16;;;25475:11;;25420:69;;25439:49;;25443:6;;25450:37;;25454:20;;25450:3;:37::i;:::-;25439:3;:49::i;:::-;25420:18;:69::i;:::-;25533:21;25572:22;;25569:115;;25623:15;;25615:53;;-1:-1:-1;;;;;25623:15:0;;;;25615:53;;;;;25649:18;;25623:15;25615:53;25623:15;25615:53;25649:18;25623:15;25615:53;;;;;;;;;;;;;;;;;;;;;25569:115;-1:-1:-1;25700:9:0;:17;;-1:-1:-1;;25700:17:0;;;25197:532;25741:33;25757:4;25763:2;25767:6;25741:15;:33::i;:::-;23793:1989;;23680:2102;;;:::o;17223:675::-;-1:-1:-1;;;;;17307:21:0;;17299:67;;;;-1:-1:-1;;;17299:67:0;;13964:2:1;17299:67:0;;;13946:21:1;14003:2;13983:18;;;13976:30;14042:34;14022:18;;;14015:62;-1:-1:-1;;;14093:18:1;;;14086:31;14134:19;;17299:67:0;13762:397:1;17299:67:0;-1:-1:-1;;;;;17466:18:0;;17441:22;17466:18;;;;;;;;;;;17503:24;;;;17495:71;;;;-1:-1:-1;;;17495:71:0;;14366:2:1;17495:71:0;;;14348:21:1;14405:2;14385:18;;;14378:30;14444:34;14424:18;;;14417:62;-1:-1:-1;;;14495:18:1;;;14488:32;14537:19;;17495:71:0;14164:398:1;17495:71:0;-1:-1:-1;;;;;17602:18:0;;:9;:18;;;;;;;;;;;17623:23;;;17602:44;;17741:12;:22;;;;;;;17792:37;1361:25:1;;;17602:9:0;;:18;17792:37;;1334:18:1;17792:37:0;;;;;;;17288:610;17223:675;;:::o;3086:156::-;3176:13;3169:20;;-1:-1:-1;;;;;;3169:20:0;;;3200:34;3225:8;3200:24;:34::i;15879:780::-;-1:-1:-1;;;;;16010:18:0;;16002:68;;;;-1:-1:-1;;;16002:68:0;;14769:2:1;16002:68:0;;;14751:21:1;14808:2;14788:18;;;14781:30;14847:34;14827:18;;;14820:62;-1:-1:-1;;;14898:18:1;;;14891:35;14943:19;;16002:68:0;14567:401:1;16002:68:0;-1:-1:-1;;;;;16089:16:0;;16081:64;;;;-1:-1:-1;;;16081:64:0;;15175:2:1;16081:64:0;;;15157:21:1;15214:2;15194:18;;;15187:30;15253:34;15233:18;;;15226:62;-1:-1:-1;;;15304:18:1;;;15297:33;15347:19;;16081:64:0;14973:399:1;16081:64:0;-1:-1:-1;;;;;16231:15:0;;:9;:15;;;;;;;;;;;:25;-1:-1:-1;16231:25:0;;:39;;;16268:2;-1:-1:-1;;;;;16260:10:0;:4;-1:-1:-1;;;;;16260:10:0;;16231:39;16209:127;;;;-1:-1:-1;;;16209:127:0;;15579:2:1;16209:127:0;;;15561:21:1;15618:2;15598:18;;;15591:30;15657:34;15637:18;;;15630:62;-1:-1:-1;;;15708:18:1;;;15701:36;15754:19;;16209:127:0;15377:402:1;16209:127:0;16349:22;16382:2;-1:-1:-1;;;;;16374:10:0;:4;-1:-1:-1;;;;;16374:10:0;;:23;;16391:6;16374:23;;;16387:1;16374:23;-1:-1:-1;;;;;16453:15:0;;;:9;:15;;;;;;;;;;;;;:24;;;16435:42;;16508:13;;;;;;;;;;;;:30;;16492:46;;16567:34;;1361:25:1;;;16508:30:0;;-1:-1:-1;16508:13:0;16453:15;;16567:34;;1334:18:1;16567:34:0;;;;;;;16614:37;17223:675;22298:98;22355:7;22382:1;22380;:3;22379:9;;22387:1;22379:9;;;22385:1;22379:9;22372:16;22298:98;-1:-1:-1;;;22298:98:0:o;25794:456::-;25886:16;;;25900:1;25886:16;;;;;;;;25862:21;;25886:16;;;;;;;;;;-1:-1:-1;25886:16:0;25862:40;;25931:4;25913;25918:1;25913:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25913:23:0;;;-1:-1:-1;;;;;25913:23:0;;;;;25957:8;;;;;;;;;-1:-1:-1;;;;;25957:8:0;-1:-1:-1;;;;;25957:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25947:4;25952:1;25947:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25947:25:0;;;:7;;;;;;;;;:25;26017:8;;25985:55;;26002:4;;26017:8;;;;26028:11;25985:8;:55::i;:::-;26053:8;;:189;;-1:-1:-1;;;26053:189:0;;:8;;;;-1:-1:-1;;;;;26053:8:0;;:59;;:189;;26127:11;;26153:1;;26169:4;;26196;;26216:15;;26053:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25851:399;25794:456;:::o;2366:191::-;2459:6;;;-1:-1:-1;;;;;2476:17:0;;;-1:-1:-1;;;;;;2476:17:0;;;;;;;2509:40;;2459:6;;;2476:17;2459:6;;2509:40;;2440:16;;2509:40;2429:128;2366:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;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;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:159::-;1464:20;;1524:6;1513:18;;1503:29;;1493:57;;1546:1;1543;1536:12;1493:57;1397:159;;;:::o;1561:184::-;1619:6;1672:2;1660:9;1651:7;1647:23;1643:32;1640:52;;;1688:1;1685;1678:12;1640:52;1711:28;1729:9;1711:28;:::i;1750:456::-;1827:6;1835;1843;1896:2;1884:9;1875:7;1871:23;1867:32;1864:52;;;1912:1;1909;1902:12;1864:52;1951:9;1938:23;1970:31;1995:5;1970:31;:::i;:::-;2020:5;-1:-1:-1;2077:2:1;2062:18;;2049:32;2090:33;2049:32;2090:33;:::i;:::-;1750:456;;2142:7;;-1:-1:-1;;;2196:2:1;2181:18;;;;2168:32;;1750:456::o;2211:416::-;2276:6;2284;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;2392:9;2379:23;2411:31;2436:5;2411:31;:::i;:::-;2461:5;-1:-1:-1;2518:2:1;2503:18;;2490:32;2560:15;;2553:23;2541:36;;2531:64;;2591:1;2588;2581:12;2531:64;2614:7;2604:17;;;2211:416;;;;;:::o;2821:180::-;2880:6;2933:2;2921:9;2912:7;2908:23;2904:32;2901:52;;;2949:1;2946;2939:12;2901:52;-1:-1:-1;2972:23:1;;2821:180;-1:-1:-1;2821:180:1:o;3199:247::-;3258:6;3311:2;3299:9;3290:7;3286:23;3282:32;3279:52;;;3327:1;3324;3317:12;3279:52;3366:9;3353:23;3385:31;3410:5;3385:31;:::i;3894:328::-;3968:6;3976;3984;4037:2;4025:9;4016:7;4012:23;4008:32;4005:52;;;4053:1;4050;4043:12;4005:52;4076:28;4094:9;4076:28;:::i;:::-;4066:38;;4123:37;4156:2;4145:9;4141:18;4123:37;:::i;:::-;4113:47;;4179:37;4212:2;4201:9;4197:18;4179:37;:::i;:::-;4169:47;;3894:328;;;;;:::o;4227:388::-;4295:6;4303;4356:2;4344:9;4335:7;4331:23;4327:32;4324:52;;;4372:1;4369;4362:12;4324:52;4411:9;4398:23;4430:31;4455:5;4430:31;:::i;:::-;4480:5;-1:-1:-1;4537:2:1;4522:18;;4509:32;4550:33;4509:32;4550:33;:::i;4620:380::-;4699:1;4695:12;;;;4742;;;4763:61;;4817:4;4809:6;4805:17;4795:27;;4763:61;4870:2;4862:6;4859:14;4839:18;4836:38;4833:161;;4916:10;4911:3;4907:20;4904:1;4897:31;4951:4;4948:1;4941:15;4979:4;4976:1;4969:15;4833:161;;4620:380;;;:::o;5617:306::-;5705:6;5713;5721;5774:2;5762:9;5753:7;5749:23;5745:32;5742:52;;;5790:1;5787;5780:12;5742:52;5819:9;5813:16;5803:26;;5869:2;5858:9;5854:18;5848:25;5838:35;;5913:2;5902:9;5898:18;5892:25;5882:35;;5617:306;;;;;:::o;6832:127::-;6893:10;6888:3;6884:20;6881:1;6874:31;6924:4;6921:1;6914:15;6948:4;6945:1;6938:15;6964:125;7029:9;;;7050:10;;;7047:36;;;7063:18;;:::i;8389:127::-;8450:10;8445:3;8441:20;8438:1;8431:31;8481:4;8478:1;8471:15;8505:4;8502:1;8495:15;8521:171;8589:6;8628:10;;;8616;;;8612:27;;8651:12;;;8648:38;;;8666:18;;:::i;:::-;8648:38;8521:171;;;;:::o;8697:168::-;8764:6;8790:10;;;8802;;;8786:27;;8825:11;;;8822:37;;;8839:18;;:::i;9663:168::-;9736:9;;;9767;;9784:15;;;9778:22;;9764:37;9754:71;;9805:18;;:::i;9836:217::-;9876:1;9902;9892:132;;9946:10;9941:3;9937:20;9934:1;9927:31;9981:4;9978:1;9971:15;10009:4;10006:1;9999:15;9892:132;-1:-1:-1;10038:9:1;;9836:217::o;10058:251::-;10128:6;10181:2;10169:9;10160:7;10156:23;10152:32;10149:52;;;10197:1;10194;10187:12;10149:52;10229:9;10223:16;10248:31;10273:5;10248:31;:::i;13629:128::-;13696:9;;;13717:11;;;13714:37;;;13731:18;;:::i;15916:980::-;16178:4;16226:3;16215:9;16211:19;16257:6;16246:9;16239:25;16283:2;16321:6;16316:2;16305:9;16301:18;16294:34;16364:3;16359:2;16348:9;16344:18;16337:31;16388:6;16423;16417:13;16454:6;16446;16439:22;16492:3;16481:9;16477:19;16470:26;;16531:2;16523:6;16519:15;16505:29;;16552:1;16562:195;16576:6;16573:1;16570:13;16562:195;;;16641:13;;-1:-1:-1;;;;;16637:39:1;16625:52;;16732:15;;;;16697:12;;;;16673:1;16591:9;16562:195;;;-1:-1:-1;;;;;;;16813:32:1;;;;16808:2;16793:18;;16786:60;-1:-1:-1;;;16877:3:1;16862:19;16855:35;16774:3;15916:980;-1:-1:-1;;;15916:980:1:o

Swarm Source

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