S Price: $0.502176 (+0.17%)

Contract

0x225E5fcE0f8c5f8577220B0483daFACA54499E86

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Presale D...22791862025-01-02 18:08:2792 days ago1735841307IN
0x225E5fcE...A54499E86
0 S0.000032321.1
Transfer Ownersh...20642052024-12-31 7:43:4594 days ago1735631025IN
0x225E5fcE...A54499E86
0 S0.000032971.1
Change Voter Add...20641732024-12-31 7:43:0694 days ago1735630986IN
0x225E5fcE...A54499E86
0 S0.000030361.1
Change Voter Add...13026052024-12-23 5:38:24102 days ago1734932304IN
0x225E5fcE...A54499E86
0 S0.000052011.1

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MainDeployerPrivate

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1 runs

Other Settings:
london EvmVersion, MIT license
File 1 of 1 : MainDappPrivate.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

//pragma experimental ABIEncoderV2;
//import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
//import "https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/UniswapFactory.sol";
//import "https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/UniswapPair.sol";
//import "https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/UniswapRouter02.sol";

interface ERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface UniswapRouter02 {
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function factory() external pure returns (address);
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;
    address public voter;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyVoter() {
        require(msg.sender == voter);
        _;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        _transferOwnership(_newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address _newOwner) internal {
        require(_newOwner != address(0));
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}

contract Consts {
    uint constant TOKEN_DECIMALS = 18;
    uint8 constant TOKEN_DECIMALS_UINT8 = 18;
    uint constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS;
    address public feeContract;

    uint256 airdrop_fees_Percentage = 2;

    uint256 public minLockTime = 2592000; // 10 mins for degen
    uint256 constant minStartDeltaTime = 600; // presale must be atleast 10 mins in future;
}

interface StorageContractInterface {
    //function CreatePresaleStorage(string[10] memory _tokenInfo, address tokenAddr, uint256 _lp_locked, address _creator, bool[3] memory _nftIdoFair) external returns(bool);
    function CreatePresaleStorage(
        address tokenAddr,
        uint256 _lp_locked,
        address _creator,
        bool[3] memory _nftIdoFair
    ) external returns (bool);

    function addPresaleAddr(
        string[10] memory _tokenInfo,
        address _presale,
        address _creator,
        uint256 _presaleNum
    ) external returns (bool);

    function fetchPresaleNumByOwner(
        address _creator
    ) external returns (uint256);

    function fetchTokenAddrLiqLockTime(
        address _creator,
        uint256 _presaleNum
    ) external view returns (address, uint256);

    function addRouterAddr(
        address _router,
        address _creator,
        uint256 _presaleNum
    ) external returns (bool);

    function fetchPresaleStruct(
        address _creator,
        uint256 _presaleNum
    ) external view returns (address, address, address);

    function setPresaleActiveFalse(
        address _creator,
        uint256 _presaleNum
    ) external returns (bool);

    function setPresaleFilter(
        address _creator,
        uint256 _presaleNum
    ) external returns (bool);

    function fetchPresaleAddress(
        address _creator,
        uint256 _presaleNum
    ) external view returns (address);

    function fetchVoterCallData(
        address _creator,
        uint256 _presaleNum
    ) external view returns (address, address);

    function addFailFilter(address _creator, uint256 _presaleNum) external;
}

interface PresaleDappInterface {
    function CreatePresalePrivate(
        address[4] memory presaleAddressInput_router,
        uint256[2] memory start_end_time,
        uint256[5] memory soft_hard_cap_rate_min_max_eth,
        uint256[3] memory vestData
    ) external returns (address);
}

interface PresaleContractInterface {
    //function uniswapPercentage() external returns(uint256);
    //function uniswapRate() external returns(uint256);
    function CheckTotalEthRaised() external view returns (uint256);

    function CheckSoftCap() external view returns (uint256);

    function mintForPlatform(
        address _platform,
        address _referrer,
        uint256 _refPer,
        bool tokenFeeToRef
    ) external;

    function mintForUniswap(address _routerAddr) external;

    function finalize(
        address[2] memory __finalizeInfo,
        uint256 refPer,
        bool validFinalize
    ) external returns (uint256);

    function finalizeAnytime(
        address[2] memory __finalizeInfo,
        bool validFinalize
    ) external returns (uint256);

    function enableWhitelist() external;

    function disableWhitelist() external;

    function addToWhitelist(address WhitelistAddress) external;

    function removeFromWhitelist(address WhitelistAddress) external;
}

interface ReferralContract {
    function getDiscountedPrice(string memory _code) external returns (uint256);

    function validateCode(string memory _code) external returns (bool);

    function fetchCodeOwner(string memory _code) external returns (address);

    function fetchCodeOwnerPercentage(
        string memory _code
    ) external returns (uint256);

    function updateReferrerAmounts(
        address _referrer,
        uint256 _updateAmount
    ) external returns (bool);

    function updateCodeUseNumber(
        string memory _code,
        address _presaleAddress
    ) external returns (bool);
}

interface FeeCheckContractInterface {
    function getFees(string memory _dappName) external view returns (uint256);

    function getWhitelistFees(
        string memory _dappWhitelistName
    ) external view returns (uint256);
}

interface FeeDepositContractInterface {
    function payment(uint256 _dappNum) external payable;
}

contract MainDeployerPrivate is Consts, Ownable {
    //uint256 public presaleFees = 1 * (10**18); // 1 ETH
    //uint256 public whitelistFees = 0.9 * (10**18); // 0.9 ETH
    uint public minUniPercentage = 50; //minimum 50% has to go for uniswap lock
    address public presaleDappAddr;
    address public referralDappAddr;
    //address public presaleNFTDappAddr;
    //address public NFTDappAddr;
    // address public routerDappAddr;
    //address public FilterAddress;
    address public storageContract;
    address public feeCheckContract;
    uint256 public totalRaisedOnPlatform;
    uint256 public totalRefundedFromPlatform;
    uint256 public deltaStartEndTime = 604800;
    string public dappName = "PrivatePresaleDeployer";
    string public dappFeeName = "privatePresaleFees";
    string public dappWhitelistFeeName = "privateWhitelistFees";
    uint256 public tokenFee;
    bool public referralDisabled;
    bool public tokenFeeToReferrer;

    // address public UNISWAP_ADDRESS = 0xc0fFee0000C824D24E0F280f1e4D21152625742b;  //Koffeeswap Address
    //  address public factoryAddress = 0xC0fFeE00000e1439651C6aD025ea2A71ED7F3Eab;     //Koffeeswap factory Address
    constructor(
        address _presaleDappAddr,
        address _feeRecieveContract,
        address _storageContract,
        address _referralContract,
        address _feeCheckContract
    ) {
        presaleDappAddr = _presaleDappAddr;
        feeContract = _feeRecieveContract;
        storageContract = _storageContract;
        referralDappAddr = _referralContract;
        feeCheckContract = _feeCheckContract;
    }

    using SafeMath for uint256;

    mapping(address => bool) public presales;
    //mapping(address => finalizeData) public finalizeDataStruct;
    mapping(address => mapping(uint256 => bool)) public presaleFinalized;
    mapping(address => address) public presaleToReferrer;
    mapping(address => uint256) public presaleToRefPer;
    mapping(uint256 => address) public presaleOwners;

    mapping(address => bool) public RouterValid;
    mapping(uint256 => address) public routerRecord;
    mapping(address => uint256) public routerNumber;
    uint256 public totalRouters;

    uint256 public extraAmountPer = 2;
    uint256 public extraAmountPerVal;
    uint256 public hundred = 100;

    bool public creationPresaleEnabled = true;
    bool public creationNFTPresaleEnabled = true;
    bool public activeFalse = true;
    bool public filter = true;

    function CreatePresalePrivate(
        string[10] memory _tokenInfo,
        address tokenAddr,
        uint256[2] memory start_end_time,
        uint256[5] memory soft_hard_cap_rate_min_max_eth,
        uint256[3] memory vestData,
        string memory _referralCode
    ) public payable {
        require(creationPresaleEnabled, "creation Presale disabled");
        require(vestData[0] <= 100, "cannot vest more than 100pc raised");
        //require(!presales[msg.sender], "User already made a presale");
        require(
            start_end_time[0] > block.timestamp,
            "start time not in future"
        );
        require(
            start_end_time[1] <= (start_end_time[0].add(deltaStartEndTime)),
            "presale duration exceeds limit"
        );
        require(
            soft_hard_cap_rate_min_max_eth[0] >=
                (soft_hard_cap_rate_min_max_eth[1].div(2)),
            "scap must be atleast half of hcap!"
        );
        require(soft_hard_cap_rate_min_max_eth[3] > 0, "min cont must be > 0");
        require(
            soft_hard_cap_rate_min_max_eth[4] >=
                soft_hard_cap_rate_min_max_eth[3],
            "max cont must be >= min cont"
        );

        if (referralDisabled) {
            require(
                keccak256(abi.encodePacked(_referralCode)) ==
                    keccak256(abi.encodePacked("default")),
                "only default code allowed"
            );
        }
        if (
            keccak256(abi.encodePacked(_referralCode)) !=
            keccak256(abi.encodePacked("default"))
        ) {
            require(
                ReferralContract(referralDappAddr).validateCode(_referralCode),
                "invalid discount code"
            );
            require(
                msg.value >=
                    (
                        FeeCheckContractInterface(feeCheckContract).getFees(
                            dappFeeName
                        )
                    )
                        .mul(
                            hundred.sub(
                                ReferralContract(referralDappAddr)
                                    .getDiscountedPrice(_referralCode)
                            )
                        )
                        .div(hundred),
                "msg.value must be equal to referral fee!"
            );

            uint256 referrerAmount = (msg.value)
                .mul(
                    ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(
                        _referralCode
                    )
                )
                .div(100);
            payable(
                ReferralContract(referralDappAddr).fetchCodeOwner(_referralCode)
            ).transfer(referrerAmount);
            FeeDepositContractInterface(feeContract).payment{
                value: (msg.value)
                    .mul(
                        hundred.sub(
                            ReferralContract(referralDappAddr)
                                .fetchCodeOwnerPercentage(_referralCode)
                        )
                    )
                    .div(100)
            }(6); // 6 at the end means it will be registerred in the fee deposit contract as a referral private presale
            //payable(feeContract).transfer((msg.value).mul(hundred.sub(ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode))).div(100));
            require(
                ReferralContract(referralDappAddr).updateReferrerAmounts(
                    ReferralContract(referralDappAddr).fetchCodeOwner(
                        _referralCode
                    ),
                    referrerAmount
                ),
                "referrerAmountUpdate failed"
            );
        } else {
            require(
                msg.value >=
                    FeeCheckContractInterface(feeCheckContract).getFees(
                        dappFeeName
                    ),
                "msg.value must be equal to presale fee!"
            );
            FeeDepositContractInterface(feeContract).payment{value: msg.value}(
                7
            ); // 7 at the end means it will be registerred in the fee deposit contract as a NO referral private presale
            //payable(feeContract).transfer(msg.value);
        }

        require(
            (start_end_time[0].add(minStartDeltaTime)) <= start_end_time[1],
            "presale period less than minimum"
        );

        require(
            StorageContractInterface(storageContract).CreatePresaleStorage(
                tokenAddr,
                0,
                msg.sender,
                [true, false, false]
            ),
            "storage addition failed"
        );

        address presaleAddrReturn = PresaleDappInterface(presaleDappAddr)
            .CreatePresalePrivate(
                [address(this), msg.sender, tokenAddr, address(0)],
                start_end_time,
                soft_hard_cap_rate_min_max_eth,
                vestData
            );

        presaleToReferrer[presaleAddrReturn] = ReferralContract(
            referralDappAddr
        ).fetchCodeOwner(_referralCode);
        presaleToRefPer[presaleAddrReturn] = ReferralContract(referralDappAddr)
            .fetchCodeOwnerPercentage(_referralCode);

        uint256 presaleNumCorrect = (
            StorageContractInterface(storageContract).fetchPresaleNumByOwner(
                msg.sender
            )
        ).sub(1);

        require(
            StorageContractInterface(storageContract).addPresaleAddr(
                _tokenInfo,
                presaleAddrReturn,
                msg.sender,
                presaleNumCorrect
            ),
            "presale addr add failed"
        );

        require(
            ReferralContract(referralDappAddr).updateCodeUseNumber(
                _referralCode,
                presaleAddrReturn
            ),
            "code use update failed"
        );
    }

    function changeDeltaStartEndTime(uint256 _newDelta) public onlyOwner {
        require(_newDelta >= 0, "invalid delta number");
        deltaStartEndTime = _newDelta;
    }

    function changeUniPercentage(uint uniPer) public onlyOwner {
        require((uniPer >= 0) && (uniPer <= 100), "uniPer value outside range");

        minUniPercentage = uniPer;
    }

    function ChangeVoterAddr(address _newVoterAddress) public onlyOwner {
        // require(_newVoterAddress != voter, "New addr is same as Old Addr");
        require(_newVoterAddress != address(0), "New Addr cant be zero addr");
        voter = _newVoterAddress;
    }

    function ChangeAirdropFee(uint _newAirdropFee) public onlyOwner {
        require(
            _newAirdropFee >= 0 && _newAirdropFee <= 100,
            "out of range fee value"
        );
        require(
            _newAirdropFee != airdrop_fees_Percentage,
            "New fee is same as Old fee"
        );
        airdrop_fees_Percentage = _newAirdropFee;
    }

    function disableReferral() public onlyOwner {
        referralDisabled = true;
    }

    function enableReferral() public onlyOwner {
        referralDisabled = false;
    }

    function callFinalizeDG(uint256 _presaleNum) public {
        (
            address _tokenAddr,
            address _presaleAddr,
            address _uniswapDep
        ) = StorageContractInterface(storageContract).fetchPresaleStruct(
                msg.sender,
                _presaleNum
            );

        // StorageContractInterface(storageContract).setPresaleActiveFalseAndFilter(msg.sender,_presaleNum);

        if (filter) {
            require(
                StorageContractInterface(storageContract).setPresaleFilter(
                    msg.sender,
                    _presaleNum
                ),
                "unable to set presale Filter"
            );
        }
        if (activeFalse) {
            require(
                StorageContractInterface(storageContract).setPresaleActiveFalse(
                    msg.sender,
                    _presaleNum
                ),
                "unable to set presale active status"
            );
        }

        extraAmountPerVal = extraAmountPer.add(hundred);

        uint256 totalEthRaised = PresaleContractInterface(_presaleAddr)
            .CheckTotalEthRaised();

        uint256 SoftCap = PresaleContractInterface(_presaleAddr).CheckSoftCap();

        if (!(totalEthRaised < (SoftCap)) && !(totalEthRaised == 0)) {
            // CREATE UNISWAP CONTRACT START
            totalRaisedOnPlatform = totalRaisedOnPlatform.add(totalEthRaised);

            uint256 tokenFeeCalc = totalEthRaised
                .mul(airdrop_fees_Percentage)
                .div(100);

            PresaleContractInterface(_presaleAddr).mintForPlatform(
                feeContract,
                presaleToReferrer[_presaleAddr],
                presaleToRefPer[_presaleAddr],
                tokenFeeToReferrer
            );

            require(
                PresaleContractInterface(_presaleAddr).finalize(
                    [presaleToReferrer[_presaleAddr], msg.sender],
                    presaleToRefPer[_presaleAddr],
                    true
                ) == 1,
                "finalize failed at success"
            );

            require(
                ReferralContract(referralDappAddr).updateReferrerAmounts(
                    presaleToReferrer[_presaleAddr],
                    tokenFeeCalc.mul(presaleToRefPer[_presaleAddr]).div(100)
                ),
                "referrer update failed at finalize"
            );
        } else if ((totalEthRaised < SoftCap) || (totalEthRaised == 0)) {
            totalRefundedFromPlatform = totalRefundedFromPlatform.add(
                totalEthRaised
            );

            require(
                PresaleContractInterface(_presaleAddr).finalize(
                    [address(0), address(msg.sender)],
                    presaleToRefPer[_presaleAddr],
                    false
                ) == 1,
                "finalize failed at refund"
            );
        }

        //     presaleFinalized[msg.sender][_presaleNum] = true;
    }

    function checkTotalEthraisedOfPresale(
        address presaleToRefundFromOwnerAddress,
        uint256 _presaleNum
    ) public view returns (uint256) {
        address presaleAddressFetched = StorageContractInterface(
            storageContract
        ).fetchPresaleAddress(presaleToRefundFromOwnerAddress, _presaleNum);

        uint256 totalEthRaised = PresaleContractInterface(presaleAddressFetched)
            .CheckTotalEthRaised();
        return totalEthRaised;
    }

    function voterCallsFinalizeRefund(
        address presaleToRefundFromOwnerAddress,
        uint256 _presaleNum
    ) public onlyVoter {
        (
            address presaleAddressFetched,
            address uniAddressFetched
        ) = StorageContractInterface(storageContract).fetchVoterCallData(
                presaleToRefundFromOwnerAddress,
                _presaleNum
            );

        totalRefundedFromPlatform = totalRefundedFromPlatform.add(
            checkTotalEthraisedOfPresale(
                presaleToRefundFromOwnerAddress,
                _presaleNum
            )
        );

        require(
            PresaleContractInterface(presaleAddressFetched).finalize(
                [address(0), presaleToRefundFromOwnerAddress],
                presaleToRefPer[presaleAddressFetched],
                false
            ) == 1,
            "finalize failed at voter call refund"
        );

        StorageContractInterface(storageContract).addFailFilter(
            presaleToRefundFromOwnerAddress,
            _presaleNum
        );
    }

    function voterCallsFinalizeRefundAnytime(
        address presaleToRefundFromOwnerAddress,
        uint256 _presaleNum
    ) public onlyVoter {
        (
            address presaleAddressFetched,
            address uniAddressFetched
        ) = StorageContractInterface(storageContract).fetchVoterCallData(
                presaleToRefundFromOwnerAddress,
                _presaleNum
            );

        totalRefundedFromPlatform = totalRefundedFromPlatform.add(
            checkTotalEthraisedOfPresale(
                presaleToRefundFromOwnerAddress,
                _presaleNum
            )
        );

        PresaleContractInterface(presaleAddressFetched).finalizeAnytime(
            [address(0), presaleToRefundFromOwnerAddress],
            false
        );

        StorageContractInterface(storageContract).addFailFilter(
            presaleToRefundFromOwnerAddress,
            _presaleNum
        );
    }

    function enableWhitelist(uint256 _presaleNum) public payable {
        address presaleAddressFetched = StorageContractInterface(
            storageContract
        ).fetchPresaleAddress(msg.sender, _presaleNum);

        // require(msg.value >= FeeCheckContractInterface(feeCheckContract).getWhitelistFees(dappWhitelistFeeName), "msg.value must be >= whitelist fees!");
        //payable(feeContract).transfer(msg.value);
        // FeeDepositContractInterface(feeContract).payment{value: msg.value}(8); // 8 at the end means it will be registerred in the fee deposit contract as a whitelist fee for private presale

        PresaleContractInterface(presaleAddressFetched).enableWhitelist();
    }

    function disableWhitelist(uint256 _presaleNum) public {
        address presaleAddressFetched = StorageContractInterface(
            storageContract
        ).fetchPresaleAddress(msg.sender, _presaleNum);

        PresaleContractInterface(presaleAddressFetched).disableWhitelist();
    }

    function AddToWhitelist(
        address[] memory _whitelistAddress,
        uint256 _presaleNum
    ) public {
        address presaleAddressFetched = StorageContractInterface(
            storageContract
        ).fetchPresaleAddress(msg.sender, _presaleNum);

        //require(presales[msg.sender].exists, "user has no presale!");
        for (uint256 i = 0; i < _whitelistAddress.length; i++) {
            PresaleContractInterface(presaleAddressFetched).addToWhitelist(
                _whitelistAddress[i]
            );
        }
    }

    function RemoveFromWhitelist(
        address[] memory _whitelistAddress,
        uint256 _presaleNum
    ) public {
        address presaleAddressFetched = StorageContractInterface(
            storageContract
        ).fetchPresaleAddress(msg.sender, _presaleNum);

        //require(presales[msg.sender].exists, "user has no presale!");
        for (uint256 i = 0; i < _whitelistAddress.length; i++) {
            //(bool _addToWhitelist, bytes memory _addToWhitelistReturn) = presaleAddressFetched.call(abi.encodeWithSignature("removeFromWhitelist(address)", _whitelistAddress[i]));
            //require(_addToWhitelist, "Whitelist removal failed");
            PresaleContractInterface(presaleAddressFetched).removeFromWhitelist(
                _whitelistAddress[i]
            );
        }
    }

    function setActiveFalseFilter(
        bool _activeFalse,
        bool _filter
    ) public onlyOwner {
        activeFalse = _activeFalse;
        filter = _filter;
    }

    function updatePresaleDapp(address _newPresaleDapp) public onlyOwner {
        require(_newPresaleDapp != address(0x0), "presale dapp cant be 0x0");
        presaleDappAddr = _newPresaleDapp;
    }

    function transferPresaleOwner(
        address _presale,
        address _newOwner
    ) public onlyOwner {
        Ownable(_presale).transferOwnership(_newOwner);
    }

    function creationPresaleStateChange(bool _input) public onlyOwner {
        // require(creationEnabled,"already disabled");
        creationPresaleEnabled = _input;
    }

    function creationNFTPresaleStateChange(bool _input) public onlyOwner {
        // require(creationEnabled,"already disabled");
        creationNFTPresaleEnabled = _input;
    }

    function getStuckBNB() public onlyOwner {
        payable(owner).transfer(address(this).balance);
    }

    function changeExtraTokenPer(uint256 _newPer) public onlyOwner {
        require(_newPer > 0, "Invalid percentage value");
        extraAmountPer = _newPer;
    }

    function changeFeeContract(address _newContract) public onlyOwner {
        require(_newContract != address(0x0), "addr cannot be zero");
        feeContract = _newContract;
    }

    function changeFeeCheckContract(
        address _newFeeCheckContract
    ) public onlyOwner {
        require(_newFeeCheckContract != address(0x0), "addr cannot be zero");
        feeCheckContract = _newFeeCheckContract;
    }

    function changeStorageContract(
        address _newStorageContract
    ) public onlyOwner {
        require(_newStorageContract != address(0x0), "addr cannot be zero");
        storageContract = _newStorageContract;
    }

    function changeReferralContract(
        address _newReferralContract
    ) public onlyOwner {
        require(_newReferralContract != address(0x0), "addr cannot be zero");
        referralDappAddr = _newReferralContract;
    }

    function enableRefTOkenFee() public onlyOwner {
        require(!tokenFeeToReferrer, "already enabled");
        tokenFeeToReferrer = true;
    }

    function disableRefTOkenFee() public onlyOwner {
        require(tokenFeeToReferrer, "already disabled");
        tokenFeeToReferrer = false;
    }

    function changeminLockTime(uint256 _newMinLockTime) public onlyOwner {
        minLockTime = _newMinLockTime;
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_presaleDappAddr","type":"address"},{"internalType":"address","name":"_feeRecieveContract","type":"address"},{"internalType":"address","name":"_storageContract","type":"address"},{"internalType":"address","name":"_referralContract","type":"address"},{"internalType":"address","name":"_feeCheckContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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"},{"inputs":[{"internalType":"address[]","name":"_whitelistAddress","type":"address[]"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"AddToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAirdropFee","type":"uint256"}],"name":"ChangeAirdropFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newVoterAddress","type":"address"}],"name":"ChangeVoterAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[10]","name":"_tokenInfo","type":"string[10]"},{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256[2]","name":"start_end_time","type":"uint256[2]"},{"internalType":"uint256[5]","name":"soft_hard_cap_rate_min_max_eth","type":"uint256[5]"},{"internalType":"uint256[3]","name":"vestData","type":"uint256[3]"},{"internalType":"string","name":"_referralCode","type":"string"}],"name":"CreatePresalePrivate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelistAddress","type":"address[]"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"RemoveFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"RouterValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeFalse","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"callFinalizeDG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDelta","type":"uint256"}],"name":"changeDeltaStartEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPer","type":"uint256"}],"name":"changeExtraTokenPer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeCheckContract","type":"address"}],"name":"changeFeeCheckContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContract","type":"address"}],"name":"changeFeeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newReferralContract","type":"address"}],"name":"changeReferralContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newStorageContract","type":"address"}],"name":"changeStorageContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"uniPer","type":"uint256"}],"name":"changeUniPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinLockTime","type":"uint256"}],"name":"changeminLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleToRefundFromOwnerAddress","type":"address"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"checkTotalEthraisedOfPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creationNFTPresaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_input","type":"bool"}],"name":"creationNFTPresaleStateChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationPresaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_input","type":"bool"}],"name":"creationPresaleStateChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dappFeeName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dappName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dappWhitelistFeeName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deltaStartEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableRefTOkenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"disableWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableRefTOkenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"enableWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"extraAmountPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraAmountPerVal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCheckContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"filter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStuckBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hundred","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minUniPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleDappAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleToRefPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleToReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralDappAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"routerNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"routerRecord","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_activeFalse","type":"bool"},{"internalType":"bool","name":"_filter","type":"bool"}],"name":"setActiveFalseFilter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storageContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenFeeToReferrer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaisedOnPlatform","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRefundedFromPlatform","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRouters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presale","type":"address"},{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferPresaleOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPresaleDapp","type":"address"}],"name":"updatePresaleDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"presaleToRefundFromOwnerAddress","type":"address"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"voterCallsFinalizeRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleToRefundFromOwnerAddress","type":"address"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"voterCallsFinalizeRefundAnytime","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6002600181905562278d009055603260055562093a80600c5560c0604052601660809081527f5072697661746550726573616c654465706c6f7965720000000000000000000060a052600d9062000057908262000234565b506040805180820190915260128152717072697661746550726573616c654665657360701b6020820152600e9062000090908262000234565b5060408051808201909152601481527f7072697661746557686974656c697374466565730000000000000000000000006020820152600f90620000d4908262000234565b506002601b556064601d55601e805463ffffffff19166301010101179055348015620000ff57600080fd5b50604051620040673803806200406783398101604081905262000122916200031d565b60038054336001600160a01b0319918216179091556006805482166001600160a01b0397881617905560008054821695871695909517909455600880548516938616939093179092556007805484169185169190911790556009805490921692169190911790556200038d565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001ba57607f821691505b602082108103620001db57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022f57600081815260208120601f850160051c810160208610156200020a5750805b601f850160051c820191505b818110156200022b5782815560010162000216565b5050505b505050565b81516001600160401b038111156200025057620002506200018f565b6200026881620002618454620001a5565b84620001e1565b602080601f831160018114620002a05760008415620002875750858301515b600019600386901b1c1916600185901b1785556200022b565b600085815260208120601f198616915b82811015620002d157888601518255948401946001909101908401620002b0565b5085821015620002f05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200031857600080fd5b919050565b600080600080600060a086880312156200033657600080fd5b620003418662000300565b9450620003516020870162000300565b9350620003616040870162000300565b9250620003716060870162000300565b9150620003816080870162000300565b90509295509295909350565b613cca806200039d6000396000f3fe6080604052600436106102de5760003560e01c8063041f78cc146102e3578063042d97821461030557806306bb746e1461033957806306e29712146103595780630c52662e146103865780630d77c7df146103a6578063108d9447146103b957806311ce0267146103ef5780631f4ba8041461040f578063280db44014610433578063284def1514610453578063297054fb14610469578063344eaa271461047f578063363d9efc146104a15780634055f612146104b7578063426b487f146104d75780634503a6d3146104f6578063455991361461050b57806346c96aac1461052157806348e5b7d4146105415780634e6b53f71461057c5780634f81c1ff1461059c5780634fa361e7146105b15780635787b142146105d157806359f962f6146105f15780635bc39e0f146106075780635bff9a27146106275780635fadcc1e1461063d57806360b2aff31461065e578063662b35221461069457806369f5ef4a146106a95780636e62d42f146106c3578063715018a6146106e35780637a594b79146106f85780637d06b7fd146107185780637f928c821461072d5780638da5cb5b1461074257806390f6c06514610762578063a42b45bf14610782578063a60ff76614610798578063a614fec1146107ae578063ab4304df146107e4578063ae27508414610804578063b02fa76c14610824578063b517da2d14610844578063b56a038a14610864578063bc5997751461087a578063c31c01871461089a578063c9467317146108c7578063d0b32863146108e7578063d0f0d73614610914578063d276aded14610934578063d394925414610954578063d50494cf14610974578063d97f558e14610994578063dd13b0dd146109b4578063dec379ff146109e4578063e11f2d1314610a04578063e3613cd914610a24578063ea354fcb14610a39578063efcd708f14610a59578063f2fde38b14610a89578063f5415c1f14610aa9578063f625fd3e14610abe578063f8beaff014610ad8575b600080fd5b3480156102ef57600080fd5b506103036102fe366004613282565b610aeb565b005b34801561031157600080fd5b5060115461032490610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b50610303610354366004613282565b610bb8565b34801561036557600080fd5b50600054610379906001600160a01b031681565b604051610330919061329b565b34801561039257600080fd5b506103036103a1366004613343565b610bd4565b6103036103b4366004613282565b610ce6565b3480156103c557600080fd5b506103796103d43660046133fa565b6014602052600090815260409020546001600160a01b031681565b3480156103fb57600080fd5b50600854610379906001600160a01b031681565b34801561041b57600080fd5b50610425601c5481565b604051908152602001610330565b34801561043f57600080fd5b5061030361044e3660046133fa565b610d97565b34801561045f57600080fd5b5061042560055481565b34801561047557600080fd5b50610425600c5481565b34801561048b57600080fd5b50610494610dff565b6040516103309190613467565b3480156104ad57600080fd5b50610425601a5481565b3480156104c357600080fd5b50600754610379906001600160a01b031681565b3480156104e357600080fd5b50601e5461032490610100900460ff1681565b34801561050257600080fd5b50610303610e8d565b34801561051757600080fd5b5061042560105481565b34801561052d57600080fd5b50600454610379906001600160a01b031681565b34801561054d57600080fd5b5061032461055c36600461347a565b601360209081526000928352604080842090915290825290205460ff1681565b34801561058857600080fd5b506103036105973660046133fa565b610eb0565b3480156105a857600080fd5b50610494610f3a565b3480156105bd57600080fd5b506103036105cc366004613282565b610f47565b3480156105dd57600080fd5b506103036105ec3660046133fa565b61162c565b3480156105fd57600080fd5b50610425601b5481565b34801561061357600080fd5b506103036106223660046134b4565b61168b565b34801561063357600080fd5b50610425601d5481565b34801561064957600080fd5b50601e54610324906301000000900460ff1681565b34801561066a57600080fd5b50610379610679366004613282565b6016602052600090815260409020546001600160a01b031681565b3480156106a057600080fd5b506103036116bc565b3480156106b557600080fd5b506011546103249060ff1681565b3480156106cf57600080fd5b50600654610379906001600160a01b031681565b3480156106ef57600080fd5b5061030361172a565b34801561070457600080fd5b50610303610713366004613282565b61178b565b34801561072457600080fd5b506103036117f2565b34801561073957600080fd5b50610303611818565b34801561074e57600080fd5b50600354610379906001600160a01b031681565b34801561076e57600080fd5b5061030361077d366004613282565b61186b565b34801561078e57600080fd5b50610425600a5481565b3480156107a457600080fd5b5061042560025481565b3480156107ba57600080fd5b506103796107c9366004613282565b6018602052600090815260409020546001600160a01b031681565b3480156107f057600080fd5b506103036107ff3660046134b4565b611887565b34801561081057600080fd5b5061030361081f3660046134d1565b6118b1565b34801561083057600080fd5b50601e546103249062010000900460ff1681565b34801561085057600080fd5b5061030361085f3660046133fa565b6118fa565b34801561087057600080fd5b50610425600b5481565b34801561088657600080fd5b50610303610895366004613282565b611959565b3480156108a657600080fd5b506104256108b53660046133fa565b60196020526000908152604090205481565b3480156108d357600080fd5b506103036108e23660046133fa565b611a0d565b3480156108f357600080fd5b506104256109023660046133fa565b60156020526000908152604090205481565b34801561092057600080fd5b50600954610379906001600160a01b031681565b34801561094057600080fd5b5061030361094f36600461347a565b611a6c565b34801561096057600080fd5b5061042561096f36600461347a565b611c07565b34801561098057600080fd5b5061030361098f366004613343565b611cf0565b3480156109a057600080fd5b506103036109af36600461347a565b611dfc565b3480156109c057600080fd5b506103246109cf3660046133fa565b60176020526000908152604090205460ff1681565b3480156109f057600080fd5b506103036109ff3660046133fa565b611fc1565b348015610a1057600080fd5b50610303610a1f366004613282565b61204d565b348015610a3057600080fd5b506104946120b7565b348015610a4557600080fd5b50610303610a5436600461350a565b6120c4565b348015610a6557600080fd5b50610324610a743660046133fa565b60126020526000908152604090205460ff1681565b348015610a9557600080fd5b50610303610aa43660046133fa565b612121565b348015610ab557600080fd5b50610303612141565b348015610aca57600080fd5b50601e546103249060ff1681565b610303610ae63660046136a6565b6121b3565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610b1e90339086906004016137ad565b602060405180830381865afa158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f91906137c6565b9050806001600160a01b031663d6b0f4846040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b505050505050565b6003546001600160a01b03163314610bcf57600080fd5b600255565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610c0790339086906004016137ad565b602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906137c6565b905060005b8351811015610ce057816001600160a01b0316638ab1d681858381518110610c7757610c776137e3565b60200260200101516040518263ffffffff1660e01b8152600401610c9b919061329b565b600060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b505050508080610cd89061380f565b915050610c4d565b50505050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610d1990339086906004016137ad565b602060405180830381865afa158015610d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5a91906137c6565b9050806001600160a01b031663cdfb2b4e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b6003546001600160a01b03163314610dae57600080fd5b6001600160a01b038116610ddd5760405162461bcd60e51b8152600401610dd490613828565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600f8054610e0c90613855565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3890613855565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b505050505081565b6003546001600160a01b03163314610ea457600080fd5b6011805460ff19169055565b6003546001600160a01b03163314610ec757600080fd5b6001600160a01b038116610f185760405162461bcd60e51b8152602060048201526018602482015277070726573616c6520646170702063616e74206265203078360441b6044820152606401610dd4565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d8054610e0c90613855565b600854604051637e2439b360e11b8152600091829182916001600160a01b03169063fc48736690610f7e90339088906004016137ad565b606060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf919061388f565b601e5492955090935091506301000000900460ff16156110995760085460405163cf25127360e01b81526001600160a01b039091169063cf2512739061100b90339088906004016137ad565b6020604051808303816000875af115801561102a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104e91906138dc565b6110995760405162461bcd60e51b815260206004820152601c60248201527b3ab730b13632903a379039b2ba10383932b9b0b632902334b63a32b960211b6044820152606401610dd4565b601e5462010000900460ff16156111775760085460405163f3d7443b60e01b81526001600160a01b039091169063f3d7443b906110dc90339088906004016137ad565b6020604051808303816000875af11580156110fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111f91906138dc565b6111775760405162461bcd60e51b815260206004820152602360248201527f756e61626c6520746f207365742070726573616c65206163746976652073746160448201526274757360e81b6064820152608401610dd4565b601d54601b5461118691613044565b601c819055506000826001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f091906138f9565b90506000836001600160a01b031663e4c21cf26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125691906138f9565b905080821015801561126757508115155b1561152d57600a546112799083613044565b600a5560015460009061129a906064906112949086906130a8565b9061312a565b600080546001600160a01b038881168084526014602090815260408086205460159092529485902054601154955163f6e99c0d60e01b8152948416600486015292166024840152604483019190915261010090920460ff16151560648201529192509063f6e99c0d90608401600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50506040805180820182526001600160a01b03808a166000818152601460209081528582205490931684523383850152818152601590925290839020549251634d2a907360e01b8152909450634d2a90739350611397929060019060040161393e565b6020604051808303816000875af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906138f9565b6001146114265760405162461bcd60e51b815260206004820152601a60248201527966696e616c697a65206661696c6564206174207375636365737360301b6044820152606401610dd4565b6007546001600160a01b0386811660009081526014602090815260408083205460159092529091205492821692631d592a4d929190911690611470906064906112949087906130a8565b6040518363ffffffff1660e01b815260040161148d9291906137ad565b6020604051808303816000875af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906138dc565b6115275760405162461bcd60e51b815260206004820152602260248201527f726566657272657220757064617465206661696c65642061742066696e616c696044820152617a6560f01b6064820152608401610dd4565b50610bb0565b80821080611539575081155b15610bb057600b5461154b9083613044565b600b556040805180820182526000808252336020808401919091526001600160a01b0388168083526015909152838220549351634d2a907360e01b81529093634d2a90739361159e93909260040161393e565b6020604051808303816000875af11580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e191906138f9565b600114610bb05760405162461bcd60e51b8152602060048201526019602482015278199a5b985b1a5e994819985a5b195908185d081c99599d5b99603a1b6044820152606401610dd4565b6003546001600160a01b0316331461164357600080fd5b6001600160a01b0381166116695760405162461bcd60e51b8152600401610dd490613828565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146116a257600080fd5b601e80549115156101000261ff0019909216919091179055565b6003546001600160a01b031633146116d357600080fd5b601154610100900460ff1661171d5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610dd4565b6011805461ff0019169055565b6003546001600160a01b0316331461174157600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546001600160a01b031633146117a257600080fd5b600081116117ed5760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642070657263656e746167652076616c756560401b6044820152606401610dd4565b601b55565b6003546001600160a01b0316331461180957600080fd5b6011805460ff19166001179055565b6003546001600160a01b0316331461182f57600080fd5b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611868573d6000803e3d6000fd5b50565b6003546001600160a01b0316331461188257600080fd5b600c55565b6003546001600160a01b0316331461189e57600080fd5b601e805460ff1916911515919091179055565b6003546001600160a01b031633146118c857600080fd5b601e805463ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b6003546001600160a01b0316331461191157600080fd5b6001600160a01b0381166119375760405162461bcd60e51b8152600401610dd490613828565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461197057600080fd5b60648111156119ba5760405162461bcd60e51b81526020600482015260166024820152756f7574206f662072616e6765206665652076616c756560501b6044820152606401610dd4565b6001548103611a085760405162461bcd60e51b815260206004820152601a6024820152794e6577206665652069732073616d65206173204f6c642066656560301b6044820152606401610dd4565b600155565b6003546001600160a01b03163314611a2457600080fd5b6001600160a01b038116611a4a5760405162461bcd60e51b8152600401610dd490613828565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611a8357600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190611aba90879087906004016137ad565b6040805180830381865afa158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190613962565b91509150611b14611b0b8585611c07565b600b5490613044565b600b5560408051808201825260008082526001600160a01b0387811660208401529251631c8d674960e01b815292851692631c8d674992611b59929091600401613991565b6020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c91906138f9565b50600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690611bcf90879087906004016137ad565b600060405180830381600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b5050505050505050565b600854604051632b6419d360e11b815260009182916001600160a01b03909116906356c833a690611c3e90879087906004016137ad565b602060405180830381865afa158015611c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7f91906137c6565b90506000816001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce591906138f9565b925050505b92915050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690611d2390339086906004016137ad565b602060405180830381865afa158015611d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6491906137c6565b905060005b8351811015610ce057816001600160a01b031663e43252d7858381518110611d9357611d936137e3565b60200260200101516040518263ffffffff1660e01b8152600401611db7919061329b565b600060405180830381600087803b158015611dd157600080fd5b505af1158015611de5573d6000803e3d6000fd5b505050508080611df49061380f565b915050611d69565b6004546001600160a01b03163314611e1357600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190611e4a90879087906004016137ad565b6040805180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a9190613962565b91509150611e9b611b0b8585611c07565b600b5560408051808201825260008082526001600160a01b038781166020808501919091529086168083526015909152838220549351634d2a907360e01b81529093634d2a907393611ef193909260040161393e565b6020604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3491906138f9565b600114611f8f5760405162461bcd60e51b8152602060048201526024808201527f66696e616c697a65206661696c656420617420766f7465722063616c6c207265604482015263199d5b9960e21b6064820152608401610dd4565b600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690611bcf90879087906004016137ad565b6003546001600160a01b03163314611fd857600080fd5b6001600160a01b03811661202b5760405162461bcd60e51b815260206004820152601a6024820152792732bb9020b232391031b0b73a103132903d32b9379030b2323960311b6044820152606401610dd4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461206457600080fd5b60648111156120b25760405162461bcd60e51b815260206004820152601a602482015279756e695065722076616c7565206f7574736964652072616e676560301b6044820152606401610dd4565b600555565b600e8054610e0c90613855565b6003546001600160a01b031633146120db57600080fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b9061210790849060040161329b565b600060405180830381600087803b158015610b9c57600080fd5b6003546001600160a01b0316331461213857600080fd5b61186881613169565b6003546001600160a01b0316331461215857600080fd5b601154610100900460ff16156121a25760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610dd4565b6011805461ff001916610100179055565b601e5460ff166122015760405162461bcd60e51b815260206004820152601960248201527818dc99585d1a5bdb88141c995cd85b1948191a5cd8589b1959603a1b6044820152606401610dd4565b81516064101561225e5760405162461bcd60e51b815260206004820152602260248201527f63616e6e6f742076657374206d6f7265207468616e2031303070632072616973604482015261195960f21b6064820152608401610dd4565b835142106122a95760405162461bcd60e51b815260206004820152601860248201527773746172742074696d65206e6f7420696e2066757475726560401b6044820152606401610dd4565b600c546122bf908560005b602002015190613044565b602085015111156123125760405162461bcd60e51b815260206004820152601e60248201527f70726573616c65206475726174696f6e2065786365656473206c696d697400006044820152606401610dd4565b602083015161232290600261312a565b8351101561237d5760405162461bcd60e51b815260206004820152602260248201527f73636170206d7573742062652061746c656173742068616c66206f6620686361604482015261702160f01b6064820152608401610dd4565b60608301516123c55760405162461bcd60e51b815260206004820152601460248201527306d696e20636f6e74206d757374206265203e20360641b6044820152606401610dd4565b60608301516080840151101561241c5760405162461bcd60e51b815260206004820152601c60248201527b1b585e0818dbdb9d081b5d5cdd081899480f8f481b5a5b8818dbdb9d60221b6044820152606401610dd4565b60115460ff16156124bc57604051602001612436906139ae565b604051602081830303815290604052805190602001208160405160200161245d91906139c1565b60405160208183030381529060405280519060200120146124bc5760405162461bcd60e51b81526020600482015260196024820152781bdb9b1e48191959985d5b1d0818dbd91948185b1b1bddd959603a1b6044820152606401610dd4565b6040516020016124cb906139ae565b60405160208183030381529060405280519060200120816040516020016124f291906139c1565b6040516020818303038152906040528051906020012014612a22576007546040516349e96fdd60e01b81526001600160a01b03909116906349e96fdd9061253d908490600401613467565b6020604051808303816000875af115801561255c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258091906138dc565b6125c45760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420646973636f756e7420636f646560581b6044820152606401610dd4565b601d54600754604051635f51485160e11b81526126c692916112949161264e916001600160a01b03169063bea290a290612602908890600401613467565b6020604051808303816000875af1158015612621573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264591906138f9565b601d54906131d8565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc9061267f90600e906004016139dd565b602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c091906138f9565b906130a8565b3410156127265760405162461bcd60e51b815260206004820152602860248201527f6d73672e76616c7565206d75737420626520657175616c20746f20726566657260448201526772616c206665652160c01b6064820152608401610dd4565b600754604051630fc0b3fd60e01b81526000916127ae91606491611294916001600160a01b0390911690630fc0b3fd90612764908890600401613467565b6020604051808303816000875af1158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a791906138f9565b34906130a8565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a906127df908590600401613467565b6020604051808303816000875af11580156127fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282291906137c6565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561285a573d6000803e3d6000fd5b50600054600754604051630fc0b3fd60e01b81526001600160a01b0392831692638b3c99e3926128a692606492611294926127a792911690630fc0b3fd90612602908b90600401613467565b6040516001600160e01b031960e084901b168152600660048201526024016000604051808303818588803b1580156128dd57600080fd5b505af11580156128f1573d6000803e3d6000fd5b5050600754604051630f22420560e11b81526001600160a01b039091169350631d592a4d9250839150631e44840a9061292e908790600401613467565b6020604051808303816000875af115801561294d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297191906137c6565b836040518363ffffffff1660e01b815260040161298f9291906137ad565b6020604051808303816000875af11580156129ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d291906138dc565b612a1c5760405162461bcd60e51b815260206004820152601b60248201527a1c9959995c9c995c905b5bdd5b9d155c19185d194819985a5b1959602a1b6044820152606401610dd4565b50612b54565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc90612a5390600e906004016139dd565b602060405180830381865afa158015612a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9491906138f9565b341015612af35760405162461bcd60e51b815260206004820152602760248201527f6d73672e76616c7565206d75737420626520657175616c20746f2070726573616044820152666c65206665652160c81b6064820152608401610dd4565b600054604051638b3c99e360e01b8152600760048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b50505050505b6020840151612b676102588660006122b4565b1115612bb55760405162461bcd60e51b815260206004820181905260248201527f70726573616c6520706572696f64206c657373207468616e206d696e696d756d6044820152606401610dd4565b60085460408051606081018252600181526000602082018190528183018190529151630282544d60e21b81526001600160a01b0390931692630a09513492612c04928a92339190600401613a89565b6020604051808303816000875af1158015612c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4791906138dc565b612c8d5760405162461bcd60e51b81526020600482015260176024820152761cdd1bdc9859d9481859191a5d1a5bdb8819985a5b1959604a1b6044820152606401610dd4565b600654604080516080810182523081523360208201526001600160a01b038881168284015260006060830181905292516308dbf55f60e11b8152929316916311b7eabe91612ce391899089908990600401613b26565b6020604051808303816000875af1158015612d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2691906137c6565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a90612d57908590600401613467565b6020604051808303816000875af1158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a91906137c6565b6001600160a01b038281166000908152601460205260409081902080546001600160a01b031916938316939093179092556007549151630fc0b3fd60e01b8152911690630fc0b3fd90612df1908590600401613467565b6020604051808303816000875af1158015612e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3491906138f9565b6001600160a01b03808316600090815260156020526040808220939093556008549251631996f55960e11b81529092612eca9260019291169063332deab290612e8190339060040161329b565b6020604051808303816000875af1158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec491906138f9565b906131d8565b600854604051638252401760e01b81529192506001600160a01b031690638252401790612f01908b90869033908790600401613ba0565b6020604051808303816000875af1158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906138dc565b612f8a5760405162461bcd60e51b81526020600482015260176024820152761c1c995cd85b19481859191c881859190819985a5b1959604a1b6044820152606401610dd4565b600754604051635ac066d560e01b81526001600160a01b0390911690635ac066d590612fbc9086908690600401613c0b565b6020604051808303816000875af1158015612fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fff91906138dc565b611bfd5760405162461bcd60e51b815260206004820152601660248201527518dbd919481d5cd9481d5c19185d194819985a5b195960521b6044820152606401610dd4565b6000806130518385613c35565b9050838110156130a15760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610dd4565b9392505050565b6000826000036130ba57506000611cea565b60006130c68385613c48565b9050826130d38583613c5f565b146130a15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dd4565b60006130a183836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061321a565b6001600160a01b03811661317c57600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006130a183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613251565b6000818361323b5760405162461bcd60e51b8152600401610dd49190613467565b5060006132488486613c5f565b95945050505050565b600081848411156132755760405162461bcd60e51b8152600401610dd49190613467565b5060006132488486613c81565b60006020828403121561329457600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b03811182821017156132e8576132e86132af565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613316576133166132af565b604052919050565b6001600160a01b038116811461186857600080fd5b803561333e8161331e565b919050565b6000806040838503121561335657600080fd5b82356001600160401b038082111561336d57600080fd5b818501915085601f83011261338157600080fd5b8135602082821115613395576133956132af565b8160051b92506133a68184016132ee565b82815292840181019281810190898511156133c057600080fd5b948201945b848610156133ea57853593506133da8461331e565b83825294820194908201906133c5565b9997909101359750505050505050565b60006020828403121561340c57600080fd5b81356130a18161331e565b60005b8381101561343257818101518382015260200161341a565b50506000910152565b60008151808452613453816020860160208601613417565b601f01601f19169290920160200192915050565b6020815260006130a1602083018461343b565b6000806040838503121561348d57600080fd5b82356134988161331e565b946020939093013593505050565b801515811461186857600080fd5b6000602082840312156134c657600080fd5b81356130a1816134a6565b600080604083850312156134e457600080fd5b82356134ef816134a6565b915060208301356134ff816134a6565b809150509250929050565b6000806040838503121561351d57600080fd5b82356135288161331e565b915060208301356134ff8161331e565b600082601f83011261354957600080fd5b81356001600160401b03811115613562576135626132af565b613575601f8201601f19166020016132ee565b81815284602083860101111561358a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126135b857600080fd5b604080519081016001600160401b03811182821017156135da576135da6132af565b80604052508060408401858111156135f157600080fd5b845b8181101561360b5780358352602092830192016135f3565b509195945050505050565b600082601f83011261362757600080fd5b60405160a081016001600160401b0381118282101715613649576136496132af565b6040528060a08401858111156135f157600080fd5b600082601f83011261366f57600080fd5b604051606081016001600160401b0381118282101715613691576136916132af565b6040528060608401858111156135f157600080fd5b6000806000806000806101a087890312156136c057600080fd5b86356001600160401b03808211156136d757600080fd5b818901915089601f8301126136eb57600080fd5b6136f36132c5565b8061014084018c81111561370657600080fd5b845b8181101561373b578035858111156137205760008081fd5b61372c8f828901613538565b85525060209384019301613708565b5050809950505061374e60208a01613333565b965061375d8a60408b016135a7565b955061376c8a60808b01613616565b945061377c8a6101208b0161365e565b935061018089013591508082111561379357600080fd5b506137a089828a01613538565b9150509295509295509295565b6001600160a01b03929092168252602082015260400190565b6000602082840312156137d857600080fd5b81516130a18161331e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613821576138216137f9565b5060010190565b602080825260139082015272616464722063616e6e6f74206265207a65726f60681b604082015260600190565b600181811c9082168061386957607f821691505b60208210810361388957634e487b7160e01b600052602260045260246000fd5b50919050565b6000806000606084860312156138a457600080fd5b83516138af8161331e565b60208501519093506138c08161331e565b60408501519092506138d18161331e565b809150509250925092565b6000602082840312156138ee57600080fd5b81516130a1816134a6565b60006020828403121561390b57600080fd5b5051919050565b8060005b6002811015610ce05781516001600160a01b0316845260209384019390910190600101613916565b6080810161394c8286613912565b8360408301528215156060830152949350505050565b6000806040838503121561397557600080fd5b82516139808161331e565b60208401519092506134ff8161331e565b6060810161399f8285613912565b82151560408301529392505050565b66191959985d5b1d60ca1b815260070190565b600082516139d3818460208701613417565b9190910192915050565b600060208083526000845481600182811c9150808316806139ff57607f831692505b8583108103613a1c57634e487b7160e01b85526022600452602485fd5b878601838152602001818015613a395760018114613a4f57613a7a565b60ff198616825284151560051b82019650613a7a565b60008b81526020902060005b86811015613a7457815484820152908501908901613a5b565b83019750505b50949998505050505050505050565b6001600160a01b0385811682526020808301869052908416604083015260c082019060608301908460005b6003811015613ad3578151151584529282019290820190600101613ab4565b5050505095945050505050565b8060005b6005811015610ce0578151845260209384019390910190600101613ae4565b8060005b6003811015610ce0578151845260209384019390910190600101613b07565b6101c08101818660005b6004811015613b585781516001600160a01b0316835260209283019290910190600101613b30565b505050608082018560005b6002811015613b82578151835260209283019290910190600101613b63565b505050613b9260c0830185613ae0565b613248610160830184613b03565b60808082526000906101c0830190830187835b600a811015613be557607f19868503018352613bd084835161343b565b93506020928301929190910190600101613bb3565b5050506001600160a01b0395861660208401529390941660408201526060015292915050565b604081526000613c1e604083018561343b565b905060018060a01b03831660208301529392505050565b80820180821115611cea57611cea6137f9565b8082028115828204841417611cea57611cea6137f9565b600082613c7c57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115611cea57611cea6137f956fea2646970667358221220e1b9947c4c9ae169789bed93c8c3cdf442867dfc399f5f9939a9ccace605cba464736f6c63430008110033000000000000000000000000c4b8c6adc2fdfb86134547050c13e1f0b32953770000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9

