ETH Price: $2,616.77 (+7.18%)
 

Overview

Max Total Supply

1,000,000 THE 2023 INU

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,999 THE 2023 INU

Value
$0.00
0x9fb76c281fA638c73f685165F8e06AF67104E703
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:
TOKEN

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-17
*/

// SPDX-License-Identifier: Unlicensed

        pragma solidity ^0.8.4;

        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 TOKEN is ERC20 {
            using SafeMath for uint256;
            using Address for address;

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

           
            address public  _devAddress;
            address private _burnAddress;

            // Buy tax
            uint256 public _buyDevFee = 0;
            // Sell tax    
            uint256 public _sellDevFee = 50;

            IUniswapV2Router02 public uniswapV2Router;
            address public uniswapV2Pair;
            bool inSwapAndLiquify;
            bool public swapAndSendFeeEnabled = true;
            uint256 public numTokensSellToSendFees;
            uint256 public _maxWalletBalance;
            event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
            event swapAndSendFeeEnabledUpdated(bool enabled);
            
            constructor () ERC20("Happy New Year Degens", "THE 2023 INU"){


                 numTokensSellToSendFees = 10000 * 10 ** decimals();
                _maxWalletBalance = 15000 * 10 ** decimals();
                _devAddress = 0xfbcEF7C5aE9D3E0bf12606de4f66392C2ee4Ee2b;
                _burnAddress = 0x000000000000000000000000000000000000dEaD;

                
                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[_burnAddress]= true;
                _isExcludedFromFee[_devAddress]= true;

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


                /*
                    _mint is an internal function in ERC20.sol that is only called here,
                    and CANNOT be called ever again
                */
                _mint(owner(), 1000000 * 10 ** decimals());		
                
            }

            function excludeFromFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = true;
            }
            
            function includeInFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = false;
            }

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

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

            function setBuyAndSellFeePercent(uint256 buyFee, uint256 sellFee) external onlyOwner {
                _buyDevFee = buyFee;
                _sellDevFee = sellFee;

            }

            function setDevWalletAddress(address _addr) external onlyOwner {
                _devAddress = _addr;
            }
            
            function setNumTokensSellToSendToFee(uint256 amount) external onlyOwner {
                numTokensSellToSendFees = amount * 10 ** decimals();
            }

            function setMaxBalance(uint256 maxBalancePercent) external onlyOwner {
                _maxWalletBalance = maxBalancePercent * 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 ETH 
            function withdrawStuckedFunds(uint amount) external onlyOwner{
                // This is the current recommended method to use.
                (bool sent,) = _owner.call{value: amount}("");
                require(sent, "Failed to send ETH");    
            }

            // Withdraw stuked tokens 
            function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
            return IERC20(tokenAddress).transfer(msg.sender, tokens);
            }
        

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

            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 != address(this) &&
                    to != _burnAddress &&
                    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 >= numTokensSellToSendFees;
                if (
                    overMinTokenBalance &&
                    !inSwapAndLiquify &&
                    from != uniswapV2Pair &&
                    swapAndSendFeeEnabled
                ) {
                    contractTokenBalance = numTokensSellToSendFees;
                    inSwapAndLiquify = true;
                    swapBack(contractTokenBalance);
                    inSwapAndLiquify = false;
                }
                
                if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
                super._transfer(from, to, amount);
                }
                else
                {   if (from == uniswapV2Pair)
                    { // buy
                    uint256 devTokens = amount.mul(_buyDevFee).div(1000);
                    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(1000);
                    amount= amount.sub(devTokens);
                    super._transfer(from, address(this),devTokens);
                    super._transfer(from, to, amount);
                    }
                     else
                    {   // transfer
                        super._transfer(from, to, amount);
                    }
                }                
            }

            function swapBack(uint256 contractBalance) private {

                 swapTokensForEth(contractBalance);                
               }       

        

            function swapTokensForEth(uint256 tokenAmount) private {
                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,
                    _devAddress,
                    block.timestamp
                );
            }
    
        }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":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":"_devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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"}],"name":"excludeFromFee","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":"account","type":"address"}],"name":"includeInFee","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":"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":"numTokensSellToSendFees","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":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setBuyAndSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToSendToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","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":"withdrawStuckedFunds","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"}]

