Token The Real TSYGAN

 

Overview [ERC-20]

Max Total Supply:
666,666,666,666,666 TSYGAN

Holders:
255

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TSYGAN

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-09
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.8;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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 recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

contract TSYGAN is ERC20, Ownable {


    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address payable public TreasuryAddress;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

    bool public tradingActive = false;

    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);


    event ExcludeFromFees(address indexed account, bool isExcluded);


    event UpdatedTreasuryAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("The Real TSYGAN", "TSYGAN") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 666666666666666 * 1e18;

        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyTreasuryFee = 5;
        buyLiquidityFee = 0;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee;

        sellTreasuryFee = 5;
        sellLiquidityFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee ;

        TreasuryAddress = payable(0xd21D39180bEB7a2A18889058Ff7f6df56cA90E0e);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);


        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}


    

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 1 / 100, "Swap amount cannot be higher than 1% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee;
        require(buyTotalFees <= 9, "Must keep fees less than 9%");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee;
        require(sellTotalFees <= 9, "Must keep fees less than 9%");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if(!tradingActive){
            require(from == owner(), "Trading is not enabled");
        }
        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on Trades, not on wallet transfers

        if(takeFee){
            
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));
       
        ethForLiquidity -= ethForTreasury;

        tokensForLiquidity = 0;
        tokensForTreasury = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(contractETHBalance,TreasuryAddress);
        }
    }

    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    
    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

      
    function airdrop(address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + (tokens[i] * 10**decimals());
        }

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(msg.sender,addresses[i],(tokens[i] * 10**decimals()));
        
        }
    }


    function setTreasuryAddress(address _TreasuryAddress) external onlyOwner {
        require(_TreasuryAddress != address(0), "_TreasuryAddress address cannot be 0");
        TreasuryAddress = payable(_TreasuryAddress);
        emit UpdatedTreasuryAddress(_TreasuryAddress);
    }

      // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"TreasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airdrop","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526010805460ff191690553480156200001b57600080fd5b50604080518082018252600f81526e2a3432902932b0b6102a29aca3a0a760891b6020808301918252835180850190945260068452652a29aca3a0a760d11b908401528151919291620000719160039162000676565b5080516200008790600490602084019062000676565b50505060006200009c6200038e60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062002dc0833981519152908290a3507f7a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000006080526040805163c45a015560e01b815290513391737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808301926020929190829003018186803b1580156200014d57600080fd5b505afa15801562000162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018891906200071c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d157600080fd5b505afa158015620001e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020c91906200071c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200025557600080fd5b505af11580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200071c565b6001600160601b0319606082901b1660a052620002b8906001600160a01b0316600162000392565b6d20de842db3b771eb183990680000620186a0620002d882601962000764565b620002e4919062000786565b600655600560098190556000600a8190556200030091620007a9565b6008556005600c8190556000600d8190556200031c91620007a9565b600b55600780546001600160a01b03191673d21d39180beb7a2a18889058ff7f6df56ca90e0e17905562000352836001620003e6565b6200035f306001620003e6565b6200036e61dead6001620003e6565b6200037a838262000494565b620003858362000579565b50505062000801565b3390565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004355760405162461bcd60e51b8152602060048201819052602482015260008051602062002da083398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200042c565b8060026000828254620005009190620007a9565b90915550506001600160a01b038216600090815260208190526040812080548392906200052f908490620007a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620005c45760405162461bcd60e51b8152602060048201819052602482015260008051602062002da083398151915260448201526064016200042c565b6001600160a01b0381166200062b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200042c565b6005546040516001600160a01b0380841692169060008051602062002dc083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200068490620007c4565b90600052602060002090601f016020900481019282620006a85760008555620006f3565b82601f10620006c357805160ff1916838001178555620006f3565b82800160010185558215620006f3579182015b82811115620006f3578251825591602001919060010190620006d6565b506200070192915062000705565b5090565b5b8082111562000701576000815560010162000706565b6000602082840312156200072f57600080fd5b81516001600160a01b03811681146200074757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200078157620007816200074e565b500290565b600082620007a457634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007bf57620007bf6200074e565b500190565b600181811c90821680620007d957607f821691505b60208210811415620007fb57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c61254962000857600039600081816103a10152610fdb0152600081816102c401528181611c5901528181611d2101528181611d5d01528181611dcf0152611df601526125496000f3fe6080604052600436106102295760003560e01c80638366e79a11610123578063c0246668116100ab578063e2f456051161006f578063e2f4560514610694578063f11a24d3146106aa578063f2fde38b146106c0578063f5648a4f146106e0578063f6374342146106f557600080fd5b8063c0246668146105e2578063cc2ffe7c14610602578063d257b34f14610618578063d85ba06314610638578063dd62ed3e1461064e57600080fd5b80639a7a23d6116100f25780639a7a23d614610538578063a457c2d714610558578063a9059cbb14610578578063b62496f514610598578063bbc0c742146105c857600080fd5b80638366e79a146104d05780638a8c523c146104f05780638da5cb5b1461050557806395d89b411461052357600080fd5b806349bd5a5e116101b1578063672434821161017557806367243482146104395780636a486a8e146104595780636b2fb1241461046f57806370a0823114610485578063715018a6146104bb57600080fd5b806349bd5a5e1461038f5780635b5c251f146103c35780635c068a8c146103e35780636605bfda146103f957806366ca9b831461041957600080fd5b806318160ddd116101f857806318160ddd146102fe5780631a8145bb1461031d57806323b872dd14610333578063313ce56714610353578063395093511461036f57600080fd5b806302dbd8f81461023557806306fdde0314610257578063095ea7b3146102825780631694505e146102b257600080fd5b3661023057005b600080fd5b34801561024157600080fd5b50610255610250366004611f19565b61070b565b005b34801561026357600080fd5b5061026c6107ab565b6040516102799190611f3b565b60405180910390f35b34801561028e57600080fd5b506102a261029d366004611fa8565b61083d565b6040519015158152602001610279565b3480156102be57600080fd5b506102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610279565b34801561030a57600080fd5b506002545b604051908152602001610279565b34801561032957600080fd5b5061030f600f5481565b34801561033f57600080fd5b506102a261034e366004611fd4565b610854565b34801561035f57600080fd5b5060405160128152602001610279565b34801561037b57600080fd5b506102a261038a366004611fa8565b6108fe565b34801561039b57600080fd5b506102e67f000000000000000000000000000000000000000000000000000000000000000081565b3480156103cf57600080fd5b506007546102e6906001600160a01b031681565b3480156103ef57600080fd5b5061030f60095481565b34801561040557600080fd5b50610255610414366004612015565b61093a565b34801561042557600080fd5b50610255610434366004611f19565b610a10565b34801561044557600080fd5b50610255610454366004612085565b610aa3565b34801561046557600080fd5b5061030f600b5481565b34801561047b57600080fd5b5061030f600c5481565b34801561049157600080fd5b5061030f6104a0366004612015565b6001600160a01b031660009081526020819052604090205490565b3480156104c757600080fd5b50610255610cd1565b3480156104dc57600080fd5b506102a26104eb3660046120f1565b610d45565b3480156104fc57600080fd5b50610255610f14565b34801561051157600080fd5b506005546001600160a01b03166102e6565b34801561052f57600080fd5b5061026c610fa0565b34801561054457600080fd5b50610255610553366004612138565b610faf565b34801561056457600080fd5b506102a2610573366004611fa8565b61108b565b34801561058457600080fd5b506102a2610593366004611fa8565b611124565b3480156105a457600080fd5b506102a26105b3366004612015565b60126020526000908152604090205460ff1681565b3480156105d457600080fd5b506010546102a29060ff1681565b3480156105ee57600080fd5b506102556105fd366004612138565b611131565b34801561060e57600080fd5b5061030f600e5481565b34801561062457600080fd5b50610255610633366004612166565b6111ba565b34801561064457600080fd5b5061030f60085481565b34801561065a57600080fd5b5061030f6106693660046120f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106a057600080fd5b5061030f60065481565b3480156106b657600080fd5b5061030f600a5481565b3480156106cc57600080fd5b506102556106db366004612015565b611302565b3480156106ec57600080fd5b506102556113ed565b34801561070157600080fd5b5061030f600d5481565b6005546001600160a01b0316331461073e5760405162461bcd60e51b81526004016107359061217f565b60405180910390fd5b600c829055600d81905561075281836121ca565b600b819055600910156107a75760405162461bcd60e51b815260206004820152601b60248201527f4d757374206b6565702066656573206c657373207468616e20392500000000006044820152606401610735565b5050565b6060600380546107ba906121e2565b80601f01602080910402602001604051908101604052809291908181526020018280546107e6906121e2565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084a338484611464565b5060015b92915050565b6000610861848484611588565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108e65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610735565b6108f38533858403611464565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161084a9185906109359086906121ca565b611464565b6005546001600160a01b031633146109645760405162461bcd60e51b81526004016107359061217f565b6001600160a01b0381166109c65760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610735565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b03163314610a3a5760405162461bcd60e51b81526004016107359061217f565b6009829055600a819055610a4e81836121ca565b6008819055600910156107a75760405162461bcd60e51b815260206004820152601b60248201527f4d757374206b6565702066656573206c657373207468616e20392500000000006044820152606401610735565b6005546001600160a01b03163314610acd5760405162461bcd60e51b81526004016107359061217f565b6103218310610b345760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610735565b828114610b945760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610735565b6000805b84811015610bed57610bac6012600a612301565b848483818110610bbe57610bbe612310565b90506020020135610bcf9190612326565b610bd990836121ca565b915080610be581612345565b915050610b98565b5033600090815260208190526040902054811115610c4d5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610735565b60005b84811015610cc957610cb733878784818110610c6e57610c6e612310565b9050602002016020810190610c839190612015565b610c8f6012600a612301565b878786818110610ca157610ca1612310565b90506020020135610cb29190612326565b611588565b80610cc181612345565b915050610c50565b505050505050565b6005546001600160a01b03163314610cfb5760405162461bcd60e51b81526004016107359061217f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610d725760405162461bcd60e51b81526004016107359061217f565b6001600160a01b038316610dc85760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610735565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e429190612360565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610e9057600080fd5b505af1158015610ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec89190612379565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314610f3e5760405162461bcd60e51b81526004016107359061217f565b60105460ff1615610f915760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610735565b6010805460ff19166001179055565b6060600480546107ba906121e2565b6005546001600160a01b03163314610fd95760405162461bcd60e51b81526004016107359061217f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156110815760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610735565b6107a78282611933565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561110d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610735565b61111a3385858403611464565b5060019392505050565b600061084a338484611588565b6005546001600160a01b0316331461115b5760405162461bcd60e51b81526004016107359061217f565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146111e45760405162461bcd60e51b81526004016107359061217f565b620186a06111f160025490565b6111fc906001612326565b6112069190612396565b8110156112735760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610735565b606461127e60025490565b611289906001612326565b6112939190612396565b8111156112fd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610735565b600655565b6005546001600160a01b0316331461132c5760405162461bcd60e51b81526004016107359061217f565b6001600160a01b0381166113915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610735565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114175760405162461bcd60e51b81526004016107359061217f565b604051600090339047908381818185875af1925050503d8060008114611459576040519150601f19603f3d011682016040523d82523d6000602084013e61145e565b606091505b50505050565b6001600160a01b0383166114c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610735565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610735565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115ae5760405162461bcd60e51b8152600401610735906123b8565b6001600160a01b0382166115d45760405162461bcd60e51b8152600401610735906123fd565b600081116116245760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610735565b60105460ff16611684576005546001600160a01b038481169116146116845760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610735565b30600090815260208190526040902054600654811080159081906116b25750600554600160a01b900460ff16155b80156116d757506001600160a01b03851660009081526012602052604090205460ff16155b80156116fc57506001600160a01b03851660009081526011602052604090205460ff16155b801561172157506001600160a01b03841660009081526011602052604090205460ff16155b1561174f576005805460ff60a01b1916600160a01b179055611741611987565b6005805460ff60a01b191690555b6001600160a01b03851660009081526011602052604090205460019060ff168061179157506001600160a01b03851660009081526011602052604090205460ff165b1561179a575060005b6000811561191f576001600160a01b03861660009081526012602052604090205460ff1680156117cc57506000600b54115b15611854576064600b54866117e19190612326565b6117eb9190612396565b9050600b54600d54826117fe9190612326565b6118089190612396565b600f600082825461181991906121ca565b9091555050600b54600c5461182e9083612326565b6118389190612396565b600e600082825461184991906121ca565b909155506119019050565b6001600160a01b03871660009081526012602052604090205460ff16801561187e57506000600854115b15611901576064600854866118939190612326565b61189d9190612396565b9050600854600a54826118b09190612326565b6118ba9190612396565b600f60008282546118cb91906121ca565b90915550506008546009546118e09083612326565b6118ea9190612396565b600e60008282546118fb91906121ca565b90915550505b801561191257611912873083611aad565b61191c8186612440565b94505b61192a878787611aad565b50505050505050565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b3060009081526020819052604081205490506000600e54600f546119ab91906121ca565b90508115806119b8575080155b156119c1575050565b6006546119cf90600a612326565b8211156119e7576006546119e490600a612326565b91505b6000600282600f54856119fa9190612326565b611a049190612396565b611a0e9190612396565b9050611a22611a1d8285612440565b611c02565b600f5447908190600090611a3890600290612396565b611a429086612440565b600e54611a4f9085612326565b611a599190612396565b9050611a658183612440565b6000600f819055600e5591508315801590611a805750600082115b15611a8f57611a8f8483611dc9565b47801561192a5760075461192a9082906001600160a01b0316611ede565b6001600160a01b038316611ad35760405162461bcd60e51b8152600401610735906123b8565b6001600160a01b038216611af95760405162461bcd60e51b8152600401610735906123fd565b6001600160a01b03831660009081526020819052604090205481811015611b715760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610735565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611ba89084906121ca565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bf491815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c3757611c37612310565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cb057600080fd5b505afa158015611cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce89190612457565b81600181518110611cfb57611cfb612310565b60200260200101906001600160a01b031690816001600160a01b031681525050611d46307f000000000000000000000000000000000000000000000000000000000000000084611464565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611d9b908590600090869030904290600401612474565b600060405180830381600087803b158015611db557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b611df4307f000000000000000000000000000000000000000000000000000000000000000084611464565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080611e3b6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ed791906124e5565b5050505050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611f14573d6000803e3d6000fd5b505050565b60008060408385031215611f2c57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611f6857858101830151858201604001528201611f4c565b81811115611f7a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611fa557600080fd5b50565b60008060408385031215611fbb57600080fd5b8235611fc681611f90565b946020939093013593505050565b600080600060608486031215611fe957600080fd5b8335611ff481611f90565b9250602084013561200481611f90565b929592945050506040919091013590565b60006020828403121561202757600080fd5b813561203281611f90565b9392505050565b60008083601f84011261204b57600080fd5b50813567ffffffffffffffff81111561206357600080fd5b6020830191508360208260051b850101111561207e57600080fd5b9250929050565b6000806000806040858703121561209b57600080fd5b843567ffffffffffffffff808211156120b357600080fd5b6120bf88838901612039565b909650945060208701359150808211156120d857600080fd5b506120e587828801612039565b95989497509550505050565b6000806040838503121561210457600080fd5b823561210f81611f90565b9150602083013561211f81611f90565b809150509250929050565b8015158114611fa557600080fd5b6000806040838503121561214b57600080fd5b823561215681611f90565b9150602083013561211f8161212a565b60006020828403121561217857600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156121dd576121dd6121b4565b500190565b600181811c908216806121f657607f821691505b6020821081141561221757634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b8085111561225857816000190482111561223e5761223e6121b4565b8085161561224b57918102915b93841c9390800290612222565b509250929050565b60008261226f5750600161084e565b8161227c5750600061084e565b8160018114612292576002811461229c576122b8565b600191505061084e565b60ff8411156122ad576122ad6121b4565b50506001821b61084e565b5060208310610133831016604e8410600b84101617156122db575081810a61084e565b6122e5838361221d565b80600019048211156122f9576122f96121b4565b029392505050565b600061203260ff841683612260565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615612340576123406121b4565b500290565b6000600019821415612359576123596121b4565b5060010190565b60006020828403121561237257600080fd5b5051919050565b60006020828403121561238b57600080fd5b81516120328161212a565b6000826123b357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612452576124526121b4565b500390565b60006020828403121561246957600080fd5b815161203281611f90565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124c45784516001600160a01b03168352938301939183019160010161249f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124fa57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ffe7f134f5f104b0f87ba05d018df82b8b95841ec8dd8aff462a983c488f900464736f6c634300080800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed ByteCode Sourcemap

