S Price: $0.487768 (+0.07%)

Contract

0xAFaE956C48061F6D7E77C723A91C1255b8904e62

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Presale D...102554472025-02-26 8:38:2532 days ago1740559105IN
0xAFaE956C...5b8904e62
0.00000672 S0.3114703955
Enable Whitelist99953442025-02-25 7:05:0533 days ago1740467105IN
0xAFaE956C...5b8904e62
0.00000655 S0.0127939355
Create Presale D...94866402025-02-23 2:49:3335 days ago1740278973IN
0xAFaE956C...5b8904e62
0.00000672 S0.3245041855
Create Presale D...73687772025-02-11 6:59:4247 days ago1739257182IN
0xAFaE956C...5b8904e62
0.00000672 S0.3477550952
Call Finalize DG72345792025-02-10 6:57:3248 days ago1739170652IN
0xAFaE956C...5b8904e62
0 S0.0126090152
Create Presale D...62800162025-02-02 18:58:1355 days ago1738522693IN
0xAFaE956C...5b8904e62
0.00000672 S0.290286352
Call Finalize DG52521902025-01-24 12:00:1265 days ago1737720012IN
0xAFaE956C...5b8904e62
0 S0.3250270655
Create Presale D...52510492025-01-24 11:47:5465 days ago1737719274IN
0xAFaE956C...5b8904e62
0.00000672 S0.3091361955
Call Finalize DG52506972025-01-24 11:43:3265 days ago1737719012IN
0xAFaE956C...5b8904e62
0 S0.0108267555
Create Presale D...52473302025-01-24 11:03:2465 days ago1737716604IN
0xAFaE956C...5b8904e62
0.00000672 S0.3111711955
Create Presale D...48266492025-01-21 13:37:5968 days ago1737466679IN
0xAFaE956C...5b8904e62
0.00000672 S0.31177355
Call Finalize DG22985732025-01-02 22:35:2686 days ago1735857326IN
0xAFaE956C...5b8904e62
0 S0.006485941.1
Create Presale D...22963462025-01-02 22:17:1286 days ago1735856232IN
0xAFaE956C...5b8904e62
0 S0.00592921.1
Update Presale D...22762362025-01-02 17:27:5887 days ago1735838878IN
0xAFaE956C...5b8904e62
0 S0.000032321.1
Call Finalize DG22140692025-01-02 1:20:2687 days ago1735780826IN
0xAFaE956C...5b8904e62
0 S0.006553821.1
Create Presale D...21061842024-12-31 19:51:0688 days ago1735674666IN
0xAFaE956C...5b8904e62
0 S0.006158121.1
Transfer Ownersh...20641882024-12-31 7:43:2589 days ago1735631005IN
0xAFaE956C...5b8904e62
0 S0.000033021.1
Change Voter Add...20641642024-12-31 7:42:5689 days ago1735630976IN
0xAFaE956C...5b8904e62
0 S0.00003041.1
Add Router20640312024-12-31 7:40:0989 days ago1735630809IN
0xAFaE956C...5b8904e62
0 S0.000102531.1
Change Voter Add...13025872024-12-23 5:38:1597 days ago1734932295IN
0xAFaE956C...5b8904e62
0 S0.000052051.1

Latest 10 internal transactions

Parent Transaction Hash Block From To
102554472025-02-26 8:38:2532 days ago1740559105
0xAFaE956C...5b8904e62
0.00000672 S
99953442025-02-25 7:05:0533 days ago1740467105
0xAFaE956C...5b8904e62
0.00000655 S
94866402025-02-23 2:49:3335 days ago1740278973
0xAFaE956C...5b8904e62
0.00000672 S
73687772025-02-11 6:59:4247 days ago1739257182
0xAFaE956C...5b8904e62
0.00000672 S
62800162025-02-02 18:58:1355 days ago1738522693
0xAFaE956C...5b8904e62
0.00000672 S
52510492025-01-24 11:47:5465 days ago1737719274
0xAFaE956C...5b8904e62
0.00000672 S
52473302025-01-24 11:03:2465 days ago1737716604
0xAFaE956C...5b8904e62
0.00000672 S
48266492025-01-21 13:37:5968 days ago1737466679
0xAFaE956C...5b8904e62
0.00000672 S
22963462025-01-02 22:17:1286 days ago1735856232
0xAFaE956C...5b8904e62
0 S
21061842024-12-31 19:51:0688 days ago1735674666
0xAFaE956C...5b8904e62
0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MainDeployerRegular

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1 runs

Other Settings:
london EvmVersion, MIT license
File 1 of 1 : MainDappRegular.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);
}



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() public {
        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 RouterContractInterface {

    function Approve() external returns(bool);

    function getpair(address token) external view returns(address);

    function AddLiquidity(uint256 amountTokenDesired) external payable;

    //function AddLiquidity() external payable;

    function refundUniLP(address _routerAddress) external payable;

    function refundUniLPbyPlatform(address _routerAddress) external payable;

    function uniBalance(address token) external view returns(uint256);


}
interface RouterDappInterface {


    function createRouter(address _tokenAddress, address _creatorAdress, uint256 _locktime, address routerAddressInput, uint256 _extraAmount, string memory _logo) external returns (address);

}
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 CreatePresaleRegular(address[4] memory presaleAddressInput_Router, uint256[2] memory start_end_time, uint256[5] memory soft_hard_cap_rate_min_max_eth, uint256[2] memory uniRatePercentage, uint256[2] memory extraAmountPer_lockTime) 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 returns(bool);
    function mintForUniswap(address _routerAddr) external;
    function finalize(address[2] memory __finalizeInfo, uint256 refPer, bool validFinalize) external returns(bool);
    function finalizeAnytime(address[2] memory __finalizeInfo, bool validFinalize) external returns(bool);
    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 MainDeployerRegular 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 = 2592000;
    string public dappName = "PresaleDeployer";
    string public dappFeeName = "regPresaleFees";
    string public dappWhitelistFeeName = "regWhitelistFees";
    uint256 public tokenFee;
    bool public referralDisabled;
    bool public tokenFeeToReferrer;
    bool public activeFalse = true;
    bool public filter = true;
    // 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;
/*
    struct finalizeData {
        //bool exists; 
        bool active;
        address uniswapDep;
        uint uniswapPercentage;
        uint256 uniswapRate;
        address tokenAddress;
        address presaleAddress;
        address nftPresaleAddress;
        bool nft;
        bool presale;
    }
    */
   
    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;
    
    function CreatePresaleDep(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 uniswap_info_arr, address _routerAddress, string memory _referralCode) public payable {
        require(creationPresaleEnabled, "creation Presale disabled");
        
        //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");
        //uint256[2] memory start_end_time = [start_end_gov_time[0], start_end_gov_time[1]];
        require(RouterValid[_routerAddress], "invalid router address");

        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!");
        //payable(feeContract).transfer(msg.value);
        //if(ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode) > 0){
            uint256 referrerAmount = (msg.value).mul(ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode)).div(100);
            payable(ReferralContract(referralDappAddr).fetchCodeOwner(_referralCode)).call{value:referrerAmount}("");
            FeeDepositContractInterface(feeContract).payment{value: (msg.value).mul(hundred.sub(ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode))).div(100)}(0); // 0 at the end means it will be registerred in the fee deposit contract as a referral regular 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}(1);  // 1 at the end means it will be registerred in the fee deposit contract as a NO referral regular presale
            //payable(feeContract).transfer(msg.value);

        }
        
        //  require(start_end_gov_time[1] >= now.add(minTimeThreshold),"presale end time less than minimum threshold");

        require((start_end_time[0].add(minStartDeltaTime)) <= start_end_time[1], "presale period less than minimum");
        require(uniswap_info_arr[0] > (start_end_time[1].add(minLockTime)), "Lock time must be higher than presale end plus minimum lock time");

        // require(soft_hard_cap_rate_min_max_eth[5] >=0 && soft_hard_cap_rate_min_max_eth[5] <=100, "Governance amount is beyond range");

        require((uniswap_info_arr[2] > minUniPercentage), "Uniswap percentage is lower than min threshold");

        // require((uniswap_info_arr[2].add(soft_hard_cap_rate_min_max_eth[5])) <= 100, "gov plus uni % greater than 100");

        //(bool storageSuccess, bytes memory storageFetch) = storageContract.call(abi.encodeWithSignature("CreatePresaleStorage(string[10],address,uint256[6],uint256,address,bool[2])", _tokenInfo, tokenAddr, soft_hard_cap_rate_min_max_eth,uniswap_info_arr[0],msg.sender,[true,false,false]));
        //require(storageSuccess, "storage creation failed");
        require(StorageContractInterface(storageContract).CreatePresaleStorage(tokenAddr,uniswap_info_arr[0],msg.sender,[true,false,false]),"storage addition failed");



        //(bool presaleSuccess, bytes memory presaleFetch) = presaleDappAddr.call(abi.encodeWithSignature("CreatePresaleRegular(address[3],uint256[2],uint256[6],uint256[2])",  [address(this), msg.sender, tokenAddr], start_end_time, soft_hard_cap_rate_min_max_eth, [uniswap_info_arr[1],uniswap_info_arr[2]],extraAmountPer));
        //require(presaleSuccess, "presale creation failed");
        //address presaleAddrReturn = abi.decode(presaleFetch, (address));

        address presaleAddrReturn = PresaleDappInterface(presaleDappAddr).CreatePresaleRegular([address(this), msg.sender, tokenAddr,_routerAddress], start_end_time, soft_hard_cap_rate_min_max_eth, [uniswap_info_arr[1],uniswap_info_arr[2]],[extraAmountPer,uniswap_info_arr[0]]);


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

        //(bool presaleNumFetch, bytes memory presaleNum) = storageContract.call(abi.encodeWithSignature("fetchPresaleNumByOwner(address)",msg.sender));
        //require(presaleNumFetch, "presaleNum fetch failed");
        //uint256 presaleNumCorrect = (abi.decode(presaleNum, (uint256))).sub(1);

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

        //(bool presaleAdd, bytes memory presaleAddFetch) = storageContract.call(abi.encodeWithSignature("addPresaleAddr(address,address,uint256)", presaleAddrReturn,msg.sender,presaleNumCorrect)); // subtraction by 1 is important to set it to correct presale storage since creating storage increments the variable by 1
        //require(presaleAdd, "presale addr add failed");

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

       /* if(_allInOne){
            createRouter(msg.sender,_routerAddress,presaleNumCorrect,_tokenInfo[2]);
        }
        */
        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 ChangeFilterAddr(address _newFilterAddress) public onlyOwner {

        // require(_newFilterAddress != FilterAddress, "New addr is same as Old Addr");
        require(_newFilterAddress != address(0), "New Addr cant be zero addr");
        FilterAddress = _newFilterAddress;

    }