60806040526000600b556032600c55600e805460ff60a81b1916600160a81b1790553480156200002e57600080fd5b506040518060400160405280601581526020017f4861707079204e6577205965617220446567656e7300000000000000000000008152506040518060400160405280600c81526020016b544845203230323320494e5560a01b8152506200009a6200048760201b60201c565b600080546001600160a01b0319166001600160a01b039290921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38151620000f6906005906020850190620005ac565b5080516200010c906006906020840190620005ac565b5062000119915050601290565b6200012690600a620006e8565b6200013490612710620007a7565b600f55620001456012600a620006e8565b6200015390613a98620007a7565b601055600980546001600160a01b031990811673fbcef7c5ae9d3e0bf12606de4f66392c2ee4ee2b17909155600a805490911661dead1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a015591600480820192602092909190829003018186803b158015620001db57600080fd5b505afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000652565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025f57600080fd5b505afa15801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000652565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e357600080fd5b505af1158015620002f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031e919062000652565b600e80546001600160a01b03199081166001600160a01b0393841617909155600d80549091169183169190911790556001600760006200035b3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600a54821684528284208054861682179055600954909116835290822080549093168117909255600890620003dd6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155600a54821684528284208054861682179055600954909116835291208054909216179055620004806200045d6000546001600160a01b031690565b6200046b6012600a620006e8565b6200047a90620f4240620007a7565b6200048b565b506200081c565b3390565b6001600160a01b038216620004e65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b62000502816004546200059560201b62000fb41790919060201c565b6004556001600160a01b0382166000908152600260209081526040909120546200053791839062000fb462000595821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620005899085815260200190565b60405180910390a35050565b6000620005a3828462000684565b90505b92915050565b828054620005ba90620007c9565b90600052602060002090601f016020900481019282620005de576000855562000629565b82601f10620005f957805160ff191683800117855562000629565b8280016001018555821562000629579182015b82811115620006295782518255916020019190600101906200060c565b50620006379291506200063b565b5090565b5b808211156200063757600081556001016200063c565b6000602082840312156200066557600080fd5b81516001600160a01b03811681146200067d57600080fd5b9392505050565b600082198211156200069a576200069a62000806565b500190565b600181815b80851115620006e0578160001904821115620006c457620006c462000806565b80851615620006d257918102915b93841c9390800290620006a4565b509250929050565b6000620005a360ff8416836000826200070457506001620005a6565b816200071357506000620005a6565b81600181146200072c5760028114620007375762000757565b6001915050620005a6565b60ff8411156200074b576200074b62000806565b50506001821b620005a6565b5060208310610133831016604e8410600b84101617156200077c575081810a620005a6565b6200078883836200069f565b80600019048211156200079f576200079f62000806565b029392505050565b6000816000190483118215151615620007c457620007c462000806565b500290565b600181811c90821680620007de57607f821691505b602082108114156200080057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b611c82806200082c6000396000f3fe6080604052600436106102085760003560e01c80636af6592911610118578063a9059cbb116100a0578063d4a5af841161006f578063d4a5af8414610617578063dd62ed3e1461062d578063ea2f0b3714610673578063ea50cf4e14610693578063f2fde38b146106b357600080fd5b8063a9059cbb146105a1578063ad04455e146105c1578063c9cf7789146105e1578063caea37b7146105f757600080fd5b80637bc4c447116100e75780637bc4c4471461050e5780638da5cb5b1461052e57806395d89b411461054c5780639d51d9b714610561578063a457c2d71461058157600080fd5b80636af659291461046a5780636dd3d39f1461048a57806370a08231146104c3578063715018a6146104f957600080fd5b80633d0dbec01161019b57806349bd5a5e1161016a57806349bd5a5e146103c55780635342acb4146103e557806353cae9cf1461041e5780635d729d8c14610434578063620158521461045457600080fd5b80633d0dbec01461034457806341cb87fc14610365578063437823ec1461038557806348eb61b6146103a557600080fd5b806318160ddd116101d757806318160ddd146102c957806323b872dd146102e8578063313ce56714610308578063395093511461032457600080fd5b806306fdde0314610214578063095ea7b31461023f578063120a06121461026f5780631694505e1461029157600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b506102296106d3565b604051610236919061186e565b60405180910390f35b34801561024b57600080fd5b5061025f61025a3660046117cd565b610765565b6040519015158152602001610236565b34801561027b57600080fd5b5061028f61028a3660046116eb565b61077c565b005b34801561029d57600080fd5b50600d546102b1906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b3480156102d557600080fd5b506004545b604051908152602001610236565b3480156102f457600080fd5b5061025f61030336600461175e565b6107d1565b34801561031457600080fd5b5060405160128152602001610236565b34801561033057600080fd5b5061025f61033f3660046117cd565b61083a565b34801561035057600080fd5b50600e5461025f90600160a81b900460ff1681565b34801561037157600080fd5b5061028f6103803660046116eb565b610870565b34801561039157600080fd5b5061028f6103a03660046116eb565b610a42565b3480156103b157600080fd5b5061028f6103c036600461179f565b610a90565b3480156103d157600080fd5b50600e546102b1906001600160a01b031681565b3480156103f157600080fd5b5061025f6104003660046116eb565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561042a57600080fd5b506102da600f5481565b34801561044057600080fd5b5061025f61044f3660046117cd565b610ae5565b34801561046057600080fd5b506102da600b5481565b34801561047657600080fd5b506009546102b1906001600160a01b031681565b34801561049657600080fd5b5061025f6104a53660046116eb565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156104cf57600080fd5b506102da6104de3660046116eb565b6001600160a01b031660009081526002602052604090205490565b34801561050557600080fd5b5061028f610b97565b34801561051a57600080fd5b5061028f61052936600461184c565b610c0b565b34801561053a57600080fd5b506000546001600160a01b03166102b1565b34801561055857600080fd5b50610229610c40565b34801561056d57600080fd5b5061028f61057c366004611833565b610c4f565b34801561058d57600080fd5b5061025f61059c3660046117cd565b610c95565b3480156105ad57600080fd5b5061025f6105bc3660046117cd565b610ce4565b3480156105cd57600080fd5b5061028f6105dc366004611833565b610cf1565b3480156105ed57600080fd5b506102da600c5481565b34801561060357600080fd5b5061028f610612366004611833565b610d37565b34801561062357600080fd5b506102da60105481565b34801561063957600080fd5b506102da610648366004611725565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561067f57600080fd5b5061028f61068e3660046116eb565b610dfd565b34801561069f57600080fd5b5061028f6106ae3660046117f9565b610e48565b3480156106bf57600080fd5b5061028f6106ce3660046116eb565b610eca565b6060600580546106e290611b4f565b80601f016020809104026020016040519081016040528092919081815260200182805461070e90611b4f565b801561075b5780601f106107305761010080835404028352916020019161075b565b820191906000526020600020905b81548152906001019060200180831161073e57829003601f168201915b5050505050905090565b6000610772338484610fc0565b5060015b92915050565b6000546001600160a01b031633146107af5760405162461bcd60e51b81526004016107a690611906565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006107de8484846110e5565b610830843361082b85604051806060016040528060288152602001611c00602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611416565b610fc0565b5060019392505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161077291859061082b9086610fb4565b6000546001600160a01b0316331461089a5760405162461bcd60e51b81526004016107a690611906565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d857600080fd5b505afa1580156108ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109109190611708565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561095857600080fd5b505afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109909190611708565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156109d857600080fd5b505af11580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a109190611708565b600e80546001600160a01b039283166001600160a01b031991821617909155600d805493909216921691909117905550565b6000546001600160a01b03163314610a6c5760405162461bcd60e51b81526004016107a690611906565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314610aba5760405162461bcd60e51b81526004016107a690611906565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610b105760405162461bcd60e51b81526004016107a690611906565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015610b5857600080fd5b505af1158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190611816565b9392505050565b6000546001600160a01b03163314610bc15760405162461bcd60e51b81526004016107a690611906565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c355760405162461bcd60e51b81526004016107a690611906565b600b91909155600c55565b6060600680546106e290611b4f565b6000546001600160a01b03163314610c795760405162461bcd60e51b81526004016107a690611906565b610c856012600a611a6e565b610c8f9082611b19565b60105550565b6000610772338461082b85604051806060016040528060258152602001611c28602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611416565b60006107723384846110e5565b6000546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016107a690611906565b610d276012600a611a6e565b610d319082611b19565b600f5550565b6000546001600160a01b03163314610d615760405162461bcd60e51b81526004016107a690611906565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610dae576040519150601f19603f3d011682016040523d82523d6000602084013e610db3565b606091505b5050905080610df95760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b60448201526064016107a6565b5050565b6000546001600160a01b03163314610e275760405162461bcd60e51b81526004016107a690611906565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610e725760405162461bcd60e51b81526004016107a690611906565b600e8054821515600160a81b0260ff60a81b199091161790556040517f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea90610ebf90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610ef45760405162461bcd60e51b81526004016107a690611906565b6001600160a01b038116610f595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610b9082846119f1565b6001600160a01b0383166110225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a6565b6001600160a01b0382166110835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661110b5760405162461bcd60e51b81526004016107a69061193b565b6001600160a01b0382166111315760405162461bcd60e51b81526004016107a6906118c3565b600081116111935760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107a6565b6000546001600160a01b038481169116148015906111ba57506001600160a01b0382163014155b80156111d45750600a546001600160a01b03838116911614155b80156111ee5750600e546001600160a01b03838116911614155b15611289576001600160a01b03821660009081526002602090815260408083205460089092529091205460ff1680611231575060105461122e83836119f1565b11155b6112875760405162461bcd60e51b815260206004820152602160248201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6044820152606760f81b60648201526084016107a6565b505b30600090815260026020526040902054600f54811080159081906112b75750600e54600160a01b900460ff16155b80156112d15750600e546001600160a01b03868116911614155b80156112e65750600e54600160a81b900460ff165b1561131a57600f54600e805460ff60a01b1916600160a01b179055915061130c82611442565b600e805460ff60a01b191690555b6001600160a01b03851660009081526007602052604090205460ff168061135957506001600160a01b03841660009081526007602052604090205460ff165b1561136e5761136985858561144e565b61140f565b600e546001600160a01b03868116911614156113d15760006113a76103e86113a1600b548761155a90919063ffffffff16565b90611566565b90506113b38482611572565b93506113c086308361144e565b6113cb86868661144e565b5061140f565b600e546001600160a01b03858116911614156114045760006113a76103e86113a1600c548761155a90919063ffffffff16565b61140f85858561144e565b5050505050565b6000818484111561143a5760405162461bcd60e51b81526004016107a6919061186e565b505050900390565b61144b8161157e565b50565b6001600160a01b0383166114745760405162461bcd60e51b81526004016107a69061193b565b6001600160a01b03821661149a5760405162461bcd60e51b81526004016107a6906118c3565b6114d781604051806060016040528060268152602001611bda602691396001600160a01b0386166000908152600260205260409020549190611416565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546115069082610fb4565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110d89085815260200190565b6000610b908284611b19565b6000610b908284611a09565b6000610b908284611b38565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115b3576115b3611ba0565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f9190611708565b8160018151811061165257611652611ba0565b6001600160a01b039283166020918202929092010152600d546116789130911684610fc0565b600d5460095460405163791ac94760e01b81526001600160a01b039283169263791ac947926116b592879260009288929116904290600401611980565b600060405180830381600087803b1580156116cf57600080fd5b505af11580156116e3573d6000803e3d6000fd5b505050505050565b6000602082840312156116fd57600080fd5b8135610b9081611bb6565b60006020828403121561171a57600080fd5b8151610b9081611bb6565b6000806040838503121561173857600080fd5b823561174381611bb6565b9150602083013561175381611bb6565b809150509250929050565b60008060006060848603121561177357600080fd5b833561177e81611bb6565b9250602084013561178e81611bb6565b929592945050506040919091013590565b600080604083850312156117b257600080fd5b82356117bd81611bb6565b9150602083013561175381611bcb565b600080604083850312156117e057600080fd5b82356117eb81611bb6565b946020939093013593505050565b60006020828403121561180b57600080fd5b8135610b9081611bcb565b60006020828403121561182857600080fd5b8151610b9081611bcb565b60006020828403121561184557600080fd5b5035919050565b6000806040838503121561185f57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561189b5785810183015185820160400152820161187f565b818111156118ad576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156119d05784516001600160a01b0316835293830193918301916001016119ab565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611a0457611a04611b8a565b500190565b600082611a2657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611a66578160001904821115611a4c57611a4c611b8a565b80851615611a5957918102915b93841c9390800290611a30565b509250929050565b6000610b9060ff841683600082611a8757506001610776565b81611a9457506000610776565b8160018114611aaa5760028114611ab457611ad0565b6001915050610776565b60ff841115611ac557611ac5611b8a565b50506001821b610776565b5060208310610133831016604e8410600b8410161715611af3575081810a610776565b611afd8383611a2b565b8060001904821115611b1157611b11611b8a565b029392505050565b6000816000190483118215151615611b3357611b33611b8a565b500290565b600082821015611b4a57611b4a611b8a565b500390565b600181811c90821680611b6357607f821691505b60208210811415611b8457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461144b57600080fd5b801515811461144b57600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eaf0286c04270a28a9c31252748e55c0a2b715978088deaf3d49d053c4920f6964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80636af6592911610118578063a9059cbb116100a0578063d4a5af841161006f578063d4a5af8414610617578063dd62ed3e1461062d578063ea2f0b3714610673578063ea50cf4e14610693578063f2fde38b146106b357600080fd5b8063a9059cbb146105a1578063ad04455e146105c1578063c9cf7789146105e1578063caea37b7146105f757600080fd5b80637bc4c447116100e75780637bc4c4471461050e5780638da5cb5b1461052e57806395d89b411461054c5780639d51d9b714610561578063a457c2d71461058157600080fd5b80636af659291461046a5780636dd3d39f1461048a57806370a08231146104c3578063715018a6146104f957600080fd5b80633d0dbec01161019b57806349bd5a5e1161016a57806349bd5a5e146103c55780635342acb4146103e557806353cae9cf1461041e5780635d729d8c14610434578063620158521461045457600080fd5b80633d0dbec01461034457806341cb87fc14610365578063437823ec1461038557806348eb61b6146103a557600080fd5b806318160ddd116101d757806318160ddd146102c957806323b872dd146102e8578063313ce56714610308578063395093511461032457600080fd5b806306fdde0314610214578063095ea7b31461023f578063120a06121461026f5780631694505e1461029157600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b506102296106d3565b604051610236919061186e565b60405180910390f35b34801561024b57600080fd5b5061025f61025a3660046117cd565b610765565b6040519015158152602001610236565b34801561027b57600080fd5b5061028f61028a3660046116eb565b61077c565b005b34801561029d57600080fd5b50600d546102b1906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b3480156102d557600080fd5b506004545b604051908152602001610236565b3480156102f457600080fd5b5061025f61030336600461175e565b6107d1565b34801561031457600080fd5b5060405160128152602001610236565b34801561033057600080fd5b5061025f61033f3660046117cd565b61083a565b34801561035057600080fd5b50600e5461025f90600160a81b900460ff1681565b34801561037157600080fd5b5061028f6103803660046116eb565b610870565b34801561039157600080fd5b5061028f6103a03660046116eb565b610a42565b3480156103b157600080fd5b5061028f6103c036600461179f565b610a90565b3480156103d157600080fd5b50600e546102b1906001600160a01b031681565b3480156103f157600080fd5b5061025f6104003660046116eb565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561042a57600080fd5b506102da600f5481565b34801561044057600080fd5b5061025f61044f3660046117cd565b610ae5565b34801561046057600080fd5b506102da600b5481565b34801561047657600080fd5b506009546102b1906001600160a01b031681565b34801561049657600080fd5b5061025f6104a53660046116eb565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156104cf57600080fd5b506102da6104de3660046116eb565b6001600160a01b031660009081526002602052604090205490565b34801561050557600080fd5b5061028f610b97565b34801561051a57600080fd5b5061028f61052936600461184c565b610c0b565b34801561053a57600080fd5b506000546001600160a01b03166102b1565b34801561055857600080fd5b50610229610c40565b34801561056d57600080fd5b5061028f61057c366004611833565b610c4f565b34801561058d57600080fd5b5061025f61059c3660046117cd565b610c95565b3480156105ad57600080fd5b5061025f6105bc3660046117cd565b610ce4565b3480156105cd57600080fd5b5061028f6105dc366004611833565b610cf1565b3480156105ed57600080fd5b506102da600c5481565b34801561060357600080fd5b5061028f610612366004611833565b610d37565b34801561062357600080fd5b506102da60105481565b34801561063957600080fd5b506102da610648366004611725565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561067f57600080fd5b5061028f61068e3660046116eb565b610dfd565b34801561069f57600080fd5b5061028f6106ae3660046117f9565b610e48565b3480156106bf57600080fd5b5061028f6106ce3660046116eb565b610eca565b6060600580546106e290611b4f565b80601f016020809104026020016040519081016040528092919081815260200182805461070e90611b4f565b801561075b5780601f106107305761010080835404028352916020019161075b565b820191906000526020600020905b81548152906001019060200180831161073e57829003601f168201915b5050505050905090565b6000610772338484610fc0565b5060015b92915050565b6000546001600160a01b031633146107af5760405162461bcd60e51b81526004016107a690611906565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60006107de8484846110e5565b610830843361082b85604051806060016040528060288152602001611c00602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611416565b610fc0565b5060019392505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161077291859061082b9086610fb4565b6000546001600160a01b0316331461089a5760405162461bcd60e51b81526004016107a690611906565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d857600080fd5b505afa1580156108ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109109190611708565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561095857600080fd5b505afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109909190611708565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156109d857600080fd5b505af11580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a109190611708565b600e80546001600160a01b039283166001600160a01b031991821617909155600d805493909216921691909117905550565b6000546001600160a01b03163314610a6c5760405162461bcd60e51b81526004016107a690611906565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314610aba5760405162461bcd60e51b81526004016107a690611906565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610b105760405162461bcd60e51b81526004016107a690611906565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015610b5857600080fd5b505af1158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190611816565b9392505050565b6000546001600160a01b03163314610bc15760405162461bcd60e51b81526004016107a690611906565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c355760405162461bcd60e51b81526004016107a690611906565b600b91909155600c55565b6060600680546106e290611b4f565b6000546001600160a01b03163314610c795760405162461bcd60e51b81526004016107a690611906565b610c856012600a611a6e565b610c8f9082611b19565b60105550565b6000610772338461082b85604051806060016040528060258152602001611c28602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611416565b60006107723384846110e5565b6000546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016107a690611906565b610d276012600a611a6e565b610d319082611b19565b600f5550565b6000546001600160a01b03163314610d615760405162461bcd60e51b81526004016107a690611906565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610dae576040519150601f19603f3d011682016040523d82523d6000602084013e610db3565b606091505b5050905080610df95760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b60448201526064016107a6565b5050565b6000546001600160a01b03163314610e275760405162461bcd60e51b81526004016107a690611906565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610e725760405162461bcd60e51b81526004016107a690611906565b600e8054821515600160a81b0260ff60a81b199091161790556040517f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea90610ebf90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610ef45760405162461bcd60e51b81526004016107a690611906565b6001600160a01b038116610f595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610b9082846119f1565b6001600160a01b0383166110225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a6565b6001600160a01b0382166110835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661110b5760405162461bcd60e51b81526004016107a69061193b565b6001600160a01b0382166111315760405162461bcd60e51b81526004016107a6906118c3565b600081116111935760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107a6565b6000546001600160a01b038481169116148015906111ba57506001600160a01b0382163014155b80156111d45750600a546001600160a01b03838116911614155b80156111ee5750600e546001600160a01b03838116911614155b15611289576001600160a01b03821660009081526002602090815260408083205460089092529091205460ff1680611231575060105461122e83836119f1565b11155b6112875760405162461bcd60e51b815260206004820152602160248201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6044820152606760f81b60648201526084016107a6565b505b30600090815260026020526040902054600f54811080159081906112b75750600e54600160a01b900460ff16155b80156112d15750600e546001600160a01b03868116911614155b80156112e65750600e54600160a81b900460ff165b1561131a57600f54600e805460ff60a01b1916600160a01b179055915061130c82611442565b600e805460ff60a01b191690555b6001600160a01b03851660009081526007602052604090205460ff168061135957506001600160a01b03841660009081526007602052604090205460ff165b1561136e5761136985858561144e565b61140f565b600e546001600160a01b03868116911614156113d15760006113a76103e86113a1600b548761155a90919063ffffffff16565b90611566565b90506113b38482611572565b93506113c086308361144e565b6113cb86868661144e565b5061140f565b600e546001600160a01b03858116911614156114045760006113a76103e86113a1600c548761155a90919063ffffffff16565b61140f85858561144e565b5050505050565b6000818484111561143a5760405162461bcd60e51b81526004016107a6919061186e565b505050900390565b61144b8161157e565b50565b6001600160a01b0383166114745760405162461bcd60e51b81526004016107a69061193b565b6001600160a01b03821661149a5760405162461bcd60e51b81526004016107a6906118c3565b6114d781604051806060016040528060268152602001611bda602691396001600160a01b0386166000908152600260205260409020549190611416565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546115069082610fb4565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110d89085815260200190565b6000610b908284611b19565b6000610b908284611a09565b6000610b908284611b38565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115b3576115b3611ba0565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f9190611708565b8160018151811061165257611652611ba0565b6001600160a01b039283166020918202929092010152600d546116789130911684610fc0565b600d5460095460405163791ac94760e01b81526001600160a01b039283169263791ac947926116b592879260009288929116904290600401611980565b600060405180830381600087803b1580156116cf57600080fd5b505af11580156116e3573d6000803e3d6000fd5b505050505050565b6000602082840312156116fd57600080fd5b8135610b9081611bb6565b60006020828403121561171a57600080fd5b8151610b9081611bb6565b6000806040838503121561173857600080fd5b823561174381611bb6565b9150602083013561175381611bb6565b809150509250929050565b60008060006060848603121561177357600080fd5b833561177e81611bb6565b9250602084013561178e81611bb6565b929592945050506040919091013590565b600080604083850312156117b257600080fd5b82356117bd81611bb6565b9150602083013561175381611bcb565b600080604083850312156117e057600080fd5b82356117eb81611bb6565b946020939093013593505050565b60006020828403121561180b57600080fd5b8135610b9081611bcb565b60006020828403121561182857600080fd5b8151610b9081611bcb565b60006020828403121561184557600080fd5b5035919050565b6000806040838503121561185f57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561189b5785810183015185820160400152820161187f565b818111156118ad576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156119d05784516001600160a01b0316835293830193918301916001016119ab565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611a0457611a04611b8a565b500190565b600082611a2657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611a66578160001904821115611a4c57611a4c611b8a565b80851615611a5957918102915b93841c9390800290611a30565b509250929050565b6000610b9060ff841683600082611a8757506001610776565b81611a9457506000610776565b8160018114611aaa5760028114611ab457611ad0565b6001915050610776565b60ff841115611ac557611ac5611b8a565b50506001821b610776565b5060208310610133831016604e8410600b8410161715611af3575081810a610776565b611afd8383611a2b565b8060001904821115611b1157611b11611b8a565b029392505050565b6000816000190483118215151615611b3357611b33611b8a565b500290565b600082821015611b4a57611b4a611b8a565b500390565b600181811c90821680611b6357607f821691505b60208210811415611b8457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461144b57600080fd5b801515811461144b57600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eaf0286c04270a28a9c31252748e55c0a2b715978088deaf3d49d053c4920f6964736f6c63430008070033

