ETH Price: $3,439.07 (+7.74%)
Gas: 13 Gwei

Token

BART INU (BARTINU)
 

Overview

Max Total Supply

100,000,000 BARTINU

Holders

177

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,676.502839896113187796 BARTINU

Value
$0.00
0x6ea336f5bc82340a303b2b3216108d128164bfe0
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:
BARTINU

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-11
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

abstract 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() public 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;
    }
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, 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");

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

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

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 public  DevFeeOnBuy;
    uint256 public  DevFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 public maxFee;

    address public  marketingWallet;
    address public  DevWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event DevWalletChanged(address DevWallet);
    event UpdateBuyFees(uint256 marketingFeeOnBuy, uint256 DevFeeOnBuy);
    event UpdateSellFees(uint256 marketingFeeOnSell, uint256 DevFeeOnSell);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapAndSendDev(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("BART INU", "BARTINU") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        marketingFeeOnBuy  = 0;
        marketingFeeOnSell = 0;

        DevFeeOnBuy  = 0;
        DevFeeOnSell = 0;

        maxFee             = 25;

        _totalFeesOnBuy    = marketingFeeOnBuy + DevFeeOnBuy;
        _totalFeesOnSell   =  marketingFeeOnSell + DevFeeOnSell;

        marketingWallet = 0xB230adf185611a9E712B30d01f18e1Df1899ab1A;
        DevWallet = 0x2F9743e593C95fB85ab9Bad0F6F2FbEC912b9A84;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[DevWallet] = true;

        _mint(owner(), 100_000_000 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    // FEE SYSTEM

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateBuyFees(uint256 _marketingFeeOnBuy, uint256 _DevFeeOnBuy) external onlyOwner {
        marketingFeeOnBuy = _marketingFeeOnBuy;
        DevFeeOnBuy = _DevFeeOnBuy;

        _totalFeesOnBuy   = marketingFeeOnBuy + DevFeeOnBuy;

        require(_totalFeesOnBuy + _totalFeesOnSell <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(marketingFeeOnBuy, DevFeeOnBuy);
    }

    function updateSellFees(uint256 _marketingFeeOnSell, uint256 _DevFeeOnSell) external onlyOwner {
        marketingFeeOnSell = _marketingFeeOnSell;
        DevFeeOnSell = _DevFeeOnSell;

        _totalFeesOnSell   = marketingFeeOnSell + DevFeeOnSell;

        require(_totalFeesOnBuy + _totalFeesOnSell <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(marketingFeeOnSell, DevFeeOnSell);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    function changeDevWallet(address _DevWallet) external onlyOwner{
        require(_DevWallet != DevWallet,"Marketing wallet is already that address");
        require(_DevWallet != address(0),"Marketing wallet cannot be the zero address");
        DevWallet = _DevWallet;

        emit DevWalletChanged(DevWallet);
    }
    
    // TRANSFER SYSTEM

    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;

            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;
            uint256 DevShare = DevFeeOnBuy + DevFeeOnSell;
            
            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendMarketing(marketingTokens);
            }

            if (DevShare > 0) {
                uint256 DevTokens = contractTokenBalance * DevShare / totalFee;
                swapAndSendDev(DevTokens);
            }                   

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

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

    // SWAP SYSTEM

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uint256 newBalance = address(this).balance - initialBalance;

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function swapAndSendDev(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uint256 newBalance = address(this).balance - initialBalance;

        payable(DevWallet).sendValue(newBalance);

        emit SwapAndSendDev(tokenAmount, newBalance);
    }
}

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":"address","name":"DevWallet","type":"address"}],"name":"DevWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendDev","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"DevFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"DevFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"inputs":[],"name":"DevFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_DevWallet","type":"address"}],"name":"changeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","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":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_DevFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_DevFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051806040016040528060088152602001674241525420494e5560c01b8152506040518060400160405280600781526020016642415254494e5560c81b81525081600390816200006491906200073f565b5060046200007382826200073f565b5050506000620000886200048160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600046603803620000fd57507310ed43c718714eb63d5aa57b78b54704e256024e62000159565b4660610362000122575073d99d1c33f9fc3444f8101754abc46c52416550d162000159565b4660011480620001325750466005145b15620001545750737a250d5630b4cf539739df2c5dacb4c659f2488d62000159565b600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c591906200080b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023991906200080b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000287573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ad91906200080b565b600680546001600160a01b038086166001600160a01b031992831681179093556007805491851691909216179055909150620002ee90309060001962000485565b60006009819055600a819055600b819055600c8190556019600f5562000315908062000853565b600d55600c54600a546200032a919062000853565b600e55601080546001600160a01b031990811673b230adf185611a9e712b30d01f18e1df1899ab1a1790915560118054909116732f9743e593c95fb85ab9bad0f6f2fbec912b9a841790556001600860006200038e6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548516600190811790915530845282842080548616821790556010548216845282842080548616821790556011549091168352912080549092161790556200045b620004376005546001600160a01b031690565b620004456012600a6200096c565b62000455906305f5e1006200097d565b620005b1565b6113886200046860025490565b62000474919062000997565b60125550620009ba915050565b3390565b6001600160a01b038316620004ed5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004e4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006095760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e4565b80600260008282546200061d919062000853565b90915550506001600160a01b038216600090815260208190526040812080548392906200064c90849062000853565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006c657607f821691505b602082108103620006e757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069657600081815260208120601f850160051c81016020861015620007165750805b601f850160051c820191505b81811015620007375782815560010162000722565b505050505050565b81516001600160401b038111156200075b576200075b6200069b565b62000773816200076c8454620006b1565b84620006ed565b602080601f831160018114620007ab5760008415620007925750858301515b600019600386901b1c1916600185901b17855562000737565b600085815260208120601f198616915b82811015620007dc57888601518255948401946001909101908401620007bb565b5085821015620007fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200081e57600080fd5b81516001600160a01b03811681146200083657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156200086957620008696200083d565b92915050565b600181815b80851115620008b05781600019048211156200089457620008946200083d565b80851615620008a257918102915b93841c939080029062000874565b509250929050565b600082620008c95750600162000869565b81620008d85750600062000869565b8160018114620008f15760028114620008fc576200091c565b600191505062000869565b60ff8411156200091057620009106200083d565b50506001821b62000869565b5060208310610133831016604e8410600b841016171562000941575081810a62000869565b6200094d83836200086f565b80600019048211156200096457620009646200083d565b029392505050565b60006200083660ff841683620008b8565b80820281158282048414176200086957620008696200083d565b600082620009b557634e487b7160e01b600052601260045260246000fd5b500490565b611ea880620009ca6000396000f3fe6080604052600436106101e75760003560e01c8063819ea62311610102578063bd8d821111610095578063dd62ed3e11610064578063dd62ed3e14610588578063e2f45605146105ce578063f2fde38b146105e4578063f9d0831a1461060457600080fd5b8063bd8d82111461051c578063c02466681461053c578063d63bd5b81461055c578063dc4c7dbc1461057257600080fd5b8063a9059cbb116100d1578063a9059cbb1461049c578063afa4f3b2146104bc578063b115e4df146104dc578063bb85c6d1146104fc57600080fd5b8063819ea623146104335780638da5cb5b1461044957806395d89b4114610467578063a457c2d71461047c57600080fd5b8063395093511161017a57806366ca9b831161014957806366ca9b83146103a857806370a08231146103c8578063715018a6146103fe57806375f0a8741461041357600080fd5b8063395093511461031957806349bd5a5e146103395780634fbee193146103595780635fc2e5961461039257600080fd5b80631694505e116101b65780631694505e1461029057806318160ddd146102c857806323b872dd146102dd578063313ce567146102fd57600080fd5b806301f59d16146101f357806302dbd8f81461021c57806306fdde031461023e578063095ea7b31461026057600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b50610209600f5481565b6040519081526020015b60405180910390f35b34801561022857600080fd5b5061023c6102373660046119b1565b610624565b005b34801561024a57600080fd5b506102536106e9565b60405161021391906119d3565b34801561026c57600080fd5b5061028061027b366004611a36565b61077b565b6040519015158152602001610213565b34801561029c57600080fd5b506006546102b0906001600160a01b031681565b6040516001600160a01b039091168152602001610213565b3480156102d457600080fd5b50600254610209565b3480156102e957600080fd5b506102806102f8366004611a62565b610792565b34801561030957600080fd5b5060405160128152602001610213565b34801561032557600080fd5b50610280610334366004611a36565b610843565b34801561034557600080fd5b506007546102b0906001600160a01b031681565b34801561036557600080fd5b50610280610374366004611aa3565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561039e57600080fd5b5061020960095481565b3480156103b457600080fd5b5061023c6103c33660046119b1565b61087f565b3480156103d457600080fd5b506102096103e3366004611aa3565b6001600160a01b031660009081526020819052604090205490565b34801561040a57600080fd5b5061023c610930565b34801561041f57600080fd5b506010546102b0906001600160a01b031681565b34801561043f57600080fd5b50610209600b5481565b34801561045557600080fd5b506005546001600160a01b03166102b0565b34801561047357600080fd5b506102536109a4565b34801561048857600080fd5b50610280610497366004611a36565b6109b3565b3480156104a857600080fd5b506102806104b7366004611a36565b610a4c565b3480156104c857600080fd5b5061023c6104d7366004611ac7565b610a59565b3480156104e857600080fd5b506011546102b0906001600160a01b031681565b34801561050857600080fd5b5061023c610517366004611aa3565b610b4a565b34801561052857600080fd5b5061023c610537366004611aa3565b610c16565b34801561054857600080fd5b5061023c610557366004611aee565b610ce2565b34801561056857600080fd5b50610209600c5481565b34801561057e57600080fd5b50610209600a5481565b34801561059457600080fd5b506102096105a3366004611b27565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105da57600080fd5b5061020960125481565b3480156105f057600080fd5b5061023c6105ff366004611aa3565b610dee565b34801561061057600080fd5b5061023c61061f366004611aa3565b610ed9565b6005546001600160a01b031633146106575760405162461bcd60e51b815260040161064e90611b55565b60405180910390fd5b600a829055600c81905561066b8183611ba0565b600e819055600f54600d54909161068191611ba0565b111561069f5760405162461bcd60e51b815260040161064e90611bb3565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c546040516106dd929190918252602082015260400190565b60405180910390a15050565b6060600380546106f890611bf7565b80601f016020809104026020016040519081016040528092919081815260200182805461072490611bf7565b80156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b6000610788338484611083565b5060015b92915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461082d57828110156108205760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161064e565b61082d8533858403611083565b6108388585856111a7565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161078891859061087a908690611ba0565b611083565b6005546001600160a01b031633146108a95760405162461bcd60e51b815260040161064e90611b55565b6009829055600b8190556108bd8183611ba0565b600d819055600f54600e5490916108d49190611ba0565b11156108f25760405162461bcd60e51b815260040161064e90611bb3565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b546040516106dd929190918252602082015260400190565b6005546001600160a01b0316331461095a5760405162461bcd60e51b815260040161064e90611b55565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546106f890611bf7565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610a355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161064e565b610a423385858403611083565b5060019392505050565b60006107883384846111a7565b6005546001600160a01b03163314610a835760405162461bcd60e51b815260040161064e90611b55565b620f4240610a9060025490565b610a9a9190611c31565b8111610b0e5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900606482015260840161064e565b60128190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145906020015b60405180910390a150565b6005546001600160a01b03163314610b745760405162461bcd60e51b815260040161064e90611b55565b6010546001600160a01b0390811690821603610ba25760405162461bcd60e51b815260040161064e90611c53565b6001600160a01b038116610bc85760405162461bcd60e51b815260040161064e90611c9b565b601080546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610b3f565b6005546001600160a01b03163314610c405760405162461bcd60e51b815260040161064e90611b55565b6011546001600160a01b0390811690821603610c6e5760405162461bcd60e51b815260040161064e90611c53565b6001600160a01b038116610c945760405162461bcd60e51b815260040161064e90611c9b565b601180546001600160a01b0319166001600160a01b0383169081179091556040519081527f268c00f4ec08b34fdde24b52e47a09d62f3f3837eb3b8ac7206cefb3bb5e534590602001610b3f565b6005546001600160a01b03163314610d0c5760405162461bcd60e51b815260040161064e90611b55565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610d8f5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b606482015260840161064e565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610e185760405162461bcd60e51b815260040161064e90611b55565b6001600160a01b038116610e7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f035760405162461bcd60e51b815260040161064e90611b55565b306001600160a01b03821603610f815760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000606482015260840161064e565b6001600160a01b038116610f9c57610f9933476113fe565b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110099190611ce6565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107d9190611cff565b50505050565b6001600160a01b0383166110e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161064e565b6001600160a01b0382166111465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161064e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111cd5760405162461bcd60e51b815260040161064e90611d1c565b6001600160a01b0382166111f35760405162461bcd60e51b815260040161064e90611d61565b8060000361120c5761120783836000611517565b505050565b3060009081526020819052604090205460125481108015908190611233575060135460ff16155b801561124c57506007546001600160a01b038581169116145b801561126757506000600e54600d546112659190611ba0565b115b15611317576013805460ff19166001179055600e54600d5460009161128b91611ba0565b90506000600a5460095461129f9190611ba0565b90506000600c54600b546112b39190611ba0565b905081156112df576000836112c88488611da4565b6112d29190611c31565b90506112dd8161166b565b505b8015611309576000836112f28388611da4565b6112fc9190611c31565b905061130781611813565b505b50506013805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff168061135657506001600160a01b03851660009081526008602052604090205460ff165b80611363575060135460ff165b15611370575060006113b2565b6007546001600160a01b039081169087160361138f5750600d546113b2565b6007546001600160a01b03908116908616036113ae5750600e546113b2565b5060005b80156113eb57600060646113c68387611da4565b6113d09190611c31565b90506113dc8186611dbb565b94506113e9873083611517565b505b6113f6868686611517565b505050505050565b8047101561144e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161064e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461149b576040519150601f19603f3d011682016040523d82523d6000602084013e6114a0565b606091505b50509050806112075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161064e565b6001600160a01b03831661153d5760405162461bcd60e51b815260040161064e90611d1c565b6001600160a01b0382166115635760405162461bcd60e51b815260040161064e90611d61565b6001600160a01b038316600090815260208190526040902054818110156115db5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161064e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611612908490611ba0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165e91815260200190565b60405180910390a361107d565b6040805160028082526060820183524792600092919060208301908036833701905050905030816000815181106116a4576116a4611dce565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117219190611de4565b8160018151811061173457611734611dce565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac9479061177a908690600090869030904290600401611e01565b600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b50505050600082476117ba9190611dbb565b6010549091506117d3906001600160a01b0316826113fe565b60408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299991015b60405180910390a150505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061184c5761184c611dce565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c99190611de4565b816001815181106118dc576118dc611dce565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790611922908690600090869030904290600401611e01565b600060405180830381600087803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b50505050600082476119629190611dbb565b60115490915061197b906001600160a01b0316826113fe565b60408051858152602081018390527fce3ae5b5e5482d600e687ca5dc1374610cd5d336d7a4ad39b99f9a8383410da89101611805565b600080604083850312156119c457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611a00578581018301518582016040015282016119e4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f9957600080fd5b60008060408385031215611a4957600080fd5b8235611a5481611a21565b946020939093013593505050565b600080600060608486031215611a7757600080fd5b8335611a8281611a21565b92506020840135611a9281611a21565b929592945050506040919091013590565b600060208284031215611ab557600080fd5b8135611ac081611a21565b9392505050565b600060208284031215611ad957600080fd5b5035919050565b8015158114610f9957600080fd5b60008060408385031215611b0157600080fd5b8235611b0c81611a21565b91506020830135611b1c81611ae0565b809150509250929050565b60008060408385031215611b3a57600080fd5b8235611b4581611a21565b91506020830135611b1c81611a21565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561078c5761078c611b8a565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b600181811c90821680611c0b57607f821691505b602082108103611c2b57634e487b7160e01b600052602260045260246000fd5b50919050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604082015267206164647265737360c01b606082015260800190565b6020808252602b908201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60408201526a65726f206164647265737360a81b606082015260800190565b600060208284031215611cf857600080fd5b5051919050565b600060208284031215611d1157600080fd5b8151611ac081611ae0565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761078c5761078c611b8a565b8181038181111561078c5761078c611b8a565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611df657600080fd5b8151611ac081611a21565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e515784516001600160a01b031683529383019391830191600101611e2c565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220480aacca82fe011a40b29f28975c1e8e018466bd97441a83c4bc65903a6c6f1b64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c8063819ea62311610102578063bd8d821111610095578063dd62ed3e11610064578063dd62ed3e14610588578063e2f45605146105ce578063f2fde38b146105e4578063f9d0831a1461060457600080fd5b8063bd8d82111461051c578063c02466681461053c578063d63bd5b81461055c578063dc4c7dbc1461057257600080fd5b8063a9059cbb116100d1578063a9059cbb1461049c578063afa4f3b2146104bc578063b115e4df146104dc578063bb85c6d1146104fc57600080fd5b8063819ea623146104335780638da5cb5b1461044957806395d89b4114610467578063a457c2d71461047c57600080fd5b8063395093511161017a57806366ca9b831161014957806366ca9b83146103a857806370a08231146103c8578063715018a6146103fe57806375f0a8741461041357600080fd5b8063395093511461031957806349bd5a5e146103395780634fbee193146103595780635fc2e5961461039257600080fd5b80631694505e116101b65780631694505e1461029057806318160ddd146102c857806323b872dd146102dd578063313ce567146102fd57600080fd5b806301f59d16146101f357806302dbd8f81461021c57806306fdde031461023e578063095ea7b31461026057600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b50610209600f5481565b6040519081526020015b60405180910390f35b34801561022857600080fd5b5061023c6102373660046119b1565b610624565b005b34801561024a57600080fd5b506102536106e9565b60405161021391906119d3565b34801561026c57600080fd5b5061028061027b366004611a36565b61077b565b6040519015158152602001610213565b34801561029c57600080fd5b506006546102b0906001600160a01b031681565b6040516001600160a01b039091168152602001610213565b3480156102d457600080fd5b50600254610209565b3480156102e957600080fd5b506102806102f8366004611a62565b610792565b34801561030957600080fd5b5060405160128152602001610213565b34801561032557600080fd5b50610280610334366004611a36565b610843565b34801561034557600080fd5b506007546102b0906001600160a01b031681565b34801561036557600080fd5b50610280610374366004611aa3565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561039e57600080fd5b5061020960095481565b3480156103b457600080fd5b5061023c6103c33660046119b1565b61087f565b3480156103d457600080fd5b506102096103e3366004611aa3565b6001600160a01b031660009081526020819052604090205490565b34801561040a57600080fd5b5061023c610930565b34801561041f57600080fd5b506010546102b0906001600160a01b031681565b34801561043f57600080fd5b50610209600b5481565b34801561045557600080fd5b506005546001600160a01b03166102b0565b34801561047357600080fd5b506102536109a4565b34801561048857600080fd5b50610280610497366004611a36565b6109b3565b3480156104a857600080fd5b506102806104b7366004611a36565b610a4c565b3480156104c857600080fd5b5061023c6104d7366004611ac7565b610a59565b3480156104e857600080fd5b506011546102b0906001600160a01b031681565b34801561050857600080fd5b5061023c610517366004611aa3565b610b4a565b34801561052857600080fd5b5061023c610537366004611aa3565b610c16565b34801561054857600080fd5b5061023c610557366004611aee565b610ce2565b34801561056857600080fd5b50610209600c5481565b34801561057e57600080fd5b50610209600a5481565b34801561059457600080fd5b506102096105a3366004611b27565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105da57600080fd5b5061020960125481565b3480156105f057600080fd5b5061023c6105ff366004611aa3565b610dee565b34801561061057600080fd5b5061023c61061f366004611aa3565b610ed9565b6005546001600160a01b031633146106575760405162461bcd60e51b815260040161064e90611b55565b60405180910390fd5b600a829055600c81905561066b8183611ba0565b600e819055600f54600d54909161068191611ba0565b111561069f5760405162461bcd60e51b815260040161064e90611bb3565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c546040516106dd929190918252602082015260400190565b60405180910390a15050565b6060600380546106f890611bf7565b80601f016020809104026020016040519081016040528092919081815260200182805461072490611bf7565b80156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b6000610788338484611083565b5060015b92915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461082d57828110156108205760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161064e565b61082d8533858403611083565b6108388585856111a7565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161078891859061087a908690611ba0565b611083565b6005546001600160a01b031633146108a95760405162461bcd60e51b815260040161064e90611b55565b6009829055600b8190556108bd8183611ba0565b600d819055600f54600e5490916108d49190611ba0565b11156108f25760405162461bcd60e51b815260040161064e90611bb3565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b546040516106dd929190918252602082015260400190565b6005546001600160a01b0316331461095a5760405162461bcd60e51b815260040161064e90611b55565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546106f890611bf7565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610a355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161064e565b610a423385858403611083565b5060019392505050565b60006107883384846111a7565b6005546001600160a01b03163314610a835760405162461bcd60e51b815260040161064e90611b55565b620f4240610a9060025490565b610a9a9190611c31565b8111610b0e5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900606482015260840161064e565b60128190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145906020015b60405180910390a150565b6005546001600160a01b03163314610b745760405162461bcd60e51b815260040161064e90611b55565b6010546001600160a01b0390811690821603610ba25760405162461bcd60e51b815260040161064e90611c53565b6001600160a01b038116610bc85760405162461bcd60e51b815260040161064e90611c9b565b601080546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610b3f565b6005546001600160a01b03163314610c405760405162461bcd60e51b815260040161064e90611b55565b6011546001600160a01b0390811690821603610c6e5760405162461bcd60e51b815260040161064e90611c53565b6001600160a01b038116610c945760405162461bcd60e51b815260040161064e90611c9b565b601180546001600160a01b0319166001600160a01b0383169081179091556040519081527f268c00f4ec08b34fdde24b52e47a09d62f3f3837eb3b8ac7206cefb3bb5e534590602001610b3f565b6005546001600160a01b03163314610d0c5760405162461bcd60e51b815260040161064e90611b55565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610d8f5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b606482015260840161064e565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610e185760405162461bcd60e51b815260040161064e90611b55565b6001600160a01b038116610e7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f035760405162461bcd60e51b815260040161064e90611b55565b306001600160a01b03821603610f815760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000606482015260840161064e565b6001600160a01b038116610f9c57610f9933476113fe565b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110099190611ce6565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107d9190611cff565b50505050565b6001600160a01b0383166110e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161064e565b6001600160a01b0382166111465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161064e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111cd5760405162461bcd60e51b815260040161064e90611d1c565b6001600160a01b0382166111f35760405162461bcd60e51b815260040161064e90611d61565b8060000361120c5761120783836000611517565b505050565b3060009081526020819052604090205460125481108015908190611233575060135460ff16155b801561124c57506007546001600160a01b038581169116145b801561126757506000600e54600d546112659190611ba0565b115b15611317576013805460ff19166001179055600e54600d5460009161128b91611ba0565b90506000600a5460095461129f9190611ba0565b90506000600c54600b546112b39190611ba0565b905081156112df576000836112c88488611da4565b6112d29190611c31565b90506112dd8161166b565b505b8015611309576000836112f28388611da4565b6112fc9190611c31565b905061130781611813565b505b50506013805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff168061135657506001600160a01b03851660009081526008602052604090205460ff165b80611363575060135460ff165b15611370575060006113b2565b6007546001600160a01b039081169087160361138f5750600d546113b2565b6007546001600160a01b03908116908616036113ae5750600e546113b2565b5060005b80156113eb57600060646113c68387611da4565b6113d09190611c31565b90506113dc8186611dbb565b94506113e9873083611517565b505b6113f6868686611517565b505050505050565b8047101561144e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161064e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461149b576040519150601f19603f3d011682016040523d82523d6000602084013e6114a0565b606091505b50509050806112075760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161064e565b6001600160a01b03831661153d5760405162461bcd60e51b815260040161064e90611d1c565b6001600160a01b0382166115635760405162461bcd60e51b815260040161064e90611d61565b6001600160a01b038316600090815260208190526040902054818110156115db5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161064e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611612908490611ba0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165e91815260200190565b60405180910390a361107d565b6040805160028082526060820183524792600092919060208301908036833701905050905030816000815181106116a4576116a4611dce565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117219190611de4565b8160018151811061173457611734611dce565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac9479061177a908690600090869030904290600401611e01565b600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b50505050600082476117ba9190611dbb565b6010549091506117d3906001600160a01b0316826113fe565b60408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299991015b60405180910390a150505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061184c5761184c611dce565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c99190611de4565b816001815181106118dc576118dc611dce565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790611922908690600090869030904290600401611e01565b600060405180830381600087803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b50505050600082476119629190611dbb565b60115490915061197b906001600160a01b0316826113fe565b60408051858152602081018390527fce3ae5b5e5482d600e687ca5dc1374610cd5d336d7a4ad39b99f9a8383410da89101611805565b600080604083850312156119c457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015611a00578581018301518582016040015282016119e4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f9957600080fd5b60008060408385031215611a4957600080fd5b8235611a5481611a21565b946020939093013593505050565b600080600060608486031215611a7757600080fd5b8335611a8281611a21565b92506020840135611a9281611a21565b929592945050506040919091013590565b600060208284031215611ab557600080fd5b8135611ac081611a21565b9392505050565b600060208284031215611ad957600080fd5b5035919050565b8015158114610f9957600080fd5b60008060408385031215611b0157600080fd5b8235611b0c81611a21565b91506020830135611b1c81611ae0565b809150509250929050565b60008060408385031215611b3a57600080fd5b8235611b4581611a21565b91506020830135611b1c81611a21565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561078c5761078c611b8a565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b600181811c90821680611c0b57607f821691505b602082108103611c2b57634e487b7160e01b600052602260045260246000fd5b50919050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604082015267206164647265737360c01b606082015260800190565b6020808252602b908201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60408201526a65726f206164647265737360a81b606082015260800190565b600060208284031215611cf857600080fd5b5051919050565b600060208284031215611d1157600080fd5b8151611ac081611ae0565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761078c5761078c611b8a565b8181038181111561078c5761078c611b8a565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611df657600080fd5b8151611ac081611a21565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e515784516001600160a01b031683529383019391830191600101611e2c565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220480aacca82fe011a40b29f28975c1e8e018466bd97441a83c4bc65903a6c6f1b64736f6c63430008110033

Deployed Bytecode Sourcemap

24611:9210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25076:21;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;25076:21:0;;;;;;;;29055:432;;;;;;;;;;-1:-1:-1;29055:432:0;;;;;:::i;:::-;;:::i;:::-;;19896:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20810:169::-;;;;;;;;;;-1:-1:-1;20810:169:0;;;;;:::i;:::-;;:::i;:::-;;;1623:14:1;;1616:22;1598:41;;1586:2;1571:18;20810:169:0;1458:187:1;24695:41:0;;;;;;;;;;-1:-1:-1;24695:41:0;;;;-1:-1:-1;;;;;24695:41:0;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;24695:41:0;1650:229:1;20217:108:0;;;;;;;;;;-1:-1:-1;20305:12:0;;20217:108;;20987:573;;;;;;;;;;-1:-1:-1;20987:573:0;;;;;:::i;:::-;;:::i;20116:93::-;;;;;;;;;;-1:-1:-1;20116:93:0;;20199:2;2487:36:1;;2475:2;2460:18;20116:93:0;2345:184:1;21568:215:0;;;;;;;;;;-1:-1:-1;21568:215:0;;;;;:::i;:::-;;:::i;24743:29::-;;;;;;;;;;-1:-1:-1;24743:29:0;;;;-1:-1:-1;;;;;24743:29:0;;;28495:125;;;;;;;;;;-1:-1:-1;28495:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;28584:28:0;28560:4;28584:28;;;:19;:28;;;;;;;;;28495:125;24843:33;;;;;;;;;;;;;;;;28628:419;;;;;;;;;;-1:-1:-1;28628:419:0;;;;;:::i;:::-;;:::i;20333:127::-;;;;;;;;;;-1:-1:-1;20333:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;20434:18:0;20407:7;20434:18;;;;;;;;;;;;20333:127;19083:148;;;;;;;;;;;;;:::i;25106:31::-;;;;;;;;;;-1:-1:-1;25106:31:0;;;;-1:-1:-1;;;;;25106:31:0;;;24926:27;;;;;;;;;;;;;;;;18869:79;;;;;;;;;;-1:-1:-1;18934:6:0;;-1:-1:-1;;;;;18934:6:0;18869:79;;20004:104;;;;;;;;;;;;;:::i;21791:413::-;;;;;;;;;;-1:-1:-1;21791:413:0;;;;;:::i;:::-;;:::i;20468:175::-;;;;;;;;;;-1:-1:-1;20468:175:0;;;;;:::i;:::-;;:::i;32222:304::-;;;;;;;;;;-1:-1:-1;32222:304:0;;;;;:::i;:::-;;:::i;25144:25::-;;;;;;;;;;-1:-1:-1;25144:25:0;;;;-1:-1:-1;;;;;25144:25:0;;;29495:379;;;;;;;;;;-1:-1:-1;29495:379:0;;;;;:::i;:::-;;:::i;29882:325::-;;;;;;;;;;-1:-1:-1;29882:325:0;;;;;:::i;:::-;;:::i;28197:290::-;;;;;;;;;;-1:-1:-1;28197:290:0;;;;;:::i;:::-;;:::i;24960:28::-;;;;;;;;;;;;;;;;24883:34;;;;;;;;;;;;;;;;20651:151;;;;;;;;;;-1:-1:-1;20651:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;20767:18:0;;;20740:7;20767:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20651:151;25178:34;;;;;;;;;;;;;;;;19239:244;;;;;;;;;;-1:-1:-1;19239:244:0;;;;;:::i;:::-;;:::i;27703:465::-;;;;;;;;;;-1:-1:-1;27703:465:0;;;;;:::i;:::-;;:::i;29055:432::-;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;;;;;;;;;29161:18:::1;:40:::0;;;29212:12:::1;:28:::0;;;29274:33:::1;29227:13:::0;29182:19;29274:33:::1;:::i;:::-;29253:16;:54:::0;;;29366:6:::1;::::0;29328:15:::1;::::0;29366:6;;29328:34:::1;::::0;::::1;:::i;:::-;:44;;29320:93;;;;-1:-1:-1::0;;;29320:93:0::1;;;;;;;:::i;:::-;29431:48;29446:18;;29466:12;;29431:48;;;;;;5284:25:1::0;;;5340:2;5325:18;;5318:34;5272:2;5257:18;;5110:248;29431:48:0::1;;;;;;;;29055:432:::0;;:::o;19896:100::-;19950:13;19983:5;19976:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:100;:::o;20810:169::-;20893:4;20910:39;18272:10;20933:7;20942:6;20910:8;:39::i;:::-;-1:-1:-1;20967:4:0;20810:169;;;;;:::o;20987:573::-;-1:-1:-1;;;;;21171:19:0;;21127:4;21171:19;;;:11;:19;;;;;;;;18272:10;21171:33;;;;;;;;-1:-1:-1;;21219:37:0;;21215:265;;21301:6;21281:16;:26;;21273:79;;;;-1:-1:-1;;;21273:79:0;;5950:2:1;21273:79:0;;;5932:21:1;5989:2;5969:18;;;5962:30;6028:34;6008:18;;;6001:62;-1:-1:-1;;;6079:18:1;;;6072:38;6127:19;;21273:79:0;5748:404:1;21273:79:0;21396:57;21405:6;18272:10;21446:6;21427:16;:25;21396:8;:57::i;:::-;21492:36;21502:6;21510:9;21521:6;21492:9;:36::i;:::-;-1:-1:-1;21548:4:0;;20987:573;-1:-1:-1;;;;20987:573:0:o;21568:215::-;18272:10;21656:4;21705:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21705:34:0;;;;;;;;;;21656:4;;21673:80;;21696:7;;21705:47;;21742:10;;21705:47;:::i;:::-;21673:8;:80::i;28628:419::-;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;28731:17:::1;:38:::0;;;28780:11:::1;:26:::0;;;28839:31:::1;28794:12:::0;28751:18;28839:31:::1;:::i;:::-;28819:15;:51:::0;;;28929:6:::1;::::0;28909:16:::1;::::0;28929:6;;28891:34:::1;::::0;28909:16;28891:34:::1;:::i;:::-;:44;;28883:93;;;;-1:-1:-1::0;;;28883:93:0::1;;;;;;;:::i;:::-;28994:45;29008:17;;29027:11;;28994:45;;;;;;5284:25:1::0;;;5340:2;5325:18;;5318:34;5272:2;5257:18;;5110:248;19083:148:0;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;19174:6:::1;::::0;19153:40:::1;::::0;19190:1:::1;::::0;-1:-1:-1;;;;;19174:6:0::1;::::0;19153:40:::1;::::0;19190:1;;19153:40:::1;19204:6;:19:::0;;-1:-1:-1;;;;;;19204:19:0::1;::::0;;19083:148::o;20004:104::-;20060:13;20093:7;20086:14;;;;;:::i;21791:413::-;18272:10;21884:4;21928:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21928:34:0;;;;;;;;;;21981:35;;;;21973:85;;;;-1:-1:-1;;;21973:85:0;;6359:2:1;21973:85:0;;;6341:21:1;6398:2;6378:18;;;6371:30;6437:34;6417:18;;;6410:62;-1:-1:-1;;;6488:18:1;;;6481:35;6533:19;;21973:85:0;6157:401:1;21973:85:0;22094:67;18272:10;22117:7;22145:15;22126:16;:34;22094:8;:67::i;:::-;-1:-1:-1;22192:4:0;;21791:413;-1:-1:-1;;;21791:413:0:o;20468:175::-;20554:4;20571:42;18272:10;20595:9;20606:6;20571:9;:42::i;32222:304::-;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;32337:9:::1;32321:13;20305:12:::0;;;20217:108;32321:13:::1;:25;;;;:::i;:::-;32309:9;:37;32301:113;;;::::0;-1:-1:-1;;;32301:113:0;;6987:2:1;32301:113:0::1;::::0;::::1;6969:21:1::0;7026:2;7006:18;;;6999:30;7065:34;7045:18;;;7038:62;7136:33;7116:18;;;7109:61;7187:19;;32301:113:0::1;6785:427:1::0;32301:113:0::1;32425:18;:30:::0;;;32473:45:::1;::::0;160:25:1;;;32473:45:0::1;::::0;148:2:1;133:18;32473:45:0::1;;;;;;;;32222:304:::0;:::o;29495:379::-;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;29609:15:::1;::::0;-1:-1:-1;;;;;29609:15:0;;::::1;29589:35:::0;;::::1;::::0;29581:87:::1;;;;-1:-1:-1::0;;;29581:87:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29687:30:0;::::1;29679:85;;;;-1:-1:-1::0;;;29679:85:0::1;;;;;;;:::i;:::-;29775:15;:34:::0;;-1:-1:-1;;;;;;29775:34:0::1;-1:-1:-1::0;;;;;29775:34:0;::::1;::::0;;::::1;::::0;;;29827:39:::1;::::0;1822:51:1;;;29827:39:0::1;::::0;1810:2:1;1795:18;29827:39:0::1;1650:229:1::0;29882:325:0;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;29978:9:::1;::::0;-1:-1:-1;;;;;29978:9:0;;::::1;29964:23:::0;;::::1;::::0;29956:75:::1;;;;-1:-1:-1::0;;;29956:75:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30050:24:0;::::1;30042:79;;;;-1:-1:-1::0;;;30042:79:0::1;;;;;;;:::i;:::-;30132:9;:22:::0;;-1:-1:-1;;;;;;30132:22:0::1;-1:-1:-1::0;;;;;30132:22:0;::::1;::::0;;::::1;::::0;;;30172:27:::1;::::0;1822:51:1;;;30172:27:0::1;::::0;1810:2:1;1795:18;30172:27:0::1;1650:229:1::0;28197:290:0;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28291:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;28283:94:::1;;;::::0;-1:-1:-1;;;28283:94:0;;8240:2:1;28283:94:0::1;::::0;::::1;8222:21:1::0;8279:2;8259:18;;;8252:30;8318:34;8298:18;;;8291:62;-1:-1:-1;;;8369:18:1;;;8362:40;8419:19;;28283:94:0::1;8038:406:1::0;28283:94:0::1;-1:-1:-1::0;;;;;28388:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;28388:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28445:34;;1598:41:1;;;28445:34:0::1;::::0;1571:18:1;28445:34:0::1;;;;;;;28197:290:::0;;:::o;19239:244::-;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19328:22:0;::::1;19320:73;;;::::0;-1:-1:-1;;;19320:73:0;;8651:2:1;19320:73:0::1;::::0;::::1;8633:21:1::0;8690:2;8670:18;;;8663:30;8729:34;8709:18;;;8702:62;-1:-1:-1;;;8780:18:1;;;8773:36;8826:19;;19320:73:0::1;8449:402:1::0;19320:73:0::1;19430:6;::::0;19409:38:::1;::::0;-1:-1:-1;;;;;19409:38:0;;::::1;::::0;19430:6:::1;::::0;19409:38:::1;::::0;19430:6:::1;::::0;19409:38:::1;19458:6;:17:::0;;-1:-1:-1;;;;;;19458:17:0::1;-1:-1:-1::0;;;;;19458:17:0;;;::::1;::::0;;;::::1;::::0;;19239:244::o;27703:465::-;18996:6;;-1:-1:-1;;;;;18996:6:0;18272:10;18996:22;18988:67;;;;-1:-1:-1;;;18988:67:0;;;;;;;:::i;:::-;27799:4:::1;-1:-1:-1::0;;;;;27782:22:0;::::1;::::0;27774:90:::1;;;::::0;-1:-1:-1;;;27774:90:0;;9058:2:1;27774:90:0::1;::::0;::::1;9040:21:1::0;9097:2;9077:18;;;9070:30;9136:34;9116:18;;;9109:62;9207:25;9187:18;;;9180:53;9250:19;;27774:90:0::1;8856:419:1::0;27774:90:0::1;-1:-1:-1::0;;;;;27879:21:0;::::1;27875:127;;27917:52;27925:10;27947:21;27917:29;:52::i;:::-;27703:465:::0;:::o;27875:127::-:1;28074:35;::::0;-1:-1:-1;;;28074:35:0;;28103:4:::1;28074:35;::::0;::::1;1822:51:1::0;28039:5:0;;28012:17:::1;::::0;-1:-1:-1;;;;;28074:20:0;::::1;::::0;::::1;::::0;1795:18:1;;28074:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28120:40;::::0;-1:-1:-1;;;28120:40:0;;28140:10:::1;28120:40;::::0;::::1;9643:51:1::0;9710:18;;;9703:34;;;28056:53:0;;-1:-1:-1;;;;;;28120:19:0;::::1;::::0;::::1;::::0;9616:18:1;;28120:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27763:405;;27703:465:::0;:::o;23959:380::-;-1:-1:-1;;;;;24095:19:0;;24087:68;;;;-1:-1:-1;;;24087:68:0;;10200:2:1;24087:68:0;;;10182:21:1;10239:2;10219:18;;;10212:30;10278:34;10258:18;;;10251:62;-1:-1:-1;;;10329:18:1;;;10322:34;10373:19;;24087:68:0;9998:400:1;24087:68:0;-1:-1:-1;;;;;24174:21:0;;24166:68;;;;-1:-1:-1;;;24166:68:0;;10605:2:1;24166:68:0;;;10587:21:1;10644:2;10624:18;;;10617:30;10683:34;10663:18;;;10656:62;-1:-1:-1;;;10734:18:1;;;10727:32;10776:19;;24166:68:0;10403:398:1;24166:68:0;-1:-1:-1;;;;;24247:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24299:32;;160:25:1;;;24299:32:0;;133:18:1;24299:32:0;;;;;;;23959:380;;;:::o;30245:1947::-;-1:-1:-1;;;;;30342:18:0;;30334:68;;;;-1:-1:-1;;;30334:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30421:16:0;;30413:64;;;;-1:-1:-1;;;30413:64:0;;;;;;;:::i;:::-;30501:6;30511:1;30501:11;30497:93;;30529:28;30545:4;30551:2;30555:1;30529:15;:28::i;:::-;30245:1947;;;:::o;30497:93::-;30645:4;30596:28;20434:18;;;;;;;;;;;30703;;30679:42;;;;;;;30738:33;;-1:-1:-1;30763:8:0;;;;30762:9;30738:33;:69;;;;-1:-1:-1;30794:13:0;;-1:-1:-1;;;;;30788:19:0;;;30794:13;;30788:19;30738:69;:124;;;;;30861:1;30842:16;;30824:15;;:34;;;;:::i;:::-;:38;30738:124;30734:836;;;30889:8;:15;;-1:-1:-1;;30889:15:0;30900:4;30889:15;;;30958:16;;30940:15;;30889:8;;30940:34;;;:::i;:::-;30921:53;;30991:22;31036:18;;31016:17;;:38;;;;:::i;:::-;30991:63;;31069:16;31102:12;;31088:11;;:26;;;;:::i;:::-;31069:45;-1:-1:-1;31147:18:0;;31143:189;;31186:23;31252:8;31212:37;31235:14;31212:20;:37;:::i;:::-;:48;;;;:::i;:::-;31186:74;;31279:37;31300:15;31279:20;:37::i;:::-;31167:165;31143:189;31352:12;;31348:159;;31385:17;31439:8;31405:31;31428:8;31405:20;:31;:::i;:::-;:42;;;;:::i;:::-;31385:62;;31466:25;31481:9;31466:14;:25::i;:::-;31366:141;31348:159;-1:-1:-1;;31542:8:0;:16;;-1:-1:-1;;31542:16:0;;;-1:-1:-1;30734:836:0;-1:-1:-1;;;;;31615:25:0;;31582:18;31615:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;31644:23:0;;;;;;:19;:23;;;;;;;;31615:52;:64;;;-1:-1:-1;31671:8:0;;;;31615:64;31611:333;;;-1:-1:-1;31709:1:0;31611:333;;;31740:13;;-1:-1:-1;;;;;31740:13:0;;;31732:21;;;;31728:216;;-1:-1:-1;31783:15:0;;31728:216;;;31826:13;;-1:-1:-1;;;;;31826:13:0;;;31820:19;;;;31816:128;;-1:-1:-1;31869:16:0;;31816:128;;;-1:-1:-1;31931:1:0;31816:128;31960:14;;31956:183;;31991:12;32030:3;32007:19;32016:10;32007:6;:19;:::i;:::-;32006:27;;;;:::i;:::-;31991:42;-1:-1:-1;32057:13:0;31991:42;32057:6;:13;:::i;:::-;32048:22;;32085:42;32101:4;32115;32122;32085:15;:42::i;:::-;31976:163;31956:183;32151:33;32167:4;32173:2;32177:6;32151:15;:33::i;:::-;30323:1869;;;30245:1947;;;:::o;11225:317::-;11340:6;11315:21;:31;;11307:73;;;;-1:-1:-1;;;11307:73:0;;12124:2:1;11307:73:0;;;12106:21:1;12163:2;12143:18;;;12136:30;12202:31;12182:18;;;12175:59;12251:18;;11307:73:0;11922:353:1;11307:73:0;11394:12;11412:9;-1:-1:-1;;;;;11412:14:0;11434:6;11412:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11393:52;;;11464:7;11456:78;;;;-1:-1:-1;;;11456:78:0;;12692:2:1;11456:78:0;;;12674:21:1;12731:2;12711:18;;;12704:30;12770:34;12750:18;;;12743:62;12841:28;12821:18;;;12814:56;12887:19;;11456:78:0;12490:422:1;22212:733:0;-1:-1:-1;;;;;22352:20:0;;22344:70;;;;-1:-1:-1;;;22344:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22433:23:0;;22425:71;;;;-1:-1:-1;;;22425:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22593:17:0;;22569:21;22593:17;;;;;;;;;;;22629:23;;;;22621:74;;;;-1:-1:-1;;;22621:74:0;;13119:2:1;22621:74:0;;;13101:21:1;13158:2;13138:18;;;13131:30;13197:34;13177:18;;;13170:62;-1:-1:-1;;;13248:18:1;;;13241:36;13294:19;;22621:74:0;12917:402:1;22621:74:0;-1:-1:-1;;;;;22731:17:0;;;:9;:17;;;;;;;;;;;22751:22;;;22731:42;;22795:20;;;;;;;;:30;;22767:6;;22731:9;22795:30;;22767:6;;22795:30;:::i;:::-;;;;;;;;22860:9;-1:-1:-1;;;;;22843:35:0;22852:6;-1:-1:-1;;;;;22843:35:0;;22871:6;22843:35;;;;160:25:1;;148:2;133:18;;14:177;22843:35:0;;;;;;;;22891:46;30245:1947;32534:647;32687:16;;;32701:1;32687:16;;;;;;;;32629:21;;32604:22;;32687:16;32701:1;32687:16;;;;;;;;;;-1:-1:-1;32687:16:0;32663:40;;32732:4;32714;32719:1;32714:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32714:23:0;;;:7;;;;;;;;;;:23;;;;32758:15;;:22;;;-1:-1:-1;;;32758:22:0;;;;:15;;;;;:20;;:22;;;;;32714:7;;32758:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32748:4;32753:1;32748:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32748:32:0;;;:7;;;;;;;;;:32;32793:15;;:186;;-1:-1:-1;;;32793:186:0;;:15;;;:66;;:186;;32874:11;;32793:15;;32916:4;;32943;;32963:15;;32793:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32992:18;33037:14;33013:21;:38;;;;:::i;:::-;33072:15;;32992:59;;-1:-1:-1;33064:46:0;;-1:-1:-1;;;;;33072:15:0;32992:59;33064:34;:46::i;:::-;33128:45;;;5284:25:1;;;5340:2;5325:18;;5318:34;;;33128:45:0;;5257:18:1;33128:45:0;;;;;;;;32593:588;;;32534:647;:::o;33189:629::-;33336:16;;;33350:1;33336:16;;;;;;;;33278:21;;33253:22;;33336:16;33350:1;33336:16;;;;;;;;;;-1:-1:-1;33336:16:0;33312:40;;33381:4;33363;33368:1;33363:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33363:23:0;;;:7;;;;;;;;;;:23;;;;33407:15;;:22;;;-1:-1:-1;;;33407:22:0;;;;:15;;;;;:20;;:22;;;;;33363:7;;33407:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33397:4;33402:1;33397:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33397:32:0;;;:7;;;;;;;;;:32;33442:15;;:186;;-1:-1:-1;;;33442:186:0;;:15;;;:66;;:186;;33523:11;;33442:15;;33565:4;;33592;;33612:15;;33442:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33641:18;33686:14;33662:21;:38;;;;:::i;:::-;33721:9;;33641:59;;-1:-1:-1;33713:40:0;;-1:-1:-1;;;;;33721:9:0;33641:59;33713:28;:40::i;:::-;33771:39;;;5284:25:1;;;5340:2;5325:18;;5318:34;;;33771:39:0;;5257:18:1;33771:39:0;5110:248:1;196;264:6;272;325:2;313:9;304:7;300:23;296:32;293:52;;;341:1;338;331:12;293:52;-1:-1:-1;;364:23:1;;;434:2;419:18;;;406:32;;-1:-1:-1;196:248:1:o;449:548::-;561:4;590:2;619;608:9;601:21;651:6;645:13;694:6;689:2;678:9;674:18;667:34;719:1;729:140;743:6;740:1;737:13;729:140;;;838:14;;;834:23;;828:30;804:17;;;823:2;800:26;793:66;758:10;;729:140;;;733:3;918:1;913:2;904:6;893:9;889:22;885:31;878:42;988:2;981;977:7;972:2;964:6;960:15;956:29;945:9;941:45;937:54;929:62;;;;449:548;;;;:::o;1002:131::-;-1:-1:-1;;;;;1077:31:1;;1067:42;;1057:70;;1123:1;1120;1113:12;1138:315;1206:6;1214;1267:2;1255:9;1246:7;1242:23;1238:32;1235:52;;;1283:1;1280;1273:12;1235:52;1322:9;1309:23;1341:31;1366:5;1341:31;:::i;:::-;1391:5;1443:2;1428:18;;;;1415:32;;-1:-1:-1;;;1138:315:1:o;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:247::-;2801:6;2854:2;2842:9;2833:7;2829:23;2825:32;2822:52;;;2870:1;2867;2860:12;2822:52;2909:9;2896:23;2928:31;2953:5;2928:31;:::i;:::-;2978:5;2742:247;-1:-1:-1;;;2742:247:1:o;2994:180::-;3053:6;3106:2;3094:9;3085:7;3081:23;3077:32;3074:52;;;3122:1;3119;3112:12;3074:52;-1:-1:-1;3145:23:1;;2994:180;-1:-1:-1;2994:180:1:o;3179:118::-;3265:5;3258:13;3251:21;3244:5;3241:32;3231:60;;3287:1;3284;3277:12;3302:382;3367:6;3375;3428:2;3416:9;3407:7;3403:23;3399:32;3396:52;;;3444:1;3441;3434:12;3396:52;3483:9;3470:23;3502:31;3527:5;3502:31;:::i;:::-;3552:5;-1:-1:-1;3609:2:1;3594:18;;3581:32;3622:30;3581:32;3622:30;:::i;:::-;3671:7;3661:17;;;3302:382;;;;;:::o;3689:388::-;3757:6;3765;3818:2;3806:9;3797:7;3793:23;3789:32;3786:52;;;3834:1;3831;3824:12;3786:52;3873:9;3860:23;3892:31;3917:5;3892:31;:::i;:::-;3942:5;-1:-1:-1;3999:2:1;3984:18;;3971:32;4012:33;3971:32;4012:33;:::i;4082:356::-;4284:2;4266:21;;;4303:18;;;4296:30;4362:34;4357:2;4342:18;;4335:62;4429:2;4414:18;;4082:356::o;4443:127::-;4504:10;4499:3;4495:20;4492:1;4485:31;4535:4;4532:1;4525:15;4559:4;4556:1;4549:15;4575:125;4640:9;;;4661:10;;;4658:36;;;4674:18;;:::i;4705:400::-;4907:2;4889:21;;;4946:2;4926:18;;;4919:30;4985:34;4980:2;4965:18;;4958:62;-1:-1:-1;;;5051:2:1;5036:18;;5029:34;5095:3;5080:19;;4705:400::o;5363:380::-;5442:1;5438:12;;;;5485;;;5506:61;;5560:4;5552:6;5548:17;5538:27;;5506:61;5613:2;5605:6;5602:14;5582:18;5579:38;5576:161;;5659:10;5654:3;5650:20;5647:1;5640:31;5694:4;5691:1;5684:15;5722:4;5719:1;5712:15;5576:161;;5363:380;;;:::o;6563:217::-;6603:1;6629;6619:132;;6673:10;6668:3;6664:20;6661:1;6654:31;6708:4;6705:1;6698:15;6736:4;6733:1;6726:15;6619:132;-1:-1:-1;6765:9:1;;6563:217::o;7217:404::-;7419:2;7401:21;;;7458:2;7438:18;;;7431:30;7497:34;7492:2;7477:18;;7470:62;-1:-1:-1;;;7563:2:1;7548:18;;7541:38;7611:3;7596:19;;7217:404::o;7626:407::-;7828:2;7810:21;;;7867:2;7847:18;;;7840:30;7906:34;7901:2;7886:18;;7879:62;-1:-1:-1;;;7972:2:1;7957:18;;7950:41;8023:3;8008:19;;7626:407::o;9280:184::-;9350:6;9403:2;9391:9;9382:7;9378:23;9374:32;9371:52;;;9419:1;9416;9409:12;9371:52;-1:-1:-1;9442:16:1;;9280:184;-1:-1:-1;9280:184:1:o;9748:245::-;9815:6;9868:2;9856:9;9847:7;9843:23;9839:32;9836:52;;;9884:1;9881;9874:12;9836:52;9916:9;9910:16;9935:28;9957:5;9935:28;:::i;10806:401::-;11008:2;10990:21;;;11047:2;11027:18;;;11020:30;11086:34;11081:2;11066:18;;11059:62;-1:-1:-1;;;11152:2:1;11137:18;;11130:35;11197:3;11182:19;;10806:401::o;11212:399::-;11414:2;11396:21;;;11453:2;11433:18;;;11426:30;11492:34;11487:2;11472:18;;11465:62;-1:-1:-1;;;11558:2:1;11543:18;;11536:33;11601:3;11586:19;;11212:399::o;11616:168::-;11689:9;;;11720;;11737:15;;;11731:22;;11717:37;11707:71;;11758:18;;:::i;11789:128::-;11856:9;;;11877:11;;;11874:37;;;11891:18;;:::i;13456:127::-;13517:10;13512:3;13508:20;13505:1;13498:31;13548:4;13545:1;13538:15;13572:4;13569:1;13562:15;13588:251;13658:6;13711:2;13699:9;13690:7;13686:23;13682:32;13679:52;;;13727:1;13724;13717:12;13679:52;13759:9;13753:16;13778:31;13803:5;13778:31;:::i;13844:980::-;14106:4;14154:3;14143:9;14139:19;14185:6;14174:9;14167:25;14211:2;14249:6;14244:2;14233:9;14229:18;14222:34;14292:3;14287:2;14276:9;14272:18;14265:31;14316:6;14351;14345:13;14382:6;14374;14367:22;14420:3;14409:9;14405:19;14398:26;;14459:2;14451:6;14447:15;14433:29;;14480:1;14490:195;14504:6;14501:1;14498:13;14490:195;;;14569:13;;-1:-1:-1;;;;;14565:39:1;14553:52;;14660:15;;;;14625:12;;;;14601:1;14519:9;14490:195;;;-1:-1:-1;;;;;;;14741:32:1;;;;14736:2;14721:18;;14714:60;-1:-1:-1;;;14805:3:1;14790:19;14783:35;14702:3;13844:980;-1:-1:-1;;;13844:980:1:o

Swarm Source

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