*/


    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 changePresaleFees(uint256 _newFee) public onlyOwner {

        require((_newFee >= 0), "_newFee value must be >= 0");

        presaleFees = _newFee;

    }

    function changeWhitelistFees(uint256 _newFee) public onlyOwner {

        require((_newFee >= 0), "_newFee value must be >= 0");

        whitelistFees = _newFee;

    }
    */
    function disableReferral() public onlyOwner {

        referralDisabled = true;

    }
    function enableReferral() public onlyOwner {

        referralDisabled = false;

    }
    // function callFinalize( uint256 _governStartTime, uint256 _governEndTime) public {
    function callFinalizeDG(uint256 _presaleNum) public {
        //require(!presaleFinalized[msg.sender][_presaleNum],"already finalized");


        //(bool PresaleStructBool, bytes memory PresaleStructFetch) = storageContract.call(abi.encodeWithSignature("fetchPresaleStruct(address,uint256)",msg.sender,_presaleNum));
        //require(PresaleStructBool, "nft presale struct fetch failed");

        //(finalizeDataStruct[msg.sender].tokenAddress,
        //finalizeDataStruct[msg.sender].presaleAddress,finalizeDataStruct[msg.sender].uniswapDep,
        //finalizeDataStruct[msg.sender].uniswapPercentage,finalizeDataStruct[msg.sender].uniswapRate) = abi.decode(PresaleStructFetch, (address,address,address));
        (address _tokenAddr,address _presaleAddr, address _uniswapDep) = StorageContractInterface(storageContract).fetchPresaleStruct(msg.sender,_presaleNum);
        
        uint256 _uniPer = PresaleContractInterface(_presaleAddr).uniswapPercentage();
        uint256 _uniRate = PresaleContractInterface(_presaleAddr).uniswapRate();


        //(finalizeDataStruct[msg.sender].uniswapPercentage,finalizeDataStruct[msg.sender].uniswapRate) 
       
        //(bool nftPresaleStatBool, bytes memory nftPresaleStatFetch) = storageContract.call(abi.encodeWithSignature("fetchNftPresaleStatAddr(address,uint256)",msg.sender,_presaleNum));
        //require(nftPresaleStatBool, "nft presale stat and addr fetch failed");

        //(finalizeDataStruct[msg.sender].active,finalizeDataStruct[msg.sender].nft,
        //finalizeDataStruct[msg.sender].nftPresaleAddress) = abi.decode(nftPresaleStatFetch, (bool,bool,address));
        //require(!nftBool,"this function is not for nft presale");

         //require(active, "User doesnt have a running presale to finalize");


        //(bool setPresaleActiveFalseAndFilter, bytes memory _setPresaleActiveFalseAndFilter) = storageContract.call(abi.encodeWithSignature("setPresaleActiveFalseAndFilter(address,uint256)",msg.sender,_presaleNum));
        //require(setPresaleActiveFalseAndFilter, "presale active fetch set to false failed");
        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);


        //(bool checkEthRaised, bytes memory _totalEthRaised) = finalizeDataStruct[msg.sender].presaleAddress.call(abi.encodeWithSignature("CheckTotalEthRaised()"));
        //require(checkEthRaised, "failed to check eth raised");
        //uint256 totalEthRaised = abi.decode(_totalEthRaised, (uint256));
        
        uint256 totalEthRaised = PresaleContractInterface(_presaleAddr).CheckTotalEthRaised();

        //(bool checkSoftCap, bytes memory _SoftCap) = finalizeDataStruct[msg.sender].presaleAddress.call(abi.encodeWithSignature("CheckSoftCap()"));
        //require(checkSoftCap, "failed to check soft cap");
        //uint256 SoftCap = abi.decode(_SoftCap, (uint256));

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



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




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

            require(PresaleContractInterface(_presaleAddr).mintForPlatform(feeContract,presaleToReferrer[_presaleAddr],presaleToRefPer[_presaleAddr],tokenFeeToReferrer),"error at mint for plat");




            require(PresaleContractInterface(_presaleAddr).finalize([presaleToReferrer[_presaleAddr], msg.sender],presaleToRefPer[_presaleAddr],true),"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),"finalize failed at refund");

        }


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

    }


    function checkTotalEthraisedOfPresale(address presaleToRefundFromOwnerAddress, uint256 _presaleNum) public view returns(uint256) {
        //(bool presaleAddressBool, bytes memory presaleAddressFetch) = storageContract.call(abi.encodeWithSignature("fetchPresaleAddress(address,uint256)",presaleToRefundFromOwnerAddress,_presaleNum));
        //require(presaleAddressBool, "presale address fetch failed");
        //address presaleAddressFetched = abi.decode(presaleAddressFetch, (address));

        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(presaleToRefundFromOwnerAddress,_presaleNum);

        //(bool checkEthRaised, bytes memory _totalEthRaised) = presaleAddressFetched.call(abi.encodeWithSignature("CheckTotalEthRaised()"));
        //require(checkEthRaised, "failed to check eth raised");
        //uint256 totalEthRaised = abi.decode(_totalEthRaised, (uint256));

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

    }



    function voterCallsFinalizeRefund(address presaleToRefundFromOwnerAddress,uint256 _presaleNum) onlyVoter public {
        //(bool fetchVoterCallData, bytes memory VoterCallData) = storageContract.call(abi.encodeWithSignature("fetchVoterCallData(address,uint256)",presaleToRefundFromOwnerAddress,_presaleNum));
        //require(fetchVoterCallData, "voter data fetch failed");
        //(address presaleAddressFetched,address uniAddressFetched) = abi.decode(VoterCallData, (address,address));

        (address presaleAddressFetched,address uniAddressFetched) = StorageContractInterface(storageContract).fetchVoterCallData(presaleToRefundFromOwnerAddress,_presaleNum);
        

        totalRefundedFromPlatform = totalRefundedFromPlatform.add(checkTotalEthraisedOfPresale(presaleToRefundFromOwnerAddress,_presaleNum));
        //  require(now > presales[presaleToRefundFromOwnerAddress].govStartTime, "governance time not started yet");
        //address[3] memory finalizeInput = [address(0), presaleToRefundFromOwnerAddress, uniAddressFetched];
        //(bool _finalized, bytes memory _finalizedReturn) = presaleAddressFetched.call(abi.encodeWithSignature("finalize(address[3],bool)", finalizeInput, false));
        //require(_finalized, "Finalization Refund call failed");

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

        //(bool addFailFilter, bytes memory addFailFilterReturn) = storageContract.call(abi.encodeWithSignature("addFailFilter(address,uint256)", presaleToRefundFromOwnerAddress, _presaleNum));
        //require(addFailFilter, "adding to Fail Filter failed");

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

    } 

    function voterCallsFinalizeRefundAnytime(address presaleToRefundFromOwnerAddress,uint256 _presaleNum) onlyVoter public {

        //(bool fetchVoterCallData, bytes memory VoterCallData) = storageContract.call(abi.encodeWithSignature("fetchVoterCallData(address,uint256)",presaleToRefundFromOwnerAddress,_presaleNum));
        //require(fetchVoterCallData, "voter data fetch failed");
        //(address presaleAddressFetched,address uniAddressFetched) = abi.decode(VoterCallData, (address,address));

        (address presaleAddressFetched,address uniAddressFetched) = StorageContractInterface(storageContract).fetchVoterCallData(presaleToRefundFromOwnerAddress,_presaleNum);

        totalRefundedFromPlatform = totalRefundedFromPlatform.add(checkTotalEthraisedOfPresale(presaleToRefundFromOwnerAddress,_presaleNum));
        //  require(now > presales[presaleToRefundFromOwnerAddress].govStartTime, "governance time not started yet");
        //address[3] memory finalizeInput = [address(0), presaleToRefundFromOwnerAddress, uniAddressFetched];
        //(bool _finalized, bytes memory _finalizedReturn) = presaleAddressFetched.call(abi.encodeWithSignature("finalizeAnytime(address[3],bool)", finalizeInput, false));
        //require(_finalized, "Finalization Refund call failed");

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

        //(bool addFailFilter, bytes memory addFailFilterReturn) = storageContract.call(abi.encodeWithSignature("addFailFilter(address,uint256)", presaleToRefundFromOwnerAddress, _presaleNum));
        //require(addFailFilter, "adding to Fail Filter failed");

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

    }



