ETH Price: $2,126.56 (+5.96%)

Token

FEG AI (FegAI)
 

Overview

Max Total Supply

21,000,000 FegAI

Holders

8

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
78,629.620460422702844926 FegAI

Value
$0.00
0x6d57fa187b02fdd3c92ea13e20c75a98c8bd372b
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:
FEGai

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2022-12-10
*/

/**
Ticker: $FegAI
Project:Feg AI

https://t.me/FEGAiPortal
https://t.me/FEGAiPortal
*/

// SPDX-License-Identifier: Unlicensed

    pragma solidity ^0.8.0;

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

    library SafeMath {
        
        function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                uint256 c = a + b;
                if (c < a) return (false, 0);
                return (true, c);
            }
        }
        
        function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b > a) return (false, 0);
                return (true, a - b);
            }
        }
        
        function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
                // benefit is lost if 'b' is also tested.
                // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
                if (a == 0) return (true, 0);
                uint256 c = a * b;
                if (c / a != b) return (false, 0);
                return (true, c);
            }
        }
        
        function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a / b);
            }
        }
        
        function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a % b);
            }
        }

        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            return a + b;
        }


        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            return a - b;
        }


        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            return a * b;
        }
        
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return a / b;
        }


        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return a % b;
        }
        
        function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b <= a, errorMessage);
                return a - b;
            }
        }
        
        function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a / b;
            }
        }
        
        function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a % b;
            }
        }
    }

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

    library Address {
        
        function isContract(address account) internal view returns (bool) {
            uint256 size;
            assembly { size := extcodesize(account) }
            return size > 0;
        }

        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");
        }
        
        function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
        }
        
        function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
            return functionCallWithValue(target, data, 0, errorMessage);
        }
        
        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");
        }
        
        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");
            require(isContract(target), "Address: call to non-contract");
            (bool success, bytes memory returndata) = target.call{ value: value }(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }
        
        function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
            return functionStaticCall(target, data, "Address: low-level static call failed");
        }
        
        function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
            require(isContract(target), "Address: static call to non-contract");
            (bool success, bytes memory returndata) = target.staticcall(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }


        function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
            return functionDelegateCall(target, data, "Address: low-level delegate call failed");
        }
        
        function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
            require(isContract(target), "Address: delegate call to non-contract");
            (bool success, bytes memory returndata) = target.delegatecall(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }

        function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
            if (success) {
                return returndata;
            } else {
                if (returndata.length > 0) {
                    assembly {
                        let returndata_size := mload(returndata)
                        revert(add(32, returndata), returndata_size)
                    }
                } else {
                    revert(errorMessage);
                }
            }
        }
    }

    abstract contract Ownable is Context {
        address internal _owner;
        address private _previousOwner;

        event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
        constructor () {
            _owner = _msgSender();
            emit OwnershipTransferred(address(0), _owner);
        }
        
        function owner() public view virtual returns (address) {
            return _owner;
        }
        
        modifier onlyOwner() {
            require(owner() == _msgSender(), "Ownable: caller is not the owner");
            _;
        }
        
        function renounceOwnership() public virtual onlyOwner {
            emit OwnershipTransferred(_owner, address(0));
            _owner = address(0);
        }


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

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

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

        /**
        * @dev Returns the decimals places of the token.
        */
        function decimals() external view returns (uint8);
    }
    contract ERC20 is Context,Ownable, IERC20, IERC20Metadata {
        using SafeMath for uint256;

        mapping(address => uint256) private _balances;

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

        uint256 private _totalSupply;

        string private _name;
        string private _symbol;

        /**
        * @dev Sets the values for {name} and {symbol}.
        *
        * The default value of {decimals} is 18. To select a different value for
        * {decimals} you should overload it.
        *
        * All two of these values are immutable: they can only be set once during
        * construction.
        */
        constructor(string memory name_, string memory symbol_) {
            _name = name_;
            _symbol = symbol_;
        }

        /**
        * @dev Returns the name of the token.
        */
        function name() public view virtual override returns (string memory) {
            return _name;
        }

        /**
        * @dev Returns the symbol of the token, usually a shorter version of the
        * name.
        */
        function symbol() public view virtual override returns (string memory) {
            return _symbol;
        }

        /**
        * @dev Returns the number of decimals used to get its user representation.
        * For example, if `decimals` equals `2`, a balance of `505` tokens should
        * be displayed to a user as `5,05` (`505 / 10 ** 2`).
        *
        * Tokens usually opt for a value of 18, imitating the relationship between
        * Ether and Wei. This is the value {ERC20} uses, unless this function is
        * overridden;
        *
        * NOTE: This information is only used for _display_ purposes: it in
        * no way affects any of the arithmetic of the contract, including
        * {IERC20-balanceOf} and {IERC20-transfer}.
        */
        function decimals() public view virtual override returns (uint8) {
            return 18;
        }

        /**
        * @dev See {IERC20-totalSupply}.
        */
        function totalSupply() public view virtual override returns (uint256) {
            return _totalSupply;
        }

        /**
        * @dev See {IERC20-balanceOf}.
        */
        function balanceOf(address account) public view virtual override returns (uint256) {
            return _balances[account];
        }

        /**
        * @dev See {IERC20-transfer}.
        *
        * Requirements:
        *
        * - `recipient` cannot be the zero address.
        * - the caller must have a balance of at least `amount`.
        */
        function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
            _transfer(_msgSender(), recipient, amount);
            return true;
        }

        /**
        * @dev See {IERC20-allowance}.
        */
        function allowance(address owner, address spender) public view virtual override returns (uint256) {
            return _allowances[owner][spender];
        }

        /**
        * @dev See {IERC20-approve}.
        *
        * Requirements:
        *
        * - `spender` cannot be the zero address.
        */
        function approve(address spender, uint256 amount) public virtual override returns (bool) {
            _approve(_msgSender(), spender, amount);
            return true;
        }

        /**
        * @dev See {IERC20-transferFrom}.
        *
        * Emits an {Approval} event indicating the updated allowance. This is not
        * required by the EIP. See the note at the beginning of {ERC20}.
        *
        * Requirements:
        *
        * - `sender` and `recipient` cannot be the zero address.
        * - `sender` must have a balance of at least `amount`.
        * - the caller must have allowance for ``sender``'s tokens of at least
        * `amount`.
        */
        function transferFrom(
            address sender,
            address recipient,
            uint256 amount
        ) public virtual override returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }

        /**
        * @dev Atomically increases the allowance granted to `spender` by the caller.
        *
        * This is an alternative to {approve} that can be used as a mitigation for
        * problems described in {IERC20-approve}.
        *
        * Emits an {Approval} event indicating the updated allowance.
        *
        * Requirements:
        *
        * - `spender` cannot be the zero address.
        */
        function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
            return true;
        }

        /**
        * @dev Atomically decreases the allowance granted to `spender` by the caller.
        *
        * This is an alternative to {approve} that can be used as a mitigation for
        * problems described in {IERC20-approve}.
        *
        * Emits an {Approval} event indicating the updated allowance.
        *
        * Requirements:
        *
        * - `spender` cannot be the zero address.
        * - `spender` must have allowance for the caller of at least
        * `subtractedValue`.
        */
        function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
            return true;
        }

        /**
        * @dev Moves tokens `amount` from `sender` to `recipient`.
        *
        * This is internal function is equivalent to {transfer}, and can be used to
        * e.g. implement automatic token fees, slashing mechanisms, etc.
        *
        * Emits a {Transfer} event.
        *
        * Requirements:
        *
        * - `sender` cannot be the zero address.
        * - `recipient` cannot be the zero address.
        * - `sender` must have a balance of at least `amount`.
        */
        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);

            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }

        /** @dev Creates `amount` tokens and assigns them to `account`, increasing
        * the total supply.
        *
        * Emits a {Transfer} event with `from` set to the zero address.
        *
        * Requirements:
        *
        * - `account` cannot be the zero address.
        */
        function _mint(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: mint to the zero address");

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

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

        /**
        * @dev Destroys `amount` tokens from `account`, reducing the
        * total supply.
        *
        * Emits a {Transfer} event with `to` set to the zero address.
        *
        * Requirements:
        *
        * - `account` cannot be the zero address.
        * - `account` must have at least `amount` tokens.
        */
        function _burn(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: burn from the zero address");

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

            _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
            _totalSupply = _totalSupply.sub(amount);
            emit Transfer(account, address(0), amount);
        }

        /**
        * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
        *
        * This internal function is equivalent to `approve`, and can be used to
        * e.g. set automatic allowances for certain subsystems, etc.
        *
        * Emits an {Approval} event.
        *
        * Requirements:
        *
        * - `owner` cannot be the zero address.
        * - `spender` cannot be the zero address.
        */
        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);
        }

        /**
        * @dev Hook that is called before any transfer of tokens. This includes
        * minting and burning.
        *
        * Calling conditions:
        *
        * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
        * will be to transferred to `to`.
        * - when `from` is zero, `amount` tokens will be minted for `to`.
        * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
        * - `from` and `to` are never both zero.
        *
        * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
        */
        function _beforeTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}
    }


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

    contract FEGai is ERC20 {
        using SafeMath for uint256;
        using Address for address;

        mapping (address => bool) private _isExcludedFromFee;
        mapping(address => bool) private _isExcludedFromMaxWallet;
        mapping(address => bool) private _isExcludedFromMaxTnxLimit;

        address public _devWalletAddress;    

        uint256 public _buyDevFee = 2;  
        uint256 public _sellDevFee = 24; 

        IUniswapV2Router02 public uniswapV2Router;
        address public uniswapV2Pair;
        bool inSwapAndLiquify;
        bool public swapAndSendFeeEnabled = true;
        uint256 public _maxWalletBalance;
        uint256 public _maxTxAmount;
        uint256 public numTokensSellToSendEthToDev;
        event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
        event swapAndSendFeeEnabledUpdated(bool enabled);
        event SwapAndLiquify(
            uint256 tokensSwapped,
            uint256 ethReceived,
            uint256 tokensIntoLiqudity
        );
        
        modifier lockTheSwap {
            inSwapAndLiquify = true;
            _;
            inSwapAndLiquify = false;
        }
        
        constructor () ERC20("FEG AI", "FegAI"){

            numTokensSellToSendEthToDev = 10000 * 10 ** decimals();
            _devWalletAddress = 0x9e1238b1fA96f9C3A16194AF65a8f96082A5B8D4;
            
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            // Create a uniswap pair for this new token
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());

            // set the rest of the contract variables
            uniswapV2Router = _uniswapV2Router;
            
            //exclude owner and this contract from fee
            _isExcludedFromFee[_msgSender()] = true;
            _isExcludedFromFee[address(this)] = true;
            _isExcludedFromFee[_devWalletAddress] = true;

            // exclude from the Max wallet balance 
            _isExcludedFromMaxWallet[owner()] = true;
            _isExcludedFromMaxWallet[address(this)] = true;
            _isExcludedFromMaxWallet[_devWalletAddress] = true;

            // exclude from the max tnx limit 
            _isExcludedFromMaxTnxLimit[owner()] = true;
            _isExcludedFromMaxTnxLimit[address(this)] = true;
            _isExcludedFromMaxTnxLimit[_devWalletAddress] = true;


            /*
                _mint is an internal function in ERC20.sol that is only called here,
                and CANNOT be called ever again
            */
            _mint(owner(), 21000000 * 10 ** decimals());		
            _maxWalletBalance = (totalSupply() * 5 ) / 100;
            _maxTxAmount = (totalSupply() * 5 ) / 100;

            
        }

        function includeAndExcludeInWhitelist(address account, bool value) public onlyOwner {
            _isExcludedFromFee[account] = value;
        }

        function includeAndExcludedFromMaxWallet(address account, bool value) public onlyOwner {
            _isExcludedFromMaxWallet[account] = value;
        }

        function includeAndExcludedFromMaxTnxLimit(address account, bool value) public onlyOwner {
            _isExcludedFromMaxTnxLimit[account] = value;
        }

        function isExcludedFromFee(address account) public view returns(bool) {
            return _isExcludedFromFee[account];
        }

        function isExcludedFromMaxWallet(address account) public view returns(bool){
            return _isExcludedFromMaxWallet[account];
        }

        function isExcludedFromMaxTnxLimit(address account) public view returns(bool) {
            return _isExcludedFromMaxTnxLimit[account];
        }

        function setMaxWalletBalance(uint256 maxBalancePercent) external onlyOwner {
        _maxWalletBalance = maxBalancePercent * 10** decimals();
        }

        function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount * 10** decimals();
       }


        function setSellDevFess(
            uint256 dFee
        ) external onlyOwner {
            _sellDevFee = dFee;
        }

        function setBuyDevFees(
            uint256 dFee
        ) external onlyOwner {
            _buyDevFee = dFee;
        }
        function setDevWalletAddress(address _addr) external onlyOwner {
            _devWalletAddress = _addr;
        }  
        
        function setnumTokensSellToSendEthToDev(uint256 amount) external onlyOwner {
            numTokensSellToSendEthToDev = amount * 10 ** decimals();
        }

        function setRouterAddress(address newRouter) external onlyOwner {
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
            uniswapV2Router = _uniswapV2Router;
        }

        function setSwapAndSendFeeEnabled(bool _enabled) external onlyOwner {
            swapAndSendFeeEnabled = _enabled;
            emit swapAndSendFeeEnabledUpdated(_enabled);
        }
        
        //to recieve ETH from uniswapV2Router when swaping
        receive() external payable {}

        // to withdraw stucked BNB 
        function withdrawStuckedBNB(uint amount) external onlyOwner{
            // This is the current recommended method to use.
            (bool sent,) = _owner.call{value: amount}("");
            require(sent, "Failed to send BNB");    
            }

           // Withdraw stuked tokens 
        function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
        }
    
        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal override {
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
            require(amount > 0, "Transfer amount must be greater than zero");
        
        if (from != owner() && to != owner())
            require( _isExcludedFromMaxTnxLimit[from] || _isExcludedFromMaxTnxLimit[to] || 
                amount <= _maxTxAmount,
                "ERC20: Transfer amount exceeds the maxTxAmount."
            );
        
        
        if (
            from != owner() &&
            to != address(this) &&
            to != uniswapV2Pair ) 
        {
            uint256 currentBalance = balanceOf(to);
            require(_isExcludedFromMaxWallet[to] || (currentBalance + amount <= _maxWalletBalance),
                    "ERC20: Reached max wallet holding");
        }
      
            uint256 contractTokenBalance = balanceOf(address(this)); 
            bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSendEthToDev;
            if (
                overMinTokenBalance &&
                !inSwapAndLiquify &&
                from != uniswapV2Pair &&
                swapAndSendFeeEnabled
            ) {
                contractTokenBalance = numTokensSellToSendEthToDev;
                swapTokensForFees(contractTokenBalance);
            }

            bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            super._transfer(from, to, amount);
            takeFee = false;
        } else {

            if (from == uniswapV2Pair) {
                // Buy
                uint256 DevTokens = amount.mul(_buyDevFee).div(100);

                amount= amount.sub(DevTokens);
                super._transfer(from, address(this), DevTokens);
                super._transfer(from, to, amount);

            } else if (to == uniswapV2Pair) {
                // Sell
                uint256 DevTokens = amount.mul(_sellDevFee).div(100);

                amount= amount.sub(DevTokens);
                super._transfer(from, address(this), DevTokens);
                super._transfer(from, to, amount);
            } else {
                // Transfer
                super._transfer(from, to, amount);
            }
        
        }

        }

        function swapTokensForFees(uint256 tokenAmount) private lockTheSwap {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = uniswapV2Router.WETH();
            _approve(address(this), address(uniswapV2Router), tokenAmount);
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of ETH
                path,
                _devWalletAddress,
                block.timestamp
            );
        }
    }

