ETH Price: $2,903.67 (-4.18%)
Gas: 1 Gwei

Token

DAOGAME (DAOG)
 

Overview

Max Total Supply

73,000,000 DAOG

Holders

330 (0.00%)

Market

Price

$0.00 @ 0.000001 ETH (-4.17%)

Onchain Market Cap

$317,278.44

Circulating Supply Market Cap

$274,624.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
340,992.155482198073164131 DAOG

Value
$1,482.05 ( ~0.510405750518062 Eth) [0.4671%]
0x24DB6F5e2a6C4aF50079327C5EB90773FF0A2C8d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Rhino? Bronco? Bull? Which team will you draw for the inaugural season of Defi All Odds? Join us to play, compete, and win! #AllForWin #WinForAll

# Exchange Pair Price  24H Volume % Volume
1
Uniswap V2 (Ethereum)
0X682F3317A8DB21BA205DC84A0B7BD5010333BDA7-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0044
0.0000015 Eth
$448.78
102,422.245 0X682F3317A8DB21BA205DC84A0B7BD5010333BDA7
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
DAOTOKEN

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : DAOTOKEN.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.12;

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 Address {
    error AddressInsufficientBalance(address account);
    error AddressEmptyCode(address target);
    error FailedInnerCall();

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    function _revert(bytes memory returndata) private pure {
        if (returndata.length > 0) {
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}

library SafeERC20 {
    using Address for address;

    error SafeERC20FailedOperation(address token);
    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data);
        if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
            revert SafeERC20FailedOperation(address(token));
        }
    }
}

library MerkleProof {
   
    error MerkleProofInvalidMultiproof();

    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}