/*
    function getNumberOfPresaleOwners() public view returns(uint256) {


        return OwnerIndex;

    }
*//*
    function PlatformUnlockLP(address presaleToRefundFromOwnerAddress, address _routerAddress) public onlyOwner {


        RouterInterface(payable(presales[presaleToRefundFromOwnerAddress].uniswapDep)).refundUniLPbyPlatform(_routerAddress);

    }
*/
    function enableWhitelist(uint256 _presaleNum) public payable {
        //(bool presaleAddressBool, bytes memory presaleAddressFetch) = storageContract.call(abi.encodeWithSignature("fetchPresaleAddress(address,uint256)",msg.sender,_presaleNum));
        //require(presaleAddressBool, "presale address fetch failed");
        //address presaleAddressFetched = abi.decode(presaleAddressFetch, (address));

        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}(2); // 2 at the end means it will be registerred in the fee deposit contract as a whitelist fee for regular presale
        //require(presales[msg.sender].exists, "user has no presale!");
        //(bool _enableWhitelist, bytes memory _whitelistEnableReturn) = presaleAddressFetched.call(abi.encodeWithSignature("enableWhitelist()"));
        //require(_enableWhitelist, "Whitelist enablement failed");

        PresaleContractInterface(presaleAddressFetched).enableWhitelist();

    }

    function disableWhitelist(uint256 _presaleNum) public {
        //(bool presaleAddressBool, bytes memory presaleAddressFetch) = storageContract.call(abi.encodeWithSignature("fetchPresaleAddress(address,uint256)",msg.sender,_presaleNum));
        //require(presaleAddressBool, "presale address fetch failed");
        //address presaleAddressFetched = abi.decode(presaleAddressFetch, (address));

        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(msg.sender,_presaleNum);
        //require(msg.value >= whitelistFees, "msg.value must be >= whitelist fees!");
        //payable(feeContract).transfer(whitelistFees);
        //require(presales[msg.sender].exists, "user has no presale!");
        //(bool _disableWhitelist, bytes memory _whitelistDisableReturn) = presaleAddressFetched.call(abi.encodeWithSignature("disableWhitelist()"));
        //require(_disableWhitelist, "Whitelist disablement failed");

        PresaleContractInterface(presaleAddressFetched).disableWhitelist();

    }

    function AddToWhitelist(address[] memory _whitelistAddress, uint256 _presaleNum) public {
        //(bool presaleAddressBool, bytes memory presaleAddressFetch) = storageContract.call(abi.encodeWithSignature("fetchPresaleAddress(address,uint256)",msg.sender,_presaleNum));
        //require(presaleAddressBool, "presale address fetch failed");
        //address presaleAddressFetched = abi.decode(presaleAddressFetch, (address));

        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("addToWhitelist(address)", _whitelistAddress[i]));
            //require(_addToWhitelist, "Whitelist addition failed");

            PresaleContractInterface(presaleAddressFetched).addToWhitelist(_whitelistAddress[i]);
        }

    }

    function RemoveFromWhitelist(address[] memory _whitelistAddress, uint256 _presaleNum) public {
        //(bool presaleAddressBool, bytes memory presaleAddressFetch) = storageContract.call(abi.encodeWithSignature("fetchPresaleAddress(address,uint256)",msg.sender,_presaleNum));
        //require(presaleAddressBool, "presale address fetch failed");
        //address presaleAddressFetched = abi.decode(presaleAddressFetch, (address));

        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 updatePresaleDapp(address _newPresaleDapp) onlyOwner public {
        require(_newPresaleDapp != address(0x0), "presale dapp cant be 0x0");
        presaleDappAddr = _newPresaleDapp;


    }
    /*
    function updateNFTPresaleDapp(address _newNFTPresaleDapp) onlyOwner public {
        require(_newNFTPresaleDapp != address(0x0), "presale dapp cant be 0x0");
        presaleNFTDappAddr = _newNFTPresaleDapp;


    }
    function updateNFTDapp(address _newNFTDapp) onlyOwner public {
        require(_newNFTDapp != address(0x0), "presale dapp cant be 0x0");
        NFTDappAddr = _newNFTDapp;


    }
    */
    /*
    function updateRouterDapp(address _newRouterDapp) onlyOwner public {
        require(_newRouterDapp != address(0x0), "router dapp cant be 0x0");
        routerDappAddr = _newRouterDapp;


    }
    */
    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 addRouter(address _newRouter) onlyOwner public {

        require(!RouterValid[_newRouter], "already added!");
        RouterValid[_newRouter] = true;
        routerNumber[_newRouter] = totalRouters;
        routerRecord[totalRouters] = _newRouter;
        totalRouters++;


    }
    
    function getStuckBNB() public onlyOwner {

        payable(owner).transfer(address(this).balance);

    }

    function removeRouter(address _newRouter) onlyOwner public {

        require(RouterValid[_newRouter], "not in added list");
        RouterValid[_newRouter] = false;

    }

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

    }

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

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

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


    function changeReferralContract(address _newReferralContract) onlyOwner public {
        require(_newReferralContract != address(0x0),"addr cannot be zero");
        referralDappAddr = _newReferralContract;
        
        
    }       
    function enableRefTOkenFee() onlyOwner public {
       
       require(!tokenFeeToReferrer,"already enabled");
       tokenFeeToReferrer = true;
        
        
    }
    function disableRefTOkenFee() onlyOwner public {
       
       require(tokenFeeToReferrer,"already disabled");
       tokenFeeToReferrer = false;
        
        
    }
    function changeminLockTime(uint256 _newMinLockTime) onlyOwner public {

        minLockTime = _newMinLockTime;

    }

    function transferPresaleOwner(address _presale,address _newOwner) onlyOwner public {

        Ownable(_presale).transferOwnership(_newOwner);

    }

    function setActiveFalseFilter(bool _activeFalse,bool _filter) onlyOwner public {

        activeFalse = _activeFalse;
        filter = _filter;

    }
}

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":"uniswap_info_arr","type":"uint256[3]"},{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"string","name":"_referralCode","type":"string"}],"name":"CreatePresaleDep","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":"address","name":"_newRouter","type":"address"}],"name":"addRouter","outputs":[],"stateMutability":"nonpayable","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":"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":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"removeRouter","outputs":[],"stateMutability":"nonpayable","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"}]