Deployed Bytecode

0x6080604052600436106102de5760003560e01c8063041f78cc146102e3578063042d97821461030557806306bb746e1461033957806306e29712146103595780630c52662e146103865780630d77c7df146103a6578063108d9447146103b957806311ce0267146103ef5780631f4ba8041461040f578063280db44014610433578063284def1514610453578063297054fb14610469578063344eaa271461047f578063363d9efc146104a15780634055f612146104b7578063426b487f146104d75780634503a6d3146104f6578063455991361461050b57806346c96aac1461052157806348e5b7d4146105415780634e6b53f71461057c5780634f81c1ff1461059c5780634fa361e7146105b15780635787b142146105d157806359f962f6146105f15780635bc39e0f146106075780635bff9a27146106275780635fadcc1e1461063d57806360b2aff31461065e578063662b35221461069457806369f5ef4a146106a95780636e62d42f146106c3578063715018a6146106e35780637a594b79146106f85780637d06b7fd146107185780637f928c821461072d5780638da5cb5b1461074257806390f6c06514610762578063a42b45bf14610782578063a60ff76614610798578063a614fec1146107ae578063ab4304df146107e4578063ae27508414610804578063b02fa76c14610824578063b517da2d14610844578063b56a038a14610864578063bc5997751461087a578063c31c01871461089a578063c9467317146108c7578063d0b32863146108e7578063d0f0d73614610914578063d276aded14610934578063d394925414610954578063d50494cf14610974578063d97f558e14610994578063dd13b0dd146109b4578063dec379ff146109e4578063e11f2d1314610a04578063e3613cd914610a24578063ea354fcb14610a39578063efcd708f14610a59578063f2fde38b14610a89578063f5415c1f14610aa9578063f625fd3e14610abe578063f8beaff014610ad8575b600080fd5b3480156102ef57600080fd5b506103036102fe366004613282565b610aeb565b005b34801561031157600080fd5b5060115461032490610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b50610303610354366004613282565b610bb8565b34801561036557600080fd5b50600054610379906001600160a01b031681565b604051610330919061329b565b34801561039257600080fd5b506103036103a1366004613343565b610bd4565b6103036103b4366004613282565b610ce6565b3480156103c557600080fd5b506103796103d43660046133fa565b6014602052600090815260409020546001600160a01b031681565b3480156103fb57600080fd5b50600854610379906001600160a01b031681565b34801561041b57600080fd5b50610425601c5481565b604051908152602001610330565b34801561043f57600080fd5b5061030361044e3660046133fa565b610d97565b34801561045f57600080fd5b5061042560055481565b34801561047557600080fd5b50610425600c5481565b34801561048b57600080fd5b50610494610dff565b6040516103309190613467565b3480156104ad57600080fd5b50610425601a5481565b3480156104c357600080fd5b50600754610379906001600160a01b031681565b3480156104e357600080fd5b50601e5461032490610100900460ff1681565b34801561050257600080fd5b50610303610e8d565b34801561051757600080fd5b5061042560105481565b34801561052d57600080fd5b50600454610379906001600160a01b031681565b34801561054d57600080fd5b5061032461055c36600461347a565b601360209081526000928352604080842090915290825290205460ff1681565b34801561058857600080fd5b506103036105973660046133fa565b610eb0565b3480156105a857600080fd5b50610494610f3a565b3480156105bd57600080fd5b506103036105cc366004613282565b610f47565b3480156105dd57600080fd5b506103036105ec3660046133fa565b61162c565b3480156105fd57600080fd5b50610425601b5481565b34801561061357600080fd5b506103036106223660046134b4565b61168b565b34801561063357600080fd5b50610425601d5481565b34801561064957600080fd5b50601e54610324906301000000900460ff1681565b34801561066a57600080fd5b50610379610679366004613282565b6016602052600090815260409020546001600160a01b031681565b3480156106a057600080fd5b506103036116bc565b3480156106b557600080fd5b506011546103249060ff1681565b3480156106cf57600080fd5b50600654610379906001600160a01b031681565b3480156106ef57600080fd5b5061030361172a565b34801561070457600080fd5b50610303610713366004613282565b61178b565b34801561072457600080fd5b506103036117f2565b34801561073957600080fd5b50610303611818565b34801561074e57600080fd5b50600354610379906001600160a01b031681565b34801561076e57600080fd5b5061030361077d366004613282565b61186b565b34801561078e57600080fd5b50610425600a5481565b3480156107a457600080fd5b5061042560025481565b3480156107ba57600080fd5b506103796107c9366004613282565b6018602052600090815260409020546001600160a01b031681565b3480156107f057600080fd5b506103036107ff3660046134b4565b611887565b34801561081057600080fd5b5061030361081f3660046134d1565b6118b1565b34801561083057600080fd5b50601e546103249062010000900460ff1681565b34801561085057600080fd5b5061030361085f3660046133fa565b6118fa565b34801561087057600080fd5b50610425600b5481565b34801561088657600080fd5b50610303610895366004613282565b611959565b3480156108a657600080fd5b506104256108b53660046133fa565b60196020526000908152604090205481565b3480156108d357600080fd5b506103036108e23660046133fa565b611a0d565b3480156108f357600080fd5b506104256109023660046133fa565b60156020526000908152604090205481565b34801561092057600080fd5b50600954610379906001600160a01b031681565b34801561094057600080fd5b5061030361094f36600461347a565b611a6c565b34801561096057600080fd5b5061042561096f36600461347a565b611c07565b34801561098057600080fd5b5061030361098f366004613343565b611cf0565b3480156109a057600080fd5b506103036109af36600461347a565b611dfc565b3480156109c057600080fd5b506103246109cf3660046133fa565b60176020526000908152604090205460ff1681565b3480156109f057600080fd5b506103036109ff3660046133fa565b611fc1565b348015610a1057600080fd5b50610303610a1f366004613282565b61204d565b348015610a3057600080fd5b506104946120b7565b348015610a4557600080fd5b50610303610a5436600461350a565b6120c4565b348015610a6557600080fd5b50610324610a743660046133fa565b60126020526000908152604090205460ff1681565b348015610a9557600080fd5b50610303610aa43660046133fa565b612121565b348015610ab557600080fd5b50610303612141565b348015610aca57600080fd5b50601e546103249060ff1681565b610303610ae63660046136a6565b6121b3565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610b1e90339086906004016137ad565b602060405180830381865afa158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f91906137c6565b9050806001600160a01b031663d6b0f4846040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b505050505050565b6003546001600160a01b03163314610bcf57600080fd5b600255565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610c0790339086906004016137ad565b602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906137c6565b905060005b8351811015610ce057816001600160a01b0316638ab1d681858381518110610c7757610c776137e3565b60200260200101516040518263ffffffff1660e01b8152600401610c9b919061329b565b600060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b505050508080610cd89061380f565b915050610c4d565b50505050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610d1990339086906004016137ad565b602060405180830381865afa158015610d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5a91906137c6565b9050806001600160a01b031663cdfb2b4e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9c57600080fd5b6003546001600160a01b03163314610dae57600080fd5b6001600160a01b038116610ddd5760405162461bcd60e51b8152600401610dd490613828565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600f8054610e0c90613855565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3890613855565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b505050505081565b6003546001600160a01b03163314610ea457600080fd5b6011805460ff19169055565b6003546001600160a01b03163314610ec757600080fd5b6001600160a01b038116610f185760405162461bcd60e51b8152602060048201526018602482015277070726573616c6520646170702063616e74206265203078360441b6044820152606401610dd4565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d8054610e0c90613855565b600854604051637e2439b360e11b8152600091829182916001600160a01b03169063fc48736690610f7e90339088906004016137ad565b606060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf919061388f565b601e5492955090935091506301000000900460ff16156110995760085460405163cf25127360e01b81526001600160a01b039091169063cf2512739061100b90339088906004016137ad565b6020604051808303816000875af115801561102a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104e91906138dc565b6110995760405162461bcd60e51b815260206004820152601c60248201527b3ab730b13632903a379039b2ba10383932b9b0b632902334b63a32b960211b6044820152606401610dd4565b601e5462010000900460ff16156111775760085460405163f3d7443b60e01b81526001600160a01b039091169063f3d7443b906110dc90339088906004016137ad565b6020604051808303816000875af11580156110fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111f91906138dc565b6111775760405162461bcd60e51b815260206004820152602360248201527f756e61626c6520746f207365742070726573616c65206163746976652073746160448201526274757360e81b6064820152608401610dd4565b601d54601b5461118691613044565b601c819055506000826001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f091906138f9565b90506000836001600160a01b031663e4c21cf26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125691906138f9565b905080821015801561126757508115155b1561152d57600a546112799083613044565b600a5560015460009061129a906064906112949086906130a8565b9061312a565b600080546001600160a01b038881168084526014602090815260408086205460159092529485902054601154955163f6e99c0d60e01b8152948416600486015292166024840152604483019190915261010090920460ff16151560648201529192509063f6e99c0d90608401600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50506040805180820182526001600160a01b03808a166000818152601460209081528582205490931684523383850152818152601590925290839020549251634d2a907360e01b8152909450634d2a90739350611397929060019060040161393e565b6020604051808303816000875af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906138f9565b6001146114265760405162461bcd60e51b815260206004820152601a60248201527966696e616c697a65206661696c6564206174207375636365737360301b6044820152606401610dd4565b6007546001600160a01b0386811660009081526014602090815260408083205460159092529091205492821692631d592a4d929190911690611470906064906112949087906130a8565b6040518363ffffffff1660e01b815260040161148d9291906137ad565b6020604051808303816000875af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906138dc565b6115275760405162461bcd60e51b815260206004820152602260248201527f726566657272657220757064617465206661696c65642061742066696e616c696044820152617a6560f01b6064820152608401610dd4565b50610bb0565b80821080611539575081155b15610bb057600b5461154b9083613044565b600b556040805180820182526000808252336020808401919091526001600160a01b0388168083526015909152838220549351634d2a907360e01b81529093634d2a90739361159e93909260040161393e565b6020604051808303816000875af11580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e191906138f9565b600114610bb05760405162461bcd60e51b8152602060048201526019602482015278199a5b985b1a5e994819985a5b195908185d081c99599d5b99603a1b6044820152606401610dd4565b6003546001600160a01b0316331461164357600080fd5b6001600160a01b0381166116695760405162461bcd60e51b8152600401610dd490613828565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146116a257600080fd5b601e80549115156101000261ff0019909216919091179055565b6003546001600160a01b031633146116d357600080fd5b601154610100900460ff1661171d5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610dd4565b6011805461ff0019169055565b6003546001600160a01b0316331461174157600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546001600160a01b031633146117a257600080fd5b600081116117ed5760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642070657263656e746167652076616c756560401b6044820152606401610dd4565b601b55565b6003546001600160a01b0316331461180957600080fd5b6011805460ff19166001179055565b6003546001600160a01b0316331461182f57600080fd5b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611868573d6000803e3d6000fd5b50565b6003546001600160a01b0316331461188257600080fd5b600c55565b6003546001600160a01b0316331461189e57600080fd5b601e805460ff1916911515919091179055565b6003546001600160a01b031633146118c857600080fd5b601e805463ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b6003546001600160a01b0316331461191157600080fd5b6001600160a01b0381166119375760405162461bcd60e51b8152600401610dd490613828565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461197057600080fd5b60648111156119ba5760405162461bcd60e51b81526020600482015260166024820152756f7574206f662072616e6765206665652076616c756560501b6044820152606401610dd4565b6001548103611a085760405162461bcd60e51b815260206004820152601a6024820152794e6577206665652069732073616d65206173204f6c642066656560301b6044820152606401610dd4565b600155565b6003546001600160a01b03163314611a2457600080fd5b6001600160a01b038116611a4a5760405162461bcd60e51b8152600401610dd490613828565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611a8357600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190611aba90879087906004016137ad565b6040805180830381865afa158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190613962565b91509150611b14611b0b8585611c07565b600b5490613044565b600b5560408051808201825260008082526001600160a01b0387811660208401529251631c8d674960e01b815292851692631c8d674992611b59929091600401613991565b6020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c91906138f9565b50600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690611bcf90879087906004016137ad565b600060405180830381600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b5050505050505050565b600854604051632b6419d360e11b815260009182916001600160a01b03909116906356c833a690611c3e90879087906004016137ad565b602060405180830381865afa158015611c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7f91906137c6565b90506000816001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce591906138f9565b925050505b92915050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690611d2390339086906004016137ad565b602060405180830381865afa158015611d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6491906137c6565b905060005b8351811015610ce057816001600160a01b031663e43252d7858381518110611d9357611d936137e3565b60200260200101516040518263ffffffff1660e01b8152600401611db7919061329b565b600060405180830381600087803b158015611dd157600080fd5b505af1158015611de5573d6000803e3d6000fd5b505050508080611df49061380f565b915050611d69565b6004546001600160a01b03163314611e1357600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190611e4a90879087906004016137ad565b6040805180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a9190613962565b91509150611e9b611b0b8585611c07565b600b5560408051808201825260008082526001600160a01b038781166020808501919091529086168083526015909152838220549351634d2a907360e01b81529093634d2a907393611ef193909260040161393e565b6020604051808303816000875af1158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3491906138f9565b600114611f8f5760405162461bcd60e51b8152602060048201526024808201527f66696e616c697a65206661696c656420617420766f7465722063616c6c207265604482015263199d5b9960e21b6064820152608401610dd4565b600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690611bcf90879087906004016137ad565b6003546001600160a01b03163314611fd857600080fd5b6001600160a01b03811661202b5760405162461bcd60e51b815260206004820152601a6024820152792732bb9020b232391031b0b73a103132903d32b9379030b2323960311b6044820152606401610dd4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461206457600080fd5b60648111156120b25760405162461bcd60e51b815260206004820152601a602482015279756e695065722076616c7565206f7574736964652072616e676560301b6044820152606401610dd4565b600555565b600e8054610e0c90613855565b6003546001600160a01b031633146120db57600080fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b9061210790849060040161329b565b600060405180830381600087803b158015610b9c57600080fd5b6003546001600160a01b0316331461213857600080fd5b61186881613169565b6003546001600160a01b0316331461215857600080fd5b601154610100900460ff16156121a25760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610dd4565b6011805461ff001916610100179055565b601e5460ff166122015760405162461bcd60e51b815260206004820152601960248201527818dc99585d1a5bdb88141c995cd85b1948191a5cd8589b1959603a1b6044820152606401610dd4565b81516064101561225e5760405162461bcd60e51b815260206004820152602260248201527f63616e6e6f742076657374206d6f7265207468616e2031303070632072616973604482015261195960f21b6064820152608401610dd4565b835142106122a95760405162461bcd60e51b815260206004820152601860248201527773746172742074696d65206e6f7420696e2066757475726560401b6044820152606401610dd4565b600c546122bf908560005b602002015190613044565b602085015111156123125760405162461bcd60e51b815260206004820152601e60248201527f70726573616c65206475726174696f6e2065786365656473206c696d697400006044820152606401610dd4565b602083015161232290600261312a565b8351101561237d5760405162461bcd60e51b815260206004820152602260248201527f73636170206d7573742062652061746c656173742068616c66206f6620686361604482015261702160f01b6064820152608401610dd4565b60608301516123c55760405162461bcd60e51b815260206004820152601460248201527306d696e20636f6e74206d757374206265203e20360641b6044820152606401610dd4565b60608301516080840151101561241c5760405162461bcd60e51b815260206004820152601c60248201527b1b585e0818dbdb9d081b5d5cdd081899480f8f481b5a5b8818dbdb9d60221b6044820152606401610dd4565b60115460ff16156124bc57604051602001612436906139ae565b604051602081830303815290604052805190602001208160405160200161245d91906139c1565b60405160208183030381529060405280519060200120146124bc5760405162461bcd60e51b81526020600482015260196024820152781bdb9b1e48191959985d5b1d0818dbd91948185b1b1bddd959603a1b6044820152606401610dd4565b6040516020016124cb906139ae565b60405160208183030381529060405280519060200120816040516020016124f291906139c1565b6040516020818303038152906040528051906020012014612a22576007546040516349e96fdd60e01b81526001600160a01b03909116906349e96fdd9061253d908490600401613467565b6020604051808303816000875af115801561255c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258091906138dc565b6125c45760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420646973636f756e7420636f646560581b6044820152606401610dd4565b601d54600754604051635f51485160e11b81526126c692916112949161264e916001600160a01b03169063bea290a290612602908890600401613467565b6020604051808303816000875af1158015612621573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264591906138f9565b601d54906131d8565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc9061267f90600e906004016139dd565b602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c091906138f9565b906130a8565b3410156127265760405162461bcd60e51b815260206004820152602860248201527f6d73672e76616c7565206d75737420626520657175616c20746f20726566657260448201526772616c206665652160c01b6064820152608401610dd4565b600754604051630fc0b3fd60e01b81526000916127ae91606491611294916001600160a01b0390911690630fc0b3fd90612764908890600401613467565b6020604051808303816000875af1158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a791906138f9565b34906130a8565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a906127df908590600401613467565b6020604051808303816000875af11580156127fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282291906137c6565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561285a573d6000803e3d6000fd5b50600054600754604051630fc0b3fd60e01b81526001600160a01b0392831692638b3c99e3926128a692606492611294926127a792911690630fc0b3fd90612602908b90600401613467565b6040516001600160e01b031960e084901b168152600660048201526024016000604051808303818588803b1580156128dd57600080fd5b505af11580156128f1573d6000803e3d6000fd5b5050600754604051630f22420560e11b81526001600160a01b039091169350631d592a4d9250839150631e44840a9061292e908790600401613467565b6020604051808303816000875af115801561294d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297191906137c6565b836040518363ffffffff1660e01b815260040161298f9291906137ad565b6020604051808303816000875af11580156129ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d291906138dc565b612a1c5760405162461bcd60e51b815260206004820152601b60248201527a1c9959995c9c995c905b5bdd5b9d155c19185d194819985a5b1959602a1b6044820152606401610dd4565b50612b54565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc90612a5390600e906004016139dd565b602060405180830381865afa158015612a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9491906138f9565b341015612af35760405162461bcd60e51b815260206004820152602760248201527f6d73672e76616c7565206d75737420626520657175616c20746f2070726573616044820152666c65206665652160c81b6064820152608401610dd4565b600054604051638b3c99e360e01b8152600760048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b50505050505b6020840151612b676102588660006122b4565b1115612bb55760405162461bcd60e51b815260206004820181905260248201527f70726573616c6520706572696f64206c657373207468616e206d696e696d756d6044820152606401610dd4565b60085460408051606081018252600181526000602082018190528183018190529151630282544d60e21b81526001600160a01b0390931692630a09513492612c04928a92339190600401613a89565b6020604051808303816000875af1158015612c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4791906138dc565b612c8d5760405162461bcd60e51b81526020600482015260176024820152761cdd1bdc9859d9481859191a5d1a5bdb8819985a5b1959604a1b6044820152606401610dd4565b600654604080516080810182523081523360208201526001600160a01b038881168284015260006060830181905292516308dbf55f60e11b8152929316916311b7eabe91612ce391899089908990600401613b26565b6020604051808303816000875af1158015612d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2691906137c6565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a90612d57908590600401613467565b6020604051808303816000875af1158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a91906137c6565b6001600160a01b038281166000908152601460205260409081902080546001600160a01b031916938316939093179092556007549151630fc0b3fd60e01b8152911690630fc0b3fd90612df1908590600401613467565b6020604051808303816000875af1158015612e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3491906138f9565b6001600160a01b03808316600090815260156020526040808220939093556008549251631996f55960e11b81529092612eca9260019291169063332deab290612e8190339060040161329b565b6020604051808303816000875af1158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec491906138f9565b906131d8565b600854604051638252401760e01b81529192506001600160a01b031690638252401790612f01908b90869033908790600401613ba0565b6020604051808303816000875af1158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906138dc565b612f8a5760405162461bcd60e51b81526020600482015260176024820152761c1c995cd85b19481859191c881859190819985a5b1959604a1b6044820152606401610dd4565b600754604051635ac066d560e01b81526001600160a01b0390911690635ac066d590612fbc9086908690600401613c0b565b6020604051808303816000875af1158015612fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fff91906138dc565b611bfd5760405162461bcd60e51b815260206004820152601660248201527518dbd919481d5cd9481d5c19185d194819985a5b195960521b6044820152606401610dd4565b6000806130518385613c35565b9050838110156130a15760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610dd4565b9392505050565b6000826000036130ba57506000611cea565b60006130c68385613c48565b9050826130d38583613c5f565b146130a15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dd4565b60006130a183836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061321a565b6001600160a01b03811661317c57600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006130a183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613251565b6000818361323b5760405162461bcd60e51b8152600401610dd49190613467565b5060006132488486613c5f565b95945050505050565b600081848411156132755760405162461bcd60e51b8152600401610dd49190613467565b5060006132488486613c81565b60006020828403121561329457600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b03811182821017156132e8576132e86132af565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613316576133166132af565b604052919050565b6001600160a01b038116811461186857600080fd5b803561333e8161331e565b919050565b6000806040838503121561335657600080fd5b82356001600160401b038082111561336d57600080fd5b818501915085601f83011261338157600080fd5b8135602082821115613395576133956132af565b8160051b92506133a68184016132ee565b82815292840181019281810190898511156133c057600080fd5b948201945b848610156133ea57853593506133da8461331e565b83825294820194908201906133c5565b9997909101359750505050505050565b60006020828403121561340c57600080fd5b81356130a18161331e565b60005b8381101561343257818101518382015260200161341a565b50506000910152565b60008151808452613453816020860160208601613417565b601f01601f19169290920160200192915050565b6020815260006130a1602083018461343b565b6000806040838503121561348d57600080fd5b82356134988161331e565b946020939093013593505050565b801515811461186857600080fd5b6000602082840312156134c657600080fd5b81356130a1816134a6565b600080604083850312156134e457600080fd5b82356134ef816134a6565b915060208301356134ff816134a6565b809150509250929050565b6000806040838503121561351d57600080fd5b82356135288161331e565b915060208301356134ff8161331e565b600082601f83011261354957600080fd5b81356001600160401b03811115613562576135626132af565b613575601f8201601f19166020016132ee565b81815284602083860101111561358a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126135b857600080fd5b604080519081016001600160401b03811182821017156135da576135da6132af565b80604052508060408401858111156135f157600080fd5b845b8181101561360b5780358352602092830192016135f3565b509195945050505050565b600082601f83011261362757600080fd5b60405160a081016001600160401b0381118282101715613649576136496132af565b6040528060a08401858111156135f157600080fd5b600082601f83011261366f57600080fd5b604051606081016001600160401b0381118282101715613691576136916132af565b6040528060608401858111156135f157600080fd5b6000806000806000806101a087890312156136c057600080fd5b86356001600160401b03808211156136d757600080fd5b818901915089601f8301126136eb57600080fd5b6136f36132c5565b8061014084018c81111561370657600080fd5b845b8181101561373b578035858111156137205760008081fd5b61372c8f828901613538565b85525060209384019301613708565b5050809950505061374e60208a01613333565b965061375d8a60408b016135a7565b955061376c8a60808b01613616565b945061377c8a6101208b0161365e565b935061018089013591508082111561379357600080fd5b506137a089828a01613538565b9150509295509295509295565b6001600160a01b03929092168252602082015260400190565b6000602082840312156137d857600080fd5b81516130a18161331e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613821576138216137f9565b5060010190565b602080825260139082015272616464722063616e6e6f74206265207a65726f60681b604082015260600190565b600181811c9082168061386957607f821691505b60208210810361388957634e487b7160e01b600052602260045260246000fd5b50919050565b6000806000606084860312156138a457600080fd5b83516138af8161331e565b60208501519093506138c08161331e565b60408501519092506138d18161331e565b809150509250925092565b6000602082840312156138ee57600080fd5b81516130a1816134a6565b60006020828403121561390b57600080fd5b5051919050565b8060005b6002811015610ce05781516001600160a01b0316845260209384019390910190600101613916565b6080810161394c8286613912565b8360408301528215156060830152949350505050565b6000806040838503121561397557600080fd5b82516139808161331e565b60208401519092506134ff8161331e565b6060810161399f8285613912565b82151560408301529392505050565b66191959985d5b1d60ca1b815260070190565b600082516139d3818460208701613417565b9190910192915050565b600060208083526000845481600182811c9150808316806139ff57607f831692505b8583108103613a1c57634e487b7160e01b85526022600452602485fd5b878601838152602001818015613a395760018114613a4f57613a7a565b60ff198616825284151560051b82019650613a7a565b60008b81526020902060005b86811015613a7457815484820152908501908901613a5b565b83019750505b50949998505050505050505050565b6001600160a01b0385811682526020808301869052908416604083015260c082019060608301908460005b6003811015613ad3578151151584529282019290820190600101613ab4565b5050505095945050505050565b8060005b6005811015610ce0578151845260209384019390910190600101613ae4565b8060005b6003811015610ce0578151845260209384019390910190600101613b07565b6101c08101818660005b6004811015613b585781516001600160a01b0316835260209283019290910190600101613b30565b505050608082018560005b6002811015613b82578151835260209283019290910190600101613b63565b505050613b9260c0830185613ae0565b613248610160830184613b03565b60808082526000906101c0830190830187835b600a811015613be557607f19868503018352613bd084835161343b565b93506020928301929190910190600101613bb3565b5050506001600160a01b0395861660208401529390941660408201526060015292915050565b604081526000613c1e604083018561343b565b905060018060a01b03831660208301529392505050565b80820180821115611cea57611cea6137f9565b8082028115828204841417611cea57611cea6137f9565b600082613c7c57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115611cea57611cea6137f956fea2646970667358221220e1b9947c4c9ae169789bed93c8c3cdf442867dfc399f5f9939a9ccace605cba464736f6c63430008110033

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

000000000000000000000000c4b8c6adc2fdfb86134547050c13e1f0b32953770000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9

-----Decoded View---------------
Arg [0] : _presaleDappAddr (address): 0xC4B8c6aDC2FDfB86134547050C13E1f0B3295377
Arg [1] : _feeRecieveContract (address): 0x0FEbB541Ef3632925cD67DAf9e82CdC8Ec7a71ef
Arg [2] : _storageContract (address): 0x37d79eea1f3D5475a7e0F0CD8f8130dF8500CA29
Arg [3] : _referralContract (address): 0x344129238deB523C02e8be4C0e7E630780711BC5
Arg [4] : _feeCheckContract (address): 0xC1b4c3862d252e4146CA7776FaF4460B5bc2FFd9

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c4b8c6adc2fdfb86134547050c13e1f0b3295377
Arg [1] : 0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef
Arg [2] : 00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29
Arg [3] : 000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5
Arg [4] : 000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9


Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.