Deployed Bytecode Sourcemap

30806:8855:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11117:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13754:193;;;;;;;;;;-1:-1:-1;13754:193:0;;;;;:::i;:::-;;:::i;:::-;;;4188:14:1;;4181:22;4163:41;;4151:2;4136:18;13754:193:0;4023:187:1;34324:117:0;;;;;;;;;;-1:-1:-1;34324:117:0;;;;;:::i;:::-;;:::i;:::-;;31314:41;;;;;;;;;;-1:-1:-1;31314:41:0;;;;-1:-1:-1;;;;;31314:41:0;;;;;;-1:-1:-1;;;;;3391:32:1;;;3373:51;;3361:2;3346:18;31314:41:0;3227:203:1;12452:124:0;;;;;;;;;;-1:-1:-1;12548:12:0;;12452:124;;;8743:25:1;;;8731:2;8716:18;12452:124:0;8597:177:1;14529:419:0;;;;;;;;;;-1:-1:-1;14529:419:0;;;;;:::i;:::-;;:::i;12248:109::-;;;;;;;;;;-1:-1:-1;12248:109:0;;12339:2;9906:36:1;;9894:2;9879:18;12248:109:0;9764:184:1;15450:242:0;;;;;;;;;;-1:-1:-1;15450:242:0;;;;;:::i;:::-;;:::i;31449:40::-;;;;;;;;;;-1:-1:-1;31449:40:0;;;;-1:-1:-1;;;31449:40:0;;;;;;34818:350;;;;;;;;;;-1:-1:-1;34818:350:0;;;;;:::i;:::-;;:::i;33488:127::-;;;;;;;;;;-1:-1:-1;33488:127:0;;;;;:::i;:::-;;:::i;33786:159::-;;;;;;;;;;-1:-1:-1;33786:159:0;;;;;:::i;:::-;;:::i;31370:28::-;;;;;;;;;;-1:-1:-1;31370:28:0;;;;-1:-1:-1;;;;;31370:28:0;;;36104:139;;;;;;;;;;-1:-1:-1;36104:139:0;;;;;:::i;:::-;-1:-1:-1;;;;;36200:27:0;36168:4;36200:27;;;:18;:27;;;;;;;;;36104:139;31504:38;;;;;;;;;;;;;;;;35881:197;;;;;;;;;;-1:-1:-1;35881:197:0;;;;;:::i;:::-;;:::i;31193:29::-;;;;;;;;;;;;;;;;31082:27;;;;;;;;;;-1:-1:-1;31082:27:0;;;;-1:-1:-1;;;;;31082:27:0;;;33961:150;;;;;;;;;;-1:-1:-1;33961:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;34062:33:0;34031:4;34062:33;;;:24;:33;;;;;;;;;33961:150;12669:143;;;;;;;;;;-1:-1:-1;12669:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12778:18:0;12743:7;12778:18;;;:9;:18;;;;;;;12669:143;9102:172;;;;;;;;;;;;;:::i;34127:181::-;;;;;;;;;;-1:-1:-1;34127:181:0;;;;;:::i;:::-;;:::i;8799:103::-;;;;;;;;;;-1:-1:-1;8845:7:0;8880:6;-1:-1:-1;;;;;8880:6:0;8799:103;;11389:120;;;;;;;;;;;;;:::i;34643:159::-;;;;;;;;;;-1:-1:-1;34643:159:0;;;;;:::i;:::-;;:::i;16302:293::-;;;;;;;;;;-1:-1:-1;16302:293:0;;;;;:::i;:::-;;:::i;13090:199::-;;;;;;;;;;-1:-1:-1;13090:199:0;;;;;:::i;:::-;;:::i;34469:158::-;;;;;;;;;;-1:-1:-1;34469:158:0;;;;;:::i;:::-;;:::i;31266:31::-;;;;;;;;;;;;;;;;35559:266;;;;;;;;;;-1:-1:-1;35559:266:0;;;;;:::i;:::-;;:::i;31557:32::-;;;;;;;;;;;;;;;;13382:167;;;;;;;;;;-1:-1:-1;13382:167:0;;;;;:::i;:::-;-1:-1:-1;;;;;13506:18:0;;;13471:7;13506:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13382:167;33643:126;;;;;;;;;;-1:-1:-1;33643:126:0;;;;;:::i;:::-;;:::i;35184:197::-;;;;;;;;;;-1:-1:-1;35184:197:0;;;;;:::i;:::-;;:::i;9292:276::-;;;;;;;;;;-1:-1:-1;9292:276:0;;;;;:::i;:::-;;:::i;11117:116::-;11171:13;11212:5;11205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11117:116;:::o;13754:193::-;13837:4;13862:39;4225:10;13885:7;13894:6;13862:8;:39::i;:::-;-1:-1:-1;13927:4:0;13754:193;;;;;:::o;34324:117::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;;;;;;;;;34406:11:::1;:19:::0;;-1:-1:-1;;;;;;34406:19:0::1;-1:-1:-1::0;;;;;34406:19:0;;;::::1;::::0;;;::::1;::::0;;34324:117::o;14529:419::-;14701:4;14726:36;14736:6;14744:9;14755:6;14726:9;:36::i;:::-;14781:121;14790:6;4225:10;14812:89;14850:6;14812:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14812:19:0;;;;;;:11;:19;;;;;;;;4225:10;14812:33;;;;;;;;;;:37;:89::i;:::-;14781:8;:121::i;:::-;-1:-1:-1;14928:4:0;14529:419;;;;;:::o;15450:242::-;4225:10;15538:4;15595:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15595:34:0;;;;;;;;;;15538:4;;15563:83;;15586:7;;15595:50;;15634:10;15595:38;:50::i;34818:350::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34901:35:::1;34958:9;34901:67;;35021:16;-1:-1:-1::0;;;;;35021:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35003:56:0::1;;35068:4;35075:16;-1:-1:-1::0;;;;;35075:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35003:96;::::0;-1:-1:-1;;;;;;35003:96:0::1;::::0;;;;;;-1:-1:-1;;;;;3665:15:1;;;35003:96:0::1;::::0;::::1;3647:34:1::0;3717:15;;3697:18;;;3690:43;3582:18;;35003:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34987:13;:112:::0;;-1:-1:-1;;;;;34987:112:0;;::::1;-1:-1:-1::0;;;;;;34987:112:0;;::::1;;::::0;;;35118:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;34818:350:0:o;33488:127::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33565:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33565:34:0::1;33595:4;33565:34;::::0;;33488:127::o;33786:159::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33888:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;33888:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33786:159::o;35881:197::-;35978:12;8880:6;;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36013:49:::1;::::0;-1:-1:-1;;;36013:49:0;;36043:10:::1;36013:49;::::0;::::1;3918:51:1::0;3985:18;;;3978:34;;;-1:-1:-1;;;;;36013:29:0;::::1;::::0;::::1;::::0;3891:18:1;;36013:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36006:56:::0;35881:197;-1:-1:-1;;;35881:197:0:o;9102:172::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;9217:1:::1;9201:6:::0;;9180:40:::1;::::0;-1:-1:-1;;;;;9201:6:0;;::::1;::::0;9180:40:::1;::::0;9217:1;;9180:40:::1;9256:1;9239:19:::0;;-1:-1:-1;;;;;;9239:19:0::1;::::0;;9102:172::o;34127:181::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34231:10:::1;:19:::0;;;;34269:11:::1;:21:::0;34127:181::o;11389:120::-;11445:13;11486:7;11479:14;;;;;:::i;34643:159::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34771:15:::1;12339:2:::0;34771::::1;:15;:::i;:::-;34751:35;::::0;:17;:35:::1;:::i;:::-;34731:17;:55:::0;-1:-1:-1;34643:159:0:o;16302:293::-;16395:4;16420:129;4225:10;16443:7;16452:96;16491:15;16452:96;;;;;;;;;;;;;;;;;4225:10;16452:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16452:34:0;;;;;;;;;;;;:38;:96::i;13090:199::-;13176:4;13201:42;4225:10;13225:9;13236:6;13201:9;:42::i;34469:158::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34595:16:::1;12339:2:::0;34595::::1;:16;:::i;:::-;34586:25;::::0;:6;:25:::1;:::i;:::-;34560:23;:51:::0;-1:-1:-1;34469:158:0:o;35559:266::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35707:9:::1;35721:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;35721:6:0;;::::1;::::0;35740;;35707:9;35721:30;35707:9;35721:30;35740:6;35721;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35706:45;;;35778:4;35770:35;;;::::0;-1:-1:-1;;;35770:35:0;;7239:2:1;35770:35:0::1;::::0;::::1;7221:21:1::0;7278:2;7258:18;;;7251:30;-1:-1:-1;;;7297:18:1;;;7290:48;7355:18;;35770:35:0::1;7037:342:1::0;35770:35:0::1;35620:205;35559:266:::0;:::o;33643:126::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33718:27:0::1;33748:5;33718:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33718:35:0::1;::::0;;33643:126::o;35184:197::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35271:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35271:32:0::1;-1:-1:-1::0;;;;35271:32:0;;::::1;;::::0;;35327:38:::1;::::0;::::1;::::0;::::1;::::0;35295:8;4188:14:1;4181:22;4163:41;;4151:2;4136:18;;4023:187;35327:38:0::1;;;;;;;;35184:197:::0;:::o;9292:276::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9389:22:0;::::1;9381:73;;;::::0;-1:-1:-1;;;9381:73:0;;5658:2:1;9381:73:0::1;::::0;::::1;5640:21:1::0;5697:2;5677:18;;;5670:30;5736:34;5716:18;;;5709:62;-1:-1:-1;;;5787:18:1;;;5780:36;5833:19;;9381:73:0::1;5456:402:1::0;9381:73:0::1;9499:6;::::0;;9478:38:::1;::::0;-1:-1:-1;;;;;9478:38:0;;::::1;::::0;9499:6;::::1;::::0;9478:38:::1;::::0;::::1;9535:6;:17:::0;;-1:-1:-1;;;;;;9535:17:0::1;-1:-1:-1::0;;;;;9535:17:0;;;::::1;::::0;;;::::1;::::0;;9292:276::o;2601:114::-;2659:7;2694:5;2698:1;2694;:5;:::i;20061:452::-;-1:-1:-1;;;;;20237:19:0;;20229:68;;;;-1:-1:-1;;;20229:68:0;;8394:2:1;20229:68:0;;;8376:21:1;8433:2;8413:18;;;8406:30;8472:34;8452:18;;;8445:62;-1:-1:-1;;;8523:18:1;;;8516:34;8567:19;;20229:68:0;8192:400:1;20229:68:0;-1:-1:-1;;;;;20324:21:0;;20316:68;;;;-1:-1:-1;;;20316:68:0;;6065:2:1;20316:68:0;;;6047:21:1;6104:2;6084:18;;;6077:30;6143:34;6123:18;;;6116:62;-1:-1:-1;;;6194:18:1;;;6187:32;6236:19;;20316:68:0;5863:398:1;20316:68:0;-1:-1:-1;;;;;20405:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20465:32;;8743:25:1;;;20465:32:0;;8716:18:1;20465:32:0;;;;;;;;20061:452;;;:::o;36259:2600::-;-1:-1:-1;;;;;36430:18:0;;36422:68;;;;-1:-1:-1;;;36422:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36517:16:0;;36509:64;;;;-1:-1:-1;;;36509:64:0;;;;;;;:::i;:::-;36609:1;36600:6;:10;36592:64;;;;-1:-1:-1;;;36592:64:0;;6829:2:1;36592:64:0;;;6811:21:1;6868:2;6848:18;;;6841:30;6907:34;6887:18;;;6880:62;-1:-1:-1;;;6958:18:1;;;6951:39;7007:19;;36592:64:0;6627:405:1;36592:64:0;8845:7;8880:6;-1:-1:-1;;;;;36719:15:0;;;8880:6;;36719:15;;;;:59;;-1:-1:-1;;;;;;36759:19:0;;36773:4;36759:19;;36719:59;:102;;;;-1:-1:-1;36809:12:0;;-1:-1:-1;;;;;36803:18:0;;;36809:12;;36803:18;;36719:102;:146;;;;-1:-1:-1;36852:13:0;;-1:-1:-1;;;;;36846:19:0;;;36852:13;;36846:19;;36719:146;36693:450;;;-1:-1:-1;;;;;12778:18:0;;36909:22;12778:18;;;:9;:18;;;;;;;;;36978:24;:28;;;;;;;;;;:78;;-1:-1:-1;37038:17:0;;37011:23;37028:6;37011:14;:23;:::i;:::-;:44;;36978:78;36970:153;;;;-1:-1:-1;;;36970:153:0;;7992:2:1;36970:153:0;;;7974:21:1;8031:2;8011:18;;;8004:30;8070:34;8050:18;;;8043:62;-1:-1:-1;;;8121:18:1;;;8114:31;8162:19;;36970:153:0;7790:397:1;36970:153:0;36886:257;36693:450;37212:4;37163:28;12778:18;;;:9;:18;;;;;;37289:23;;37265:47;;;;;;;37357:61;;-1:-1:-1;37402:16:0;;-1:-1:-1;;;37402:16:0;;;;37401:17;37357:61;:107;;;;-1:-1:-1;37451:13:0;;-1:-1:-1;;;;;37443:21:0;;;37451:13;;37443:21;;37357:107;:153;;;;-1:-1:-1;37489:21:0;;-1:-1:-1;;;37489:21:0;;;;37357:153;37331:434;;;37576:23;;37622:16;:23;;-1:-1:-1;;;;37622:23:0;-1:-1:-1;;;37622:23:0;;;37576;-1:-1:-1;37668:30:0;37576:23;37668:8;:30::i;:::-;37721:16;:24;;-1:-1:-1;;;;37721:24:0;;;37331:434;-1:-1:-1;;;;;37804:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;37832:22:0;;;;;;:18;:22;;;;;;;;37804:50;37801:1027;;;37874:33;37890:4;37896:2;37900:6;37874:15;:33::i;:::-;37801:1027;;;37983:13;;-1:-1:-1;;;;;37975:21:0;;;37983:13;;37975:21;37971:838;;;38049:17;38069:32;38096:4;38069:22;38080:10;;38069:6;:10;;:22;;;;:::i;:::-;:26;;:32::i;:::-;38049:52;-1:-1:-1;38132:21:0;:6;38049:52;38132:10;:21::i;:::-;38124:29;;38176:47;38192:4;38206;38213:9;38176:15;:47::i;:::-;38246:33;38262:4;38268:2;38272:6;38246:15;:33::i;:::-;38019:284;37971:838;;;38341:13;;-1:-1:-1;;;;;38335:19:0;;;38341:13;;38335:19;38331:478;;;38408:17;38428:33;38456:4;38428:23;38439:11;;38428:6;:10;;:23;;;;:::i;38331:478::-;38752:33;38768:4;38774:2;38778:6;38752:15;:33::i;:::-;36403:2456;;36259:2600;;;:::o;3281:246::-;3367:7;3444:12;3436:6;;;;3428:29;;;;-1:-1:-1;;;3428:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3487:5:0;;;3281:246::o;38875:141::-;38948:33;38965:15;38948:16;:33::i;:::-;38875:141;:::o;17192:661::-;-1:-1:-1;;;;;17372:20:0;;17364:70;;;;-1:-1:-1;;;17364:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17461:23:0;;17453:71;;;;-1:-1:-1;;;17453:71:0;;;;;;;:::i;:::-;17633;17655:6;17633:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17633:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;17613:17:0;;;;;;;:9;:17;;;;;;:91;;;;17746:20;;;;;;;:32;;17771:6;17746:24;:32::i;:::-;-1:-1:-1;;;;;17723:20:0;;;;;;;:9;:20;;;;;;;:55;;;;17802:35;;;;;;;;;;17830:6;8743:25:1;;8731:2;8716:18;;8597:177;2865:114:0;2923:7;2958:5;2962:1;2958;:5;:::i;3007:114::-;3065:7;3100:5;3104:1;3100;:5;:::i;2733:114::-;2791:7;2826:5;2830:1;2826;:5;:::i;39051:593::-;39149:16;;;39163:1;39149:16;;;;;;;;39125:21;;39149:16;;;;;;;;;;-1:-1:-1;39149:16:0;39125:40;;39202:4;39184;39189:1;39184:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39184:23:0;;;:7;;;;;;;;;;:23;;;;39236:15;;:22;;;-1:-1:-1;;;39236:22:0;;;;:15;;;;;:20;;:22;;;;;39184:7;;39236:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39226:4;39231:1;39226:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39226:32:0;;;:7;;;;;;;;;:32;39309:15;;39277:62;;39294:4;;39309:15;39327:11;39277:8;:62::i;:::-;39358:15;;39560:11;;39358:270;;-1:-1:-1;;;39358:270:0;;-1:-1:-1;;;;;39358:15:0;;;;:66;;:270;;39447:11;;39358:15;;39533:4;;39560:11;;;39594:15;;39358:270;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39106:538;39051:593;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:248::-;2832:6;2840;2893:2;2881:9;2872:7;2868:23;2864:32;2861:52;;;2909:1;2906;2899:12;2861:52;-1:-1:-1;;2932:23:1;;;3002:2;2987:18;;;2974:32;;-1:-1:-1;2764:248:1:o;4450:597::-;4562:4;4591:2;4620;4609:9;4602:21;4652:6;4646:13;4695:6;4690:2;4679:9;4675:18;4668:34;4720:1;4730:140;4744:6;4741:1;4738:13;4730:140;;;4839:14;;;4835:23;;4829:30;4805:17;;;4824:2;4801:26;4794:66;4759:10;;4730:140;;;4888:6;4885:1;4882:13;4879:91;;;4958:1;4953:2;4944:6;4933:9;4929:22;4925:31;4918:42;4879:91;-1:-1:-1;5031:2:1;5010:15;-1:-1:-1;;5006:29:1;4991:45;;;;5038:2;4987:54;;4450:597;-1:-1:-1;;;4450:597:1:o;5052:399::-;5254:2;5236:21;;;5293:2;5273:18;;;5266:30;5332:34;5327:2;5312:18;;5305:62;-1:-1:-1;;;5398:2:1;5383:18;;5376:33;5441:3;5426:19;;5052:399::o;6266:356::-;6468:2;6450:21;;;6487:18;;;6480:30;6546:34;6541:2;6526:18;;6519:62;6613:2;6598:18;;6266:356::o;7384:401::-;7586:2;7568:21;;;7625:2;7605:18;;;7598:30;7664:34;7659:2;7644:18;;7637:62;-1:-1:-1;;;7730:2:1;7715:18;;7708:35;7775:3;7760:19;;7384:401::o;8779:980::-;9041:4;9089:3;9078:9;9074:19;9120:6;9109:9;9102:25;9146:2;9184:6;9179:2;9168:9;9164:18;9157:34;9227:3;9222:2;9211:9;9207:18;9200:31;9251:6;9286;9280:13;9317:6;9309;9302:22;9355:3;9344:9;9340:19;9333:26;;9394:2;9386:6;9382:15;9368:29;;9415:1;9425:195;9439:6;9436:1;9433:13;9425:195;;;9504:13;;-1:-1:-1;;;;;9500:39:1;9488:52;;9595:15;;;;9560:12;;;;9536:1;9454:9;9425:195;;;-1:-1:-1;;;;;;;9676:32:1;;;;9671:2;9656:18;;9649:60;-1:-1:-1;;;9740:3:1;9725:19;9718:35;9637:3;8779:980;-1:-1:-1;;;8779:980:1:o;9953:128::-;9993:3;10024:1;10020:6;10017:1;10014:13;10011:39;;;10030:18;;:::i;:::-;-1:-1:-1;10066:9:1;;9953:128::o;10086:217::-;10126:1;10152;10142:132;;10196:10;10191:3;10187:20;10184:1;10177:31;10231:4;10228:1;10221:15;10259:4;10256:1;10249:15;10142:132;-1:-1:-1;10288:9:1;;10086:217::o;10308:422::-;10397:1;10440:5;10397:1;10454:270;10475:7;10465:8;10462:21;10454:270;;;10534:4;10530:1;10526:6;10522:17;10516:4;10513:27;10510:53;;;10543:18;;:::i;:::-;10593:7;10583:8;10579:22;10576:55;;;10613:16;;;;10576:55;10692:22;;;;10652:15;;;;10454:270;;;10458:3;10308:422;;;;;:::o;10735:140::-;10793:5;10822:47;10863:4;10853:8;10849:19;10843:4;10929:5;10959:8;10949:80;;-1:-1:-1;11000:1:1;11014:5;;10949:80;11048:4;11038:76;;-1:-1:-1;11085:1:1;11099:5;;11038:76;11130:4;11148:1;11143:59;;;;11216:1;11211:130;;;;11123:218;;11143:59;11173:1;11164:10;;11187:5;;;11211:130;11248:3;11238:8;11235:17;11232:43;;;11255:18;;:::i;:::-;-1:-1:-1;;11311:1:1;11297:16;;11326:5;;11123:218;;11425:2;11415:8;11412:16;11406:3;11400:4;11397:13;11393:36;11387:2;11377:8;11374:16;11369:2;11363:4;11360:12;11356:35;11353:77;11350:159;;;-1:-1:-1;11462:19:1;;;11494:5;;11350:159;11541:34;11566:8;11560:4;11541:34;:::i;:::-;11611:6;11607:1;11603:6;11599:19;11590:7;11587:32;11584:58;;;11622:18;;:::i;:::-;11660:20;;10880:806;-1:-1:-1;;;10880:806:1:o;11691:168::-;11731:7;11797:1;11793;11789:6;11785:14;11782:1;11779:21;11774:1;11767:9;11760:17;11756:45;11753:71;;;11804:18;;:::i;:::-;-1:-1:-1;11844:9:1;;11691:168::o;11864:125::-;11904:4;11932:1;11929;11926:8;11923:34;;;11937:18;;:::i;:::-;-1:-1:-1;11974:9:1;;11864:125::o;11994:380::-;12073:1;12069:12;;;;12116;;;12137:61;;12191:4;12183:6;12179:17;12169:27;;12137:61;12244:2;12236:6;12233:14;12213:18;12210:38;12207:161;;;12290:10;12285:3;12281:20;12278:1;12271:31;12325:4;12322:1;12315:15;12353:4;12350:1;12343:15;12207:161;;11994:380;;;:::o;12379:127::-;12440:10;12435:3;12431:20;12428:1;12421:31;12471:4;12468:1;12461:15;12495:4;12492:1;12485:15;12511:127;12572:10;12567:3;12563:20;12560:1;12553:31;12603:4;12600:1;12593:15;12627:4;12624:1;12617:15;12775:131;-1:-1:-1;;;;;12850:31:1;;12840:42;;12830:70;;12896:1;12893;12886:12;12911:118;12997:5;12990:13;12983:21;12976:5;12973:32;12963:60;;13019:1;13016;13009:12

Swarm Source

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