6002600181905562278d00908190556032600555600c5560c0604052600f60809081526e283932b9b0b632a232b83637bcb2b960891b60a052600d9062000047908262000221565b5060408051808201909152600e8082526d72656750726573616c654665657360901b6020830152906200007b908262000221565b5060408051808201909152601081526f72656757686974656c6973744665657360801b6020820152600f90620000b2908262000221565b506011805463ffff0000191663010100001790556002601b556064601c55601d805461ffff1916610101179055348015620000ec57600080fd5b506040516200457d3803806200457d8339810160408190526200010f916200030a565b60038054336001600160a01b0319918216179091556006805482166001600160a01b0397881617905560008054821695871695909517909455600880548516938616939093179092556007805484169185169190911790556009805490921692169190911790556200037a565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001a757607f821691505b602082108103620001c857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021c57600081815260208120601f850160051c81016020861015620001f75750805b601f850160051c820191505b81811015620002185782815560010162000203565b5050505b505050565b81516001600160401b038111156200023d576200023d6200017c565b62000255816200024e845462000192565b84620001ce565b602080601f8311600181146200028d5760008415620002745750858301515b600019600386901b1c1916600185901b17855562000218565b600085815260208120601f198616915b82811015620002be578886015182559484019460019091019084016200029d565b5085821015620002dd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200030557600080fd5b919050565b600080600080600060a086880312156200032357600080fd5b6200032e86620002ed565b94506200033e60208701620002ed565b93506200034e60408701620002ed565b92506200035e60608701620002ed565b91506200036e60808701620002ed565b90509295509295909350565b6141f3806200038a6000396000f3fe6080604052600436106102e95760003560e01c8063041f78cc146102ee578063042d97821461031057806306bb746e1461034457806306e29712146103645780630c52662e146103915780630d77c7df146103b1578063108d9447146103c457806311ce0267146103fa57806324ca984e1461041a578063280db4401461043a578063284def151461045a578063297054fb1461047e578063344eaa2714610494578063363d9efc146104b65780634055f612146104cc578063426b487f146104ec5780634503a6d31461050b578063455991361461052057806346c96aac1461053657806348e5b7d4146105565780634e6b53f7146105915780634f81c1ff146105b15780634fa361e7146105c65780635787b142146105e657806359f962f6146106065780635bc39e0f1461061c5780635bff9a271461063c5780635fadcc1e1461065257806360b2aff314610673578063662b3522146106a957806369f5ef4a146106be5780636ae0b154146106d85780636e62d42f146106f8578063715018a6146107185780637a594b791461072d5780637d06b7fd1461074d5780637f928c82146107625780638da5cb5b1461077757806390f6c06514610797578063a42b45bf146107b7578063a60ff766146107cd578063a614fec1146107e3578063ab4304df14610819578063ae27508414610839578063b02fa76c14610859578063b517da2d14610879578063b56a038a14610899578063bc599775146108af578063c31c0187146108cf578063c8b7bc2e146108fc578063c94673171461090f578063d0b328631461092f578063d0f0d7361461095c578063d276aded1461097c578063d39492541461099c578063d50494cf146109bc578063d97f558e146109dc578063dd13b0dd146109fc578063dec379ff14610a2c578063e11f2d1314610a4c578063e3613cd914610a6c578063ea354fcb14610a81578063efcd708f14610aa1578063f2fde38b14610ad1578063f5415c1f14610af1578063f625fd3e14610b06575b600080fd5b3480156102fa57600080fd5b5061030e6103093660046137a8565b610b20565b005b34801561031c57600080fd5b5060115461032f90610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561035057600080fd5b5061030e61035f3660046137a8565b610bed565b34801561037057600080fd5b50600054610384906001600160a01b031681565b60405161033b91906137c1565b34801561039d57600080fd5b5061030e6103ac366004613869565b610c09565b61030e6103bf3660046137a8565b610d1b565b3480156103d057600080fd5b506103846103df366004613920565b6014602052600090815260409020546001600160a01b031681565b34801561040657600080fd5b50600854610384906001600160a01b031681565b34801561042657600080fd5b5061030e610435366004613920565b610efd565b34801561044657600080fd5b5061030e610455366004613920565b610fd2565b34801561046657600080fd5b5061047060055481565b60405190815260200161033b565b34801561048a57600080fd5b50610470600c5481565b3480156104a057600080fd5b506104a9611031565b60405161033b919061398d565b3480156104c257600080fd5b50610470601a5481565b3480156104d857600080fd5b50600754610384906001600160a01b031681565b3480156104f857600080fd5b50601d5461032f90610100900460ff1681565b34801561051757600080fd5b5061030e6110bf565b34801561052c57600080fd5b5061047060105481565b34801561054257600080fd5b50600454610384906001600160a01b031681565b34801561056257600080fd5b5061032f6105713660046139a0565b601360209081526000928352604080842090915290825290205460ff1681565b34801561059d57600080fd5b5061030e6105ac366004613920565b6110e2565b3480156105bd57600080fd5b506104a961116c565b3480156105d257600080fd5b5061030e6105e13660046137a8565b611179565b3480156105f257600080fd5b5061030e610601366004613920565b61197f565b34801561061257600080fd5b50610470601b5481565b34801561062857600080fd5b5061030e6106373660046139da565b6119de565b34801561064857600080fd5b50610470601c5481565b34801561065e57600080fd5b5060115461032f906301000000900460ff1681565b34801561067f57600080fd5b5061038461068e3660046137a8565b6016602052600090815260409020546001600160a01b031681565b3480156106b557600080fd5b5061030e611a0f565b3480156106ca57600080fd5b5060115461032f9060ff1681565b3480156106e457600080fd5b5061030e6106f3366004613920565b611a7d565b34801561070457600080fd5b50600654610384906001600160a01b031681565b34801561072457600080fd5b5061030e611b11565b34801561073957600080fd5b5061030e6107483660046137a8565b611b72565b34801561075957600080fd5b5061030e611bd9565b34801561076e57600080fd5b5061030e611bff565b34801561078357600080fd5b50600354610384906001600160a01b031681565b3480156107a357600080fd5b5061030e6107b23660046137a8565b611c52565b3480156107c357600080fd5b50610470600a5481565b3480156107d957600080fd5b5061047060025481565b3480156107ef57600080fd5b506103846107fe3660046137a8565b6018602052600090815260409020546001600160a01b031681565b34801561082557600080fd5b5061030e6108343660046139da565b611c6e565b34801561084557600080fd5b5061030e6108543660046139f7565b611c98565b34801561086557600080fd5b5060115461032f9062010000900460ff1681565b34801561088557600080fd5b5061030e610894366004613920565b611ce1565b3480156108a557600080fd5b50610470600b5481565b3480156108bb57600080fd5b5061030e6108ca3660046137a8565b611d40565b3480156108db57600080fd5b506104706108ea366004613920565b60196020526000908152604090205481565b61030e61090a366004613b9e565b611df4565b34801561091b57600080fd5b5061030e61092a366004613920565b612dd1565b34801561093b57600080fd5b5061047061094a366004613920565b60156020526000908152604090205481565b34801561096857600080fd5b50600954610384906001600160a01b031681565b34801561098857600080fd5b5061030e6109973660046139a0565b612e30565b3480156109a857600080fd5b506104706109b73660046139a0565b612fc1565b3480156109c857600080fd5b5061030e6109d7366004613869565b6130aa565b3480156109e857600080fd5b5061030e6109f73660046139a0565b6131b6565b348015610a0857600080fd5b5061032f610a17366004613920565b60176020526000908152604090205460ff1681565b348015610a3857600080fd5b5061030e610a47366004613920565b613378565b348015610a5857600080fd5b5061030e610a673660046137a8565b613404565b348015610a7857600080fd5b506104a961346e565b348015610a8d57600080fd5b5061030e610a9c366004613cb3565b61347b565b348015610aad57600080fd5b5061032f610abc366004613920565b60126020526000908152604090205460ff1681565b348015610add57600080fd5b5061030e610aec366004613920565b6134d8565b348015610afd57600080fd5b5061030e6134f8565b348015610b1257600080fd5b50601d5461032f9060ff1681565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610b539033908690600401613ce1565b602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b949190613cfa565b9050806001600160a01b031663d6b0f4846040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b505050505050565b6003546001600160a01b03163314610c0457600080fd5b600255565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610c3c9033908690600401613ce1565b602060405180830381865afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d9190613cfa565b905060005b8351811015610d1557816001600160a01b0316638ab1d681858381518110610cac57610cac613d17565b60200260200101516040518263ffffffff1660e01b8152600401610cd091906137c1565b600060405180830381600087803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b505050508080610d0d90613d43565b915050610c82565b50505050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610d4e9033908690600401613ce1565b602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190613cfa565b600954604051631a51134960e01b81529192506001600160a01b031690631a51134990610dc190600f90600401613d96565b602060405180830381865afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e029190613e42565b341015610e625760405162461bcd60e51b8152602060048201526024808201527f6d73672e76616c7565206d757374206265203e3d2077686974656c69737420666044820152636565732160e01b60648201526084015b60405180910390fd5b600054604051638b3c99e360e01b8152600260048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b158015610ea957600080fd5b505af1158015610ebd573d6000803e3d6000fd5b5050505050806001600160a01b031663cdfb2b4e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bd157600080fd5b6003546001600160a01b03163314610f1457600080fd5b6001600160a01b03811660009081526017602052604090205460ff1615610f6e5760405162461bcd60e51b815260206004820152600e60248201526d616c72656164792061646465642160901b6044820152606401610e59565b6001600160a01b0381166000818152601760209081526040808320805460ff19166001179055601a80546019845282852081905584526018909252822080546001600160a01b03191690931790925581549190610fca83613d43565b919050555050565b6003546001600160a01b03163314610fe957600080fd5b6001600160a01b03811661100f5760405162461bcd60e51b8152600401610e5990613e5b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600f805461103e90613d5c565b80601f016020809104026020016040519081016040528092919081815260200182805461106a90613d5c565b80156110b75780601f1061108c576101008083540402835291602001916110b7565b820191906000526020600020905b81548152906001019060200180831161109a57829003601f168201915b505050505081565b6003546001600160a01b031633146110d657600080fd5b6011805460ff19169055565b6003546001600160a01b031633146110f957600080fd5b6001600160a01b03811661114a5760405162461bcd60e51b8152602060048201526018602482015277070726573616c6520646170702063616e74206265203078360441b6044820152606401610e59565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d805461103e90613d5c565b600854604051637e2439b360e11b8152600091829182916001600160a01b03169063fc487366906111b09033908890600401613ce1565b606060405180830381865afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190613e88565b9250925092506000826001600160a01b0316630f98c9186040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125d9190613e42565b90506000836001600160a01b03166329279ce96040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c59190613e42565b6011549091506301000000900460ff161561139a5760085460405163cf25127360e01b81526001600160a01b039091169063cf2512739061130c9033908a90600401613ce1565b6020604051808303816000875af115801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f9190613ed5565b61139a5760405162461bcd60e51b815260206004820152601c60248201527b3ab730b13632903a379039b2ba10383932b9b0b632902334b63a32b960211b6044820152606401610e59565b60115462010000900460ff16156114785760085460405163f3d7443b60e01b81526001600160a01b039091169063f3d7443b906113dd9033908a90600401613ce1565b6020604051808303816000875af11580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190613ed5565b6114785760405162461bcd60e51b815260206004820152602360248201527f756e61626c6520746f207365742070726573616c65206163746976652073746160448201526274757360e81b6064820152608401610e59565b6000846001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613e42565b90506000856001600160a01b031663e4c21cf26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190613e42565b905080821015801561155357508115155b801561155e57508315155b1561187957600a54611570908361356a565b600a556001546000906115919060649061158b9086906135ce565b90613650565b600080546001600160a01b038a81168084526014602090815260408086205460159092529485902054601154955163f6e99c0d60e01b8152948416600486015292166024840152604483019190915261010090920460ff16151560648201529192509063f6e99c0d906084016020604051808303816000875af115801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190613ed5565b6116855760405162461bcd60e51b8152602060048201526016602482015275195c9c9bdc88185d081b5a5b9d08199bdc881c1b185d60521b6044820152606401610e59565b6040805180820182526001600160a01b03808a166000818152601460209081528582205490931684523383850152818152601590925290839020549251634d2a907360e01b81529092634d2a9073926116e692909190600190600401613f1e565b6020604051808303816000875af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190613ed5565b6117725760405162461bcd60e51b815260206004820152601a60248201527966696e616c697a65206661696c6564206174207375636365737360301b6044820152606401610e59565b6007546001600160a01b0388811660009081526014602090815260408083205460159092529091205492821692631d592a4d9291909116906117bc9060649061158b9087906135ce565b6040518363ffffffff1660e01b81526004016117d9929190613ce1565b6020604051808303816000875af11580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613ed5565b6118735760405162461bcd60e51b815260206004820152602260248201527f726566657272657220757064617465206661696c65642061742066696e616c696044820152617a6560f01b6064820152608401610e59565b50611975565b80821080611885575081155b1561197557600b54611897908361356a565b600b556040805180820182526000808252336020808401919091526001600160a01b038a168083526015909152838220549351634d2a907360e01b81529093634d2a9073936118ea939092600401613f1e565b6020604051808303816000875af1158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190613ed5565b6119755760405162461bcd60e51b8152602060048201526019602482015278199a5b985b1a5e994819985a5b195908185d081c99599d5b99603a1b6044820152606401610e59565b5050505050505050565b6003546001600160a01b0316331461199657600080fd5b6001600160a01b0381166119bc5760405162461bcd60e51b8152600401610e5990613e5b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146119f557600080fd5b601d80549115156101000261ff0019909216919091179055565b6003546001600160a01b03163314611a2657600080fd5b601154610100900460ff16611a705760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610e59565b6011805461ff0019169055565b6003546001600160a01b03163314611a9457600080fd5b6001600160a01b03811660009081526017602052604090205460ff16611af05760405162461bcd60e51b81526020600482015260116024820152701b9bdd081a5b881859191959081b1a5cdd607a1b6044820152606401610e59565b6001600160a01b03166000908152601760205260409020805460ff19169055565b6003546001600160a01b03163314611b2857600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546001600160a01b03163314611b8957600080fd5b60008111611bd45760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642070657263656e746167652076616c756560401b6044820152606401610e59565b601b55565b6003546001600160a01b03163314611bf057600080fd5b6011805460ff19166001179055565b6003546001600160a01b03163314611c1657600080fd5b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611c4f573d6000803e3d6000fd5b50565b6003546001600160a01b03163314611c6957600080fd5b600c55565b6003546001600160a01b03163314611c8557600080fd5b601d805460ff1916911515919091179055565b6003546001600160a01b03163314611caf57600080fd5b6011805463ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b6003546001600160a01b03163314611cf857600080fd5b6001600160a01b038116611d1e5760405162461bcd60e51b8152600401610e5990613e5b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314611d5757600080fd5b6064811115611da15760405162461bcd60e51b81526020600482015260166024820152756f7574206f662072616e6765206665652076616c756560501b6044820152606401610e59565b6001548103611def5760405162461bcd60e51b815260206004820152601a6024820152794e6577206665652069732073616d65206173204f6c642066656560301b6044820152606401610e59565b600155565b601d5460ff16611e425760405162461bcd60e51b815260206004820152601960248201527818dc99585d1a5bdb88141c995cd85b1948191a5cd8589b1959603a1b6044820152606401610e59565b84514210611e8d5760405162461bcd60e51b815260206004820152601860248201527773746172742074696d65206e6f7420696e2066757475726560401b6044820152606401610e59565b600c54611ea3908660005b60200201519061356a565b60208601511115611ef65760405162461bcd60e51b815260206004820152601e60248201527f70726573616c65206475726174696f6e2065786365656473206c696d697400006044820152606401610e59565b6020840151611f06906002613650565b84511015611f615760405162461bcd60e51b815260206004820152602260248201527f73636170206d7573742062652061746c656173742068616c66206f6620686361604482015261702160f01b6064820152608401610e59565b6060840151611fa95760405162461bcd60e51b815260206004820152601460248201527306d696e20636f6e74206d757374206265203e20360641b6044820152606401610e59565b6060840151608085015110156120005760405162461bcd60e51b815260206004820152601c60248201527b1b585e0818dbdb9d081b5d5cdd081899480f8f481b5a5b8818dbdb9d60221b6044820152606401610e59565b6001600160a01b03821660009081526017602052604090205460ff166120615760405162461bcd60e51b8152602060048201526016602482015275696e76616c696420726f75746572206164647265737360501b6044820152606401610e59565b60115460ff16156121015760405160200161207b90613f42565b60405160208183030381529060405280519060200120816040516020016120a29190613f55565b60405160208183030381529060405280519060200120146121015760405162461bcd60e51b81526020600482015260196024820152781bdb9b1e48191959985d5b1d0818dbd91948185b1b1bddd959603a1b6044820152606401610e59565b60405160200161211090613f42565b60405160208183030381529060405280519060200120816040516020016121379190613f55565b604051602081830303815290604052805190602001201461267f576007546040516349e96fdd60e01b81526001600160a01b03909116906349e96fdd9061218290849060040161398d565b6020604051808303816000875af11580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190613ed5565b6122095760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420646973636f756e7420636f646560581b6044820152606401610e59565b601c54600754604051635f51485160e11b815261230b929161158b91612293916001600160a01b03169063bea290a29061224790889060040161398d565b6020604051808303816000875af1158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a9190613e42565b601c549061368f565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc906122c490600e90600401613d96565b602060405180830381865afa1580156122e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123059190613e42565b906135ce565b34101561236b5760405162461bcd60e51b815260206004820152602860248201527f6d73672e76616c7565206d75737420626520657175616c20746f20726566657260448201526772616c206665652160c01b6064820152608401610e59565b600754604051630fc0b3fd60e01b81526000916123f39160649161158b916001600160a01b0390911690630fc0b3fd906123a990889060040161398d565b6020604051808303816000875af11580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec9190613e42565b34906135ce565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a9061242490859060040161398d565b6020604051808303816000875af1158015612443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124679190613cfa565b6001600160a01b03168160405160006040518083038185875af1925050503d80600081146124b1576040519150601f19603f3d011682016040523d82523d6000602084013e6124b6565b606091505b5050600054600754604051630fc0b3fd60e01b81526001600160a01b039283169350638b3c99e3926125039260649261158b926123ec921690630fc0b3fd90612247908b9060040161398d565b6040516001600160e01b031960e084901b168152600060048201526024016000604051808303818588803b15801561253a57600080fd5b505af115801561254e573d6000803e3d6000fd5b5050600754604051630f22420560e11b81526001600160a01b039091169350631d592a4d9250839150631e44840a9061258b90879060040161398d565b6020604051808303816000875af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ce9190613cfa565b836040518363ffffffff1660e01b81526004016125ec929190613ce1565b6020604051808303816000875af115801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f9190613ed5565b6126795760405162461bcd60e51b815260206004820152601b60248201527a1c9959995c9c995c905b5bdd5b9d155c19185d194819985a5b1959602a1b6044820152606401610e59565b506127b1565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc906126b090600e90600401613d96565b602060405180830381865afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f19190613e42565b3410156127505760405162461bcd60e51b815260206004820152602760248201527f6d73672e76616c7565206d75737420626520657175616c20746f2070726573616044820152666c65206665652160c81b6064820152608401610e59565b600054604051638b3c99e360e01b8152600160048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b15801561279757600080fd5b505af11580156127ab573d6000803e3d6000fd5b50505050505b60208501516127c4610258876000611e98565b11156128125760405162461bcd60e51b815260206004820181905260248201527f70726573616c6520706572696f64206c657373207468616e206d696e696d756d6044820152606401610e59565b60025461282190866001611e98565b835111612898576040805162461bcd60e51b81526020600482015260248101919091527f4c6f636b2074696d65206d75737420626520686967686572207468616e20707260448201527f6573616c6520656e6420706c7573206d696e696d756d206c6f636b2074696d656064820152608401610e59565b6005546040840151116129045760405162461bcd60e51b815260206004820152602e60248201527f556e69737761702070657263656e74616765206973206c6f776572207468616e60448201526d081b5a5b881d1a1c995cda1bdb1960921b6064820152608401610e59565b60085483516040805160608101825260018152600060208201819052818301529051630282544d60e21b81526001600160a01b0390931692630a09513492612953928b92339190600401613f71565b6020604051808303816000875af1158015612972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129969190613ed5565b6129dc5760405162461bcd60e51b81526020600482015260176024820152761cdd1bdc9859d9481859191a5d1a5bdb8819985a5b1959604a1b6044820152606401610e59565b60065460408051608081018252308152336020808301919091526001600160a01b038a811683850152868116606084015283518085018552888301518152888501518184015284518086018652601b5481528951938101939093529351638c2f037d60e01b81526000959190911693638c2f037d93612a659390928c928c929091600401613feb565b6020604051808303816000875af1158015612a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa89190613cfa565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a90612ad990859060040161398d565b6020604051808303816000875af1158015612af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1c9190613cfa565b6001600160a01b038281166000908152601460205260409081902080546001600160a01b031916938316939093179092556007549151630fc0b3fd60e01b8152911690630fc0b3fd90612b7390859060040161398d565b6020604051808303816000875af1158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb69190613e42565b6001600160a01b03808316600090815260156020526040808220939093556008549251631996f55960e11b81529092612c4c9260019291169063332deab290612c039033906004016137c1565b6020604051808303816000875af1158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190613e42565b9061368f565b600854604051638252401760e01b81529192506001600160a01b031690638252401790612c83908c9086903390879060040161407d565b6020604051808303816000875af1158015612ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc69190613ed5565b612d0c5760405162461bcd60e51b81526020600482015260176024820152761c1c995cd85b19481859191c881859190819985a5b1959604a1b6044820152606401610e59565b600754604051635ac066d560e01b81526001600160a01b0390911690635ac066d590612d3e90869086906004016140e8565b6020604051808303816000875af1158015612d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d819190613ed5565b612dc65760405162461bcd60e51b815260206004820152601660248201527518dbd919481d5cd9481d5c19185d194819985a5b195960521b6044820152606401610e59565b505050505050505050565b6003546001600160a01b03163314612de857600080fd5b6001600160a01b038116612e0e5760405162461bcd60e51b8152600401610e5990613e5b565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314612e4757600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190612e7e9087908790600401613ce1565b6040805180830381865afa158015612e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebe9190614112565b91509150612ed8612ecf8585612fc1565b600b549061356a565b600b5560408051808201825260008082526001600160a01b0387811660208401529251631c8d674960e01b815292851692631c8d674992612f1d929091600401614141565b6020604051808303816000875af1158015612f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f609190613ed5565b50600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612f939087908790600401613ce1565b600060405180830381600087803b158015612fad57600080fd5b505af1158015611975573d6000803e3d6000fd5b600854604051632b6419d360e11b815260009182916001600160a01b03909116906356c833a690612ff89087908790600401613ce1565b602060405180830381865afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130399190613cfa565b90506000816001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa15801561307b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309f9190613e42565b925050505b92915050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a6906130dd9033908690600401613ce1565b602060405180830381865afa1580156130fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311e9190613cfa565b905060005b8351811015610d1557816001600160a01b031663e43252d785838151811061314d5761314d613d17565b60200260200101516040518263ffffffff1660e01b815260040161317191906137c1565b600060405180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b5050505080806131ae90613d43565b915050613123565b6004546001600160a01b031633146131cd57600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b44411906132049087908790600401613ce1565b6040805180830381865afa158015613220573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132449190614112565b91509150613255612ecf8585612fc1565b600b5560408051808201825260008082526001600160a01b038781166020808501919091529086168083526015909152838220549351634d2a907360e01b81529093634d2a9073936132ab939092600401613f1e565b6020604051808303816000875af11580156132ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ee9190613ed5565b6133465760405162461bcd60e51b8152602060048201526024808201527f66696e616c697a65206661696c656420617420766f7465722063616c6c207265604482015263199d5b9960e21b6064820152608401610e59565b600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612f939087908790600401613ce1565b6003546001600160a01b0316331461338f57600080fd5b6001600160a01b0381166133e25760405162461bcd60e51b815260206004820152601a6024820152792732bb9020b232391031b0b73a103132903d32b9379030b2323960311b6044820152606401610e59565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461341b57600080fd5b60648111156134695760405162461bcd60e51b815260206004820152601a602482015279756e695065722076616c7565206f7574736964652072616e676560301b6044820152606401610e59565b600555565b600e805461103e90613d5c565b6003546001600160a01b0316331461349257600080fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906134be9084906004016137c1565b600060405180830381600087803b158015610bd157600080fd5b6003546001600160a01b031633146134ef57600080fd5b611c4f816136d1565b6003546001600160a01b0316331461350f57600080fd5b601154610100900460ff16156135595760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610e59565b6011805461ff001916610100179055565b600080613577838561415e565b9050838110156135c75760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610e59565b9392505050565b6000826000036135e0575060006130a4565b60006135ec8385614171565b9050826135f98583614188565b146135c75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e59565b60006135c783836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250613740565b60006135c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613777565b6001600160a01b0381166136e457600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081836137615760405162461bcd60e51b8152600401610e59919061398d565b50600061376e8486614188565b95945050505050565b6000818484111561379b5760405162461bcd60e51b8152600401610e59919061398d565b50600061376e84866141aa565b6000602082840312156137ba57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b038111828210171561380e5761380e6137d5565b60405290565b604051601f8201601f191681016001600160401b038111828210171561383c5761383c6137d5565b604052919050565b6001600160a01b0381168114611c4f57600080fd5b803561386481613844565b919050565b6000806040838503121561387c57600080fd5b82356001600160401b038082111561389357600080fd5b818501915085601f8301126138a757600080fd5b81356020828211156138bb576138bb6137d5565b8160051b92506138cc818401613814565b82815292840181019281810190898511156138e657600080fd5b948201945b84861015613910578535935061390084613844565b83825294820194908201906138eb565b9997909101359750505050505050565b60006020828403121561393257600080fd5b81356135c781613844565b60005b83811015613958578181015183820152602001613940565b50506000910152565b6000815180845261397981602086016020860161393d565b601f01601f19169290920160200192915050565b6020815260006135c76020830184613961565b600080604083850312156139b357600080fd5b82356139be81613844565b946020939093013593505050565b8015158114611c4f57600080fd5b6000602082840312156139ec57600080fd5b81356135c7816139cc565b60008060408385031215613a0a57600080fd5b8235613a15816139cc565b91506020830135613a25816139cc565b809150509250929050565b600082601f830112613a4157600080fd5b81356001600160401b03811115613a5a57613a5a6137d5565b613a6d601f8201601f1916602001613814565b818152846020838601011115613a8257600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112613ab057600080fd5b604080519081016001600160401b0381118282101715613ad257613ad26137d5565b8060405250806040840185811115613ae957600080fd5b845b81811015613b03578035835260209283019201613aeb565b509195945050505050565b600082601f830112613b1f57600080fd5b60405160a081016001600160401b0381118282101715613b4157613b416137d5565b6040528060a0840185811115613ae957600080fd5b600082601f830112613b6757600080fd5b604051606081016001600160401b0381118282101715613b8957613b896137d5565b604052806060840185811115613ae957600080fd5b60008060008060008060006101c0888a031215613bba57600080fd5b6001600160401b038835811015613bd057600080fd5b883589018a601f820112613be357600080fd5b613beb6137eb565b8061014083018d811115613bfe57600080fd5b835b81811015613c31578581351115613c1657600080fd5b613c238f82358701613a30565b845260209384019301613c00565b5050809a50505050613c4560208a01613859565b9650613c548a60408b01613a9f565b9550613c638a60808b01613b0e565b9450613c738a6101208b01613b56565b9350613c826101808a01613859565b92506101a089013581811115613c9757600080fd5b613ca38b828c01613a30565b9250505092959891949750929550565b60008060408385031215613cc657600080fd5b8235613cd181613844565b91506020830135613a2581613844565b6001600160a01b03929092168252602082015260400190565b600060208284031215613d0c57600080fd5b81516135c781613844565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613d5557613d55613d2d565b5060010190565b600181811c90821680613d7057607f821691505b602082108103613d9057634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845481600182811c915080831680613db857607f831692505b8583108103613dd557634e487b7160e01b85526022600452602485fd5b878601838152602001818015613df25760018114613e0857613e33565b60ff198616825284151560051b82019650613e33565b60008b81526020902060005b86811015613e2d57815484820152908501908901613e14565b83019750505b50949998505050505050505050565b600060208284031215613e5457600080fd5b5051919050565b602080825260139082015272616464722063616e6e6f74206265207a65726f60681b604082015260600190565b600080600060608486031215613e9d57600080fd5b8351613ea881613844565b6020850151909350613eb981613844565b6040850151909250613eca81613844565b809150509250925092565b600060208284031215613ee757600080fd5b81516135c7816139cc565b8060005b6002811015610d155781516001600160a01b0316845260209384019390910190600101613ef6565b60808101613f2c8286613ef2565b8360408301528215156060830152949350505050565b66191959985d5b1d60ca1b815260070190565b60008251613f6781846020870161393d565b9190910192915050565b6001600160a01b0385811682526020808301869052908416604083015260c082019060608301908460005b6003811015613fbb578151151584529282019290820190600101613f9c565b5050505095945050505050565b8060005b6002811015610d15578151845260209384019390910190600101613fcc565b6101e08101818760005b600481101561401d5781516001600160a01b0316835260209283019290910190600101613ff5565b50505061402d6080830187613fc8565b60c082018560005b6005811015614054578151835260209283019290910190600101614035565b505050614065610160830185613fc8565b6140736101a0830184613fc8565b9695505050505050565b60808082526000906101c0830190830187835b600a8110156140c257607f198685030183526140ad848351613961565b93506020928301929190910190600101614090565b5050506001600160a01b0395861660208401529390941660408201526060015292915050565b6040815260006140fb6040830185613961565b905060018060a01b03831660208301529392505050565b6000806040838503121561412557600080fd5b825161413081613844565b6020840151909250613a2581613844565b6060810161414f8285613ef2565b82151560408301529392505050565b808201808211156130a4576130a4613d2d565b80820281158282048414176130a4576130a4613d2d565b6000826141a557634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156130a4576130a4613d2d56fea26469706673582212201360b4a341f921ba523dff17711a9a463e03fc73ce4d2828339e9bea0956183a64736f6c634300081100330000000000000000000000003d9411fbe9b0f7b7d55eedd3ae718bcdac0ae9ed0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9