interface IUniswapV2Factory {

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

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

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

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract DAOTOKEN is Ownable, IERC20 {

    using SafeERC20 for IERC20;

    event ChangeBuyTax(uint256 prevTax, uint256 newTax);
    event ChangeSellTax(uint256 prevTax, uint256 newTax);

    bool private _swap;

    uint8 private constant _decimals = 18;
    
    uint16 public buyTax = 500;
    uint16 public sellTax = 500;
    uint16 public constant denominator = 10_000;
    
    uint256 public constant maxSupply = 100_000_000 ether; 
    uint256 private _totalSupply = 61_000_000 ether; 
    uint256 public threshold = 0.25 ether; 
    uint256 public swapPct = 10_000; 
    uint256 public immutable genesis;
    uint256 public startLiquidity;
    uint256 public constant firstDate2024 = 1704067200; // 1st Jan 2024 00:00 GMT+0000.
    
    address payable private _multiSig;
    address public immutable pair;

    bytes32 public OGRoot;
    bytes32 public annualRoot;

    string private constant _name = "DAOGAME";
    string private constant _symbol = "DAOG";
    
    IUniswapV2Router02 immutable private uniV2Router;
   
    uint256[] public remainingCommunity = [1_000_000 ether, 1_000_000 ether];
    uint256[] public remainingTeam = [2_500_000 ether, 2_500_000 ether];
    uint256[] public remainingRewards = [12_000_000 ether, 10_000_000 ether, 10_000_000 ether];

    mapping(address => bool) private _isPool;
    mapping(address => uint256) private _balances;
    mapping(address => mapping (address => uint256)) private _allowances;
    mapping(address => bool) public exempted; 
    mapping(address => bytes32[]) public proofs; 

    constructor(address multiSig_, address router_) Ownable(msg.sender){
        require(
            multiSig_ != address(0) &&
            router_ != address(0),
            "zero address"
        );

        genesis = block.timestamp;

        exempted[_msgSender()] = true;
        exempted[multiSig_] = true;
        exempted[address(this)] = true;

        _balances[multiSig_] = 1_000_000 ether;
        _balances[_msgSender()] = 60_000_000 ether;

        uniV2Router = IUniswapV2Router02(router_); // mainnet 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        _multiSig = payable(multiSig_);

        pair = IUniswapV2Factory(uniV2Router.factory()).createPair(uniV2Router.WETH(), address(this));
        _isPool[pair] = true;
    }

    modifier lockSwap {
        _swap = true;
        _;
        _swap = false;
    }

    receive() external payable {}

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

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

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

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

    function isPool(address addr) external view returns (bool){
        return _isPool[addr];
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require (_allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function setProof(bytes32[] memory _proof) external {
        proofs[_msgSender()] = _proof;
    }

    function setBuyTax(uint16 newTax) external onlyOwner {
        require (newTax <= 500, "tax cannot exceed 5%");
        emit ChangeBuyTax(buyTax, newTax);
        buyTax = newTax;
    }

    function setSellTax(uint16 newTax) external onlyOwner {
        require (newTax <= 500, "tax cannot exceed 5%");
        emit ChangeSellTax(sellTax, newTax);
        sellTax = newTax;
    }

    function setExempted(address _address, bool exempt_) external onlyOwner {
       exempted[_address] = exempt_;
    }

    function setPool(address addr, bool isPool_) external onlyOwner {
        require(addr != address(0), "zero address cannot be pool");
        _isPool[addr] = isPool_;
    }

    function safeTokenSwap(uint256 amount) external onlyOwner {
        _tokensToETH(amount);
    }

    function safeETHtransfer() external onlyOwner {
        (bool success,) = _multiSig.call{value: address(this).balance}("");
        require(success, "Failed to send Ether");
    }

    function setOGRoot(bytes32 _OGRoot) external onlyOwner {
        OGRoot = _OGRoot;
    }
    
    function setAnnualRoot(bytes32 _annualRoot) external onlyOwner {
        annualRoot = _annualRoot;
    }

    function setStartLiquidity() external onlyOwner {
        require(startLiquidity == 0, "already set");
        startLiquidity = block.timestamp;
    }

    function setThreshold(uint256 _threshold) external onlyOwner {
        threshold = _threshold;
    }

    function setSwapPct(uint256 _swapPct) external onlyOwner {
        require(_swapPct <= denominator, "wrong pct");
        swapPct = _swapPct;
    }

    function mintCommunity() external onlyOwner {
        _mint(remainingCommunity);
    }

    function mintTeam() external onlyOwner {
        _mint(remainingTeam);
    }

    function mintRewards() external onlyOwner {
        uint256 available;
        if(block.timestamp >= firstDate2024 + 2 * (365.25 * 1 days)) {
            available += remainingRewards[2];
            delete remainingRewards[2];
        }

        if(block.timestamp >= firstDate2024 +  (365.25 * 1 days)) {
            available += remainingRewards[1];
            delete remainingRewards[1];
        }

        if(block.timestamp >= firstDate2024) {
            available += remainingRewards[0];
            delete remainingRewards[0];
        }

        _mintAvailable(available);

    }

    function setMultiSig(address payable multiSig_) external onlyOwner {
        _multiSig = multiSig_;
    }

    function withdrawLiquidity() external onlyOwner {
        // lock 1 year
        require(
            startLiquidity != 0 &&
            block.timestamp >= startLiquidity + (365.25 * 1 days),
            "not yet"
        );

        uint256 lpBalance = IERC20(pair).balanceOf(address(this));
        require(lpBalance != 0, "zero lp balance");
        IERC20(pair).safeTransfer(_multiSig, lpBalance);
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(amount != 0, "cannot transfer zero");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(_balances[sender] >= amount, "ERC20: transfer exceeds balance");
        require(!(_isPool[sender] && _isPool[recipient]), "cannot transfer pool to pool");
        
        require(
            startLiquidity != 0
            || exempted[sender]
            || exempted[recipient],
             "unauthorized transfer"
        );
        
        uint256 taxedAmount = amount;
        
        if(startLiquidity != 0){

            uint256 tax;
            bool buy;
            bool sell;
            
            // if buy
            if(_isPool[sender]) {
                buy = true;
            } else if(_isPool[recipient]) {
                sell = true;
            }

            // whitelist verification
            if(buy && !exempted[recipient]) {

                if(block.timestamp <= startLiquidity + 1 hours / 2) {
                    _verify(recipient, OGRoot);

                } else if(block.timestamp <= startLiquidity + 1 hours) {
                    _verify(recipient, annualRoot);
                }
                
                // apply buy tax
                tax = amount * buyTax / denominator;  
            } else if(sell && !exempted[sender]) {
                // apply sell tax
                tax = amount * sellTax / denominator;
            }

            if(tax != 0){

                unchecked {
                    taxedAmount -= tax;
                    _balances[address(this)] += tax;
                }

                emit Transfer(sender, address(this), tax);
            }

            if(sell && _balances[address(this)] != 0) {
                address[] memory path = _getPath();
                uint256 amountOut = uniV2Router.getAmountsOut(_balances[address(this)], path)[1];
                // DAOG amount
                if (amountOut >= threshold && !_swap && swapPct != 0) {
                    _tokensToETH(_balances[address(this)] * swapPct / denominator);
                }
            }
        }
        
    

        // 0.5% limit 1st 24h
        if(block.timestamp <= startLiquidity + 1 days ){
            _checkLimits(
                recipient, 
                taxedAmount,
                50
            );
        
        // 1% limit next 72h
        } else if(block.timestamp <= startLiquidity + 4 days) {
            _checkLimits(
                recipient, 
                taxedAmount,
                100
            );
        }

        unchecked{
            _balances[recipient] += taxedAmount;
            _balances[sender] -= amount;
        }

        emit Transfer(sender, recipient, taxedAmount);
    }

    function _mint(uint256[] storage remaining) private {
        uint256 available;
        if(block.timestamp >= genesis + (365.25 * 2 days) ) {
            available += remaining[1];
            delete remaining[1];
        }

        if(block.timestamp >= genesis + (365.25 * 1 days)) {
            available += remaining[0];
            delete remaining[0];
        }
        
        _mintAvailable(available);
    }

    function _checkLimits(
        address recipient, 
        uint256 taxedAmount, 
        uint8 pct
    ) private view {
        uint256 limit = maxSupply * pct / denominator;
        string memory pctStr = pct == 50 ? "0.5% supply": "1% supply";
        
        if(!exempted[recipient] && !_isPool[recipient]) {
            require(
                _balances[recipient] + taxedAmount <= limit,
                string.concat("recipient balance ", pctStr)
            );
        }
    }


    function _verify(address _whitelisted, bytes32 _root) private view {
        string memory group = _root == OGRoot ? "OG" : "Annual";
        
        require(
            MerkleProof.verify(
                proofs[_whitelisted], 
                _root, 
                keccak256(abi.encodePacked(_whitelisted))
            ),
            string.concat("not whitelisted ", group)
        );
    }

    function _getPath() private view returns(address[] memory) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        return path;
    }

    function _tokensToETH(uint256 amount) private lockSwap {
        if(_multiSig != address(0)){
            address[] memory path = _getPath();
            _approve(address(this), address(uniV2Router), amount);
            
            uniV2Router
            .swapExactTokensForETHSupportingFeeOnTransferTokens(
                amount,
                0,
                path,
                _multiSig,
                block.timestamp
            );
        }
    }

    function _mintAvailable(uint256 available) private {
        require(available != 0, "nothing to withdraw");

        unchecked {
            _balances[_multiSig] += available;
            _totalSupply += available;
        }

        require(_totalSupply <= maxSupply, "wrong supply");

        emit Transfer(address(0), _multiSig, available);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"multiSig_","type":"address"},{"internalType":"address","name":"router_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"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":"prevTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"ChangeBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"ChangeSellTax","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"},{"inputs":[],"name":"OGRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[],"name":"annualRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"buyTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exempted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstDate2024","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"proofs","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"remainingCommunity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"remainingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"remainingTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeETHtransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeTokenSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_annualRoot","type":"bytes32"}],"name":"setAnnualRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newTax","type":"uint16"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"exempt_","type":"bool"}],"name":"setExempted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"multiSig_","type":"address"}],"name":"setMultiSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_OGRoot","type":"bytes32"}],"name":"setOGRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isPool_","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"setProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newTax","type":"uint16"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapPct","type":"uint256"}],"name":"setSwapPct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"withdrawLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000805463ffffffff60a81b1916627d007d60aa1b1790556a327540a046d49f5d0000006001556703782dace9d90000600290815561271060035561012060405269d3c21bcecceda100000060e081815261010091909152620000669160089190620003f7565b50604080518082019091526a021165458500521280000080825260208201526200009590600990600262000452565b50604080516060810182526a09ed194db19b238c00000081526a084595161401484a0000006020820181905291810191909152620000d890600a90600362000452565b50348015620000e657600080fd5b5060405162002dd638038062002dd68339810160408190526200010991620004cf565b33806200013157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200013c81620003a7565b506001600160a01b038216158015906200015e57506001600160a01b03811615155b6200019b5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640162000128565b42608052336000818152600e602090815260408083208054600160ff1991821681179092556001600160a01b0388811680875284872080548416851790553087528487208054909316909317909155818552600c845282852069d3c21bcecceda10000009055948452928190206a31a17e847807b1bc000000905592841660c0819052600580546001600160a01b031916909317909255825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000269573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028f919062000507565b6001600160a01b031663c9c6539660c0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000304919062000507565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000377919062000507565b6001600160a01b031660a08190526000908152600b60205260409020805460ff19166001179055506200052c9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821562000440579160200282015b828111156200044057825182906001600160501b031690559160200191906001019062000418565b506200044e9291506200049b565b5090565b82805482825590600052602060002090810192821562000440579160200282015b828111156200044057825182906001600160581b031690559160200191906001019062000473565b5b808211156200044e57600081556001016200049c565b80516001600160a01b0381168114620004ca57600080fd5b919050565b60008060408385031215620004e357600080fd5b620004ee83620004b2565b9150620004fe60208401620004b2565b90509250929050565b6000602082840312156200051a57600080fd5b6200052582620004b2565b9392505050565b60805160a05160c0516128496200058d6000396000818161183701528181611bd701528181611c160152611e330152600081816106dd01528181610d280152610ded0152600081816106a9015281816119fa0152611a7801526128496000f3fe60806040526004361061028b5760003560e01c80638da5cb5b1161015a578063b7e33dcc116100c1578063dd62ed3e1161007a578063dd62ed3e14610810578063ea3b1d6514610856578063f0b5336514610876578063f2fde38b1461088c578063f68d0429146108ac578063faecaade146108c257600080fd5b8063b7e33dcc1461073f578063b8c4a1871461075f578063bfe262cc1461077f578063c3b045e4146107af578063cc1776d3146107cf578063d5abeb01146107f157600080fd5b80639c138b7b116101135780639c138b7b146106625780639c77eead14610682578063a7f0b3de14610697578063a8aa1b31146106cb578063a9059cbb146106ff578063adf75e121461071f57600080fd5b80638da5cb5b146105a15780639008cba5146105d357806395d89b41146105e9578063960bfe041461061657806396ce07951461063657806396e3369b1461064c57600080fd5b80633d91bc33116101fe57806370a08231116101b757806370a08231146104f457806370e197b31461052a578063715018a61461053f5780637ea382c114610554578063852f813b146105695780638d5c6b491461058957600080fd5b80633d91bc331461041b57806342cde4e81461043b5780634f7041a5146104515780635b16ebb7146104865780635c6fdfe1146104bf5780635efe1a1f146104d457600080fd5b8063234cb05111610250578063234cb0511461036a57806323b872dd1461037f578063284d30ef1461039f5780632aa8404e146103bf578063313ce567146103df5780633d856fff146103fb57600080fd5b80625174a31461029757806306fdde03146102ca578063095ea7b31461030357806318160ddd1461033357806320bec12c1461034857600080fd5b3661029257005b600080fd5b3480156102a357600080fd5b506102b76102b23660046122a3565b6108d7565b6040519081526020015b60405180910390f35b3480156102d657600080fd5b5060408051808201909152600781526644414f47414d4560c81b60208201525b6040516102c191906122e8565b34801561030f57600080fd5b5061032361031e366004612330565b6108f8565b60405190151581526020016102c1565b34801561033f57600080fd5b506001546102b7565b34801561035457600080fd5b5061036861036336600461236a565b61090e565b005b34801561037657600080fd5b5061036861099c565b34801561038b57600080fd5b5061032361039a3660046123a3565b610ad1565b3480156103ab57600080fd5b506103686103ba3660046123e4565b610ba6565b3480156103cb57600080fd5b506103686103da3660046122a3565b610bd0565b3480156103eb57600080fd5b50604051601281526020016102c1565b34801561040757600080fd5b506102b7610416366004612330565b610bdd565b34801561042757600080fd5b5061036861043636600461246c565b610c0e565b34801561044757600080fd5b506102b760025481565b34801561045d57600080fd5b5060005461047390600160a81b900461ffff1681565b60405161ffff90911681526020016102c1565b34801561049257600080fd5b506103236104a13660046123e4565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104cb57600080fd5b50610368610c32565b3480156104e057600080fd5b506103686104ef3660046122a3565b610c7e565b34801561050057600080fd5b506102b761050f3660046123e4565b6001600160a01b03166000908152600c602052604090205490565b34801561053657600080fd5b50610368610c8b565b34801561054b57600080fd5b50610368610c9f565b34801561056057600080fd5b50610368610cb1565b34801561057557600080fd5b506103686105843660046122a3565b610e16565b34801561059557600080fd5b506102b7636592008081565b3480156105ad57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102c1565b3480156105df57600080fd5b506102b760035481565b3480156105f557600080fd5b5060408051808201909152600481526344414f4760e01b60208201526102f6565b34801561062257600080fd5b506103686106313660046122a3565b610e61565b34801561064257600080fd5b5061047361271081565b34801561065857600080fd5b506102b760045481565b34801561066e57600080fd5b5061036861067d366004612502565b610e6e565b34801561068e57600080fd5b50610368610f2e565b3480156106a357600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d757600080fd5b506105bb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561070b57600080fd5b5061032361071a366004612330565b610f40565b34801561072b57600080fd5b5061036861073a36600461236a565b610f4d565b34801561074b57600080fd5b506102b761075a3660046122a3565b610f80565b34801561076b57600080fd5b5061036861077a3660046122a3565b610f90565b34801561078b57600080fd5b5061032361079a3660046123e4565b600e6020526000908152604090205460ff1681565b3480156107bb57600080fd5b506103686107ca366004612502565b610fa1565b3480156107db57600080fd5b5060005461047390600160b81b900461ffff1681565b3480156107fd57600080fd5b506102b76a52b7d2dcc80cd2e400000081565b34801561081c57600080fd5b506102b761082b366004612526565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b34801561086257600080fd5b506102b76108713660046122a3565b611061565b34801561088257600080fd5b506102b760065481565b34801561089857600080fd5b506103686108a73660046123e4565b611071565b3480156108b857600080fd5b506102b760075481565b3480156108ce57600080fd5b506103686110ac565b600a81815481106108e757600080fd5b600091825260209091200154905081565b600061090533848461114e565b50600192915050565b610916611272565b6001600160a01b0382166109715760405162461bcd60e51b815260206004820152601b60248201527f7a65726f20616464726573732063616e6e6f7420626520706f6f6c000000000060448201526064015b60405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6109a4611272565b60006109b863659200806303c30fc061256a565b4210610a0a57600a6002815481106109d2576109d2612582565b9060005260206000200154816109e8919061256a565b9050600a6002815481106109fe576109fe612582565b60009182526020822001555b610a1c63659200806301e187e061256a565b4210610a6e57600a600181548110610a3657610a36612582565b906000526020600020015481610a4c919061256a565b9050600a600181548110610a6257610a62612582565b60009182526020822001555b63659200804210610ac557600a600081548110610a8d57610a8d612582565b906000526020600020015481610aa3919061256a565b9050600a600081548110610ab957610ab9612582565b60009182526020822001555b610ace8161129f565b50565b6001600160a01b0383166000908152600d60209081526040808320338452909152812054821115610b555760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610968565b610b6084848461139d565b6001600160a01b0384166000908152600d6020908152604080832033808552925290912054610b9b918691610b96908690612598565b61114e565b5060015b9392505050565b610bae611272565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610bd8611272565b600755565b600f6020528160005260406000208181548110610bf957600080fd5b90600052602060002001600091509150505481565b336000908152600f602090815260409091208251610c2e92840190612243565b5050565b610c3a611272565b60045415610c785760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610968565b42600455565b610c86611272565b600655565b610c93611272565b610c9d60096119f3565b565b610ca7611272565b610c9d6000611afa565b610cb9611272565b60045415801590610cda5750600454610cd6906301e187e061256a565b4210155b610d105760405162461bcd60e51b81526020600482015260076024820152661b9bdd081e595d60ca1b6044820152606401610968565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b91906125af565b905080610ddc5760405162461bcd60e51b815260206004820152600f60248201526e7a65726f206c702062616c616e636560881b6044820152606401610968565b600554610ace906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611b4a565b610e1e611272565b612710811115610e5c5760405162461bcd60e51b81526020600482015260096024820152681ddc9bdb99c81c18dd60ba1b6044820152606401610968565b600355565b610e69611272565b600255565b610e76611272565b6101f48161ffff161115610ec35760405162461bcd60e51b81526020600482015260146024820152737461782063616e6e6f742065786365656420352560601b6044820152606401610968565b6000546040805161ffff600160b81b9093048316815291831660208301527f6d9880198c1159f52707b61a6882da80275b14b90bd9e5f332b3ed9d39eeb42c910160405180910390a16000805461ffff909216600160b81b0261ffff60b81b19909216919091179055565b610f36611272565b610c9d60086119f3565b600061090533848461139d565b610f55611272565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b600981815481106108e757600080fd5b610f98611272565b610ace81611ba1565b610fa9611272565b6101f48161ffff161115610ff65760405162461bcd60e51b81526020600482015260146024820152737461782063616e6e6f742065786365656420352560601b6044820152606401610968565b6000546040805161ffff600160a81b9093048316815291831660208301527fae004c20b38d4d71a0cf8304ec672eacfd34dedc962fa7e5e82d9e55ac7444c0910160405180910390a16000805461ffff909216600160a81b0261ffff60a81b19909216919091179055565b600881815481106108e757600080fd5b611079611272565b6001600160a01b0381166110a357604051631e4fbdf760e01b815260006004820152602401610968565b610ace81611afa565b6110b4611272565b6005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611101576040519150601f19603f3d011682016040523d82523d6000602084013e611106565b606091505b5050905080610ace5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610968565b6001600160a01b0383166111b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610968565b6001600160a01b0382166112115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610968565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610c9d5760405163118cdaa760e01b8152336004820152602401610968565b806112e25760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b6044820152606401610968565b6005546001600160a01b03166000908152600c60205260409020805482019055600180548201908190556a52b7d2dcc80cd2e400000010156113555760405162461bcd60e51b815260206004820152600c60248201526b77726f6e6720737570706c7960a01b6044820152606401610968565b6005546040518281526001600160a01b03909116906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b806113e15760405162461bcd60e51b815260206004820152601460248201527363616e6e6f74207472616e73666572207a65726f60601b6044820152606401610968565b6001600160a01b0383166114455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610968565b6001600160a01b0382166114a75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610968565b6001600160a01b0383166000908152600c602052604090205481111561150f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220657863656564732062616c616e6365006044820152606401610968565b6001600160a01b0383166000908152600b602052604090205460ff16801561154f57506001600160a01b0382166000908152600b602052604090205460ff165b1561159c5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f74207472616e7366657220706f6f6c20746f20706f6f6c000000006044820152606401610968565b6004541515806115c457506001600160a01b0383166000908152600e602052604090205460ff165b806115e757506001600160a01b0382166000908152600e602052604090205460ff165b61162b5760405162461bcd60e51b81526020600482015260156024820152743ab730baba3437b934bd32b2103a3930b739b332b960591b6044820152606401610968565b600454819015611937576001600160a01b0384166000908152600b60205260408120548190819060ff16156116635760019150611688565b6001600160a01b0386166000908152600b602052604090205460ff1615611688575060015b8180156116ae57506001600160a01b0386166000908152600e602052604090205460ff16155b15611727576004546116c29061070861256a565b42116116d9576116d486600654611c9c565b6116fa565b6004546116e890610e1061256a565b42116116fa576116fa86600754611c9c565b6000546127109061171690600160a81b900461ffff16876125c8565b61172091906125e7565b925061177b565b80801561174d57506001600160a01b0387166000908152600e602052604090205460ff16155b1561177b576000546127109061176e90600160b81b900461ffff16876125c8565b61177891906125e7565b92505b82156117e157306000818152600c6020526040908190208054860190555194849003946001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117d89087815260200190565b60405180910390a35b8080156117fc5750306000908152600c602052604090205415155b1561193357600061180b611dd8565b306000908152600c602052604080822054905163d06ca61f60e01b815292935090916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d06ca61f9161186d9190869060040161264d565b600060405180830381865afa15801561188a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118b2919081019061266e565b6001815181106118c4576118c4612582565b6020026020010151905060025481101580156118ea5750600054600160a01b900460ff16155b80156118f7575060035415155b1561193057600354306000908152600c6020526040902054611930916127109161192191906125c8565b61192b91906125e7565b611ba1565b50505b5050505b600454611947906201518061256a565b421161195e5761195983826032611ee3565b611980565b60045461196e906205460061256a565b42116119805761198083826064611ee3565b6001600160a01b038084166000818152600c6020526040808220805486019055928716808252908390208054869003905591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119e59085815260200190565b60405180910390a350505050565b6000611a237f00000000000000000000000000000000000000000000000000000000000000006303c30fc061256a565b4210611a735781600181548110611a3c57611a3c612582565b906000526020600020015481611a52919061256a565b905081600181548110611a6757611a67612582565b60009182526020822001555b611aa17f00000000000000000000000000000000000000000000000000000000000000006301e187e061256a565b4210611af15781600081548110611aba57611aba612582565b906000526020600020015481611ad0919061256a565b905081600081548110611ae557611ae5612582565b60009182526020822001555b610c2e8161129f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611b9c90849061201e565b505050565b6000805460ff60a01b1916600160a01b1790556005546001600160a01b031615611c8c576000611bcf611dd8565b9050611bfc307f00000000000000000000000000000000000000000000000000000000000000008461114e565b60055460405163791ac94760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263791ac94792611c589287926000928892919091169042906004016126f4565b600060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b50505050505b506000805460ff60a01b19169055565b60006006548214611ccb5760405180604001604052806006815260200165105b9b9d585b60d21b815250611ce7565b604051806040016040528060028152602001614f4760f01b8152505b6001600160a01b0384166000908152600f60209081526040918290208054835181840281018401909452808452939450611d94939091830182828015611d4c57602002820191906000526020600020905b815481526020019060010190808311611d38575b50506040516bffffffffffffffffffffffff1960608a901b1660208201528793506034019150611d799050565b60405160208183030381529060405280519060200120612081565b81604051602001611da59190612730565b60405160208183030381529060405290611dd25760405162461bcd60e51b815260040161096891906122e8565b50505050565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110611e1157611e11612582565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190612768565b81600181518110611ec657611ec6612582565b6001600160a01b0390921660209283029190910190910152919050565b6000612710611f0060ff84166a52b7d2dcc80cd2e40000006125c8565b611f0a91906125e7565b905060008260ff16603214611f405760405180604001604052806009815260200168312520737570706c7960b81b815250611f65565b6040518060400160405280600b81526020016a302e352520737570706c7960a81b8152505b6001600160a01b0386166000908152600e602052604090205490915060ff16158015611faa57506001600160a01b0385166000908152600b602052604090205460ff16155b15612017576001600160a01b0385166000908152600c60205260409020548290611fd590869061256a565b111581604051602001611fe89190612785565b604051602081830303815290604052906120155760405162461bcd60e51b815260040161096891906122e8565b505b5050505050565b60006120336001600160a01b03841683612097565b9050805160001415801561205857508080602001905181019061205691906127bf565b155b15611b9c57604051635274afe760e01b81526001600160a01b0384166004820152602401610968565b60008261208e85846120a5565b14949350505050565b6060610b9f838360006120f2565b600081815b84518110156120ea576120d6828683815181106120c9576120c9612582565b602002602001015161218f565b9150806120e2816127dc565b9150506120aa565b509392505050565b6060814710156121175760405163cd78605960e01b8152306004820152602401610968565b600080856001600160a01b0316848660405161213391906127f7565b60006040518083038185875af1925050503d8060008114612170576040519150601f19603f3d011682016040523d82523d6000602084013e612175565b606091505b50915091506121858683836121be565b9695505050505050565b60008183106121ab576000828152602084905260409020610b9f565b6000838152602083905260409020610b9f565b6060826121d3576121ce8261221a565b610b9f565b81511580156121ea57506001600160a01b0384163b155b1561221357604051639996b31560e01b81526001600160a01b0385166004820152602401610968565b5080610b9f565b80511561222a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b82805482825590600052602060002090810192821561227e579160200282015b8281111561227e578251825591602001919060010190612263565b5061228a92915061228e565b5090565b5b8082111561228a576000815560010161228f565b6000602082840312156122b557600080fd5b5035919050565b60005b838110156122d75781810151838201526020016122bf565b83811115611dd25750506000910152565b60208152600082518060208401526123078160408501602087016122bc565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610ace57600080fd5b6000806040838503121561234357600080fd5b823561234e8161231b565b946020939093013593505050565b8015158114610ace57600080fd5b6000806040838503121561237d57600080fd5b82356123888161231b565b915060208301356123988161235c565b809150509250929050565b6000806000606084860312156123b857600080fd5b83356123c38161231b565b925060208401356123d38161231b565b929592945050506040919091013590565b6000602082840312156123f657600080fd5b8135610b9f8161231b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561244057612440612401565b604052919050565b600067ffffffffffffffff82111561246257612462612401565b5060051b60200190565b6000602080838503121561247f57600080fd5b823567ffffffffffffffff81111561249657600080fd5b8301601f810185136124a757600080fd5b80356124ba6124b582612448565b612417565b81815260059190911b820183019083810190878311156124d957600080fd5b928401925b828410156124f7578335825292840192908401906124de565b979650505050505050565b60006020828403121561251457600080fd5b813561ffff81168114610b9f57600080fd5b6000806040838503121561253957600080fd5b82356125448161231b565b915060208301356123988161231b565b634e487b7160e01b600052601160045260246000fd5b6000821982111561257d5761257d612554565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156125aa576125aa612554565b500390565b6000602082840312156125c157600080fd5b5051919050565b60008160001904831182151516156125e2576125e2612554565b500290565b60008261260457634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b838110156126425781516001600160a01b03168752958201959082019060010161261d565b509495945050505050565b8281526040602082015260006126666040830184612609565b949350505050565b6000602080838503121561268157600080fd5b825167ffffffffffffffff81111561269857600080fd5b8301601f810185136126a957600080fd5b80516126b76124b582612448565b81815260059190911b820183019083810190878311156126d657600080fd5b928401925b828410156124f7578351825292840192908401906126db565b85815284602082015260a06040820152600061271360a0830186612609565b6001600160a01b0394909416606083015250608001529392505050565b6f03737ba103bb434ba32b634b9ba32b2160851b81526000825161275b8160108501602087016122bc565b9190910160100192915050565b60006020828403121561277a57600080fd5b8151610b9f8161231b565b7103932b1b4b834b2b73a103130b630b731b2960751b8152600082516127b28160128501602087016122bc565b9190910160120192915050565b6000602082840312156127d157600080fd5b8151610b9f8161235c565b60006000198214156127f0576127f0612554565b5060010190565b600082516128098184602087016122bc565b919091019291505056fea2646970667358221220bbb92865c888d40c0c16c3cbf238d016430c8bb1028b91160b030c47d1925aa964736f6c634300080c00330000000000000000000000007f6af9c71ec60f282b01575a4be0930150013c530000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x60806040526004361061028b5760003560e01c80638da5cb5b1161015a578063b7e33dcc116100c1578063dd62ed3e1161007a578063dd62ed3e14610810578063ea3b1d6514610856578063f0b5336514610876578063f2fde38b1461088c578063f68d0429146108ac578063faecaade146108c257600080fd5b8063b7e33dcc1461073f578063b8c4a1871461075f578063bfe262cc1461077f578063c3b045e4146107af578063cc1776d3146107cf578063d5abeb01146107f157600080fd5b80639c138b7b116101135780639c138b7b146106625780639c77eead14610682578063a7f0b3de14610697578063a8aa1b31146106cb578063a9059cbb146106ff578063adf75e121461071f57600080fd5b80638da5cb5b146105a15780639008cba5146105d357806395d89b41146105e9578063960bfe041461061657806396ce07951461063657806396e3369b1461064c57600080fd5b80633d91bc33116101fe57806370a08231116101b757806370a08231146104f457806370e197b31461052a578063715018a61461053f5780637ea382c114610554578063852f813b146105695780638d5c6b491461058957600080fd5b80633d91bc331461041b57806342cde4e81461043b5780634f7041a5146104515780635b16ebb7146104865780635c6fdfe1146104bf5780635efe1a1f146104d457600080fd5b8063234cb05111610250578063234cb0511461036a57806323b872dd1461037f578063284d30ef1461039f5780632aa8404e146103bf578063313ce567146103df5780633d856fff146103fb57600080fd5b80625174a31461029757806306fdde03146102ca578063095ea7b31461030357806318160ddd1461033357806320bec12c1461034857600080fd5b3661029257005b600080fd5b3480156102a357600080fd5b506102b76102b23660046122a3565b6108d7565b6040519081526020015b60405180910390f35b3480156102d657600080fd5b5060408051808201909152600781526644414f47414d4560c81b60208201525b6040516102c191906122e8565b34801561030f57600080fd5b5061032361031e366004612330565b6108f8565b60405190151581526020016102c1565b34801561033f57600080fd5b506001546102b7565b34801561035457600080fd5b5061036861036336600461236a565b61090e565b005b34801561037657600080fd5b5061036861099c565b34801561038b57600080fd5b5061032361039a3660046123a3565b610ad1565b3480156103ab57600080fd5b506103686103ba3660046123e4565b610ba6565b3480156103cb57600080fd5b506103686103da3660046122a3565b610bd0565b3480156103eb57600080fd5b50604051601281526020016102c1565b34801561040757600080fd5b506102b7610416366004612330565b610bdd565b34801561042757600080fd5b5061036861043636600461246c565b610c0e565b34801561044757600080fd5b506102b760025481565b34801561045d57600080fd5b5060005461047390600160a81b900461ffff1681565b60405161ffff90911681526020016102c1565b34801561049257600080fd5b506103236104a13660046123e4565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104cb57600080fd5b50610368610c32565b3480156104e057600080fd5b506103686104ef3660046122a3565b610c7e565b34801561050057600080fd5b506102b761050f3660046123e4565b6001600160a01b03166000908152600c602052604090205490565b34801561053657600080fd5b50610368610c8b565b34801561054b57600080fd5b50610368610c9f565b34801561056057600080fd5b50610368610cb1565b34801561057557600080fd5b506103686105843660046122a3565b610e16565b34801561059557600080fd5b506102b7636592008081565b3480156105ad57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102c1565b3480156105df57600080fd5b506102b760035481565b3480156105f557600080fd5b5060408051808201909152600481526344414f4760e01b60208201526102f6565b34801561062257600080fd5b506103686106313660046122a3565b610e61565b34801561064257600080fd5b5061047361271081565b34801561065857600080fd5b506102b760045481565b34801561066e57600080fd5b5061036861067d366004612502565b610e6e565b34801561068e57600080fd5b50610368610f2e565b3480156106a357600080fd5b506102b77f00000000000000000000000000000000000000000000000000000000652c16f381565b3480156106d757600080fd5b506105bb7f000000000000000000000000ff4d9a735a4eb10c4889bc71d49111662efa856681565b34801561070b57600080fd5b5061032361071a366004612330565b610f40565b34801561072b57600080fd5b5061036861073a36600461236a565b610f4d565b34801561074b57600080fd5b506102b761075a3660046122a3565b610f80565b34801561076b57600080fd5b5061036861077a3660046122a3565b610f90565b34801561078b57600080fd5b5061032361079a3660046123e4565b600e6020526000908152604090205460ff1681565b3480156107bb57600080fd5b506103686107ca366004612502565b610fa1565b3480156107db57600080fd5b5060005461047390600160b81b900461ffff1681565b3480156107fd57600080fd5b506102b76a52b7d2dcc80cd2e400000081565b34801561081c57600080fd5b506102b761082b366004612526565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b34801561086257600080fd5b506102b76108713660046122a3565b611061565b34801561088257600080fd5b506102b760065481565b34801561089857600080fd5b506103686108a73660046123e4565b611071565b3480156108b857600080fd5b506102b760075481565b3480156108ce57600080fd5b506103686110ac565b600a81815481106108e757600080fd5b600091825260209091200154905081565b600061090533848461114e565b50600192915050565b610916611272565b6001600160a01b0382166109715760405162461bcd60e51b815260206004820152601b60248201527f7a65726f20616464726573732063616e6e6f7420626520706f6f6c000000000060448201526064015b60405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6109a4611272565b60006109b863659200806303c30fc061256a565b4210610a0a57600a6002815481106109d2576109d2612582565b9060005260206000200154816109e8919061256a565b9050600a6002815481106109fe576109fe612582565b60009182526020822001555b610a1c63659200806301e187e061256a565b4210610a6e57600a600181548110610a3657610a36612582565b906000526020600020015481610a4c919061256a565b9050600a600181548110610a6257610a62612582565b60009182526020822001555b63659200804210610ac557600a600081548110610a8d57610a8d612582565b906000526020600020015481610aa3919061256a565b9050600a600081548110610ab957610ab9612582565b60009182526020822001555b610ace8161129f565b50565b6001600160a01b0383166000908152600d60209081526040808320338452909152812054821115610b555760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610968565b610b6084848461139d565b6001600160a01b0384166000908152600d6020908152604080832033808552925290912054610b9b918691610b96908690612598565b61114e565b5060015b9392505050565b610bae611272565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610bd8611272565b600755565b600f6020528160005260406000208181548110610bf957600080fd5b90600052602060002001600091509150505481565b336000908152600f602090815260409091208251610c2e92840190612243565b5050565b610c3a611272565b60045415610c785760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610968565b42600455565b610c86611272565b600655565b610c93611272565b610c9d60096119f3565b565b610ca7611272565b610c9d6000611afa565b610cb9611272565b60045415801590610cda5750600454610cd6906301e187e061256a565b4210155b610d105760405162461bcd60e51b81526020600482015260076024820152661b9bdd081e595d60ca1b6044820152606401610968565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000ff4d9a735a4eb10c4889bc71d49111662efa85666001600160a01b0316906370a0823190602401602060405180830381865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b91906125af565b905080610ddc5760405162461bcd60e51b815260206004820152600f60248201526e7a65726f206c702062616c616e636560881b6044820152606401610968565b600554610ace906001600160a01b037f000000000000000000000000ff4d9a735a4eb10c4889bc71d49111662efa85668116911683611b4a565b610e1e611272565b612710811115610e5c5760405162461bcd60e51b81526020600482015260096024820152681ddc9bdb99c81c18dd60ba1b6044820152606401610968565b600355565b610e69611272565b600255565b610e76611272565b6101f48161ffff161115610ec35760405162461bcd60e51b81526020600482015260146024820152737461782063616e6e6f742065786365656420352560601b6044820152606401610968565b6000546040805161ffff600160b81b9093048316815291831660208301527f6d9880198c1159f52707b61a6882da80275b14b90bd9e5f332b3ed9d39eeb42c910160405180910390a16000805461ffff909216600160b81b0261ffff60b81b19909216919091179055565b610f36611272565b610c9d60086119f3565b600061090533848461139d565b610f55611272565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b600981815481106108e757600080fd5b610f98611272565b610ace81611ba1565b610fa9611272565b6101f48161ffff161115610ff65760405162461bcd60e51b81526020600482015260146024820152737461782063616e6e6f742065786365656420352560601b6044820152606401610968565b6000546040805161ffff600160a81b9093048316815291831660208301527fae004c20b38d4d71a0cf8304ec672eacfd34dedc962fa7e5e82d9e55ac7444c0910160405180910390a16000805461ffff909216600160a81b0261ffff60a81b19909216919091179055565b600881815481106108e757600080fd5b611079611272565b6001600160a01b0381166110a357604051631e4fbdf760e01b815260006004820152602401610968565b610ace81611afa565b6110b4611272565b6005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611101576040519150601f19603f3d011682016040523d82523d6000602084013e611106565b606091505b5050905080610ace5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610968565b6001600160a01b0383166111b05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610968565b6001600160a01b0382166112115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610968565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610c9d5760405163118cdaa760e01b8152336004820152602401610968565b806112e25760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b6044820152606401610968565b6005546001600160a01b03166000908152600c60205260409020805482019055600180548201908190556a52b7d2dcc80cd2e400000010156113555760405162461bcd60e51b815260206004820152600c60248201526b77726f6e6720737570706c7960a01b6044820152606401610968565b6005546040518281526001600160a01b03909116906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b806113e15760405162461bcd60e51b815260206004820152601460248201527363616e6e6f74207472616e73666572207a65726f60601b6044820152606401610968565b6001600160a01b0383166114455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610968565b6001600160a01b0382166114a75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610968565b6001600160a01b0383166000908152600c602052604090205481111561150f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220657863656564732062616c616e6365006044820152606401610968565b6001600160a01b0383166000908152600b602052604090205460ff16801561154f57506001600160a01b0382166000908152600b602052604090205460ff165b1561159c5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f74207472616e7366657220706f6f6c20746f20706f6f6c000000006044820152606401610968565b6004541515806115c457506001600160a01b0383166000908152600e602052604090205460ff165b806115e757506001600160a01b0382166000908152600e602052604090205460ff165b61162b5760405162461bcd60e51b81526020600482015260156024820152743ab730baba3437b934bd32b2103a3930b739b332b960591b6044820152606401610968565b600454819015611937576001600160a01b0384166000908152600b60205260408120548190819060ff16156116635760019150611688565b6001600160a01b0386166000908152600b602052604090205460ff1615611688575060015b8180156116ae57506001600160a01b0386166000908152600e602052604090205460ff16155b15611727576004546116c29061070861256a565b42116116d9576116d486600654611c9c565b6116fa565b6004546116e890610e1061256a565b42116116fa576116fa86600754611c9c565b6000546127109061171690600160a81b900461ffff16876125c8565b61172091906125e7565b925061177b565b80801561174d57506001600160a01b0387166000908152600e602052604090205460ff16155b1561177b576000546127109061176e90600160b81b900461ffff16876125c8565b61177891906125e7565b92505b82156117e157306000818152600c6020526040908190208054860190555194849003946001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117d89087815260200190565b60405180910390a35b8080156117fc5750306000908152600c602052604090205415155b1561193357600061180b611dd8565b306000908152600c602052604080822054905163d06ca61f60e01b815292935090916001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169163d06ca61f9161186d9190869060040161264d565b600060405180830381865afa15801561188a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118b2919081019061266e565b6001815181106118c4576118c4612582565b6020026020010151905060025481101580156118ea5750600054600160a01b900460ff16155b80156118f7575060035415155b1561193057600354306000908152600c6020526040902054611930916127109161192191906125c8565b61192b91906125e7565b611ba1565b50505b5050505b600454611947906201518061256a565b421161195e5761195983826032611ee3565b611980565b60045461196e906205460061256a565b42116119805761198083826064611ee3565b6001600160a01b038084166000818152600c6020526040808220805486019055928716808252908390208054869003905591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119e59085815260200190565b60405180910390a350505050565b6000611a237f00000000000000000000000000000000000000000000000000000000652c16f36303c30fc061256a565b4210611a735781600181548110611a3c57611a3c612582565b906000526020600020015481611a52919061256a565b905081600181548110611a6757611a67612582565b60009182526020822001555b611aa17f00000000000000000000000000000000000000000000000000000000652c16f36301e187e061256a565b4210611af15781600081548110611aba57611aba612582565b906000526020600020015481611ad0919061256a565b905081600081548110611ae557611ae5612582565b60009182526020822001555b610c2e8161129f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611b9c90849061201e565b505050565b6000805460ff60a01b1916600160a01b1790556005546001600160a01b031615611c8c576000611bcf611dd8565b9050611bfc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461114e565b60055460405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263791ac94792611c589287926000928892919091169042906004016126f4565b600060405180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b50505050505b506000805460ff60a01b19169055565b60006006548214611ccb5760405180604001604052806006815260200165105b9b9d585b60d21b815250611ce7565b604051806040016040528060028152602001614f4760f01b8152505b6001600160a01b0384166000908152600f60209081526040918290208054835181840281018401909452808452939450611d94939091830182828015611d4c57602002820191906000526020600020905b815481526020019060010190808311611d38575b50506040516bffffffffffffffffffffffff1960608a901b1660208201528793506034019150611d799050565b60405160208183030381529060405280519060200120612081565b81604051602001611da59190612730565b60405160208183030381529060405290611dd25760405162461bcd60e51b815260040161096891906122e8565b50505050565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110611e1157611e11612582565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190612768565b81600181518110611ec657611ec6612582565b6001600160a01b0390921660209283029190910190910152919050565b6000612710611f0060ff84166a52b7d2dcc80cd2e40000006125c8565b611f0a91906125e7565b905060008260ff16603214611f405760405180604001604052806009815260200168312520737570706c7960b81b815250611f65565b6040518060400160405280600b81526020016a302e352520737570706c7960a81b8152505b6001600160a01b0386166000908152600e602052604090205490915060ff16158015611faa57506001600160a01b0385166000908152600b602052604090205460ff16155b15612017576001600160a01b0385166000908152600c60205260409020548290611fd590869061256a565b111581604051602001611fe89190612785565b604051602081830303815290604052906120155760405162461bcd60e51b815260040161096891906122e8565b505b5050505050565b60006120336001600160a01b03841683612097565b9050805160001415801561205857508080602001905181019061205691906127bf565b155b15611b9c57604051635274afe760e01b81526001600160a01b0384166004820152602401610968565b60008261208e85846120a5565b14949350505050565b6060610b9f838360006120f2565b600081815b84518110156120ea576120d6828683815181106120c9576120c9612582565b602002602001015161218f565b9150806120e2816127dc565b9150506120aa565b509392505050565b6060814710156121175760405163cd78605960e01b8152306004820152602401610968565b600080856001600160a01b0316848660405161213391906127f7565b60006040518083038185875af1925050503d8060008114612170576040519150601f19603f3d011682016040523d82523d6000602084013e612175565b606091505b50915091506121858683836121be565b9695505050505050565b60008183106121ab576000828152602084905260409020610b9f565b6000838152602083905260409020610b9f565b6060826121d3576121ce8261221a565b610b9f565b81511580156121ea57506001600160a01b0384163b155b1561221357604051639996b31560e01b81526001600160a01b0385166004820152602401610968565b5080610b9f565b80511561222a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b82805482825590600052602060002090810192821561227e579160200282015b8281111561227e578251825591602001919060010190612263565b5061228a92915061228e565b5090565b5b8082111561228a576000815560010161228f565b6000602082840312156122b557600080fd5b5035919050565b60005b838110156122d75781810151838201526020016122bf565b83811115611dd25750506000910152565b60208152600082518060208401526123078160408501602087016122bc565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610ace57600080fd5b6000806040838503121561234357600080fd5b823561234e8161231b565b946020939093013593505050565b8015158114610ace57600080fd5b6000806040838503121561237d57600080fd5b82356123888161231b565b915060208301356123988161235c565b809150509250929050565b6000806000606084860312156123b857600080fd5b83356123c38161231b565b925060208401356123d38161231b565b929592945050506040919091013590565b6000602082840312156123f657600080fd5b8135610b9f8161231b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561244057612440612401565b604052919050565b600067ffffffffffffffff82111561246257612462612401565b5060051b60200190565b6000602080838503121561247f57600080fd5b823567ffffffffffffffff81111561249657600080fd5b8301601f810185136124a757600080fd5b80356124ba6124b582612448565b612417565b81815260059190911b820183019083810190878311156124d957600080fd5b928401925b828410156124f7578335825292840192908401906124de565b979650505050505050565b60006020828403121561251457600080fd5b813561ffff81168114610b9f57600080fd5b6000806040838503121561253957600080fd5b82356125448161231b565b915060208301356123988161231b565b634e487b7160e01b600052601160045260246000fd5b6000821982111561257d5761257d612554565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156125aa576125aa612554565b500390565b6000602082840312156125c157600080fd5b5051919050565b60008160001904831182151516156125e2576125e2612554565b500290565b60008261260457634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b838110156126425781516001600160a01b03168752958201959082019060010161261d565b509495945050505050565b8281526040602082015260006126666040830184612609565b949350505050565b6000602080838503121561268157600080fd5b825167ffffffffffffffff81111561269857600080fd5b8301601f810185136126a957600080fd5b80516126b76124b582612448565b81815260059190911b820183019083810190878311156126d657600080fd5b928401925b828410156124f7578351825292840192908401906126db565b85815284602082015260a06040820152600061271360a0830186612609565b6001600160a01b0394909416606083015250608001529392505050565b6f03737ba103bb434ba32b634b9ba32b2160851b81526000825161275b8160108501602087016122bc565b9190910160100192915050565b60006020828403121561277a57600080fd5b8151610b9f8161231b565b7103932b1b4b834b2b73a103130b630b731b2960751b8152600082516127b28160128501602087016122bc565b9190910160120192915050565b6000602082840312156127d157600080fd5b8151610b9f8161235c565b60006000198214156127f0576127f0612554565b5060010190565b600082516128098184602087016122bc565b919091019291505056fea2646970667358221220bbb92865c888d40c0c16c3cbf238d016430c8bb1028b91160b030c47d1925aa964736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007f6af9c71ec60f282b01575a4be0930150013c530000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : multiSig_ (address): 0x7f6af9C71EC60f282b01575a4bE0930150013c53
Arg [1] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f6af9c71ec60f282b01575a4be0930150013c53
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


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.