Contract Security Audit

Contract ABI

API
[{"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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndSendFeeEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":"value","type":"bool"}],"name":"includeAndExcludeInWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxTnxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxWallet","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTnxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToSendEthToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"dFee","type":"uint256"}],"name":"setBuyDevFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxWalletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dFee","type":"uint256"}],"name":"setSellDevFess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setnumTokensSellToSendEthToDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"amount","type":"uint256"}],"name":"withdrawStuckedBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002600b556018600c55600e805460ff60a81b1916600160a81b1790553480156200002e57600080fd5b506040518060400160405280600681526020016546454720414960d01b81525060405180604001604052806005815260200164466567414960d81b8152506200007c6200049960201b60201c565b600080546001600160a01b0319166001600160a01b039290921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36005620000d1838262000667565b506006620000e0828262000667565b50620000ed915050601290565b620000fa90600a62000846565b620001089061271062000857565b601155600a80546001600160a01b031916739e1238b1fa96f9c3a16194af65a8f96082a5b8d41790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808201926020929091908290030181865afa15801562000185573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ab919062000879565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021f919062000879565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000879565b600e80546001600160a01b03199081166001600160a01b0393841617909155600d8054909116918316919091179055600160076000620002d03390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600a54909116835290822080549093168117909255600890620003406000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155600a54909116835290822080549093168117909255600990620003b06000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600a54909116835291208054909216179055620004426200041e6000546001600160a01b031690565b6200042c6012600a62000846565b6200043c906301406f4062000857565b6200049d565b60646200044e60045490565b6200045b90600562000857565b620004679190620008ab565b600f5560646200047660045490565b6200048390600562000857565b6200048f9190620008ab565b60105550620008e9565b3390565b6001600160a01b038216620004f85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b6200051481600454620005ac60201b620010b31790919060201c565b6004556001600160a01b03821660009081526002602090815260409091205462000549918390620010b3620005ac821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200059b9085815260200190565b60405180910390a35050565b505050565b6000620005ba8284620008ce565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005ee57607f821691505b6020821081036200060f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a757600081815260208120601f850160051c810160208610156200063e5750805b601f850160051c820191505b818110156200065f578281556001016200064a565b505050505050565b81516001600160401b03811115620006835762000683620005c3565b6200069b81620006948454620005d9565b8462000615565b602080601f831160018114620006d35760008415620006ba5750858301515b600019600386901b1c1916600185901b1785556200065f565b600085815260208120601f198616915b828110156200070457888601518255948401946001909101908401620006e3565b5085821015620007235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200078a5781600019048211156200076e576200076e62000733565b808516156200077c57918102915b93841c93908002906200074e565b509250929050565b600082620007a357506001620005bd565b81620007b257506000620005bd565b8160018114620007cb5760028114620007d657620007f6565b6001915050620005bd565b60ff841115620007ea57620007ea62000733565b50506001821b620005bd565b5060208310610133831016604e8410600b84101617156200081b575081810a620005bd565b62000827838362000749565b80600019048211156200083e576200083e62000733565b029392505050565b6000620005ba60ff84168362000792565b600081600019048311821515161562000874576200087462000733565b500290565b6000602082840312156200088c57600080fd5b81516001600160a01b0381168114620008a457600080fd5b9392505050565b600082620008c957634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008e457620008e462000733565b500190565b611e1680620008f96000396000f3fe6080604052600436106102345760003560e01c80636dd3d39f1161012e578063a457c2d7116100ab578063d4a5af841161006f578063d4a5af84146106d2578063dd62ed3e146106e8578063ea50cf4e1461072e578063ec28438a1461074e578063f2fde38b1461076e57600080fd5b8063a457c2d71461063c578063a9059cbb1461065c578063b425bac31461067c578063c9cf77891461069c578063ca14a523146106b257600080fd5b80638e4d62af116100f25780638e4d62af146105a75780639063d77d146105c757806392777e2a146105e757806395d89b41146106075780639904a1c31461061c57600080fd5b80636dd3d39f146104ef57806370a0823114610528578063715018a61461055e5780637d1db4a5146105735780638da5cb5b1461058957600080fd5b80633d0dbec0116101bc5780635342acb4116101805780635342acb41461042757806355874a79146104605780635d729d8c1461049957806362015852146104b957806368d71cbe146104cf57600080fd5b80633d0dbec01461039057806341cb87fc146103b157806347de4c5d146103d157806348eb61b6146103e757806349bd5a5e1461040757600080fd5b806318160ddd1161020357806318160ddd146102f557806323b872dd14610314578063313ce5671461033457806339509351146103505780633a9e00de1461037057600080fd5b806306fdde0314610240578063095ea7b31461026b578063120a06121461029b5780631694505e146102bd57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561078e565b604051610262919061189a565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611907565b610820565b6040519015158152602001610262565b3480156102a757600080fd5b506102bb6102b6366004611933565b610837565b005b3480156102c957600080fd5b50600d546102dd906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b34801561030157600080fd5b506004545b604051908152602001610262565b34801561032057600080fd5b5061028b61032f366004611950565b61088c565b34801561034057600080fd5b5060405160128152602001610262565b34801561035c57600080fd5b5061028b61036b366004611907565b6108f5565b34801561037c57600080fd5b506102bb61038b366004611991565b61092b565b34801561039c57600080fd5b50600e5461028b90600160a81b900460ff1681565b3480156103bd57600080fd5b506102bb6103cc366004611933565b610971565b3480156103dd57600080fd5b5061030660115481565b3480156103f357600080fd5b506102bb6104023660046119b8565b610b16565b34801561041357600080fd5b50600e546102dd906001600160a01b031681565b34801561043357600080fd5b5061028b610442366004611933565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561046c57600080fd5b5061028b61047b366004611933565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156104a557600080fd5b5061028b6104b4366004611907565b610b6b565b3480156104c557600080fd5b50610306600b5481565b3480156104db57600080fd5b506102bb6104ea366004611991565b610c0e565b3480156104fb57600080fd5b5061028b61050a366004611933565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561053457600080fd5b50610306610543366004611933565b6001600160a01b031660009081526002602052604090205490565b34801561056a57600080fd5b506102bb610c3d565b34801561057f57600080fd5b5061030660105481565b34801561059557600080fd5b506000546001600160a01b03166102dd565b3480156105b357600080fd5b506102bb6105c23660046119b8565b610cb1565b3480156105d357600080fd5b506102bb6105e2366004611991565b610d06565b3480156105f357600080fd5b506102bb610602366004611991565b610d4c565b34801561061357600080fd5b50610255610e12565b34801561062857600080fd5b506102bb6106373660046119b8565b610e21565b34801561064857600080fd5b5061028b610657366004611907565b610e76565b34801561066857600080fd5b5061028b610677366004611907565b610ec5565b34801561068857600080fd5b50600a546102dd906001600160a01b031681565b3480156106a857600080fd5b50610306600c5481565b3480156106be57600080fd5b506102bb6106cd366004611991565b610ed2565b3480156106de57600080fd5b50610306600f5481565b3480156106f457600080fd5b506103066107033660046119f1565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561073a57600080fd5b506102bb610749366004611a1f565b610f01565b34801561075a57600080fd5b506102bb610769366004611991565b610f83565b34801561077a57600080fd5b506102bb610789366004611933565b610fc9565b60606005805461079d90611a3c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990611a3c565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b5050505050905090565b600061082d3384846110bf565b5060015b92915050565b6000546001600160a01b0316331461086a5760405162461bcd60e51b815260040161086190611a76565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108998484846111e4565b6108eb84336108e685604051806060016040528060288152602001611d94602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906115c0565b6110bf565b5060019392505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161082d9185906108e690866110b3565b6000546001600160a01b031633146109555760405162461bcd60e51b815260040161086190611a76565b6109616012600a611ba5565b61096b9082611bb4565b600f5550565b6000546001600160a01b0316331461099b5760405162461bcd60e51b815260040161086190611a76565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a029190611bd3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a739190611bd3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae49190611bd3565b600e80546001600160a01b039283166001600160a01b031991821617909155600d805493909216921691909117905550565b6000546001600160a01b03163314610b405760405162461bcd60e51b815260040161086190611a76565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610b965760405162461bcd60e51b815260040161086190611a76565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190611bf0565b9392505050565b6000546001600160a01b03163314610c385760405162461bcd60e51b815260040161086190611a76565b600c55565b6000546001600160a01b03163314610c675760405162461bcd60e51b815260040161086190611a76565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cdb5760405162461bcd60e51b815260040161086190611a76565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d305760405162461bcd60e51b815260040161086190611a76565b610d3c6012600a611ba5565b610d469082611bb4565b60115550565b6000546001600160a01b03163314610d765760405162461bcd60e51b815260040161086190611a76565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b5050905080610e0e5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321021272160711b6044820152606401610861565b5050565b60606006805461079d90611a3c565b6000546001600160a01b03163314610e4b5760405162461bcd60e51b815260040161086190611a76565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061082d33846108e685604051806060016040528060258152602001611dbc602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906115c0565b600061082d3384846111e4565b6000546001600160a01b03163314610efc5760405162461bcd60e51b815260040161086190611a76565b600b55565b6000546001600160a01b03163314610f2b5760405162461bcd60e51b815260040161086190611a76565b600e8054821515600160a81b0260ff60a81b199091161790556040517f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea90610f7890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610fad5760405162461bcd60e51b815260040161086190611a76565b610fb96012600a611ba5565b610fc39082611bb4565b60105550565b6000546001600160a01b03163314610ff35760405162461bcd60e51b815260040161086190611a76565b6001600160a01b0381166110585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610861565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c078284611c0d565b6001600160a01b0383166111215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610861565b6001600160a01b0382166111825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610861565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661120a5760405162461bcd60e51b815260040161086190611c25565b6001600160a01b0382166112305760405162461bcd60e51b815260040161086190611c6a565b600081116112925760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610861565b6000546001600160a01b038481169116148015906112be57506000546001600160a01b03838116911614155b15611373576001600160a01b03831660009081526009602052604090205460ff168061130257506001600160a01b03821660009081526009602052604090205460ff165b8061130f57506010548111155b6113735760405162461bcd60e51b815260206004820152602f60248201527f45524332303a205472616e7366657220616d6f756e742065786365656473207460448201526e34329036b0bc2a3c20b6b7bab73a1760891b6064820152608401610861565b6000546001600160a01b0384811691161480159061139a57506001600160a01b0382163014155b80156113b45750600e546001600160a01b03838116911614155b1561144f576001600160a01b03821660009081526002602090815260408083205460089092529091205460ff16806113f75750600f546113f48383611c0d565b11155b61144d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6044820152606760f81b6064820152608401610861565b505b306000908152600260205260409020546011548110801590819061147d5750600e54600160a01b900460ff16155b80156114975750600e546001600160a01b03868116911614155b80156114ac5750600e54600160a81b900460ff165b156114bf5760115491506114bf826115ec565b6001600160a01b03851660009081526007602052604090205460019060ff168061150157506001600160a01b03851660009081526007602052604090205460ff165b156115195761151186868661176a565b5060006115b8565b600e546001600160a01b039081169087160361157b576000611551606461154b600b548861187690919063ffffffff16565b90611882565b905061155d858261188e565b945061156a87308361176a565b61157587878761176a565b506115b8565b600e546001600160a01b03908116908616036115ad576000611551606461154b600c548861187690919063ffffffff16565b6115b886868661176a565b505050505050565b600081848411156115e45760405162461bcd60e51b8152600401610861919061189a565b505050900390565b600e805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061163457611634611cad565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190611bd3565b816001815181106116c4576116c4611cad565b6001600160a01b039283166020918202929092010152600d546116ea91309116846110bf565b600d54600a5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261172792879260009288929116904290600401611cc3565b600060405180830381600087803b15801561174157600080fd5b505af1158015611755573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b6001600160a01b0383166117905760405162461bcd60e51b815260040161086190611c25565b6001600160a01b0382166117b65760405162461bcd60e51b815260040161086190611c6a565b6117f381604051806060016040528060268152602001611d6e602691396001600160a01b03861660009081526002602052604090205491906115c0565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461182290826110b3565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111d79085815260200190565b6000610c078284611bb4565b6000610c078284611d34565b6000610c078284611d56565b600060208083528351808285015260005b818110156118c7578581018301518582016040015282016118ab565b818111156118d9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461190457600080fd5b50565b6000806040838503121561191a57600080fd5b8235611925816118ef565b946020939093013593505050565b60006020828403121561194557600080fd5b8135610c07816118ef565b60008060006060848603121561196557600080fd5b8335611970816118ef565b92506020840135611980816118ef565b929592945050506040919091013590565b6000602082840312156119a357600080fd5b5035919050565b801515811461190457600080fd5b600080604083850312156119cb57600080fd5b82356119d6816118ef565b915060208301356119e6816119aa565b809150509250929050565b60008060408385031215611a0457600080fd5b8235611a0f816118ef565b915060208301356119e6816118ef565b600060208284031215611a3157600080fd5b8135610c07816119aa565b600181811c90821680611a5057607f821691505b602082108103611a7057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611afc578160001904821115611ae257611ae2611aab565b80851615611aef57918102915b93841c9390800290611ac6565b509250929050565b600082611b1357506001610831565b81611b2057506000610831565b8160018114611b365760028114611b4057611b5c565b6001915050610831565b60ff841115611b5157611b51611aab565b50506001821b610831565b5060208310610133831016604e8410600b8410161715611b7f575081810a610831565b611b898383611ac1565b8060001904821115611b9d57611b9d611aab565b029392505050565b6000610c0760ff841683611b04565b6000816000190483118215151615611bce57611bce611aab565b500290565b600060208284031215611be557600080fd5b8151610c07816118ef565b600060208284031215611c0257600080fd5b8151610c07816119aa565b60008219821115611c2057611c20611aab565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d135784516001600160a01b031683529383019391830191600101611cee565b50506001600160a01b03969096166060850152505050608001529392505050565b600082611d5157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611d6857611d68611aab565b50039056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d12dcc804368e4ef314811eea047dea0f84d31e504089a5b32da2261a4c0a71064736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80636dd3d39f1161012e578063a457c2d7116100ab578063d4a5af841161006f578063d4a5af84146106d2578063dd62ed3e146106e8578063ea50cf4e1461072e578063ec28438a1461074e578063f2fde38b1461076e57600080fd5b8063a457c2d71461063c578063a9059cbb1461065c578063b425bac31461067c578063c9cf77891461069c578063ca14a523146106b257600080fd5b80638e4d62af116100f25780638e4d62af146105a75780639063d77d146105c757806392777e2a146105e757806395d89b41146106075780639904a1c31461061c57600080fd5b80636dd3d39f146104ef57806370a0823114610528578063715018a61461055e5780637d1db4a5146105735780638da5cb5b1461058957600080fd5b80633d0dbec0116101bc5780635342acb4116101805780635342acb41461042757806355874a79146104605780635d729d8c1461049957806362015852146104b957806368d71cbe146104cf57600080fd5b80633d0dbec01461039057806341cb87fc146103b157806347de4c5d146103d157806348eb61b6146103e757806349bd5a5e1461040757600080fd5b806318160ddd1161020357806318160ddd146102f557806323b872dd14610314578063313ce5671461033457806339509351146103505780633a9e00de1461037057600080fd5b806306fdde0314610240578063095ea7b31461026b578063120a06121461029b5780631694505e146102bd57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561078e565b604051610262919061189a565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611907565b610820565b6040519015158152602001610262565b3480156102a757600080fd5b506102bb6102b6366004611933565b610837565b005b3480156102c957600080fd5b50600d546102dd906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b34801561030157600080fd5b506004545b604051908152602001610262565b34801561032057600080fd5b5061028b61032f366004611950565b61088c565b34801561034057600080fd5b5060405160128152602001610262565b34801561035c57600080fd5b5061028b61036b366004611907565b6108f5565b34801561037c57600080fd5b506102bb61038b366004611991565b61092b565b34801561039c57600080fd5b50600e5461028b90600160a81b900460ff1681565b3480156103bd57600080fd5b506102bb6103cc366004611933565b610971565b3480156103dd57600080fd5b5061030660115481565b3480156103f357600080fd5b506102bb6104023660046119b8565b610b16565b34801561041357600080fd5b50600e546102dd906001600160a01b031681565b34801561043357600080fd5b5061028b610442366004611933565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561046c57600080fd5b5061028b61047b366004611933565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156104a557600080fd5b5061028b6104b4366004611907565b610b6b565b3480156104c557600080fd5b50610306600b5481565b3480156104db57600080fd5b506102bb6104ea366004611991565b610c0e565b3480156104fb57600080fd5b5061028b61050a366004611933565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561053457600080fd5b50610306610543366004611933565b6001600160a01b031660009081526002602052604090205490565b34801561056a57600080fd5b506102bb610c3d565b34801561057f57600080fd5b5061030660105481565b34801561059557600080fd5b506000546001600160a01b03166102dd565b3480156105b357600080fd5b506102bb6105c23660046119b8565b610cb1565b3480156105d357600080fd5b506102bb6105e2366004611991565b610d06565b3480156105f357600080fd5b506102bb610602366004611991565b610d4c565b34801561061357600080fd5b50610255610e12565b34801561062857600080fd5b506102bb6106373660046119b8565b610e21565b34801561064857600080fd5b5061028b610657366004611907565b610e76565b34801561066857600080fd5b5061028b610677366004611907565b610ec5565b34801561068857600080fd5b50600a546102dd906001600160a01b031681565b3480156106a857600080fd5b50610306600c5481565b3480156106be57600080fd5b506102bb6106cd366004611991565b610ed2565b3480156106de57600080fd5b50610306600f5481565b3480156106f457600080fd5b506103066107033660046119f1565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561073a57600080fd5b506102bb610749366004611a1f565b610f01565b34801561075a57600080fd5b506102bb610769366004611991565b610f83565b34801561077a57600080fd5b506102bb610789366004611933565b610fc9565b60606005805461079d90611a3c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990611a3c565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b5050505050905090565b600061082d3384846110bf565b5060015b92915050565b6000546001600160a01b0316331461086a5760405162461bcd60e51b815260040161086190611a76565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108998484846111e4565b6108eb84336108e685604051806060016040528060288152602001611d94602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906115c0565b6110bf565b5060019392505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161082d9185906108e690866110b3565b6000546001600160a01b031633146109555760405162461bcd60e51b815260040161086190611a76565b6109616012600a611ba5565b61096b9082611bb4565b600f5550565b6000546001600160a01b0316331461099b5760405162461bcd60e51b815260040161086190611a76565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a029190611bd3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a739190611bd3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae49190611bd3565b600e80546001600160a01b039283166001600160a01b031991821617909155600d805493909216921691909117905550565b6000546001600160a01b03163314610b405760405162461bcd60e51b815260040161086190611a76565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610b965760405162461bcd60e51b815260040161086190611a76565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190611bf0565b9392505050565b6000546001600160a01b03163314610c385760405162461bcd60e51b815260040161086190611a76565b600c55565b6000546001600160a01b03163314610c675760405162461bcd60e51b815260040161086190611a76565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cdb5760405162461bcd60e51b815260040161086190611a76565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d305760405162461bcd60e51b815260040161086190611a76565b610d3c6012600a611ba5565b610d469082611bb4565b60115550565b6000546001600160a01b03163314610d765760405162461bcd60e51b815260040161086190611a76565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b5050905080610e0e5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321021272160711b6044820152606401610861565b5050565b60606006805461079d90611a3c565b6000546001600160a01b03163314610e4b5760405162461bcd60e51b815260040161086190611a76565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061082d33846108e685604051806060016040528060258152602001611dbc602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906115c0565b600061082d3384846111e4565b6000546001600160a01b03163314610efc5760405162461bcd60e51b815260040161086190611a76565b600b55565b6000546001600160a01b03163314610f2b5760405162461bcd60e51b815260040161086190611a76565b600e8054821515600160a81b0260ff60a81b199091161790556040517f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea90610f7890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610fad5760405162461bcd60e51b815260040161086190611a76565b610fb96012600a611ba5565b610fc39082611bb4565b60105550565b6000546001600160a01b03163314610ff35760405162461bcd60e51b815260040161086190611a76565b6001600160a01b0381166110585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610861565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c078284611c0d565b6001600160a01b0383166111215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610861565b6001600160a01b0382166111825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610861565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661120a5760405162461bcd60e51b815260040161086190611c25565b6001600160a01b0382166112305760405162461bcd60e51b815260040161086190611c6a565b600081116112925760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610861565b6000546001600160a01b038481169116148015906112be57506000546001600160a01b03838116911614155b15611373576001600160a01b03831660009081526009602052604090205460ff168061130257506001600160a01b03821660009081526009602052604090205460ff165b8061130f57506010548111155b6113735760405162461bcd60e51b815260206004820152602f60248201527f45524332303a205472616e7366657220616d6f756e742065786365656473207460448201526e34329036b0bc2a3c20b6b7bab73a1760891b6064820152608401610861565b6000546001600160a01b0384811691161480159061139a57506001600160a01b0382163014155b80156113b45750600e546001600160a01b03838116911614155b1561144f576001600160a01b03821660009081526002602090815260408083205460089092529091205460ff16806113f75750600f546113f48383611c0d565b11155b61144d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6044820152606760f81b6064820152608401610861565b505b306000908152600260205260409020546011548110801590819061147d5750600e54600160a01b900460ff16155b80156114975750600e546001600160a01b03868116911614155b80156114ac5750600e54600160a81b900460ff165b156114bf5760115491506114bf826115ec565b6001600160a01b03851660009081526007602052604090205460019060ff168061150157506001600160a01b03851660009081526007602052604090205460ff165b156115195761151186868661176a565b5060006115b8565b600e546001600160a01b039081169087160361157b576000611551606461154b600b548861187690919063ffffffff16565b90611882565b905061155d858261188e565b945061156a87308361176a565b61157587878761176a565b506115b8565b600e546001600160a01b03908116908616036115ad576000611551606461154b600c548861187690919063ffffffff16565b6115b886868661176a565b505050505050565b600081848411156115e45760405162461bcd60e51b8152600401610861919061189a565b505050900390565b600e805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061163457611634611cad565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b19190611bd3565b816001815181106116c4576116c4611cad565b6001600160a01b039283166020918202929092010152600d546116ea91309116846110bf565b600d54600a5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261172792879260009288929116904290600401611cc3565b600060405180830381600087803b15801561174157600080fd5b505af1158015611755573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b6001600160a01b0383166117905760405162461bcd60e51b815260040161086190611c25565b6001600160a01b0382166117b65760405162461bcd60e51b815260040161086190611c6a565b6117f381604051806060016040528060268152602001611d6e602691396001600160a01b03861660009081526002602052604090205491906115c0565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461182290826110b3565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111d79085815260200190565b6000610c078284611bb4565b6000610c078284611d34565b6000610c078284611d56565b600060208083528351808285015260005b818110156118c7578581018301518582016040015282016118ab565b818111156118d9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461190457600080fd5b50565b6000806040838503121561191a57600080fd5b8235611925816118ef565b946020939093013593505050565b60006020828403121561194557600080fd5b8135610c07816118ef565b60008060006060848603121561196557600080fd5b8335611970816118ef565b92506020840135611980816118ef565b929592945050506040919091013590565b6000602082840312156119a357600080fd5b5035919050565b801515811461190457600080fd5b600080604083850312156119cb57600080fd5b82356119d6816118ef565b915060208301356119e6816119aa565b809150509250929050565b60008060408385031215611a0457600080fd5b8235611a0f816118ef565b915060208301356119e6816118ef565b600060208284031215611a3157600080fd5b8135610c07816119aa565b600181811c90821680611a5057607f821691505b602082108103611a7057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611afc578160001904821115611ae257611ae2611aab565b80851615611aef57918102915b93841c9390800290611ac6565b509250929050565b600082611b1357506001610831565b81611b2057506000610831565b8160018114611b365760028114611b4057611b5c565b6001915050610831565b60ff841115611b5157611b51611aab565b50506001821b610831565b5060208310610133831016604e8410600b8410161715611b7f575081810a610831565b611b898383611ac1565b8060001904821115611b9d57611b9d611aab565b029392505050565b6000610c0760ff841683611b04565b6000816000190483118215151615611bce57611bce611aab565b500290565b600060208284031215611be557600080fd5b8151610c07816118ef565b600060208284031215611c0257600080fd5b8151610c07816119aa565b60008219821115611c2057611c20611aab565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d135784516001600160a01b031683529383019391830191600101611cee565b50506001600160a01b03969096166060850152505050608001529392505050565b600082611d5157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611d6857611d68611aab565b50039056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d12dcc804368e4ef314811eea047dea0f84d31e504089a5b32da2261a4c0a71064736f6c634300080f0033

