ETH Price: $3,384.86 (+0.82%)

Contract

0x682F3317a8dB21Ba205DC84a0B7BD5010333bda7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

DAOGAME (DAOG) (@$0.0019)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214809032024-12-25 17:12:473 days ago1735146767IN
DefiAllOdds: DAOG Token
0 ETH0.000215228.86382199
Approve213799482024-12-11 14:45:4717 days ago1733928347IN
DefiAllOdds: DAOG Token
0 ETH0.0005791523.85233282
Transfer213295202024-12-04 13:46:1124 days ago1733319971IN
DefiAllOdds: DAOG Token
0 ETH0.0008815823.80162113
Transfer213032842024-11-30 21:49:4727 days ago1733003387IN
DefiAllOdds: DAOG Token
0 ETH0.0005713313.65956554
Transfer212733252024-11-26 17:09:5932 days ago1732640999IN
DefiAllOdds: DAOG Token
0 ETH0.0006546617.68643325
Approve210734992024-10-29 19:51:2359 days ago1730231483IN
DefiAllOdds: DAOG Token
0 ETH0.0004295117.68928125
Transfer210706042024-10-29 10:09:5960 days ago1730196599IN
DefiAllOdds: DAOG Token
0 ETH0.0004282811.56296802
Withdraw Liquidi...210225992024-10-22 17:25:3567 days ago1729617935IN
DefiAllOdds: DAOG Token
0 ETH0.0010843718.7637219
Transfer210177192024-10-22 1:04:1167 days ago1729559051IN
DefiAllOdds: DAOG Token
0 ETH0.000283187.64555836
Transfer210177152024-10-22 1:03:2367 days ago1729559003IN
DefiAllOdds: DAOG Token
0 ETH0.000289767.82321372
Transfer210176972024-10-22 0:59:4767 days ago1729558787IN
DefiAllOdds: DAOG Token
0 ETH0.000262047.07479375
Transfer210150012024-10-21 15:58:1168 days ago1729526291IN
DefiAllOdds: DAOG Token
0 ETH0.0004997811.94895629
Transfer210149562024-10-21 15:49:1168 days ago1729525751IN
DefiAllOdds: DAOG Token
0 ETH0.0004414911.91960373
Approve210134092024-10-21 10:38:4768 days ago1729507127IN
DefiAllOdds: DAOG Token
0 ETH0.000352927.57917393
Transfer210133942024-10-21 10:35:4768 days ago1729506947IN
DefiAllOdds: DAOG Token
0 ETH0.00036386.69309243
Transfer210109342024-10-21 2:21:4768 days ago1729477307IN
DefiAllOdds: DAOG Token
0 ETH0.000357618.5523001
Transfer210094932024-10-20 21:32:1168 days ago1729459931IN
DefiAllOdds: DAOG Token
0 ETH0.000271847.33955587
Transfer210084042024-10-20 17:52:5969 days ago1729446779IN
DefiAllOdds: DAOG Token
0 ETH0.0004305910.2947093
Transfer210053022024-10-20 7:29:2369 days ago1729409363IN
DefiAllOdds: DAOG Token
0 ETH0.000350378.37688153
Transfer209992902024-10-19 11:22:5970 days ago1729336979IN
DefiAllOdds: DAOG Token
0 ETH0.0004119211.12148655
Transfer209919332024-10-18 10:44:5971 days ago1729248299IN
DefiAllOdds: DAOG Token
0 ETH0.0007641118.27378972
Approve208981732024-10-05 8:35:2384 days ago1728117323IN
DefiAllOdds: DAOG Token
0 ETH0.000143124.90122844
Approve208948852024-10-04 21:35:1184 days ago1728077711IN
DefiAllOdds: DAOG Token
0 ETH0.00029166.2623526
Transfer208856992024-10-03 14:51:2386 days ago1727967083IN
DefiAllOdds: DAOG Token
0 ETH0.0004573510.93446803
Approve208786602024-10-02 15:17:5987 days ago1727882279IN
DefiAllOdds: DAOG Token
0 ETH0.0005897612.73755518
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

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


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.