6935:10651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10797:310;;;;;;;;;;-1:-1:-1;10797:310:0;;;;;:::i;:::-;;:::i;:::-;;1653:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2567:169;;;;;;;;;;-1:-1:-1;2567:169:0;;;;;:::i;:::-;;:::i;:::-;;;1490:14:1;;1483:22;1465:41;;1453:2;1438:18;2567:169:0;1325:187:1;6980:43:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1699:32:1;;;1681:51;;1669:2;1654:18;6980:43:0;1517:221:1;1974:108:0;;;;;;;;;;-1:-1:-1;2062:12:0;;1974:108;;;1889:25:1;;;1877:2;1862:18;1974:108:0;1743:177:1;7454:33:0;;;;;;;;;;;;;;;;2744:480;;;;;;;;;;-1:-1:-1;2744:480:0;;;;;:::i;:::-;;:::i;1873:93::-;;;;;;;;;;-1:-1:-1;1873:93:0;;1956:2;2528:36:1;;2516:2;2501:18;1873:93:0;2386:184:1;3232:215:0;;;;;;;;;;-1:-1:-1;3232:215:0;;;;;:::i;:::-;;:::i;7030:38::-;;;;;;;;;;;;;;;7147;;;;;;;;;;-1:-1:-1;7147:38:0;;;;-1:-1:-1;;;;;7147:38:0;;;7228:29;;;;;;;;;;;;;;;;17099:281;;;;;;;;;;-1:-1:-1;17099:281:0;;;;;:::i;:::-;;:::i;10486:303::-;;;;;;;;;;-1:-1:-1;10486:303:0;;;;;:::i;:::-;;:::i;16393:696::-;;;;;;;;;;-1:-1:-1;16393:696:0;;;;;:::i;:::-;;:::i;7303:28::-;;;;;;;;;;;;;;;;7338:30;;;;;;;;;;;;;;;;2090:127;;;;;;;;;;-1:-1:-1;2090:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2191:18:0;2164:7;2191:18;;;;;;;;;;;;2090:127;5694:150;;;;;;;;;;;;;:::i;15766:381::-;;;;;;;;;;-1:-1:-1;15766:381:0;;;;;:::i;:::-;;:::i;17436:145::-;;;;;;;;;;;;;:::i;5480:79::-;;;;;;;;;;-1:-1:-1;5545:6:0;;-1:-1:-1;;;;;5545:6:0;5480:79;;1761:104;;;;;;;;;;;;;:::i;10036:246::-;;;;;;;;;;-1:-1:-1;10036:246:0;;;;;:::i;:::-;;:::i;3455:401::-;;;;;;;;;;-1:-1:-1;3455:401:0;;;;;:::i;:::-;;:::i;2225:175::-;;;;;;;;;;-1:-1:-1;2225:175:0;;;;;:::i;:::-;;:::i;7830:58::-;;;;;;;;;;-1:-1:-1;7830:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7496:33;;;;;;;;;;-1:-1:-1;7496:33:0;;;;;;;;11115:182;;;;;;;;;;-1:-1:-1;11115:182:0;;;;;:::i;:::-;;:::i;7415:32::-;;;;;;;;;;;;;;;;9681:347;;;;;;;;;;-1:-1:-1;9681:347:0;;;;;:::i;:::-;;:::i;7194:27::-;;;;;;;;;;;;;;;;2408:151;;;;;;;;;;-1:-1:-1;2408:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2524:18:0;;;2497:7;2524:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2408:151;7105:33;;;;;;;;;;;;;;;;7264:30;;;;;;;;;;;;;;;;5852:244;;;;;;;;;;-1:-1:-1;5852:244:0;;;;;:::i;:::-;;:::i;16217:160::-;;;;;;;;;;;;;:::i;7375:31::-;;;;;;;;;;;;;;;;10797:310;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;;;;;;;;;10896:15:::1;:30:::0;;;10937:16:::1;:32:::0;;;10996:34:::1;10956:13:::0;10914:12;10996:34:::1;:::i;:::-;10980:13;:50:::0;;;11066:1:::1;-1:-1:-1::0;11049:18:0::1;11041:58;;;::::0;-1:-1:-1;;;11041:58:0;;6325:2:1;11041:58:0::1;::::0;::::1;6307:21:1::0;6364:2;6344:18;;;6337:30;6403:29;6383:18;;;6376:57;6450:18;;11041:58:0::1;6123:351:1::0;11041:58:0::1;10797:310:::0;;:::o;1653:100::-;1707:13;1740:5;1733:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1653:100;:::o;2567:169::-;2650:4;2667:39;172:10;2690:7;2699:6;2667:8;:39::i;:::-;-1:-1:-1;2724:4:0;2567:169;;;;;:::o;2744:480::-;2884:4;2901:36;2911:6;2919:9;2930:6;2901:9;:36::i;:::-;-1:-1:-1;;;;;2977:19:0;;2950:24;2977:19;;;:11;:19;;;;;;;;172:10;2977:33;;;;;;;;3029:26;;;;3021:79;;;;-1:-1:-1;;;3021:79:0;;7066:2:1;3021:79:0;;;7048:21:1;7105:2;7085:18;;;7078:30;7144:34;7124:18;;;7117:62;-1:-1:-1;;;7195:18:1;;;7188:38;7243:19;;3021:79:0;6864:404:1;3021:79:0;3128:57;3137:6;172:10;3178:6;3159:16;:25;3128:8;:57::i;:::-;-1:-1:-1;3212:4:0;;2744:480;-1:-1:-1;;;;2744:480:0:o;3232:215::-;172:10;3320:4;3369:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3369:34:0;;;;;;;;;;3320:4;;3337:80;;3360:7;;3369:47;;3406:10;;3369:47;:::i;:::-;3337:8;:80::i;17099:281::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17191:30:0;::::1;17183:79;;;::::0;-1:-1:-1;;;17183:79:0;;7475:2:1;17183:79:0::1;::::0;::::1;7457:21:1::0;7514:2;7494:18;;;7487:30;7553:34;7533:18;;;7526:62;-1:-1:-1;;;7604:18:1;;;7597:34;7648:19;;17183:79:0::1;7273:400:1::0;17183:79:0::1;17273:15;:43:::0;;-1:-1:-1;;;;;;17273:43:0::1;-1:-1:-1::0;;;;;17273:43:0;::::1;::::0;;::::1;::::0;;;17332:40:::1;::::0;::::1;::::0;-1:-1:-1;;17332:40:0::1;17099:281:::0;:::o;10486:303::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;10584:14:::1;:29:::0;;;10624:15:::1;:31:::0;;;10681:32:::1;10642:13:::0;10601:12;10681:32:::1;:::i;:::-;10666:12;:47:::0;;;10748:1:::1;-1:-1:-1::0;10732:17:0::1;10724:57;;;::::0;-1:-1:-1;;;10724:57:0;;6325:2:1;10724:57:0::1;::::0;::::1;6307:21:1::0;6364:2;6344:18;;;6337:30;6403:29;6383:18;;;6376:57;6450:18;;10724:57:0::1;6123:351:1::0;16393:696:0;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;16526:3:::1;16507:22:::0;::::1;16499:79;;;::::0;-1:-1:-1;;;16499:79:0;;7880:2:1;16499:79:0::1;::::0;::::1;7862:21:1::0;7919:2;7899:18;;;7892:30;7958:34;7938:18;;;7931:62;-1:-1:-1;;;8009:18:1;;;8002:43;8062:19;;16499:79:0::1;7678:409:1::0;16499:79:0::1;16620:33:::0;;::::1;16612:85;;;::::0;-1:-1:-1;;;16612:85:0;;8294:2:1;16612:85:0::1;::::0;::::1;8276:21:1::0;8333:2;8313:18;;;8306:30;8372:34;8352:18;;;8345:62;-1:-1:-1;;;8423:18:1;;;8416:38;8471:19;;16612:85:0::1;8092:404:1::0;16612:85:0::1;16710:12;16743:6:::0;16739:109:::1;16753:20:::0;;::::1;16739:109;;;16821:14;1956:2:::0;16821::::1;:14;:::i;:::-;16809:6;;16816:1;16809:9;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;16801:35;::::0;:4;:35:::1;:::i;:::-;16794:42:::0;-1:-1:-1;16775:3:0;::::1;::::0;::::1;:::i;:::-;;;;16739:109;;;-1:-1:-1::0;16878:10:0::1;2164:7:::0;2191:18;;;;;;;;;;;16893:4;-1:-1:-1;16868:29:0::1;16860:69;;;::::0;-1:-1:-1;;;16860:69:0;;10531:2:1;16860:69:0::1;::::0;::::1;10513:21:1::0;10570:2;10550:18;;;10543:30;10609:29;10589:18;;;10582:57;10656:18;;16860:69:0::1;10329:351:1::0;16860:69:0::1;16946:6;16942:140;16956:20:::0;;::::1;16942:140;;;16997:63;17007:10;17018:9;;17028:1;17018:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17044:14;1956:2:::0;17044::::1;:14;:::i;:::-;17032:6;;17039:1;17032:9;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;16997:9;:63::i;:::-;16978:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16942:140;;;;16486:603;16393:696:::0;;;;:::o;5694:150::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;5787:6:::1;::::0;5766:40:::1;::::0;5803:1:::1;::::0;-1:-1:-1;;;;;5787:6:0::1;::::0;5766:40:::1;::::0;5803:1;;5766:40:::1;5817:6;:19:::0;;-1:-1:-1;;;;;;5817:19:0::1;::::0;;5694:150::o;15766:381::-;5607:6;;15853:10;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15884:20:0;::::1;15876:59;;;::::0;-1:-1:-1;;;15876:59:0;;10887:2:1;15876:59:0::1;::::0;::::1;10869:21:1::0;10926:2;10906:18;;;10899:30;10965:28;10945:18;;;10938:56;11011:18;;15876:59:0::1;10685:350:1::0;15876:59:0::1;15973:39;::::0;-1:-1:-1;;;15973:39:0;;16006:4:::1;15973:39;::::0;::::1;1681:51:1::0;15946:24:0::1;::::0;-1:-1:-1;;;;;15973:24:0;::::1;::::0;::::1;::::0;1654:18:1;;15973:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16031:46;::::0;-1:-1:-1;;;16031:46:0;;-1:-1:-1;;;;;11421:32:1;;;16031:46:0::1;::::0;::::1;11403:51:1::0;11470:18;;;11463:34;;;15946:66:0;;-1:-1:-1;16031:23:0;;::::1;::::0;::::1;::::0;11376:18:1;;16031:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16093;::::0;;-1:-1:-1;;;;;11421:32:1;;11403:51;;11485:2;11470:18;;11463:34;;;16023:54:0;;-1:-1:-1;16093:46:0::1;::::0;11376:18:1;16093:46:0::1;;;;;;;15865:282;15766:381:::0;;;;:::o;17436:145::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;17500:13:::1;::::0;::::1;;17499:14;17491:51;;;::::0;-1:-1:-1;;;17491:51:0;;11960:2:1;17491:51:0::1;::::0;::::1;11942:21:1::0;11999:2;11979:18;;;11972:30;12038:26;12018:18;;;12011:54;12082:18;;17491:51:0::1;11758:348:1::0;17491:51:0::1;17553:13;:20:::0;;-1:-1:-1;;17553:20:0::1;17569:4;17553:20;::::0;;17436:145::o;1761:104::-;1817:13;1850:7;1843:14;;;;;:::i;10036:246::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;10145:13:::1;-1:-1:-1::0;;;;;10137:21:0::1;:4;-1:-1:-1::0;;;;;10137:21:0::1;;;10129:91;;;::::0;-1:-1:-1;;;10129:91:0;;12313:2:1;10129:91:0::1;::::0;::::1;12295:21:1::0;12352:2;12332:18;;;12325:30;12391:34;12371:18;;;12364:62;12462:27;12442:18;;;12435:55;12507:19;;10129:91:0::1;12111:421:1::0;10129:91:0::1;10233:41;10262:4;10268:5;10233:28;:41::i;3455:401::-:0;172:10;3548:4;3592:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3592:34:0;;;;;;;;;;3645:35;;;;3637:85;;;;-1:-1:-1;;;3637:85:0;;12739:2:1;3637:85:0;;;12721:21:1;12778:2;12758:18;;;12751:30;12817:34;12797:18;;;12790:62;-1:-1:-1;;;12868:18:1;;;12861:35;12913:19;;3637:85:0;12537:401:1;3637:85:0;3750:67;172:10;3773:7;3801:15;3782:16;:34;3750:8;:67::i;:::-;-1:-1:-1;3844:4:0;;3455:401;-1:-1:-1;;;3455:401:0:o;2225:175::-;2311:4;2328:42;172:10;2352:9;2363:6;2328:9;:42::i;11115:182::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11200:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;11200:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;11255:34;;1465:41:1;;;11255:34:0::1;::::0;1438:18:1;11255:34:0::1;;;;;;;11115:182:::0;;:::o;9681:347::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;9805:6:::1;9785:13;2062:12:::0;;;1974:108;9785:13:::1;:17;::::0;9801:1:::1;9785:17;:::i;:::-;:26;;;;:::i;:::-;9772:9;:39;;9764:105;;;::::0;-1:-1:-1;;;9764:105:0;;13367:2:1;9764:105:0::1;::::0;::::1;13349:21:1::0;13406:2;13386:18;;;13379:30;13445:34;13425:18;;;13418:62;-1:-1:-1;;;13496:18:1;;;13489:51;13557:19;;9764:105:0::1;13165:417:1::0;9764:105:0::1;9921:3;9901:13;2062:12:::0;;;1974:108;9901:13:::1;:17;::::0;9917:1:::1;9901:17;:::i;:::-;:23;;;;:::i;:::-;9888:9;:36;;9880:99;;;::::0;-1:-1:-1;;;9880:99:0;;13789:2:1;9880:99:0::1;::::0;::::1;13771:21:1::0;13828:2;13808:18;;;13801:30;13867:34;13847:18;;;13840:62;-1:-1:-1;;;13918:18:1;;;13911:48;13976:19;;9880:99:0::1;13587:414:1::0;9880:99:0::1;9990:18;:30:::0;9681:347::o;5852:244::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5941:22:0;::::1;5933:73;;;::::0;-1:-1:-1;;;5933:73:0;;14208:2:1;5933:73:0::1;::::0;::::1;14190:21:1::0;14247:2;14227:18;;;14220:30;14286:34;14266:18;;;14259:62;-1:-1:-1;;;14337:18:1;;;14330:36;14383:19;;5933:73:0::1;14006:402:1::0;5933:73:0::1;6043:6;::::0;6022:38:::1;::::0;-1:-1:-1;;;;;6022:38:0;;::::1;::::0;6043:6:::1;::::0;6022:38:::1;::::0;6043:6:::1;::::0;6022:38:::1;6071:6;:17:::0;;-1:-1:-1;;;;;;6071:17:0::1;-1:-1:-1::0;;;;;6071:17:0;;;::::1;::::0;;;::::1;::::0;;5852:244::o;16217:160::-;5607:6;;-1:-1:-1;;;;;5607:6:0;172:10;5607:22;5599:67;;;;-1:-1:-1;;;5599:67:0;;;;;;;:::i;:::-;16311:58:::1;::::0;16275:12:::1;::::0;16319:10:::1;::::0;16343:21:::1;::::0;16275:12;16311:58;16275:12;16311:58;16343:21;16319:10;16311:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;16217:160:0:o;4773:380::-;-1:-1:-1;;;;;4909:19:0;;4901:68;;;;-1:-1:-1;;;4901:68:0;;14825:2:1;4901:68:0;;;14807:21:1;14864:2;14844:18;;;14837:30;14903:34;14883:18;;;14876:62;-1:-1:-1;;;14954:18:1;;;14947:34;14998:19;;4901:68:0;14623:400:1;4901:68:0;-1:-1:-1;;;;;4988:21:0;;4980:68;;;;-1:-1:-1;;;4980:68:0;;15230:2:1;4980:68:0;;;15212:21:1;15269:2;15249:18;;;15242:30;15308:34;15288:18;;;15281:62;-1:-1:-1;;;15359:18:1;;;15352:32;15401:19;;4980:68:0;15028:398:1;4980:68:0;-1:-1:-1;;;;;5061:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5113:32;;1889:25:1;;;5113:32:0;;1862:18:1;5113:32:0;;;;;;;4773:380;;;:::o;11305:1967::-;-1:-1:-1;;;;;11405:18:0;;11397:68;;;;-1:-1:-1;;;11397:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11484:16:0;;11476:64;;;;-1:-1:-1;;;11476:64:0;;;;;;;:::i;:::-;11568:1;11559:6;:10;11551:52;;;;-1:-1:-1;;;11551:52:0;;16443:2:1;11551:52:0;;;16425:21:1;16482:2;16462:18;;;16455:30;16521:31;16501:18;;;16494:59;16570:18;;11551:52:0;16241:353:1;11551:52:0;11620:13;;;;11616:95;;5545:6;;-1:-1:-1;;;;;11657:15:0;;;5545:6;;11657:15;11649:50;;;;-1:-1:-1;;;11649:50:0;;16801:2:1;11649:50:0;;;16783:21:1;16840:2;16820:18;;;16813:30;-1:-1:-1;;;16859:18:1;;;16852:52;16921:18;;11649:50:0;16599:346:1;11649:50:0;11770:4;11721:28;2191:18;;;;;;;;;;;11828;;11804:42;;;;;;;11862:20;;-1:-1:-1;11874:8:0;;-1:-1:-1;;;11874:8:0;;;;11873:9;11862:20;:56;;;;-1:-1:-1;;;;;;11887:31:0;;;;;;:25;:31;;;;;;;;11886:32;11862:56;:86;;;;-1:-1:-1;;;;;;11923:25:0;;;;;;:19;:25;;;;;;;;11922:26;11862:86;:114;;;;-1:-1:-1;;;;;;11953:23:0;;;;;;:19;:23;;;;;;;;11952:24;11862:114;11859:217;;;11993:8;:15;;-1:-1:-1;;;;11993:15:0;-1:-1:-1;;;11993:15:0;;;12023:10;:8;:10::i;:::-;12048:8;:16;;-1:-1:-1;;;;12048:16:0;;;11859:217;-1:-1:-1;;;;;12206:25:0;;12088:12;12206:25;;;:19;:25;;;;;;12103:4;;12206:25;;;:52;;-1:-1:-1;;;;;;12235:23:0;;;;;;:19;:23;;;;;;;;12206:52;12203:99;;;-1:-1:-1;12285:5:0;12203:99;12314:12;12408:7;12405:814;;;-1:-1:-1;;;;;12473:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;12522:1;12506:13;;:17;12473:50;12469:603;;;12574:3;12559:13;;12550:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;12543:34;;12644:13;;12625:16;;12618:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;12596:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;12722:13:0;;12704:15;;12697:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;12676:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;12469:603:0;;-1:-1:-1;12469:603:0;;-1:-1:-1;;;;;12796:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;12846:1;12831:12;;:16;12796:51;12793:279;;;12899:3;12884:12;;12875:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;12868:34;;12968:12;;12950:15;;12943:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12921:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;13044:12:0;;13027:14;;13020:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;12999:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;12793:279:0;13091:8;;13088:89;;13119:42;13135:4;13149;13156;13119:15;:42::i;:::-;13193:14;13203:4;13193:14;;:::i;:::-;;;12405:814;13231:33;13247:4;13253:2;13257:6;13231:15;:33::i;:::-;11384:1888;;;;11305:1967;;;:::o;10290:188::-;-1:-1:-1;;;;;10373:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;10373:39:0;;;;;;;;;;10430:40;;10373:39;;:31;10430:40;;;10290:188;;:::o;14409:1226::-;14492:4;14448:23;2191:18;;;;;;;;;;;14448:50;;14509:25;14558:17;;14537:18;;:38;;;;:::i;:::-;14509:66;-1:-1:-1;14591:20:0;;;:46;;-1:-1:-1;14615:22:0;;14591:46;14588:60;;;14640:7;;14409:1226::o;14588:60::-;14681:18;;:23;;14702:2;14681:23;:::i;:::-;14663:15;:41;14660:113;;;14738:18;;:23;;14759:2;14738:23;:::i;:::-;14720:41;;14660:113;14834:23;14919:1;14899:17;14878:18;;14860:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;14834:86;-1:-1:-1;14933:51:0;14950:33;14834:86;14950:15;:33;:::i;:::-;14933:16;:51::i;:::-;15179:18;;15018:21;;;;14997:18;;15179:20;;15198:1;;15179:20;:::i;:::-;15158:42;;:17;:42;:::i;:::-;15137:17;;15124:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;15099:102;-1:-1:-1;15221:33:0;15099:102;15221:33;;:::i;:::-;15288:1;15267:18;:22;;;15300:17;:21;15221:33;-1:-1:-1;15337:19:0;;;;;:42;;;15378:1;15360:15;:19;15337:42;15334:119;;;15395:46;15408:15;15425;15395:12;:46::i;:::-;15494:21;15529:22;;15526:102;;15600:15;;15568:48;;15581:18;;-1:-1:-1;;;;;15600:15:0;15568:12;:48::i;3864:602::-;-1:-1:-1;;;;;4004:20:0;;3996:70;;;;-1:-1:-1;;;3996:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4085:23:0;;4077:71;;;;-1:-1:-1;;;4077:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4185:17:0;;4161:21;4185:17;;;;;;;;;;;4221:23;;;;4213:74;;;;-1:-1:-1;;;4213:74:0;;17282:2:1;4213:74:0;;;17264:21:1;17321:2;17301:18;;;17294:30;17360:34;17340:18;;;17333:62;-1:-1:-1;;;17411:18:1;;;17404:36;17457:19;;4213:74:0;17080:402:1;4213:74:0;-1:-1:-1;;;;;4315:17:0;;;:9;:17;;;;;;;;;;;4335:22;;;4315:42;;4375:20;;;;;;;;:30;;4351:6;;4315:9;4375:30;;4351:6;;4375:30;:::i;:::-;;;;;;;;4440:9;-1:-1:-1;;;;;4423:35:0;4432:6;-1:-1:-1;;;;;4423:35:0;;4451:6;4423:35;;;;1889:25:1;;1877:2;1862:18;;1743:177;4423:35:0;;;;;;;;3985:481;3864:602;;;:::o;13280:591::-;13432:16;;;13446:1;13432:16;;;;;;;;13408:21;;13432:16;;;;;;;;;;-1:-1:-1;13432:16:0;13408:40;;13477:4;13459;13464:1;13459:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;13459:23:0;;;-1:-1:-1;;;;;13459:23:0;;;;;13503:15;-1:-1:-1;;;;;13503:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13493:4;13498:1;13493:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;13493:32:0;;;-1:-1:-1;;;;;13493:32:0;;;;;13538:62;13555:4;13570:15;13588:11;13538:8;:62::i;:::-;13639:224;;-1:-1:-1;;;13639:224:0;;-1:-1:-1;;;;;13639:15:0;:66;;;;:224;;13720:11;;13746:1;;13790:4;;13817;;13837:15;;13639:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13879:522;14027:62;14044:4;14059:15;14077:11;14027:8;:62::i;:::-;14132:15;-1:-1:-1;;;;;14132:31:0;;14171:9;14204:4;14224:11;14250:1;14293;14344:7;5545:6;;-1:-1:-1;;;;;5545:6:0;;5480:79;14344:7;14132:261;;;;;;-1:-1:-1;;;;;;14132:261:0;;;-1:-1:-1;;;;;19219:15:1;;;14132:261:0;;;19201:34:1;19251:18;;;19244:34;;;;19294:18;;;19287:34;;;;19337:18;;;19330:34;19401:15;;;19380:19;;;19373:44;14367:15:0;19433:19:1;;;19426:35;19135:19;;14132:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13879:522;;:::o;15643:111::-;15723:23;;-1:-1:-1;;;;;15723:15:0;;;:23;;;;;15739:6;;15723:23;;;;15739:6;15723:15;:23;;;;;;;;;;;;;;;;;;;;;15643:111;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;869:131::-;-1:-1:-1;;;;;944:31:1;;934:42;;924:70;;990:1;987;980:12;924:70;869:131;:::o;1005:315::-;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1310:2;1295:18;;;;1282:32;;-1:-1:-1;;;1005:315:1:o;1925:456::-;2002:6;2010;2018;2071:2;2059:9;2050:7;2046:23;2042:32;2039:52;;;2087:1;2084;2077:12;2039:52;2126:9;2113:23;2145:31;2170:5;2145:31;:::i;:::-;2195:5;-1:-1:-1;2252:2:1;2237:18;;2224:32;2265:33;2224:32;2265:33;:::i;:::-;1925:456;;2317:7;;-1:-1:-1;;;2371:2:1;2356:18;;;;2343:32;;1925:456::o;3007:247::-;3066:6;3119:2;3107:9;3098:7;3094:23;3090:32;3087:52;;;3135:1;3132;3125:12;3087:52;3174:9;3161:23;3193:31;3218:5;3193:31;:::i;:::-;3243:5;3007:247;-1:-1:-1;;;3007:247:1:o;3259:367::-;3322:8;3332:6;3386:3;3379:4;3371:6;3367:17;3363:27;3353:55;;3404:1;3401;3394:12;3353:55;-1:-1:-1;3427:20:1;;3470:18;3459:30;;3456:50;;;3502:1;3499;3492:12;3456:50;3539:4;3531:6;3527:17;3515:29;;3599:3;3592:4;3582:6;3579:1;3575:14;3567:6;3563:27;3559:38;3556:47;3553:67;;;3616:1;3613;3606:12;3553:67;3259:367;;;;;:::o;3631:773::-;3753:6;3761;3769;3777;3830:2;3818:9;3809:7;3805:23;3801:32;3798:52;;;3846:1;3843;3836:12;3798:52;3886:9;3873:23;3915:18;3956:2;3948:6;3945:14;3942:34;;;3972:1;3969;3962:12;3942:34;4011:70;4073:7;4064:6;4053:9;4049:22;4011:70;:::i;:::-;4100:8;;-1:-1:-1;3985:96:1;-1:-1:-1;4188:2:1;4173:18;;4160:32;;-1:-1:-1;4204:16:1;;;4201:36;;;4233:1;4230;4223:12;4201:36;;4272:72;4336:7;4325:8;4314:9;4310:24;4272:72;:::i;:::-;3631:773;;;;-1:-1:-1;4363:8:1;-1:-1:-1;;;;3631:773:1:o;4409:388::-;4477:6;4485;4538:2;4526:9;4517:7;4513:23;4509:32;4506:52;;;4554:1;4551;4544:12;4506:52;4593:9;4580:23;4612:31;4637:5;4612:31;:::i;:::-;4662:5;-1:-1:-1;4719:2:1;4704:18;;4691:32;4732:33;4691:32;4732:33;:::i;:::-;4784:7;4774:17;;;4409:388;;;;;:::o;4802:118::-;4888:5;4881:13;4874:21;4867:5;4864:32;4854:60;;4910:1;4907;4900:12;4925:382;4990:6;4998;5051:2;5039:9;5030:7;5026:23;5022:32;5019:52;;;5067:1;5064;5057:12;5019:52;5106:9;5093:23;5125:31;5150:5;5125:31;:::i;:::-;5175:5;-1:-1:-1;5232:2:1;5217:18;;5204:32;5245:30;5204:32;5245:30;:::i;5312:180::-;5371:6;5424:2;5412:9;5403:7;5399:23;5395:32;5392:52;;;5440:1;5437;5430:12;5392:52;-1:-1:-1;5463:23:1;;5312:180;-1:-1:-1;5312:180:1:o;5497:356::-;5699:2;5681:21;;;5718:18;;;5711:30;5777:34;5772:2;5757:18;;5750:62;5844:2;5829:18;;5497:356::o;5858:127::-;5919:10;5914:3;5910:20;5907:1;5900:31;5950:4;5947:1;5940:15;5974:4;5971:1;5964:15;5990:128;6030:3;6061:1;6057:6;6054:1;6051:13;6048:39;;;6067:18;;:::i;:::-;-1:-1:-1;6103:9:1;;5990:128::o;6479:380::-;6558:1;6554:12;;;;6601;;;6622:61;;6676:4;6668:6;6664:17;6654:27;;6622:61;6729:2;6721:6;6718:14;6698:18;6695:38;6692:161;;;6775:10;6770:3;6766:20;6763:1;6756:31;6810:4;6807:1;6800:15;6838:4;6835:1;6828:15;6692:161;;6479:380;;;:::o;8501:422::-;8590:1;8633:5;8590:1;8647:270;8668:7;8658:8;8655:21;8647:270;;;8727:4;8723:1;8719:6;8715:17;8709:4;8706:27;8703:53;;;8736:18;;:::i;:::-;8786:7;8776:8;8772:22;8769:55;;;8806:16;;;;8769:55;8885:22;;;;8845:15;;;;8647:270;;;8651:3;8501:422;;;;;:::o;8928:806::-;8977:5;9007:8;8997:80;;-1:-1:-1;9048:1:1;9062:5;;8997:80;9096:4;9086:76;;-1:-1:-1;9133:1:1;9147:5;;9086:76;9178:4;9196:1;9191:59;;;;9264:1;9259:130;;;;9171:218;;9191:59;9221:1;9212:10;;9235:5;;;9259:130;9296:3;9286:8;9283:17;9280:43;;;9303:18;;:::i;:::-;-1:-1:-1;;9359:1:1;9345:16;;9374:5;;9171:218;;9473:2;9463:8;9460:16;9454:3;9448:4;9445:13;9441:36;9435:2;9425:8;9422:16;9417:2;9411:4;9408:12;9404:35;9401:77;9398:159;;;-1:-1:-1;9510:19:1;;;9542:5;;9398:159;9589:34;9614:8;9608:4;9589:34;:::i;:::-;9659:6;9655:1;9651:6;9647:19;9638:7;9635:32;9632:58;;;9670:18;;:::i;:::-;9708:20;;8928:806;-1:-1:-1;;;8928:806:1:o;9739:140::-;9797:5;9826:47;9867:4;9857:8;9853:19;9847:4;9826:47;:::i;9884:127::-;9945:10;9940:3;9936:20;9933:1;9926:31;9976:4;9973:1;9966:15;10000:4;9997:1;9990:15;10016:168;10056:7;10122:1;10118;10114:6;10110:14;10107:1;10104:21;10099:1;10092:9;10085:17;10081:45;10078:71;;;10129:18;;:::i;:::-;-1:-1:-1;10169:9:1;;10016:168::o;10189:135::-;10228:3;-1:-1:-1;;10249:17:1;;10246:43;;;10269:18;;:::i;:::-;-1:-1:-1;10316:1:1;10305:13;;10189:135::o;11040:184::-;11110:6;11163:2;11151:9;11142:7;11138:23;11134:32;11131:52;;;11179:1;11176;11169:12;11131:52;-1:-1:-1;11202:16:1;;11040:184;-1:-1:-1;11040:184:1:o;11508:245::-;11575:6;11628:2;11616:9;11607:7;11603:23;11599:32;11596:52;;;11644:1;11641;11634:12;11596:52;11676:9;11670:16;11695:28;11717:5;11695:28;:::i;12943:217::-;12983:1;13009;12999:132;;13053:10;13048:3;13044:20;13041:1;13034:31;13088:4;13085:1;13078:15;13116:4;13113:1;13106:15;12999:132;-1:-1:-1;13145:9:1;;12943:217::o;15431:401::-;15633:2;15615:21;;;15672:2;15652:18;;;15645:30;15711:34;15706:2;15691:18;;15684:62;-1:-1:-1;;;15777:2:1;15762:18;;15755:35;15822:3;15807:19;;15431:401::o;15837:399::-;16039:2;16021:21;;;16078:2;16058:18;;;16051:30;16117:34;16112:2;16097:18;;16090:62;-1:-1:-1;;;16183:2:1;16168:18;;16161:33;16226:3;16211:19;;15837:399::o;16950:125::-;16990:4;17018:1;17015;17012:8;17009:34;;;17023:18;;:::i;:::-;-1:-1:-1;17060:9:1;;16950:125::o;17619:251::-;17689:6;17742:2;17730:9;17721:7;17717:23;17713:32;17710:52;;;17758:1;17755;17748:12;17710:52;17790:9;17784:16;17809:31;17834:5;17809:31;:::i;17875:980::-;18137:4;18185:3;18174:9;18170:19;18216:6;18205:9;18198:25;18242:2;18280:6;18275:2;18264:9;18260:18;18253:34;18323:3;18318:2;18307:9;18303:18;18296:31;18347:6;18382;18376:13;18413:6;18405;18398:22;18451:3;18440:9;18436:19;18429:26;;18490:2;18482:6;18478:15;18464:29;;18511:1;18521:195;18535:6;18532:1;18529:13;18521:195;;;18600:13;;-1:-1:-1;;;;;18596:39:1;18584:52;;18691:15;;;;18656:12;;;;18632:1;18550:9;18521:195;;;-1:-1:-1;;;;;;;18772:32:1;;;;18767:2;18752:18;;18745:60;-1:-1:-1;;;18836:3:1;18821:19;18814:35;18733:3;17875:980;-1:-1:-1;;;17875:980:1:o;19472:306::-;19560:6;19568;19576;19629:2;19617:9;19608:7;19604:23;19600:32;19597:52;;;19645:1;19642;19635:12;19597:52;19674:9;19668:16;19658:26;;19724:2;19713:9;19709:18;19703:25;19693:35;;19768:2;19757:9;19753:18;19747:25;19737:35;;19472:306;;;;;:::o

Swarm Source

ipfs://ffe7f134f5f104b0f87ba05d018df82b8b95841ec8dd8aff462a983c488f9004

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.