Deployed Bytecode

0x6080604052600436106102e95760003560e01c8063041f78cc146102ee578063042d97821461031057806306bb746e1461034457806306e29712146103645780630c52662e146103915780630d77c7df146103b1578063108d9447146103c457806311ce0267146103fa57806324ca984e1461041a578063280db4401461043a578063284def151461045a578063297054fb1461047e578063344eaa2714610494578063363d9efc146104b65780634055f612146104cc578063426b487f146104ec5780634503a6d31461050b578063455991361461052057806346c96aac1461053657806348e5b7d4146105565780634e6b53f7146105915780634f81c1ff146105b15780634fa361e7146105c65780635787b142146105e657806359f962f6146106065780635bc39e0f1461061c5780635bff9a271461063c5780635fadcc1e1461065257806360b2aff314610673578063662b3522146106a957806369f5ef4a146106be5780636ae0b154146106d85780636e62d42f146106f8578063715018a6146107185780637a594b791461072d5780637d06b7fd1461074d5780637f928c82146107625780638da5cb5b1461077757806390f6c06514610797578063a42b45bf146107b7578063a60ff766146107cd578063a614fec1146107e3578063ab4304df14610819578063ae27508414610839578063b02fa76c14610859578063b517da2d14610879578063b56a038a14610899578063bc599775146108af578063c31c0187146108cf578063c8b7bc2e146108fc578063c94673171461090f578063d0b328631461092f578063d0f0d7361461095c578063d276aded1461097c578063d39492541461099c578063d50494cf146109bc578063d97f558e146109dc578063dd13b0dd146109fc578063dec379ff14610a2c578063e11f2d1314610a4c578063e3613cd914610a6c578063ea354fcb14610a81578063efcd708f14610aa1578063f2fde38b14610ad1578063f5415c1f14610af1578063f625fd3e14610b06575b600080fd5b3480156102fa57600080fd5b5061030e6103093660046137a8565b610b20565b005b34801561031c57600080fd5b5060115461032f90610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561035057600080fd5b5061030e61035f3660046137a8565b610bed565b34801561037057600080fd5b50600054610384906001600160a01b031681565b60405161033b91906137c1565b34801561039d57600080fd5b5061030e6103ac366004613869565b610c09565b61030e6103bf3660046137a8565b610d1b565b3480156103d057600080fd5b506103846103df366004613920565b6014602052600090815260409020546001600160a01b031681565b34801561040657600080fd5b50600854610384906001600160a01b031681565b34801561042657600080fd5b5061030e610435366004613920565b610efd565b34801561044657600080fd5b5061030e610455366004613920565b610fd2565b34801561046657600080fd5b5061047060055481565b60405190815260200161033b565b34801561048a57600080fd5b50610470600c5481565b3480156104a057600080fd5b506104a9611031565b60405161033b919061398d565b3480156104c257600080fd5b50610470601a5481565b3480156104d857600080fd5b50600754610384906001600160a01b031681565b3480156104f857600080fd5b50601d5461032f90610100900460ff1681565b34801561051757600080fd5b5061030e6110bf565b34801561052c57600080fd5b5061047060105481565b34801561054257600080fd5b50600454610384906001600160a01b031681565b34801561056257600080fd5b5061032f6105713660046139a0565b601360209081526000928352604080842090915290825290205460ff1681565b34801561059d57600080fd5b5061030e6105ac366004613920565b6110e2565b3480156105bd57600080fd5b506104a961116c565b3480156105d257600080fd5b5061030e6105e13660046137a8565b611179565b3480156105f257600080fd5b5061030e610601366004613920565b61197f565b34801561061257600080fd5b50610470601b5481565b34801561062857600080fd5b5061030e6106373660046139da565b6119de565b34801561064857600080fd5b50610470601c5481565b34801561065e57600080fd5b5060115461032f906301000000900460ff1681565b34801561067f57600080fd5b5061038461068e3660046137a8565b6016602052600090815260409020546001600160a01b031681565b3480156106b557600080fd5b5061030e611a0f565b3480156106ca57600080fd5b5060115461032f9060ff1681565b3480156106e457600080fd5b5061030e6106f3366004613920565b611a7d565b34801561070457600080fd5b50600654610384906001600160a01b031681565b34801561072457600080fd5b5061030e611b11565b34801561073957600080fd5b5061030e6107483660046137a8565b611b72565b34801561075957600080fd5b5061030e611bd9565b34801561076e57600080fd5b5061030e611bff565b34801561078357600080fd5b50600354610384906001600160a01b031681565b3480156107a357600080fd5b5061030e6107b23660046137a8565b611c52565b3480156107c357600080fd5b50610470600a5481565b3480156107d957600080fd5b5061047060025481565b3480156107ef57600080fd5b506103846107fe3660046137a8565b6018602052600090815260409020546001600160a01b031681565b34801561082557600080fd5b5061030e6108343660046139da565b611c6e565b34801561084557600080fd5b5061030e6108543660046139f7565b611c98565b34801561086557600080fd5b5060115461032f9062010000900460ff1681565b34801561088557600080fd5b5061030e610894366004613920565b611ce1565b3480156108a557600080fd5b50610470600b5481565b3480156108bb57600080fd5b5061030e6108ca3660046137a8565b611d40565b3480156108db57600080fd5b506104706108ea366004613920565b60196020526000908152604090205481565b61030e61090a366004613b9e565b611df4565b34801561091b57600080fd5b5061030e61092a366004613920565b612dd1565b34801561093b57600080fd5b5061047061094a366004613920565b60156020526000908152604090205481565b34801561096857600080fd5b50600954610384906001600160a01b031681565b34801561098857600080fd5b5061030e6109973660046139a0565b612e30565b3480156109a857600080fd5b506104706109b73660046139a0565b612fc1565b3480156109c857600080fd5b5061030e6109d7366004613869565b6130aa565b3480156109e857600080fd5b5061030e6109f73660046139a0565b6131b6565b348015610a0857600080fd5b5061032f610a17366004613920565b60176020526000908152604090205460ff1681565b348015610a3857600080fd5b5061030e610a47366004613920565b613378565b348015610a5857600080fd5b5061030e610a673660046137a8565b613404565b348015610a7857600080fd5b506104a961346e565b348015610a8d57600080fd5b5061030e610a9c366004613cb3565b61347b565b348015610aad57600080fd5b5061032f610abc366004613920565b60126020526000908152604090205460ff1681565b348015610add57600080fd5b5061030e610aec366004613920565b6134d8565b348015610afd57600080fd5b5061030e6134f8565b348015610b1257600080fd5b50601d5461032f9060ff1681565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610b539033908690600401613ce1565b602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b949190613cfa565b9050806001600160a01b031663d6b0f4846040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b505050505050565b6003546001600160a01b03163314610c0457600080fd5b600255565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610c3c9033908690600401613ce1565b602060405180830381865afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d9190613cfa565b905060005b8351811015610d1557816001600160a01b0316638ab1d681858381518110610cac57610cac613d17565b60200260200101516040518263ffffffff1660e01b8152600401610cd091906137c1565b600060405180830381600087803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b505050508080610d0d90613d43565b915050610c82565b50505050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610d4e9033908690600401613ce1565b602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190613cfa565b600954604051631a51134960e01b81529192506001600160a01b031690631a51134990610dc190600f90600401613d96565b602060405180830381865afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e029190613e42565b341015610e625760405162461bcd60e51b8152602060048201526024808201527f6d73672e76616c7565206d757374206265203e3d2077686974656c69737420666044820152636565732160e01b60648201526084015b60405180910390fd5b600054604051638b3c99e360e01b8152600260048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b158015610ea957600080fd5b505af1158015610ebd573d6000803e3d6000fd5b5050505050806001600160a01b031663cdfb2b4e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bd157600080fd5b6003546001600160a01b03163314610f1457600080fd5b6001600160a01b03811660009081526017602052604090205460ff1615610f6e5760405162461bcd60e51b815260206004820152600e60248201526d616c72656164792061646465642160901b6044820152606401610e59565b6001600160a01b0381166000818152601760209081526040808320805460ff19166001179055601a80546019845282852081905584526018909252822080546001600160a01b03191690931790925581549190610fca83613d43565b919050555050565b6003546001600160a01b03163314610fe957600080fd5b6001600160a01b03811661100f5760405162461bcd60e51b8152600401610e5990613e5b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600f805461103e90613d5c565b80601f016020809104026020016040519081016040528092919081815260200182805461106a90613d5c565b80156110b75780601f1061108c576101008083540402835291602001916110b7565b820191906000526020600020905b81548152906001019060200180831161109a57829003601f168201915b505050505081565b6003546001600160a01b031633146110d657600080fd5b6011805460ff19169055565b6003546001600160a01b031633146110f957600080fd5b6001600160a01b03811661114a5760405162461bcd60e51b8152602060048201526018602482015277070726573616c6520646170702063616e74206265203078360441b6044820152606401610e59565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d805461103e90613d5c565b600854604051637e2439b360e11b8152600091829182916001600160a01b03169063fc487366906111b09033908890600401613ce1565b606060405180830381865afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190613e88565b9250925092506000826001600160a01b0316630f98c9186040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125d9190613e42565b90506000836001600160a01b03166329279ce96040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c59190613e42565b6011549091506301000000900460ff161561139a5760085460405163cf25127360e01b81526001600160a01b039091169063cf2512739061130c9033908a90600401613ce1565b6020604051808303816000875af115801561132b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134f9190613ed5565b61139a5760405162461bcd60e51b815260206004820152601c60248201527b3ab730b13632903a379039b2ba10383932b9b0b632902334b63a32b960211b6044820152606401610e59565b60115462010000900460ff16156114785760085460405163f3d7443b60e01b81526001600160a01b039091169063f3d7443b906113dd9033908a90600401613ce1565b6020604051808303816000875af11580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190613ed5565b6114785760405162461bcd60e51b815260206004820152602360248201527f756e61626c6520746f207365742070726573616c65206163746976652073746160448201526274757360e81b6064820152608401610e59565b6000846001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613e42565b90506000856001600160a01b031663e4c21cf26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190613e42565b905080821015801561155357508115155b801561155e57508315155b1561187957600a54611570908361356a565b600a556001546000906115919060649061158b9086906135ce565b90613650565b600080546001600160a01b038a81168084526014602090815260408086205460159092529485902054601154955163f6e99c0d60e01b8152948416600486015292166024840152604483019190915261010090920460ff16151560648201529192509063f6e99c0d906084016020604051808303816000875af115801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190613ed5565b6116855760405162461bcd60e51b8152602060048201526016602482015275195c9c9bdc88185d081b5a5b9d08199bdc881c1b185d60521b6044820152606401610e59565b6040805180820182526001600160a01b03808a166000818152601460209081528582205490931684523383850152818152601590925290839020549251634d2a907360e01b81529092634d2a9073926116e692909190600190600401613f1e565b6020604051808303816000875af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190613ed5565b6117725760405162461bcd60e51b815260206004820152601a60248201527966696e616c697a65206661696c6564206174207375636365737360301b6044820152606401610e59565b6007546001600160a01b0388811660009081526014602090815260408083205460159092529091205492821692631d592a4d9291909116906117bc9060649061158b9087906135ce565b6040518363ffffffff1660e01b81526004016117d9929190613ce1565b6020604051808303816000875af11580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613ed5565b6118735760405162461bcd60e51b815260206004820152602260248201527f726566657272657220757064617465206661696c65642061742066696e616c696044820152617a6560f01b6064820152608401610e59565b50611975565b80821080611885575081155b1561197557600b54611897908361356a565b600b556040805180820182526000808252336020808401919091526001600160a01b038a168083526015909152838220549351634d2a907360e01b81529093634d2a9073936118ea939092600401613f1e565b6020604051808303816000875af1158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190613ed5565b6119755760405162461bcd60e51b8152602060048201526019602482015278199a5b985b1a5e994819985a5b195908185d081c99599d5b99603a1b6044820152606401610e59565b5050505050505050565b6003546001600160a01b0316331461199657600080fd5b6001600160a01b0381166119bc5760405162461bcd60e51b8152600401610e5990613e5b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146119f557600080fd5b601d80549115156101000261ff0019909216919091179055565b6003546001600160a01b03163314611a2657600080fd5b601154610100900460ff16611a705760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610e59565b6011805461ff0019169055565b6003546001600160a01b03163314611a9457600080fd5b6001600160a01b03811660009081526017602052604090205460ff16611af05760405162461bcd60e51b81526020600482015260116024820152701b9bdd081a5b881859191959081b1a5cdd607a1b6044820152606401610e59565b6001600160a01b03166000908152601760205260409020805460ff19169055565b6003546001600160a01b03163314611b2857600080fd5b6003546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600380546001600160a01b0319169055565b6003546001600160a01b03163314611b8957600080fd5b60008111611bd45760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642070657263656e746167652076616c756560401b6044820152606401610e59565b601b55565b6003546001600160a01b03163314611bf057600080fd5b6011805460ff19166001179055565b6003546001600160a01b03163314611c1657600080fd5b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611c4f573d6000803e3d6000fd5b50565b6003546001600160a01b03163314611c6957600080fd5b600c55565b6003546001600160a01b03163314611c8557600080fd5b601d805460ff1916911515919091179055565b6003546001600160a01b03163314611caf57600080fd5b6011805463ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b6003546001600160a01b03163314611cf857600080fd5b6001600160a01b038116611d1e5760405162461bcd60e51b8152600401610e5990613e5b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314611d5757600080fd5b6064811115611da15760405162461bcd60e51b81526020600482015260166024820152756f7574206f662072616e6765206665652076616c756560501b6044820152606401610e59565b6001548103611def5760405162461bcd60e51b815260206004820152601a6024820152794e6577206665652069732073616d65206173204f6c642066656560301b6044820152606401610e59565b600155565b601d5460ff16611e425760405162461bcd60e51b815260206004820152601960248201527818dc99585d1a5bdb88141c995cd85b1948191a5cd8589b1959603a1b6044820152606401610e59565b84514210611e8d5760405162461bcd60e51b815260206004820152601860248201527773746172742074696d65206e6f7420696e2066757475726560401b6044820152606401610e59565b600c54611ea3908660005b60200201519061356a565b60208601511115611ef65760405162461bcd60e51b815260206004820152601e60248201527f70726573616c65206475726174696f6e2065786365656473206c696d697400006044820152606401610e59565b6020840151611f06906002613650565b84511015611f615760405162461bcd60e51b815260206004820152602260248201527f73636170206d7573742062652061746c656173742068616c66206f6620686361604482015261702160f01b6064820152608401610e59565b6060840151611fa95760405162461bcd60e51b815260206004820152601460248201527306d696e20636f6e74206d757374206265203e20360641b6044820152606401610e59565b6060840151608085015110156120005760405162461bcd60e51b815260206004820152601c60248201527b1b585e0818dbdb9d081b5d5cdd081899480f8f481b5a5b8818dbdb9d60221b6044820152606401610e59565b6001600160a01b03821660009081526017602052604090205460ff166120615760405162461bcd60e51b8152602060048201526016602482015275696e76616c696420726f75746572206164647265737360501b6044820152606401610e59565b60115460ff16156121015760405160200161207b90613f42565b60405160208183030381529060405280519060200120816040516020016120a29190613f55565b60405160208183030381529060405280519060200120146121015760405162461bcd60e51b81526020600482015260196024820152781bdb9b1e48191959985d5b1d0818dbd91948185b1b1bddd959603a1b6044820152606401610e59565b60405160200161211090613f42565b60405160208183030381529060405280519060200120816040516020016121379190613f55565b604051602081830303815290604052805190602001201461267f576007546040516349e96fdd60e01b81526001600160a01b03909116906349e96fdd9061218290849060040161398d565b6020604051808303816000875af11580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190613ed5565b6122095760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420646973636f756e7420636f646560581b6044820152606401610e59565b601c54600754604051635f51485160e11b815261230b929161158b91612293916001600160a01b03169063bea290a29061224790889060040161398d565b6020604051808303816000875af1158015612266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228a9190613e42565b601c549061368f565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc906122c490600e90600401613d96565b602060405180830381865afa1580156122e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123059190613e42565b906135ce565b34101561236b5760405162461bcd60e51b815260206004820152602860248201527f6d73672e76616c7565206d75737420626520657175616c20746f20726566657260448201526772616c206665652160c01b6064820152608401610e59565b600754604051630fc0b3fd60e01b81526000916123f39160649161158b916001600160a01b0390911690630fc0b3fd906123a990889060040161398d565b6020604051808303816000875af11580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec9190613e42565b34906135ce565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a9061242490859060040161398d565b6020604051808303816000875af1158015612443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124679190613cfa565b6001600160a01b03168160405160006040518083038185875af1925050503d80600081146124b1576040519150601f19603f3d011682016040523d82523d6000602084013e6124b6565b606091505b5050600054600754604051630fc0b3fd60e01b81526001600160a01b039283169350638b3c99e3926125039260649261158b926123ec921690630fc0b3fd90612247908b9060040161398d565b6040516001600160e01b031960e084901b168152600060048201526024016000604051808303818588803b15801561253a57600080fd5b505af115801561254e573d6000803e3d6000fd5b5050600754604051630f22420560e11b81526001600160a01b039091169350631d592a4d9250839150631e44840a9061258b90879060040161398d565b6020604051808303816000875af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ce9190613cfa565b836040518363ffffffff1660e01b81526004016125ec929190613ce1565b6020604051808303816000875af115801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f9190613ed5565b6126795760405162461bcd60e51b815260206004820152601b60248201527a1c9959995c9c995c905b5bdd5b9d155c19185d194819985a5b1959602a1b6044820152606401610e59565b506127b1565b600954604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc906126b090600e90600401613d96565b602060405180830381865afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f19190613e42565b3410156127505760405162461bcd60e51b815260206004820152602760248201527f6d73672e76616c7565206d75737420626520657175616c20746f2070726573616044820152666c65206665652160c81b6064820152608401610e59565b600054604051638b3c99e360e01b8152600160048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b15801561279757600080fd5b505af11580156127ab573d6000803e3d6000fd5b50505050505b60208501516127c4610258876000611e98565b11156128125760405162461bcd60e51b815260206004820181905260248201527f70726573616c6520706572696f64206c657373207468616e206d696e696d756d6044820152606401610e59565b60025461282190866001611e98565b835111612898576040805162461bcd60e51b81526020600482015260248101919091527f4c6f636b2074696d65206d75737420626520686967686572207468616e20707260448201527f6573616c6520656e6420706c7573206d696e696d756d206c6f636b2074696d656064820152608401610e59565b6005546040840151116129045760405162461bcd60e51b815260206004820152602e60248201527f556e69737761702070657263656e74616765206973206c6f776572207468616e60448201526d081b5a5b881d1a1c995cda1bdb1960921b6064820152608401610e59565b60085483516040805160608101825260018152600060208201819052818301529051630282544d60e21b81526001600160a01b0390931692630a09513492612953928b92339190600401613f71565b6020604051808303816000875af1158015612972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129969190613ed5565b6129dc5760405162461bcd60e51b81526020600482015260176024820152761cdd1bdc9859d9481859191a5d1a5bdb8819985a5b1959604a1b6044820152606401610e59565b60065460408051608081018252308152336020808301919091526001600160a01b038a811683850152868116606084015283518085018552888301518152888501518184015284518086018652601b5481528951938101939093529351638c2f037d60e01b81526000959190911693638c2f037d93612a659390928c928c929091600401613feb565b6020604051808303816000875af1158015612a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa89190613cfa565b600754604051630f22420560e11b81529192506001600160a01b031690631e44840a90612ad990859060040161398d565b6020604051808303816000875af1158015612af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1c9190613cfa565b6001600160a01b038281166000908152601460205260409081902080546001600160a01b031916938316939093179092556007549151630fc0b3fd60e01b8152911690630fc0b3fd90612b7390859060040161398d565b6020604051808303816000875af1158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb69190613e42565b6001600160a01b03808316600090815260156020526040808220939093556008549251631996f55960e11b81529092612c4c9260019291169063332deab290612c039033906004016137c1565b6020604051808303816000875af1158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190613e42565b9061368f565b600854604051638252401760e01b81529192506001600160a01b031690638252401790612c83908c9086903390879060040161407d565b6020604051808303816000875af1158015612ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc69190613ed5565b612d0c5760405162461bcd60e51b81526020600482015260176024820152761c1c995cd85b19481859191c881859190819985a5b1959604a1b6044820152606401610e59565b600754604051635ac066d560e01b81526001600160a01b0390911690635ac066d590612d3e90869086906004016140e8565b6020604051808303816000875af1158015612d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d819190613ed5565b612dc65760405162461bcd60e51b815260206004820152601660248201527518dbd919481d5cd9481d5c19185d194819985a5b195960521b6044820152606401610e59565b505050505050505050565b6003546001600160a01b03163314612de857600080fd5b6001600160a01b038116612e0e5760405162461bcd60e51b8152600401610e5990613e5b565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314612e4757600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190612e7e9087908790600401613ce1565b6040805180830381865afa158015612e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebe9190614112565b91509150612ed8612ecf8585612fc1565b600b549061356a565b600b5560408051808201825260008082526001600160a01b0387811660208401529251631c8d674960e01b815292851692631c8d674992612f1d929091600401614141565b6020604051808303816000875af1158015612f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f609190613ed5565b50600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612f939087908790600401613ce1565b600060405180830381600087803b158015612fad57600080fd5b505af1158015611975573d6000803e3d6000fd5b600854604051632b6419d360e11b815260009182916001600160a01b03909116906356c833a690612ff89087908790600401613ce1565b602060405180830381865afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130399190613cfa565b90506000816001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa15801561307b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309f9190613e42565b925050505b92915050565b600854604051632b6419d360e11b81526000916001600160a01b0316906356c833a6906130dd9033908690600401613ce1565b602060405180830381865afa1580156130fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311e9190613cfa565b905060005b8351811015610d1557816001600160a01b031663e43252d785838151811061314d5761314d613d17565b60200260200101516040518263ffffffff1660e01b815260040161317191906137c1565b600060405180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b5050505080806131ae90613d43565b915050613123565b6004546001600160a01b031633146131cd57600080fd5b60085460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b44411906132049087908790600401613ce1565b6040805180830381865afa158015613220573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132449190614112565b91509150613255612ecf8585612fc1565b600b5560408051808201825260008082526001600160a01b038781166020808501919091529086168083526015909152838220549351634d2a907360e01b81529093634d2a9073936132ab939092600401613f1e565b6020604051808303816000875af11580156132ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ee9190613ed5565b6133465760405162461bcd60e51b8152602060048201526024808201527f66696e616c697a65206661696c656420617420766f7465722063616c6c207265604482015263199d5b9960e21b6064820152608401610e59565b600854604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612f939087908790600401613ce1565b6003546001600160a01b0316331461338f57600080fd5b6001600160a01b0381166133e25760405162461bcd60e51b815260206004820152601a6024820152792732bb9020b232391031b0b73a103132903d32b9379030b2323960311b6044820152606401610e59565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461341b57600080fd5b60648111156134695760405162461bcd60e51b815260206004820152601a602482015279756e695065722076616c7565206f7574736964652072616e676560301b6044820152606401610e59565b600555565b600e805461103e90613d5c565b6003546001600160a01b0316331461349257600080fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906134be9084906004016137c1565b600060405180830381600087803b158015610bd157600080fd5b6003546001600160a01b031633146134ef57600080fd5b611c4f816136d1565b6003546001600160a01b0316331461350f57600080fd5b601154610100900460ff16156135595760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610e59565b6011805461ff001916610100179055565b600080613577838561415e565b9050838110156135c75760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610e59565b9392505050565b6000826000036135e0575060006130a4565b60006135ec8385614171565b9050826135f98583614188565b146135c75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e59565b60006135c783836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250613740565b60006135c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613777565b6001600160a01b0381166136e457600080fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081836137615760405162461bcd60e51b8152600401610e59919061398d565b50600061376e8486614188565b95945050505050565b6000818484111561379b5760405162461bcd60e51b8152600401610e59919061398d565b50600061376e84866141aa565b6000602082840312156137ba57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b038111828210171561380e5761380e6137d5565b60405290565b604051601f8201601f191681016001600160401b038111828210171561383c5761383c6137d5565b604052919050565b6001600160a01b0381168114611c4f57600080fd5b803561386481613844565b919050565b6000806040838503121561387c57600080fd5b82356001600160401b038082111561389357600080fd5b818501915085601f8301126138a757600080fd5b81356020828211156138bb576138bb6137d5565b8160051b92506138cc818401613814565b82815292840181019281810190898511156138e657600080fd5b948201945b84861015613910578535935061390084613844565b83825294820194908201906138eb565b9997909101359750505050505050565b60006020828403121561393257600080fd5b81356135c781613844565b60005b83811015613958578181015183820152602001613940565b50506000910152565b6000815180845261397981602086016020860161393d565b601f01601f19169290920160200192915050565b6020815260006135c76020830184613961565b600080604083850312156139b357600080fd5b82356139be81613844565b946020939093013593505050565b8015158114611c4f57600080fd5b6000602082840312156139ec57600080fd5b81356135c7816139cc565b60008060408385031215613a0a57600080fd5b8235613a15816139cc565b91506020830135613a25816139cc565b809150509250929050565b600082601f830112613a4157600080fd5b81356001600160401b03811115613a5a57613a5a6137d5565b613a6d601f8201601f1916602001613814565b818152846020838601011115613a8257600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112613ab057600080fd5b604080519081016001600160401b0381118282101715613ad257613ad26137d5565b8060405250806040840185811115613ae957600080fd5b845b81811015613b03578035835260209283019201613aeb565b509195945050505050565b600082601f830112613b1f57600080fd5b60405160a081016001600160401b0381118282101715613b4157613b416137d5565b6040528060a0840185811115613ae957600080fd5b600082601f830112613b6757600080fd5b604051606081016001600160401b0381118282101715613b8957613b896137d5565b604052806060840185811115613ae957600080fd5b60008060008060008060006101c0888a031215613bba57600080fd5b6001600160401b038835811015613bd057600080fd5b883589018a601f820112613be357600080fd5b613beb6137eb565b8061014083018d811115613bfe57600080fd5b835b81811015613c31578581351115613c1657600080fd5b613c238f82358701613a30565b845260209384019301613c00565b5050809a50505050613c4560208a01613859565b9650613c548a60408b01613a9f565b9550613c638a60808b01613b0e565b9450613c738a6101208b01613b56565b9350613c826101808a01613859565b92506101a089013581811115613c9757600080fd5b613ca38b828c01613a30565b9250505092959891949750929550565b60008060408385031215613cc657600080fd5b8235613cd181613844565b91506020830135613a2581613844565b6001600160a01b03929092168252602082015260400190565b600060208284031215613d0c57600080fd5b81516135c781613844565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613d5557613d55613d2d565b5060010190565b600181811c90821680613d7057607f821691505b602082108103613d9057634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845481600182811c915080831680613db857607f831692505b8583108103613dd557634e487b7160e01b85526022600452602485fd5b878601838152602001818015613df25760018114613e0857613e33565b60ff198616825284151560051b82019650613e33565b60008b81526020902060005b86811015613e2d57815484820152908501908901613e14565b83019750505b50949998505050505050505050565b600060208284031215613e5457600080fd5b5051919050565b602080825260139082015272616464722063616e6e6f74206265207a65726f60681b604082015260600190565b600080600060608486031215613e9d57600080fd5b8351613ea881613844565b6020850151909350613eb981613844565b6040850151909250613eca81613844565b809150509250925092565b600060208284031215613ee757600080fd5b81516135c7816139cc565b8060005b6002811015610d155781516001600160a01b0316845260209384019390910190600101613ef6565b60808101613f2c8286613ef2565b8360408301528215156060830152949350505050565b66191959985d5b1d60ca1b815260070190565b60008251613f6781846020870161393d565b9190910192915050565b6001600160a01b0385811682526020808301869052908416604083015260c082019060608301908460005b6003811015613fbb578151151584529282019290820190600101613f9c565b5050505095945050505050565b8060005b6002811015610d15578151845260209384019390910190600101613fcc565b6101e08101818760005b600481101561401d5781516001600160a01b0316835260209283019290910190600101613ff5565b50505061402d6080830187613fc8565b60c082018560005b6005811015614054578151835260209283019290910190600101614035565b505050614065610160830185613fc8565b6140736101a0830184613fc8565b9695505050505050565b60808082526000906101c0830190830187835b600a8110156140c257607f198685030183526140ad848351613961565b93506020928301929190910190600101614090565b5050506001600160a01b0395861660208401529390941660408201526060015292915050565b6040815260006140fb6040830185613961565b905060018060a01b03831660208301529392505050565b6000806040838503121561412557600080fd5b825161413081613844565b6020840151909250613a2581613844565b6060810161414f8285613ef2565b82151560408301529392505050565b808201808211156130a4576130a4613d2d565b80820281158282048414176130a4576130a4613d2d565b6000826141a557634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156130a4576130a4613d2d56fea26469706673582212201360b4a341f921ba523dff17711a9a463e03fc73ce4d2828339e9bea0956183a64736f6c63430008110033

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

0000000000000000000000003d9411fbe9b0f7b7d55eedd3ae718bcdac0ae9ed0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9

-----Decoded View---------------
Arg [0] : _presaleDappAddr (address): 0x3D9411fBe9B0f7b7D55eedD3AE718bCDAC0Ae9ED
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] : 0000000000000000000000003d9411fbe9b0f7b7d55eedd3ae718bcdac0ae9ed
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  ]
[ 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.