Deployed Bytecode Sourcemap

28340:9035:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10287:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12672:181;;;;;;;;;;-1:-1:-1;12672:181:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;12672:181:0;1072:187:1;32793:115:0;;;;;;;;;;-1:-1:-1;32793:115:0;;;;;:::i;:::-;;:::i;:::-;;28789:41;;;;;;;;;;-1:-1:-1;28789:41:0;;;;-1:-1:-1;;;;;28789:41:0;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;28789:41:0;1516:230:1;11506:116:0;;;;;;;;;;-1:-1:-1;11598:12:0;;11506:116;;;1897:25:1;;;1885:2;1870:18;11506:116:0;1751:177:1;13379:387:0;;;;;;;;;;-1:-1:-1;13379:387:0;;;;;:::i;:::-;;:::i;11326:101::-;;;;;;;;;;-1:-1:-1;11326:101:0;;11413:2;2536:36:1;;2524:2;2509:18;11326:101:0;2394:184:1;14216:230:0;;;;;;;;;;-1:-1:-1;14216:230:0;;;;;:::i;:::-;;:::i;32212:153::-;;;;;;;;;;-1:-1:-1;32212:153:0;;;;;:::i;:::-;;:::i;28912:40::-;;;;;;;;;;-1:-1:-1;28912:40:0;;;;-1:-1:-1;;;28912:40:0;;;;;;33099:334;;;;;;;;;;-1:-1:-1;33099:334:0;;;;;:::i;:::-;;:::i;29044:42::-;;;;;;;;;;;;;;;;31418:155;;;;;;;;;;-1:-1:-1;31418:155:0;;;;;:::i;:::-;;:::i;28841:28::-;;;;;;;;;;-1:-1:-1;28841:28:0;;;;-1:-1:-1;;;;;28841:28:0;;;31756:131;;;;;;;;;;-1:-1:-1;31756:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;31848:27:0;31820:4;31848:27;;;:18;:27;;;;;;;;;31756:131;32053:147;;;;;;;;;;-1:-1:-1;32053:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;32153:35:0;32125:4;32153:35;;;:26;:35;;;;;;;;;32053:147;34091:189;;;;;;;;;;-1:-1:-1;34091:189:0;;;;;:::i;:::-;;:::i;28702:29::-;;;;;;;;;;;;;;;;32521:126;;;;;;;;;;-1:-1:-1;32521:126:0;;;;;:::i;:::-;;:::i;31899:142::-;;;;;;;;;;-1:-1:-1;31899:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;31996:33:0;31969:4;31996:33;;;:24;:33;;;;;;;;;31899:142;11699:135;;;;;;;;;;-1:-1:-1;11699:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;11804:18:0;11773:7;11804:18;;;:9;:18;;;;;;;11699:135;8455:160;;;;;;;;;;;;;:::i;29006:27::-;;;;;;;;;;;;;;;;8188:95;;;;;;;;;;-1:-1:-1;8234:7:0;8265:6;-1:-1:-1;;;;;8265:6:0;8188:95;;31260:146;;;;;;;;;;-1:-1:-1;31260:146:0;;;;;:::i;:::-;;:::i;32930:157::-;;;;;;;;;;-1:-1:-1;32930:157:0;;;;;:::i;:::-;;:::i;33788:252::-;;;;;;;;;;-1:-1:-1;33788:252:0;;;;;:::i;:::-;;:::i;10531:112::-;;;;;;;;;;;;;:::i;31585:159::-;;;;;;;;;;-1:-1:-1;31585:159:0;;;;;:::i;:::-;;:::i;14996:281::-;;;;;;;;;;-1:-1:-1;14996:281:0;;;;;:::i;:::-;;:::i;12076:187::-;;;;;;;;;;-1:-1:-1;12076:187:0;;;;;:::i;:::-;;:::i;28653:32::-;;;;;;;;;;-1:-1:-1;28653:32:0;;;;-1:-1:-1;;;;;28653:32:0;;;28744:31;;;;;;;;;;;;;;;;32659:124;;;;;;;;;;-1:-1:-1;32659:124:0;;;;;:::i;:::-;;:::i;28963:32::-;;;;;;;;;;;;;;;;12340:159;;;;;;;;;;-1:-1:-1;12340:159:0;;;;;:::i;:::-;-1:-1:-1;;;;;12460:18:0;;;12429:7;12460:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12340:159;33445:185;;;;;;;;;;-1:-1:-1;33445:185:0;;;;;:::i;:::-;;:::i;32377:130::-;;;;;;;;;;-1:-1:-1;32377:130:0;;;;;:::i;:::-;;:::i;8629:260::-;;;;;;;;;;-1:-1:-1;8629:260:0;;;;;:::i;:::-;;:::i;10287:108::-;10341:13;10378:5;10371:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10287:108;:::o;12672:181::-;12755:4;12776:39;3938:10;12799:7;12808:6;12776:8;:39::i;:::-;-1:-1:-1;12837:4:0;12672:181;;;;;:::o;32793:115::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;;;;;;;;;32871:17:::1;:25:::0;;-1:-1:-1;;;;;;32871:25:0::1;-1:-1:-1::0;;;;;32871:25:0;;;::::1;::::0;;;::::1;::::0;;32793:115::o;13379:387::-;13535:4;13556:36;13566:6;13574:9;13585:6;13556:9;:36::i;:::-;13607:121;13616:6;3938:10;13638:89;13676:6;13638:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13638:19:0;;;;;;:11;:19;;;;;;;;3938:10;13638:33;;;;;;;;;;:37;:89::i;:::-;13607:8;:121::i;:::-;-1:-1:-1;13750:4:0;13379:387;;;;;:::o;14216:230::-;3938:10;14304:4;14357:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14357:34:0;;;;;;;;;;14304:4;;14325:83;;14348:7;;14357:50;;14396:10;14357:38;:50::i;32212:153::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;32338:15:::1;11413:2:::0;32338::::1;:15;:::i;:::-;32318:35;::::0;:17;:35:::1;:::i;:::-;32298:17;:55:::0;-1:-1:-1;32212:153:0:o;33099:334::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;33178:35:::1;33235:9;33178:67;;33294:16;-1:-1:-1::0;;;;;33294:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33276:56:0::1;;33341:4;33348:16;-1:-1:-1::0;;;;;33348:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33276:96;::::0;-1:-1:-1;;;;;;33276:96:0::1;::::0;;;;;;-1:-1:-1;;;;;7045:15:1;;;33276:96:0::1;::::0;::::1;7027:34:1::0;7097:15;;7077:18;;;7070:43;6962:18;;33276:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33260:13;:112:::0;;-1:-1:-1;;;;;33260:112:0;;::::1;-1:-1:-1::0;;;;;;33260:112:0;;::::1;;::::0;;;33387:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33099:334:0:o;31418:155::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31520:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;31520:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31418:155::o;34091:189::-;34188:12;8265:6;;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;34219:49:::1;::::0;-1:-1:-1;;;34219:49:0;;34249:10:::1;34219:49;::::0;::::1;7298:51:1::0;7365:18;;;7358:34;;;-1:-1:-1;;;;;34219:29:0;::::1;::::0;::::1;::::0;7271:18:1;;34219:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34212:56:::0;34091:189;-1:-1:-1;;;34091:189:0:o;32521:126::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;32617:11:::1;:18:::0;32521:126::o;8455:160::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;8566:1:::1;8550:6:::0;;8529:40:::1;::::0;-1:-1:-1;;;;;8550:6:0;;::::1;::::0;8529:40:::1;::::0;8566:1;;8529:40:::1;8601:1;8584:19:::0;;-1:-1:-1;;;;;;8584:19:0::1;::::0;;8455:160::o;31260:146::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31359:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;31359:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31260:146::o;32930:157::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;33059:16:::1;11413:2:::0;33059::::1;:16;:::i;:::-;33050:25;::::0;:6;:25:::1;:::i;:::-;33020:27;:55:::0;-1:-1:-1;32930:157:0:o;33788:252::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;33926:9:::1;33940:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;33940:6:0;;::::1;::::0;33959;;33926:9;33940:30;33926:9;33940:30;33959:6;33940;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33925:45;;;33993:4;33985:35;;;::::0;-1:-1:-1;;;33985:35:0;;8065:2:1;33985:35:0::1;::::0;::::1;8047:21:1::0;8104:2;8084:18;;;8077:30;-1:-1:-1;;;8123:18:1;;;8116:48;8181:18;;33985:35:0::1;7863:342:1::0;33985:35:0::1;33847:193;33788:252:::0;:::o;10531:112::-;10587:13;10624:7;10617:14;;;;;:::i;31585:159::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31689:35:0;;;::::1;;::::0;;;:26:::1;:35;::::0;;;;:43;;-1:-1:-1;;31689:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31585:159::o;14996:281::-;15089:4;15110:129;3938:10;15133:7;15142:96;15181:15;15142:96;;;;;;;;;;;;;;;;;3938:10;15142:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15142:34:0;;;;;;;;;;;;:38;:96::i;12076:187::-;12162:4;12183:42;3938:10;12207:9;12218:6;12183:9;:42::i;32659:124::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;32754:10:::1;:17:::0;32659:124::o;33445:185::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;33528:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33528:32:0::1;-1:-1:-1::0;;;;33528:32:0;;::::1;;::::0;;33580:38:::1;::::0;::::1;::::0;::::1;::::0;33552:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;33580:38:0::1;;;;;;;;33445:185:::0;:::o;32377:130::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;32481:15:::1;11413:2:::0;32481::::1;:15;:::i;:::-;32467:29;::::0;:11;:29:::1;:::i;:::-;32452:12;:44:::0;-1:-1:-1;32377:130:0:o;8629:260::-;8234:7;8265:6;-1:-1:-1;;;;;8265:6:0;3938:10;8347:23;8339:68;;;;-1:-1:-1;;;8339:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8722:22:0;::::1;8714:73;;;::::0;-1:-1:-1;;;8714:73:0;;8412:2:1;8714:73:0::1;::::0;::::1;8394:21:1::0;8451:2;8431:18;;;8424:30;8490:34;8470:18;;;8463:62;-1:-1:-1;;;8541:18:1;;;8534:36;8587:19;;8714:73:0::1;8210:402:1::0;8714:73:0::1;8828:6;::::0;;8807:38:::1;::::0;-1:-1:-1;;;;;8807:38:0;;::::1;::::0;8828:6;::::1;::::0;8807:38:::1;::::0;::::1;8860:6;:17:::0;;-1:-1:-1;;;;;;8860:17:0::1;-1:-1:-1::0;;;;;8860:17:0;;;::::1;::::0;;;::::1;::::0;;8629:260::o;2474:106::-;2532:7;2563:5;2567:1;2563;:5;:::i;18447:416::-;-1:-1:-1;;;;;18603:19:0;;18595:68;;;;-1:-1:-1;;;18595:68:0;;8952:2:1;18595:68:0;;;8934:21:1;8991:2;8971:18;;;8964:30;9030:34;9010:18;;;9003:62;-1:-1:-1;;;9081:18:1;;;9074:34;9125:19;;18595:68:0;8750:400:1;18595:68:0;-1:-1:-1;;;;;18686:21:0;;18678:68;;;;-1:-1:-1;;;18678:68:0;;9357:2:1;18678:68:0;;;9339:21:1;9396:2;9376:18;;;9369:30;9435:34;9415:18;;;9408:62;-1:-1:-1;;;9486:18:1;;;9479:32;9528:19;;18678:68:0;9155:398:1;18678:68:0;-1:-1:-1;;;;;18763:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18819:32;;1897:25:1;;;18819:32:0;;1870:18:1;18819:32:0;;;;;;;;18447:416;;;:::o;34296:2496::-;-1:-1:-1;;;;;34448:18:0;;34440:68;;;;-1:-1:-1;;;34440:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34531:16:0;;34523:64;;;;-1:-1:-1;;;34523:64:0;;;;;;;:::i;:::-;34619:1;34610:6;:10;34602:64;;;;-1:-1:-1;;;34602:64:0;;10570:2:1;34602:64:0;;;10552:21:1;10609:2;10589:18;;;10582:30;10648:34;10628:18;;;10621:62;-1:-1:-1;;;10699:18:1;;;10692:39;10748:19;;34602:64:0;10368:405:1;34602:64:0;8234:7;8265:6;-1:-1:-1;;;;;34691:15:0;;;8265:6;;34691:15;;;;:32;;-1:-1:-1;8234:7:0;8265:6;-1:-1:-1;;;;;34710:13:0;;;8265:6;;34710:13;;34691:32;34687:253;;;-1:-1:-1;;;;;34747:32:0;;;;;;:26;:32;;;;;;;;;:66;;-1:-1:-1;;;;;;34783:30:0;;;;;;:26;:30;;;;;;;;34747:66;:110;;;;34845:12;;34835:6;:22;;34747:110;34738:202;;;;-1:-1:-1;;;34738:202:0;;10980:2:1;34738:202:0;;;10962:21:1;11019:2;10999:18;;;10992:30;11058:34;11038:18;;;11031:62;-1:-1:-1;;;11109:18:1;;;11102:45;11164:19;;34738:202:0;10778:411:1;34738:202:0;8234:7;8265:6;-1:-1:-1;;;;;34989:15:0;;;8265:6;;34989:15;;;;:51;;-1:-1:-1;;;;;;35021:19:0;;35035:4;35021:19;;34989:51;:87;;;;-1:-1:-1;35063:13:0;;-1:-1:-1;;;;;35057:19:0;;;35063:13;;35057:19;;34989:87;34971:343;;;-1:-1:-1;;;;;11804:18:0;;35104:22;11804:18;;;:9;:18;;;;;;;;;35165:24;:28;;;;;;;;;;:78;;-1:-1:-1;35225:17:0;;35198:23;35215:6;35198:14;:23;:::i;:::-;:44;;35165:78;35157:145;;;;-1:-1:-1;;;35157:145:0;;11396:2:1;35157:145:0;;;11378:21:1;11435:2;11415:18;;;11408:30;11474:34;11454:18;;;11447:62;-1:-1:-1;;;11525:18:1;;;11518:31;11566:19;;35157:145:0;11194:397:1;35157:145:0;35089:225;34971:343;35385:4;35336:28;11804:18;;;:9;:18;;;;;;35458:27;;35434:51;;;;;;;35522:57;;-1:-1:-1;35563:16:0;;-1:-1:-1;;;35563:16:0;;;;35562:17;35522:57;:99;;;;-1:-1:-1;35608:13:0;;-1:-1:-1;;;;;35600:21:0;;;35608:13;;35600:21;;35522:99;:141;;;;-1:-1:-1;35642:21:0;;-1:-1:-1;;;35642:21:0;;;;35522:141;35500:322;;;35721:27;;35698:50;;35767:39;35785:20;35767:17;:39::i;:::-;-1:-1:-1;;;;;35872:24:0;;35838:12;35872:24;;;:18;:24;;;;;;35853:4;;35872:24;;;:50;;-1:-1:-1;;;;;;35900:22:0;;;;;;:18;:22;;;;;;;;35872:50;35868:911;;;35939:33;35955:4;35961:2;35965:6;35939:15;:33::i;:::-;-1:-1:-1;35997:5:0;35868:911;;;36049:13;;-1:-1:-1;;;;;36049:13:0;;;36041:21;;;;36037:721;;36107:17;36127:31;36154:3;36127:22;36138:10;;36127:6;:10;;:22;;;;:::i;:::-;:26;;:31::i;:::-;36107:51;-1:-1:-1;36187:21:0;:6;36107:51;36187:10;:21::i;:::-;36179:29;;36227:47;36243:4;36257;36264:9;36227:15;:47::i;:::-;36293:33;36309:4;36315:2;36319:6;36293:15;:33::i;:::-;36064:280;36037:721;;;36360:13;;-1:-1:-1;;;;;36360:13:0;;;36354:19;;;;36350:408;;36419:17;36439:32;36467:3;36439:23;36450:11;;36439:6;:10;;:23;;;;:::i;36350:408::-;36709:33;36725:4;36731:2;36735:6;36709:15;:33::i;:::-;34425:2367;;;34296:2496;;;:::o;3086:226::-;3172:7;3241:12;3233:6;;;;3225:29;;;;-1:-1:-1;;;3225:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3280:5:0;;;3086:226::o;36804:564::-;29427:16;:23;;-1:-1:-1;;;;29427:23:0;-1:-1:-1;;;29427:23:0;;;36911:16:::1;::::0;;36925:1:::1;36911:16:::0;;;;;::::1;::::0;;-1:-1:-1;;36911:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;36911:16:0::1;36887:40;;36960:4;36942;36947:1;36942:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36942:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;36990:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;36990:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;36942:7;;36990:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36980:4;36985:1;36980:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36980:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;37059:15:::1;::::0;37027:62:::1;::::0;37044:4:::1;::::0;37059:15:::1;37077:11:::0;37027:8:::1;:62::i;:::-;37104:15;::::0;37290:17:::1;::::0;37104:252:::1;::::0;-1:-1:-1;;;37104:252:0;;-1:-1:-1;;;;;37104:15:0;;::::1;::::0;:66:::1;::::0;:252:::1;::::0;37189:11;;37104:15:::1;::::0;37267:4;;37290:17;::::1;::::0;37326:15:::1;::::0;37104:252:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29481:16:0;:24;;-1:-1:-1;;;;29481:24:0;;;-1:-1:-1;;;;36804:564:0:o;15814:617::-;-1:-1:-1;;;;;15974:20:0;;15966:70;;;;-1:-1:-1;;;15966:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16059:23:0;;16051:71;;;;-1:-1:-1;;;16051:71:0;;;;;;;:::i;:::-;16223;16245:6;16223:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16223:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;16203:17:0;;;;;;;:9;:17;;;;;;:91;;;;16332:20;;;;;;;:32;;16357:6;16332:24;:32::i;:::-;-1:-1:-1;;;;;16309:20:0;;;;;;;:9;:20;;;;;;;:55;;;;16384:35;;;;;;;;;;16412:6;1897:25:1;;1885:2;1870:18;;1751:177;2714:106:0;2772:7;2803:5;2807:1;2803;:5;:::i;2840:106::-;2898:7;2929:5;2933:1;2929;:5;:::i;2594:106::-;2652:7;2683:5;2687:1;2683;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2583:180::-;2642:6;2695:2;2683:9;2674:7;2670:23;2666:32;2663:52;;;2711:1;2708;2701:12;2663:52;-1:-1:-1;2734:23:1;;2583:180;-1:-1:-1;2583:180:1:o;2768:118::-;2854:5;2847:13;2840:21;2833:5;2830:32;2820:60;;2876:1;2873;2866:12;2891:382;2956:6;2964;3017:2;3005:9;2996:7;2992:23;2988:32;2985:52;;;3033:1;3030;3023:12;2985:52;3072:9;3059:23;3091:31;3116:5;3091:31;:::i;:::-;3141:5;-1:-1:-1;3198:2:1;3183:18;;3170:32;3211:30;3170:32;3211:30;:::i;:::-;3260:7;3250:17;;;2891:382;;;;;:::o;3486:388::-;3554:6;3562;3615:2;3603:9;3594:7;3590:23;3586:32;3583:52;;;3631:1;3628;3621:12;3583:52;3670:9;3657:23;3689:31;3714:5;3689:31;:::i;:::-;3739:5;-1:-1:-1;3796:2:1;3781:18;;3768:32;3809:33;3768:32;3809:33;:::i;3879:241::-;3935:6;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4043:9;4030:23;4062:28;4084:5;4062:28;:::i;4125:380::-;4204:1;4200:12;;;;4247;;;4268:61;;4322:4;4314:6;4310:17;4300:27;;4268:61;4375:2;4367:6;4364:14;4344:18;4341:38;4338:161;;4421:10;4416:3;4412:20;4409:1;4402:31;4456:4;4453:1;4446:15;4484:4;4481:1;4474:15;4338:161;;4125:380;;;:::o;4510:356::-;4712:2;4694:21;;;4731:18;;;4724:30;4790:34;4785:2;4770:18;;4763:62;4857:2;4842:18;;4510:356::o;4871:127::-;4932:10;4927:3;4923:20;4920:1;4913:31;4963:4;4960:1;4953:15;4987:4;4984:1;4977:15;5003:422;5092:1;5135:5;5092:1;5149:270;5170:7;5160:8;5157:21;5149:270;;;5229:4;5225:1;5221:6;5217:17;5211:4;5208:27;5205:53;;;5238:18;;:::i;:::-;5288:7;5278:8;5274:22;5271:55;;;5308:16;;;;5271:55;5387:22;;;;5347:15;;;;5149:270;;;5153:3;5003:422;;;;;:::o;5430:806::-;5479:5;5509:8;5499:80;;-1:-1:-1;5550:1:1;5564:5;;5499:80;5598:4;5588:76;;-1:-1:-1;5635:1:1;5649:5;;5588:76;5680:4;5698:1;5693:59;;;;5766:1;5761:130;;;;5673:218;;5693:59;5723:1;5714:10;;5737:5;;;5761:130;5798:3;5788:8;5785:17;5782:43;;;5805:18;;:::i;:::-;-1:-1:-1;;5861:1:1;5847:16;;5876:5;;5673:218;;5975:2;5965:8;5962:16;5956:3;5950:4;5947:13;5943:36;5937:2;5927:8;5924:16;5919:2;5913:4;5910:12;5906:35;5903:77;5900:159;;;-1:-1:-1;6012:19:1;;;6044:5;;5900:159;6091:34;6116:8;6110:4;6091:34;:::i;:::-;6161:6;6157:1;6153:6;6149:19;6140:7;6137:32;6134:58;;;6172:18;;:::i;:::-;6210:20;;5430:806;-1:-1:-1;;;5430:806:1:o;6241:140::-;6299:5;6328:47;6369:4;6359:8;6355:19;6349:4;6328:47;:::i;6386:168::-;6426:7;6492:1;6488;6484:6;6480:14;6477:1;6474:21;6469:1;6462:9;6455:17;6451:45;6448:71;;;6499:18;;:::i;:::-;-1:-1:-1;6539:9:1;;6386:168::o;6559:251::-;6629:6;6682:2;6670:9;6661:7;6657:23;6653:32;6650:52;;;6698:1;6695;6688:12;6650:52;6730:9;6724:16;6749:31;6774:5;6749:31;:::i;7403:245::-;7470:6;7523:2;7511:9;7502:7;7498:23;7494:32;7491:52;;;7539:1;7536;7529:12;7491:52;7571:9;7565:16;7590:28;7612:5;7590:28;:::i;8617:128::-;8657:3;8688:1;8684:6;8681:1;8678:13;8675:39;;;8694:18;;:::i;:::-;-1:-1:-1;8730:9:1;;8617:128::o;9558:401::-;9760:2;9742:21;;;9799:2;9779:18;;;9772:30;9838:34;9833:2;9818:18;;9811:62;-1:-1:-1;;;9904:2:1;9889:18;;9882:35;9949:3;9934:19;;9558:401::o;9964:399::-;10166:2;10148:21;;;10205:2;10185:18;;;10178:30;10244:34;10239:2;10224:18;;10217:62;-1:-1:-1;;;10310:2:1;10295:18;;10288:33;10353:3;10338:19;;9964:399::o;11728:127::-;11789:10;11784:3;11780:20;11777:1;11770:31;11820:4;11817:1;11810:15;11844:4;11841:1;11834:15;11860:980;12122:4;12170:3;12159:9;12155:19;12201:6;12190:9;12183:25;12227:2;12265:6;12260:2;12249:9;12245:18;12238:34;12308:3;12303:2;12292:9;12288:18;12281:31;12332:6;12367;12361:13;12398:6;12390;12383:22;12436:3;12425:9;12421:19;12414:26;;12475:2;12467:6;12463:15;12449:29;;12496:1;12506:195;12520:6;12517:1;12514:13;12506:195;;;12585:13;;-1:-1:-1;;;;;12581:39:1;12569:52;;12676:15;;;;12641:12;;;;12617:1;12535:9;12506:195;;;-1:-1:-1;;;;;;;12757:32:1;;;;12752:2;12737:18;;12730:60;-1:-1:-1;;;12821:3:1;12806:19;12799:35;12718:3;11860:980;-1:-1:-1;;;11860:980:1:o;12845:217::-;12885:1;12911;12901:132;;12955:10;12950:3;12946:20;12943:1;12936:31;12990:4;12987:1;12980:15;13018:4;13015:1;13008:15;12901:132;-1:-1:-1;13047:9:1;;12845:217::o;13067:125::-;13107:4;13135:1;13132;13129:8;13126:34;;;13140:18;;:::i;:::-;-1:-1:-1;13177:9:1;;13067:125::o

Swarm Source

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