Contract 0x294eC38490CE277019A9ED0ee27399e3Ad87B68c

 

Contract Overview

Balance:
0.11 BNB

BNB Value:
$36.99 (@ $336.25/BNB)

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x3dc177433d214b89cbab0b2fd09904091021b3a30d2acf37dbd61ac268d80d0577380312021-05-26 6:34:5617 days 5 hrs agoOpenBiSea: Deployer IN  0x294ec38490ce277019a9ed0ee27399e3ad87b68c0.11 BNB0.000307575
0x56d0b8a231955ce89f68d3dde98a032c83edccf3827181c51c6c01bb7067caa868947482021-04-26 6:57:4447 days 4 hrs ago0x68af405930877980147caa9fa942ddd087ef513f IN  0x294ec38490ce277019a9ed0ee27399e3ad87b68c0.11 BNB0.000307575
0xe41be353b4f46ad69c6cc7e1e78b6f304b0800f5b80fc905e9476ffe962388d868938872021-04-26 6:14:4147 days 5 hrs agoOpenBiSea: Deployer IN  Contract Creation0 BNB0.09867656
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0xdbc99034953edaa699ed2957046c25dd2daaea1107ef25e2530ac111f3bb040977113232021-05-25 8:16:4218 days 3 hrs ago 0x294ec38490ce277019a9ed0ee27399e3ad87b68cOpenBiSea: Deployer0.109 BNB
0xa88b731db467b532b25099f13476d74b91af88cd63a7cfbf1b33c6e5d0e2f7bf68956932021-04-26 7:44:5947 days 3 hrs ago 0x294ec38490ce277019a9ed0ee27399e3ad87b68cOpenBiSea: Deployer0.001 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokensalePool

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 12 : Context.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
contract Context {
    constructor () internal { }
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 2 of 12 : TokensalePool.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
import "./interface/IPoolRegistry.sol";
import "./interface/IAssetsManageTeam.sol";
import "./interface/IERC20.sol";
import "./access/PoolRoles.sol";
import "./math/SafeMath.sol";
contract TokensalePool is PoolRoles {
    using SafeMath for uint256;
    event Deposit(address indexed from, uint256 value);
    event DebugWithdrawLPartner(address sender,address owner, uint256 getDepositLengthSender, uint256 getDepositLengthOwner,uint256 totalAmountReturn,uint256 indexesDepositLength,uint256 balanceThis);
    string private _name;
    bool private _isPublicPool = true;
    address private _token;
    uint256 private _lockPeriod;
    uint256 private _rate;
    uint256 private _poolValueUSD = 0;
    uint256 private _poolValue = 0;
    string private _proofOfValue = "nothing";
    uint256 private _depositFixedFee;
    uint256 private _referralDepositFee;
    uint256 private _annualPercent;
    uint256 private _penaltyEarlyWithdraw;
    uint256 private _totalInvestLpartner;
    uint256 private _premiumFee;
    struct DepositToPool {
        uint256 amount;          // Amount of funds deposited
        uint256 time;            // Deposit time
        uint256 lock_period;     // Asset lock time
        bool refund_authorize;   // Are assets unlocked for withdrawal
        uint256 amountWithdrawal;
        address investedToken;
    }
    mapping(address => DepositToPool[]) private _deposites;
    mapping(address => address) private _referrals;
    IAssetsManageTeam private _assetsManageTeam;
    IPoolRegistry private _poolRegistry;
    modifier onlyAdmin(address sender) {
        if(hasRole(GENERAL_PARTNER_ROLE, sender) || hasRole(SUPER_ADMIN_ROLE, sender) || _poolRegistry.isTeam(sender)) {
            _;
        } else {
            revert("The sender does not have permission");
        }
    }
    address private _tokenForTokensale;
    uint256 private _initialBalance;
    constructor (address tokenForTokensale,string memory name,uint256 locked,uint256 depositFixedFee,uint256 referralDepositFee,uint256 annualPercent,uint256 penaltyEarlyWithdraw,address superAdmin,address gPartner,address lPartner,address team,address poolRegistry,address returnInvestmentLpartner, IAssetsManageTeam assetsManageTeam, uint256 initialBalance) public {
        _name = name;
        _tokenForTokensale = tokenForTokensale;
        _lockPeriod = locked;
        _depositFixedFee = depositFixedFee;
        _referralDepositFee = referralDepositFee;
        _annualPercent = annualPercent;
        _penaltyEarlyWithdraw = penaltyEarlyWithdraw;
        _assetsManageTeam = assetsManageTeam;
        _poolRegistry = IPoolRegistry(poolRegistry);
        _initialBalance = initialBalance;
        PoolRoles.addAdmin(SUPER_ADMIN_ROLE, msg.sender);
        PoolRoles.addAdmin(SUPER_ADMIN_ROLE, superAdmin);
        PoolRoles.addAdmin(SUPER_ADMIN_ROLE, poolRegistry);
        PoolRoles.finalize();
        grantRole(GENERAL_PARTNER_ROLE, gPartner);
        grantRole(LIMITED_PARTNER_ROLE, lPartner);
        grantRole(STARTUP_TEAM_ROLE, team);
        grantRole(POOL_REGISTRY, poolRegistry);
        grantRole(RETURN_INVESTMENT_LPARTNER, returnInvestmentLpartner);
    }
    function getInfoPool() public view returns( string memory name,bool isPublicPool,address tokenForTokensale,uint256 locked,uint256 initialBalance)
    {
        return ( _name,_isPublicPool,_tokenForTokensale,_lockPeriod, _initialBalance);
    }
    receive() external payable {}
    function getDeposit(address owner, uint256 index) public view returns(uint256 amount, uint256 time, uint256 lock_period, bool refund_authorize, uint256 amountWithdrawal, address investedToken) {
        return ( _deposites[owner][index].amount, _deposites[owner][index].time,_deposites[owner][index].lock_period, _deposites[owner][index].refund_authorize, _deposites[owner][index].amountWithdrawal, _deposites[owner][index].investedToken);
    }
    function getDepositLength(address owner) public view returns(uint256) {
        return (_deposites[owner].length);
    }
    function getReferral(address lPartner) public view returns (address) {
        return _referrals[lPartner];
    }
    function getInfoPoolFees() public view returns(uint256 rate, uint256 depositFixedFee, uint256 referralDepositFee, uint256 annualPercent, uint256 penaltyEarlyWithdraw, uint256 totalInvestLpartner, uint256 premiumFee)
    {
        return (_rate, _depositFixedFee, _referralDepositFee, _annualPercent, _penaltyEarlyWithdraw, _totalInvestLpartner, _premiumFee);
    }
    function _approveWithdrawLpartner(address lPartner, uint256 index, uint256 amount, address investedToken) external onlyReturnsInvestmentLpartner returns (bool) {
        _deposites[lPartner][index].refund_authorize = true;
        _deposites[lPartner][index].amountWithdrawal = amount;
        _deposites[lPartner][index].investedToken = investedToken;
        return true;
    }
    function _depositPoolRegistry(address sender, uint256 amount) external onlyPoolRegistry returns (bool) {
        require(hasRole(LIMITED_PARTNER_ROLE, sender), "InvestmentPool: the sender does not have permission");
        return _deposit(sender, amount);
    }
    function _depositTokenPoolRegistry(address payable sender, uint256 amount) external onlyPoolRegistry returns (bool) {
        require(hasRole(STARTUP_TEAM_ROLE, sender), "InvestmentPool: the sender does not have permission");
        return _depositToken(sender, amount);
    }
    function _withdrawTeam (address payable sender, uint256 amount) external onlyPoolRegistry returns (bool) {
        require(hasRole(STARTUP_TEAM_ROLE, sender), "InvestmentPool: the sender does not have permission");
        _assetsManageTeam._withdraw(address(this), sender, amount);
        sender.transfer(amount);
        return true;
    }
    function _withdrawTokensToStartup(address payable sender,address token, uint256 amount) external onlyPoolRegistry returns (bool) {
        require(hasRole(STARTUP_TEAM_ROLE, sender), "InvestmentPool: the sender does not have permission");
        _assetsManageTeam._withdrawTokensToStartup(address(this),token, sender, amount);
        IERC20(token).transfer(sender, amount);
        return true;
    }
    function _returnsInTokensFromTeam(address payable sender,address token, uint256 amount) external onlyPoolRegistry returns (bool) {
        require(hasRole(STARTUP_TEAM_ROLE, sender), "InvestmentPool: the sender does not have permission");
        IERC20(token).transferFrom(sender, address(this), amount);
        return true;
    }
    function _withdrawLPartner(address payable sender) external onlyPoolRegistry returns (bool, uint256, address) {
        require(hasRole(LIMITED_PARTNER_ROLE, sender), "InvestmentPool: the sender does not have permission");
        uint256 totalAmountReturn = 0;
        address token = address(0);
        uint256 lengthSender = getDepositLength(sender);
        bool result = false;
        for (uint256 i = 0; i < lengthSender; i++) {
            DepositToPool storage deposit = _deposites[sender][i];
            if (deposit.refund_authorize) {
                token = deposit.investedToken;
                if (deposit.amountWithdrawal > 0) {
                    if (token == address(0)) {
                        sender.transfer(deposit.amountWithdrawal);
                        totalAmountReturn = totalAmountReturn.add(deposit.amountWithdrawal);
                    } else {
                        IERC20(token).transfer(sender, deposit.amountWithdrawal);
                    }
                }
                _deposites[sender][i].refund_authorize = false;
                _deposites[sender][i].amountWithdrawal = 0;
            }
        }
        return (result,totalAmountReturn,token);
    }
    function _withdrawSuperAdmin(address payable sender,address token, uint256 amount) external onlyPoolRegistry returns (bool) {
        require(hasRole(SUPER_ADMIN_ROLE, sender), "InvestmentPool: the sender does not have permission");
        if (amount > 0) {
            if (token == address(0)) {
                sender.transfer(amount);
                return true;
            } else {
                IERC20(token).transfer(sender, amount);
                return true;
            }
        }
        return false;
    }
    function _activateDepositToPool() external onlyPoolRegistry returns (bool) {
        require(!_isPublicPool, "InvestmentPool: the pool is already activated");
        _isPublicPool = true;
        return true;
    }
    function _disactivateDepositToPool() external onlyPoolRegistry returns (bool) {
        require(_isPublicPool, "InvestmentPool: the pool is already deactivated");
        _isPublicPool = false;
        return true;
    }
    function _setReferral(address sender, address lPartner, address referral) external onlyPoolRegistry onlyAdmin(sender) returns (bool) {
        _referrals[lPartner] = referral;
        return true;
    }
    function _updatePool(string calldata name, bool isPublicPool, address token, uint256 locked, uint256 depositFixedFee, uint256 referralDepositFee, uint256 annualPercent, uint256 penaltyEarlyWithdraw) external onlyPoolRegistry returns (bool) {
        _name = name;
        _isPublicPool = isPublicPool;
        _token = token;
        _lockPeriod = locked;
        _depositFixedFee = depositFixedFee;
        _referralDepositFee = referralDepositFee;
        _annualPercent = annualPercent;
        _penaltyEarlyWithdraw = penaltyEarlyWithdraw;
        return true;
    }
    function _setRate(uint256 rate) external onlyPoolRegistry returns (bool) {
        _rate = rate;
        return true;
    }
    function _setPoolValues(uint256 poolValueUSD,uint256 poolValue,string calldata proofOfValue) external onlyPoolRegistry returns (bool) {
        _poolValueUSD = poolValueUSD;
        _poolValue = poolValue;
        _proofOfValue = proofOfValue;
        return true;
    }
    function getPoolValues() public view returns(uint256 poolValueUSD, uint256 poolValue, string memory proofOfValue)
    {
        return (_poolValueUSD, _poolValue, _proofOfValue);
    }
    function _depositInvestmentInTokensToPool(address payable sender, uint256 amount, address token) external onlyPoolRegistry returns (bool) {
        require(hasRole(LIMITED_PARTNER_ROLE, sender), "InvestmentPool: the sender does not have permission");
        uint256 depositFee = amount.mul(_depositFixedFee).div(100);
        uint256 depositFeeReferrer = amount.mul(_referralDepositFee).div(100);
        uint256 totalDeposit = 0;
        if (_referrals[sender] != address(0)) {
            totalDeposit = amount.sub(depositFee).sub(depositFeeReferrer);
        } else {
            totalDeposit = amount.sub(depositFee);
        }
        _deposites[sender].push(DepositToPool(totalDeposit, block.timestamp, _lockPeriod, false, 0, token));
        return true;
    }
    function purchaseTokensQuantityFor(uint256 amount) public view returns (uint256,uint256) {
        address poolAddress = address (this);
        uint256 balance = IERC20(_tokenForTokensale).balanceOf(poolAddress);
        uint256 delta = _initialBalance.sub(_initialBalance.sub(balance));
        uint256 initialPriceInt = 33300000000000000; // 0.0333 BNB one token
        uint256 newPrice = initialPriceInt.mul(_initialBalance).div(delta);
        return (amount.mul(10 ** uint256(18)).div(newPrice),balance);
    }
    function purchaseTokens() public payable returns (uint256) {
        require(msg.value > 100000000000000000, "TokensalePool: minimal purchase 0.1BNB.");
        uint256 amountTokens;
        uint256 balance;
        (amountTokens,balance) = purchaseTokensQuantityFor(msg.value);
        require(amountTokens > 0, "TokensalePool: we can't sell 0 tokens.");
        require(amountTokens < balance.div(3), "TokensalePool: we can't sell more than 30% from one transaction. Please decrease investment amount.");
//        payable(address (this)).transfer(amount);
        IERC20(_tokenForTokensale).transfer(msg.sender, amountTokens);
        return amountTokens;
    }
    function _deposit(address sender, uint256 amount) private returns (bool) {
        require(_isPublicPool, "InvestmentPool: pool deposit blocked");
        address payable team = payable(getRoleMember(GENERAL_PARTNER_ROLE,0));
        uint256 depositFee = amount.mul(_depositFixedFee).div(100);
        uint256 depositFeeReferrer = amount.mul(_referralDepositFee).div(100);
        uint256 totalDeposit = 0;
        if (_referrals[sender] != address(0)) {
            payable(_referrals[sender]).transfer(depositFeeReferrer);
            team.transfer(depositFee);
            totalDeposit = amount.sub(depositFee).sub(depositFeeReferrer);
        } else {
            team.transfer(depositFee);
            totalDeposit = amount.sub(depositFee);
        }
        _deposites[sender].push(DepositToPool(totalDeposit, block.timestamp, _lockPeriod, false, 0, address(0)));
        _totalInvestLpartner = _totalInvestLpartner.add(amount);
        emit Deposit(sender, amount);
        return true;
    }
    function _depositToken(address payable sender, uint256 amount) private returns (bool) {
        _assetsManageTeam._depositToken(address(this), sender, _token, amount);
        uint256 amountConverted = _getTokenAmount(amount);
        require(amountConverted <= address(this).balance, "InvestmentPool: contract balance is insufficient");
        sender.transfer(amountConverted);
        return true;
    }
    function _transferGeneralPartner(uint256 amount) private returns (bool) {
        address payable gPartner = payable(getMembersRole(GENERAL_PARTNER_ROLE)[0]);
        gPartner.transfer(amount);
        return true;
    }
    function _getTokenAmount(uint256 weiAmount) public view returns (uint256) {
        uint8 DECIMALS = IERC20(_token).decimals();
        return (weiAmount.mul(_rate)).div(10 ** uint256(DECIMALS));
    }
    function isContract(address _addr) private view returns (bool is_contract) {
        uint length;
        assembly {
            length := extcodesize(_addr)
        }
        return (length>0);
    }

    function _removeIndexArray(uint256 index, DepositToPool[] storage array) internal virtual {
        for(uint256 i = index; i < array.length-1; i++) {
            array[i] = array[i+1];
        }
        array.pop();
    }
}

File 3 of 12 : AccessControl.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;

import "../utils/EnumerableSet.sol";
import "../GSN/Context.sol";

contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }
    mapping (bytes32 => RoleData) private _roles;
    mapping (bytes32 => address[]) private _addressesRoles;
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }
    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }
   function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }
    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }
    function getMembersRole(bytes32 role) public view returns (address[] memory Accounts) {
        return _addressesRoles[role];
    }
    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");
        _grantRole(role, account);
    }
    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        _roles[role].adminRole = adminRole;
    }
    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            _addressesRoles[role].push(account);
            emit RoleGranted(role, account, _msgSender());
        }
    }
    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            for (uint256 i; i < _addressesRoles[role].length; i++) {
                if (_addressesRoles[role][i] == account) {
                    _removeIndexArray(i, _addressesRoles[role]);
                    break;
                }
            }
            emit RoleRevoked(role, account, _msgSender());
        }
    }
    function _removeIndexArray(uint256 index, address[] storage array) internal virtual {
        for(uint256 i = index; i < array.length-1; i++) {
            array[i] = array[i+1];
        }
        array.pop();
    }
}

File 4 of 12 : PoolRoles.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
import "./AccessControl.sol";
import "../ownership/Ownable.sol";
import "../interface/IRoleModel.sol";
contract PoolRoles is AccessControl, Ownable, IRoleModel {
    bool private _finalized = false;
    event Finalized();
    modifier onlyGPartner() {
        require(hasRole(GENERAL_PARTNER_ROLE, msg.sender), "Roles: caller does not have the general partner role");
        _;
    }
    modifier onlyLPartner() {
        require(hasRole(LIMITED_PARTNER_ROLE, msg.sender), "Roles: caller does not have the limited partner role");
        _;
    }
    modifier onlyStartupTeam() {
        require(hasRole(STARTUP_TEAM_ROLE, msg.sender), "Roles: caller does not have the team role");
        _;
    }
    modifier onlyPoolRegistry() {
        require(hasRole(POOL_REGISTRY, msg.sender), "Roles: caller does not have the pool regystry role");
        _;
    }
    modifier onlyReturnsInvestmentLpartner() {
        require(hasRole(RETURN_INVESTMENT_LPARTNER, msg.sender), "Roles: caller does not have the return invesment lpartner role");
        _;
    }
    modifier onlyOracle() {
        require(hasRole(ORACLE, msg.sender), "Roles: caller does not have oracle role");
        _;
    }
    constructor () public {
        _setRoleAdmin(GENERAL_PARTNER_ROLE, SUPER_ADMIN_ROLE);
        _setRoleAdmin(LIMITED_PARTNER_ROLE, SUPER_ADMIN_ROLE);
        _setRoleAdmin(STARTUP_TEAM_ROLE, SUPER_ADMIN_ROLE);
        _setRoleAdmin(POOL_REGISTRY, SUPER_ADMIN_ROLE);
        _setRoleAdmin(RETURN_INVESTMENT_LPARTNER, SUPER_ADMIN_ROLE);
        _setRoleAdmin(ORACLE, SUPER_ADMIN_ROLE);
    }
    function addAdmin(bytes32 role, address account) public onlyOwner returns (bool) {
        require(!_finalized, "ManagerRole: already finalized");

        _setupRole(role, account);
        return true;
    }
    function finalize() public onlyOwner {
        require(!_finalized, "ManagerRole: already finalized");
        _finalized = true;
        emit Finalized();
    }
}

File 5 of 12 : IAssetsManageTeam.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
interface IAssetsManageTeam {
    function _depositToken(address pool, address team, address token, uint256 amount) external returns (bool);
    function _withdraw(address pool, address team, uint256 amount) external returns (bool);
    function _withdrawTokensToStartup(address pool,address token, address team, uint256 amount) external returns (bool);
    function _request(bool withdraw, address pool, address team, uint256 maxValue) external returns(bool);
    function _requestTokensWidthdrawalFromStartup(address pool, address token, address team, uint256 maxValue) external returns(bool);
    function _approve(address pool, address team, address owner) external returns(bool);
    function _approveTokensWidthdrawalFromStartup(address pool, address token, address team, address owner) external returns(bool);
    function _disapprove(address pool, address team, address owner) external returns(bool);
    function _lock(address pool, address team, address owner) external returns(bool);
    function _unlock(address pool, address team, address owner) external returns(bool);
    function addManager(address account) external;
    function getPerformedOperationsLength(address pool, address owner) external view returns(uint256 length);
    function getPerformedOperations(address pool, address owner, uint256 index) external view returns(address token, uint256 amountToken, uint256 withdraw, uint256 time);
    function getRequests(address pool) external view returns(address[] memory);
    function getApproval(address pool) external view returns(address[] memory);
    function getRequestTeamAddress(address pool, address team) external view returns(bool lock, uint256 maxValueToken, uint256 madeValueToken, uint256 maxValue, uint256 madeValue);
    function getApproveTeamAddress(address pool, address team) external view returns(bool lock, uint256 maxValueToken, uint256 madeValueToken, uint256 maxValue, uint256 madeValueE);
}

File 6 of 12 : IERC20.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function decimals() external view returns (uint8);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 7 of 12 : IOracle.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
interface IOracle {
    function getLatestPrice() external view returns ( uint256,uint8);
    function getCustomPrice(address aggregator) external view returns (uint256,uint8);
}

File 8 of 12 : IPoolRegistry.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
import "./IOracle.sol";
interface IPoolRegistry {
    function isTeam(address account) external view returns (bool);
    function getTeamAddresses() external view returns (address[] memory);
    function getOracleContract() external view returns (IOracle);
}

File 9 of 12 : IRoleModel.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
contract IRoleModel {
    bytes32 public constant SUPER_ADMIN_ROLE = keccak256("SUPER_ADMIN_ROLE");
    bytes32 public constant GENERAL_PARTNER_ROLE = keccak256("GENERAL_PARTNER_ROLE");
    bytes32 public constant LIMITED_PARTNER_ROLE = keccak256("LIMITED_PARTNER_ROLE");
    bytes32 public constant STARTUP_TEAM_ROLE = keccak256("STARTUP_TEAM_ROLE");
    bytes32 public constant POOL_REGISTRY = keccak256("POOL_REGISTRY");
    bytes32 public constant RETURN_INVESTMENT_LPARTNER = keccak256("RETURN_INVESTMENT_LPARTNER");
    bytes32 public constant ORACLE = keccak256("ORACLE");
    bytes32 public constant REFERER_ROLE = keccak256("REFERER_ROLE");
}

File 10 of 12 : SafeMath.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
library SafeMath {
     function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
         if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

File 11 of 12 : Ownable.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
import "../GSN/Context.sol";
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
    * @dev Transfers ownership of the contract to a new account (`newOwner`).
    * Can only be called by the current owner.
    */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 12 of 12 : EnumerableSet.sol
// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact [email protected] if you like to use code
pragma solidity ^0.6.8;
library EnumerableSet {
    struct Set {
        bytes32[] _values;
        address[] _collection;
        mapping (bytes32 => uint256) _indexes;
    }
    function _add(Set storage set, bytes32 value, address addressValue) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._collection.push(addressValue);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];
        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastValue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastValue;
            set._values.pop();

            address lastvalueAddress = set._collection[lastIndex];
            set._collection[toDeleteIndex] = lastvalueAddress;
            set._collection.pop();

            set._indexes[lastValue] = toDeleteIndex + 1; // All indexes are 1-based
            delete set._indexes[value];
//            for(uint256 i = 0; i < set._collection.length; i++) {
//                if (set._collection[i] == addressValue) {
//                    _removeIndexArray(i, set._collection);
//                    break;
//                }
//            }
            return true;
        } else {
            return false;
        }
    }
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }
    function _collection(Set storage set) private view returns (address[] memory) {
        return set._collection;    
    }
//    function _removeIndexArray(uint256 index, address[] storage array) internal virtual {
//        for(uint256 i = index; i < array.length-1; i++) {
//            array[i] = array[i+1];
//        }
//        array.pop();
//    }
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }
    struct AddressSet {
        Set _inner;
    }
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)), value);
    }
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function collection(AddressSet storage set) internal view returns (address[] memory) {
        return _collection(set._inner);
    }
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "byzantium",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"tokenForTokensale","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"locked","type":"uint256"},{"internalType":"uint256","name":"depositFixedFee","type":"uint256"},{"internalType":"uint256","name":"referralDepositFee","type":"uint256"},{"internalType":"uint256","name":"annualPercent","type":"uint256"},{"internalType":"uint256","name":"penaltyEarlyWithdraw","type":"uint256"},{"internalType":"address","name":"superAdmin","type":"address"},{"internalType":"address","name":"gPartner","type":"address"},{"internalType":"address","name":"lPartner","type":"address"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"poolRegistry","type":"address"},{"internalType":"address","name":"returnInvestmentLpartner","type":"address"},{"internalType":"contract IAssetsManageTeam","name":"assetsManageTeam","type":"address"},{"internalType":"uint256","name":"initialBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"getDepositLengthSender","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getDepositLengthOwner","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountReturn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"indexesDepositLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceThis","type":"uint256"}],"name":"DebugWithdrawLPartner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"GENERAL_PARTNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIMITED_PARTNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REGISTRY","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RETURN_INVESTMENT_LPARTNER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTUP_TEAM_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPER_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_activateDepositToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lPartner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"investedToken","type":"address"}],"name":"_approveWithdrawLpartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"_depositInvestmentInTokensToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_depositPoolRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_depositTokenPoolRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_disactivateDepositToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"_getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_returnsInTokensFromTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolValueUSD","type":"uint256"},{"internalType":"uint256","name":"poolValue","type":"uint256"},{"internalType":"string","name":"proofOfValue","type":"string"}],"name":"_setPoolValues","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"_setRate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"lPartner","type":"address"},{"internalType":"address","name":"referral","type":"address"}],"name":"_setReferral","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"isPublicPool","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"locked","type":"uint256"},{"internalType":"uint256","name":"depositFixedFee","type":"uint256"},{"internalType":"uint256","name":"referralDepositFee","type":"uint256"},{"internalType":"uint256","name":"annualPercent","type":"uint256"},{"internalType":"uint256","name":"penaltyEarlyWithdraw","type":"uint256"}],"name":"_updatePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"}],"name":"_withdrawLPartner","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_withdrawSuperAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_withdrawTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_withdrawTokensToStartup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"addAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getDeposit","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"lock_period","type":"uint256"},{"internalType":"bool","name":"refund_authorize","type":"bool"},{"internalType":"uint256","name":"amountWithdrawal","type":"uint256"},{"internalType":"address","name":"investedToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getDepositLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInfoPool","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"isPublicPool","type":"bool"},{"internalType":"address","name":"tokenForTokensale","type":"address"},{"internalType":"uint256","name":"locked","type":"uint256"},{"internalType":"uint256","name":"initialBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInfoPoolFees","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"depositFixedFee","type":"uint256"},{"internalType":"uint256","name":"referralDepositFee","type":"uint256"},{"internalType":"uint256","name":"annualPercent","type":"uint256"},{"internalType":"uint256","name":"penaltyEarlyWithdraw","type":"uint256"},{"internalType":"uint256","name":"totalInvestLpartner","type":"uint256"},{"internalType":"uint256","name":"premiumFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getMembersRole","outputs":[{"internalType":"address[]","name":"Accounts","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolValues","outputs":[{"internalType":"uint256","name":"poolValueUSD","type":"uint256"},{"internalType":"uint256","name":"poolValue","type":"uint256"},{"internalType":"string","name":"proofOfValue","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lPartner","type":"address"}],"name":"getReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purchaseTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchaseTokensQuantityFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6002805460a060020a60ff02191690556004805460ff191660011790556000600781815560089190915560c060405260808190527f6e6f7468696e670000000000000000000000000000000000000000000000000060a090815262000068916009919062000c86565b503480156200007657600080fd5b5060405162004b9d38038062004b9d83398181016040526101e08110156200009d57600080fd5b815160208301805160405192949293830192919084640100000000821115620000c557600080fd5b908301906020820185811115620000db57600080fd5b8251640100000000811182820188101715620000f657600080fd5b82525081516020918201929091019080838360005b83811015620001255781810151838201526020016200010b565b50505050905090810190601f168015620001535780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c086015160e08701516101008801516101208901516101408a01516101608b01516101808c01516101a0909c01519a9d50989b50969995989497939692959194909391906000620001cb64010000000062000776810204565b60028054600160a060020a031916600160a060020a038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604080517f47454e4552414c5f504152544e45525f524f4c450000000000000000000000008152815190819003601401812060008051602062004b7d833981519152825291519081900360100190206200027d91906401000000006200077b810204565b604080517f4c494d495445445f504152544e45525f524f4c450000000000000000000000008152815190819003601401812060008051602062004b7d83398151915282529151908190036010019020620002e191906401000000006200077b810204565b604080517f535441525455505f5445414d5f524f4c450000000000000000000000000000008152815190819003601101812060008051602062004b7d833981519152825291519081900360100190206200034591906401000000006200077b810204565b604080517f504f4f4c5f5245474953545259000000000000000000000000000000000000008152815190819003600d01812060008051602062004b7d83398151915282529151908190036010019020620003a991906401000000006200077b810204565b604080517f52455455524e5f494e564553544d454e545f4c504152544e45520000000000008152815190819003601a01812060008051602062004b7d833981519152825291519081900360100190206200040d91906401000000006200077b810204565b604080517f4f5241434c4500000000000000000000000000000000000000000000000000008152815190819003600601812060008051602062004b7d833981519152825291519081900360100190206200047191906401000000006200077b810204565b8d600390805190602001906200048992919062000c86565b508e601460006101000a815481600160a060020a030219169083600160a060020a031602179055508c6005819055508b600a819055508a600b8190555089600c8190555088600d8190555081601260006101000a815481600160a060020a030219169083600160a060020a0316021790555083601360006101000a815481600160a060020a030219169083600160a060020a03160217905550806015819055506200056d604051808060008051602062004b7d8339815191528152506010019050604051809103902033620007906401000000000262001895176401000000009004565b506040805160008051602062004b7d83398151915281529051908190036010019020620005a99089640100000000620018956200079082021704565b506040805160008051602062004b7d83398151915281529051908190036010019020620005e59085640100000000620018956200079082021704565b50620005fe6401000000006200151c620008ba82021704565b604080517f47454e4552414c5f504152544e45525f524f4c450000000000000000000000008152905190819003601401902062000645908864010000000062000a16810204565b604080517f4c494d495445445f504152544e45525f524f4c45000000000000000000000000815290519081900360140190206200068c908764010000000062000a16810204565b604080517f535441525455505f5445414d5f524f4c4500000000000000000000000000000081529051908190036011019020620006d3908664010000000062000a16810204565b604080517f504f4f4c5f5245474953545259000000000000000000000000000000000000008152905190819003600d0190206200071a908564010000000062000a16810204565b604080517f52455455524e5f494e564553544d454e545f4c504152544e45520000000000008152905190819003601a01902062000761908464010000000062000a16810204565b50505050505050505050505050505062000d28565b335b90565b60009182526020829052604090912060030155565b6000620007a564010000000062000776810204565b600254600160a060020a039081169116146200081157604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201819052602482015260008051602062004b5d833981519152604482015290519081900360640190fd5b60025474010000000000000000000000000000000000000000900460ff16156200089c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d616e61676572526f6c653a20616c72656164792066696e616c697a65640000604482015290519081900360640190fd5b620008b1838364010000000062000aa6810204565b50600192915050565b620008cd64010000000062000776810204565b600254600160a060020a039081169116146200093957604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201819052602482015260008051602062004b5d833981519152604482015290519081900360640190fd5b60025474010000000000000000000000000000000000000000900460ff1615620009c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d616e61676572526f6c653a20616c72656164792066696e616c697a65640000604482015290519081900360640190fd5b6002805460a060020a60ff021916740100000000000000000000000000000000000000001790556040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a1565b60008281526020819052604090206003015462000a4f9062000a4064010000000062000776810204565b64010000000062000abf810204565b62000aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018062004b2e602f913960400191505060405180910390fd5b62000abb828264010000000062000aee810204565b5050565b600082815260208190526040812062000ae7908364010000000062002ea462000ba982021704565b9392505050565b600082815260208190526040902062000b16908264010000000062002eb962000bc982021704565b1562000abb5760008281526001602081815260408320805492830181558352909120018054600160a060020a031916600160a060020a03831617905562000b6564010000000062000776810204565b600160a060020a031681600160a060020a0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000ae783600160a060020a03841664010000000062000bea810204565b600062000ae783600160a060020a0384168464010000000062000c02810204565b60009081526002919091016020526040902054151590565b600062000c19848464010000000062000bea810204565b62000c7c57508254600180820185556000858152602080822090930185905581860180548084018255908252838220018054600160a060020a031916600160a060020a038616179055855485825260028701909352604090209190915562000ae7565b5060009392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cc957805160ff191683800117855562000cf9565b8280016001018555821562000cf9579182015b8281111562000cf957825182559160200191906001019062000cdc565b5062000d0792915062000d0b565b5090565b6200077891905b8082111562000d07576000815560010162000d12565b613df68062000d386000396000f3fe6080604052600436106102645760003560e060020a900480639010d07c11610148578063d2f0d2a8116100ba578063e89ec45f1161007e578063e89ec45f14610b0f578063f2fde38b14610b48578063f45efe6714610b7b578063f66fdcca14610bbe578063fe070e9d14610c59578063fedf51e914610c6e5761026b565b8063d2f0d2a814610931578063d547741f146109f0578063d5c5e43414610a29578063d93f48b014610a85578063dae06b7214610acc5761026b565b8063b06fd88f1161010c578063b06fd88f14610762578063bd8afbf81461080f578063c1abd75714610898578063ca15c873146108ad578063cb4ff7f2146108d7578063cbc5906e1461091c5761026b565b80639010d07c1461061c57806391d148541461064c57806394707a95146106855780639cf6cc70146106af578063ac6cc60c146107295761026b565b80633b0f0f2f116101e15780636176dd9f116101a55780636176dd9f146105195780636419bcdb1461052e5780637a99bb0a146105675780637fdbc08b1461059157806387ac828a146105d45780638da5cb5b146106075761026b565b80633b0f0f2f146104485780634460bdd6146104975780634bb278f3146104ac578063594ce4c7146104c15780635ac8b005146105045761026b565b80632726b506116102285780632726b506146103665780632f2ff15d146103db5780633049ea33146104165780633290ce291461042b57806338013f02146104335761026b565b8063085a73f51461027057806316fb3c15146102bd5780631cda4a8d14610300578063248a9ca314610327578063261fef02146103515761026b565b3661026b57005b600080fd5b34801561027c57600080fd5b506102a96004803603604081101561029357600080fd5b50600160a060020a038135169060200135610cbb565b604080519115158252519081900360200190f35b3480156102c957600080fd5b506102a9600480360360608110156102e057600080fd5b50600160a060020a03813581169160208101359091169060400135610da1565b34801561030c57600080fd5b50610315610fc1565b60408051918252519081900360200190f35b34801561033357600080fd5b506103156004803603602081101561034a57600080fd5b5035610fe4565b34801561035d57600080fd5b50610315610ff9565b34801561037257600080fd5b5061039f6004803603604081101561038957600080fd5b50600160a060020a03813516906020013561102e565b6040805196875260208701959095528585019390935290151560608501526080840152600160a060020a031660a0830152519081900360c00190f35b3480156103e757600080fd5b50610414600480360360408110156103fe57600080fd5b5080359060200135600160a060020a03166111d4565b005b34801561042257600080fd5b506102a9611243565b610315611308565b34801561043f57600080fd5b50610315611494565b34801561045457600080fd5b5061047b6004803603602081101561046b57600080fd5b5035600160a060020a03166114c9565b60408051600160a060020a039092168252519081900360200190f35b3480156104a357600080fd5b506103156114e7565b3480156104b857600080fd5b5061041461151c565b3480156104cd57600080fd5b506102a9600480360360608110156104e457600080fd5b50600160a060020a0381358116916020810135909116906040013561165c565b34801561051057600080fd5b506103156117a1565b34801561052557600080fd5b506102a96117d6565b34801561053a57600080fd5b506102a96004803603604081101561055157600080fd5b5080359060200135600160a060020a0316611895565b34801561057357600080fd5b506103156004803603602081101561058a57600080fd5b503561198a565b34801561059d57600080fd5b506102a9600480360360608110156105b457600080fd5b50600160a060020a03813581169160208101359091169060400135611a39565b3480156105e057600080fd5b50610315600480360360208110156105f757600080fd5b5035600160a060020a0316611c15565b34801561061357600080fd5b5061047b611c30565b34801561062857600080fd5b5061047b6004803603604081101561063f57600080fd5b5080359060200135611c3f565b34801561065857600080fd5b506102a96004803603604081101561066f57600080fd5b5080359060200135600160a060020a0316611c5d565b34801561069157600080fd5b506102a9600480360360208110156106a857600080fd5b5035611c7b565b3480156106bb57600080fd5b506106d9600480360360208110156106d257600080fd5b5035611cef565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107155781810151838201526020016106fd565b505050509050019250505060405180910390f35b34801561073557600080fd5b506102a96004803603604081101561074c57600080fd5b50600160a060020a038135169060200135611d5b565b34801561076e57600080fd5b506102a9600480360361010081101561078657600080fd5b8101906020810181356401000000008111156107a157600080fd5b8201836020820111156107b357600080fd5b803590602001918460018302840111640100000000831117156107d557600080fd5b91935091508035151590600160a060020a036020820135169060408101359060608101359060808101359060a08101359060c00135611e38565b34801561081b57600080fd5b506102a96004803603606081101561083257600080fd5b81359160208101359181019060608101604082013564010000000081111561085957600080fd5b82018360208201111561086b57600080fd5b8035906020019184600183028401116401000000008311171561088d57600080fd5b509092509050611f0f565b3480156108a457600080fd5b50610315611f9c565b3480156108b957600080fd5b50610315600480360360208110156108d057600080fd5b5035611fd1565b3480156108e357600080fd5b506102a9600480360360608110156108fa57600080fd5b50600160a060020a038135811691602081013582169160409091013516611fe8565b34801561092857600080fd5b506103156121ea565b34801561093d57600080fd5b5061094661220d565b60405180806020018615151515815260200185600160a060020a0316600160a060020a03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156109b1578181015183820152602001610999565b50505050905090810190601f1680156109de5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156109fc57600080fd5b5061041460048036036040811015610a1357600080fd5b5080359060200135600160a060020a03166122da565b348015610a3557600080fd5b50610a5c60048036036020811015610a4c57600080fd5b5035600160a060020a0316612340565b6040805193151584526020840192909252600160a060020a031682820152519081900360600190f35b348015610a9157600080fd5b506102a960048036036080811015610aa857600080fd5b50600160a060020a0381358116916020810135916040820135916060013516612625565b348015610ad857600080fd5b50610af660048036036020811015610aef57600080fd5b50356127aa565b6040805192835260208301919091528051918290030190f35b348015610b1b57600080fd5b506102a960048036036040811015610b3257600080fd5b50600160a060020a0381351690602001356128c5565b348015610b5457600080fd5b5061041460048036036020811015610b6b57600080fd5b5035600160a060020a0316612a79565b348015610b8757600080fd5b506102a960048036036060811015610b9e57600080fd5b50600160a060020a03813581169160208101359160409091013516612b8a565b348015610bca57600080fd5b50610bd3612daf565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c1c578181015183820152602001610c04565b50505050905090810190601f168015610c495780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610c6557600080fd5b50610315612e63565b348015610c7a57600080fd5b50610c83612e86565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b60408051600080516020613af78339815191528152905190819003600d019020600090610ce89033611c5d565b610d265760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613cc183398151915281529051908190036011019020610d509084611c5d565b610d8e5760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b610d988383612ecf565b90505b92915050565b60408051600080516020613af78339815191528152905190819003600d019020600090610dce9033611c5d565b610e0c5760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613cc183398151915281529051908190036011019020610e369085611c5d565b610e745760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b601254604080517fe33d8221000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a0386811660248301528781166044830152606482018690529151919092169163e33d82219160848083019260209291908290030181600087803b158015610ef157600080fd5b505af1158015610f05573d6000803e3d6000fd5b505050506040513d6020811015610f1b57600080fd5b5050604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820185905291519185169163a9059cbb916044808201926020929091908290030181600087803b158015610f8957600080fd5b505af1158015610f9d573d6000803e3d6000fd5b505050506040513d6020811015610fb357600080fd5b5060019150505b9392505050565b60408051600080516020613af78339815191528152905190819003600d01902081565b60009081526020819052604090206003015490565b604080517f52455455524e5f494e564553544d454e545f4c504152544e45520000000000008152905190819003601a01902081565b6000806000806000806010600089600160a060020a0316600160a060020a03168152602001908152602001600020878154811061106757fe5b60009182526020808320600690920290910154600160a060020a038b1683526010909152604090912080548990811061109c57fe5b906000526020600020906006020160010154601060008b600160a060020a0316600160a060020a0316815260200190815260200160002089815481106110de57fe5b906000526020600020906006020160020154601060008c600160a060020a0316600160a060020a031681526020019081526020016000208a8154811061112057fe5b6000918252602080832060036006909302019190910154600160a060020a038e16835260109091526040909120805460ff909216918c90811061115f57fe5b906000526020600020906006020160040154601060008e600160a060020a0316600160a060020a031681526020019081526020016000208c815481106111a157fe5b6000918252602090912060069091020160050154949d939c50919a5098509650600160a060020a03909116945092505050565b6000828152602081905260409020600301546111f7906111f2613016565b611c5d565b6112355760405160e560020a62461bcd02815260040180806020018281038252602f815260200180613a95602f913960400191505060405180910390fd5b61123f828261301a565b5050565b60408051600080516020613af78339815191528152905190819003600d0190206000906112709033611c5d565b6112ae5760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60045460ff16156112f35760405160e560020a62461bcd02815260040180806020018281038252602d815260200180613ce1602d913960400191505060405180910390fd5b506004805460ff191660019081179091555b90565b600067016345785d8a000034116113535760405160e560020a62461bcd028152600401808060200182810382526027815260200180613c9a6027913960400191505060405180910390fd5b60008061135f346127aa565b9092509050816113a35760405160e560020a62461bcd028152600401808060200182810382526026815260200180613b8f6026913960400191505060405180910390fd5b6113b481600363ffffffff6130bf16565b82106113f45760405160e560020a62461bcd028152600401808060200182810382526063815260200180613c086063913960800191505060405180910390fd5b601454604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561146157600080fd5b505af1158015611475573d6000803e3d6000fd5b505050506040513d602081101561148b57600080fd5b50919250505090565b604080517f4f5241434c4500000000000000000000000000000000000000000000000000008152905190819003600601902081565b600160a060020a039081166000908152601160205260409020541690565b604080517f53555045525f41444d494e5f524f4c45000000000000000000000000000000008152905190819003601001902081565b611524613016565b600254600160a060020a03908116911614611589576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60025474010000000000000000000000000000000000000000900460ff16156115fc576040805160e560020a62461bcd02815260206004820152601e60248201527f4d616e61676572526f6c653a20616c72656164792066696e616c697a65640000604482015290519081900360640190fd5b6002805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a1565b60408051600080516020613af78339815191528152905190819003600d0190206000906116899033611c5d565b6116c75760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613cc1833981519152815290519081900360110190206116f19085611c5d565b61172f5760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152306024830152604482018590529151918516916323b872dd916064808201926020929091908290030181600087803b158015610f8957600080fd5b604080517f524546455245525f524f4c4500000000000000000000000000000000000000008152905190819003600c01902081565b60408051600080516020613af78339815191528152905190819003600d0190206000906118039033611c5d565b6118415760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60045460ff166118855760405160e560020a62461bcd02815260040180806020018281038252602f815260200180613c6b602f913960400191505060405180910390fd5b506004805460ff19169055600190565b600061189f613016565b600254600160a060020a03908116911614611904576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60025474010000000000000000000000000000000000000000900460ff1615611977576040805160e560020a62461bcd02815260206004820152601e60248201527f4d616e61676572526f6c653a20616c72656164792066696e616c697a65640000604482015290519081900360640190fd5b6119818383611235565b50600192915050565b600080600460019054906101000a9004600160a060020a0316600160a060020a031663313ce5676040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156119de57600080fd5b505afa1580156119f2573d6000803e3d6000fd5b505050506040513d6020811015611a0857600080fd5b5051600654909150610fba9060ff8316600a0a90611a2d90869063ffffffff61310116565b9063ffffffff6130bf16565b60408051600080516020613af78339815191528152905190819003600d019020600090611a669033611c5d565b611aa45760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b604080517f53555045525f41444d494e5f524f4c450000000000000000000000000000000081529051908190036010019020611ae09085611c5d565b611b1e5760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b8115611c0b57600160a060020a038316611b7257604051600160a060020a0385169083156108fc029084906000818181858888f19350505050158015611b68573d6000803e3d6000fd5b5060019050610fba565b82600160a060020a031663a9059cbb85846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b505050506040513d6020811015611bff57600080fd5b5060019150610fba9050565b5060009392505050565b600160a060020a031660009081526010602052604090205490565b600254600160a060020a031690565b6000828152602081905260408120610d98908363ffffffff61315d16565b6000828152602081905260408120610d98908363ffffffff612ea416565b60408051600080516020613af78339815191528152905190819003600d019020600090611ca89033611c5d565b611ce65760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b50600655600190565b600081815260016020908152604091829020805483518184028101840190945280845260609392830182828015611d4f57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611d31575b50505050509050919050565b60408051600080516020613af78339815191528152905190819003600d019020600090611d889033611c5d565b611dc65760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613b1783398151915281529051908190036014019020611df09084611c5d565b611e2e5760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b610d988383613169565b60408051600080516020613af78339815191528152905190819003600d019020600090611e659033611c5d565b611ea35760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b611eaf60038b8b6139da565b50506004805460ff19169715159790971774ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a03979097169690960295909517909555600592909255600a55600b55600c91909155600d55506001919050565b60408051600080516020613af78339815191528152905190819003600d019020600090611f3c9033611c5d565b611f7a5760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60078590556008849055611f90600984846139da565b50600195945050505050565b604080517f47454e4552414c5f504152544e45525f524f4c450000000000000000000000008152905190819003601401902081565b6000818152602081905260408120610d9b9061343c565b60408051600080516020613af78339815191528152905190819003600d0190206000906120159033611c5d565b6120535760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b604080517f47454e4552414c5f504152544e45525f524f4c450000000000000000000000008152905190819003601401902084906120919082611c5d565b806120d35750604080517f53555045525f41444d494e5f524f4c4500000000000000000000000000000000815290519081900360100190206120d39082611c5d565b8061216c5750601354604080517f24851914000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152915191909216916324851914916024808301926020929190829003018186803b15801561213f57600080fd5b505afa158015612153573d6000803e3d6000fd5b505050506040513d602081101561216957600080fd5b50515b156121a857600160a060020a0384811660009081526011602052604090208054600160a060020a031916918516919091179055600191506121e2565b60405160e560020a62461bcd028152600401808060200182810382526023815260200180613be56023913960400191505060405180910390fd5b509392505050565b60408051600080516020613cc18339815191528152905190819003601101902081565b6004546014546005546015546003805460408051602060026101006001861615026000190190941693909304601f81018490048402820184019092528181526060976000978897889788979660ff90941695600160a060020a03909316949193909287918301828280156122c25780601f10612297576101008083540402835291602001916122c2565b820191906000526020600020905b8154815290600101906020018083116122a557829003601f168201915b50505050509450945094509450945094509091929394565b6000828152602081905260409020600301546122f8906111f2613016565b6123365760405160e560020a62461bcd028152600401808060200182810382526030815260200180613bb56030913960400191505060405180910390fd5b61123f8282613447565b60008060006123726040518080600080516020613af7833981519152815250600d019050604051809103902033611c5d565b6123b05760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613b17833981519152815290519081900360140190206123da9085611c5d565b6124185760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b6000808061242587611c15565b90506000805b8281101561261657600160a060020a038916600090815260106020526040812080548390811061245757fe5b60009182526020909120600690910201600381015490915060ff161561260d5760058101546004820154600160a060020a0390911695501561258c57600160a060020a0385166124f8576004810154604051600160a060020a038c169180156108fc02916000818181858888f193505050501580156124da573d6000803e3d6000fd5b5060048101546124f190879063ffffffff61353716565b955061258c565b84600160a060020a031663a9059cbb8b83600401546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561255f57600080fd5b505af1158015612573573d6000803e3d6000fd5b505050506040513d602081101561258957600080fd5b50505b600160a060020a038a1660009081526010602052604081208054849081106125b057fe5b60009182526020808320600692909202909101600301805460ff191693151593909317909255600160a060020a038c1681526010909152604081208054849081106125f757fe5b9060005260206000209060060201600401819055505b5060010161242b565b50979296509094509092505050565b604080517f52455455524e5f494e564553544d454e545f4c504152544e45520000000000008152905190819003601a0190206000906126649033611c5d565b6126a25760405160e560020a62461bcd02815260040180806020018281038252603e815260200180613d83603e913960400191505060405180910390fd5b600160a060020a0385166000908152601060205260409020805460019190869081106126ca57fe5b906000526020600020906006020160030160006101000a81548160ff021916908315150217905550826010600087600160a060020a0316600160a060020a03168152602001908152602001600020858154811061272357fe5b906000526020600020906006020160040181905550816010600087600160a060020a0316600160a060020a03168152602001908152602001600020858154811061276957fe5b906000526020600020906006020160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060019050949350505050565b601454604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820181905291516000938493928492600160a060020a03909216916370a0823191602480820192602092909190829003018186803b15801561281857600080fd5b505afa15801561282c573d6000803e3d6000fd5b505050506040513d602081101561284257600080fd5b505160155490915060009061287090612861908463ffffffff61359416565b6015549063ffffffff61359416565b9050600066764e2c6f0540009050600061289983611a2d6015548561310190919063ffffffff16565b90506128b781611a2d8a670de0b6b3a764000063ffffffff61310116565b965092945050505050915091565b60408051600080516020613af78339815191528152905190819003600d0190206000906128f29033611c5d565b6129305760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613cc18339815191528152905190819003601101902061295a9084611c5d565b6129985760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b601254604080517f1208333a000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a0386811660248301526044820186905291519190921691631208333a9160648083019260209291908290030181600087803b158015612a0d57600080fd5b505af1158015612a21573d6000803e3d6000fd5b505050506040513d6020811015612a3757600080fd5b5050604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b5060019392505050565b612a81613016565b600254600160a060020a03908116911614612ae6576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600160a060020a038116612b2e5760405160e560020a62461bcd028152600401808060200182810382526026815260200180613b376026913960400191505060405180910390fd5b600254604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360028054600160a060020a031916600160a060020a0392909216919091179055565b60408051600080516020613af78339815191528152905190819003600d019020600090612bb79033611c5d565b612bf55760405160e560020a62461bcd028152600401808060200182810382526032815260200180613b5d6032913960400191505060405180910390fd5b60408051600080516020613b1783398151915281529051908190036014019020612c1f9085611c5d565b612c5d5760405160e560020a62461bcd028152600401808060200182810382526033815260200180613ac46033913960400191505060405180910390fd5b6000612c796064611a2d600a548761310190919063ffffffff16565b90506000612c976064611a2d600b548861310190919063ffffffff16565b600160a060020a03878116600090815260116020526040812054929350911615612ce257612cdb82612ccf888663ffffffff61359416565b9063ffffffff61359416565b9050612cf5565b612cf2868463ffffffff61359416565b90505b600160a060020a039687166000908152601060209081526040808320815160c081018352948552428584019081526005805493870193845260608701868152608088018781529b8e1660a08901908152845460018082018755958952969097209751600690960290970194855590518483015591516002840155935160038301805460ff191691151591909117905596516004820155905195018054600160a060020a031916959097169490941790955550909392505050565b60008060606007546008546009808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050509050925092509250909192565b60408051600080516020613b178339815191528152905190819003601401902081565b600654600a54600b54600c54600d54600e54600f5490919293949596565b6000610d9883600160a060020a0384166135d6565b6000610d9883600160a060020a038416846135ee565b60125460048054604080517f1bbd0b370000000000000000000000000000000000000000000000000000000081523093810193909352600160a060020a0386811660248501526101009092048216604484015260648301859052516000939190911691631bbd0b3791608480830192602092919082900301818787803b158015612f5857600080fd5b505af1158015612f6c573d6000803e3d6000fd5b505050506040513d6020811015612f8257600080fd5b5060009050612f908361198a565b90503031811115612fd55760405160e560020a62461bcd028152600401808060200182810382526030815260200180613d2f6030913960400191505060405180910390fd5b604051600160a060020a0385169082156108fc029083906000818181858888f1935050505015801561300b573d6000803e3d6000fd5b506001949350505050565b3390565b6000828152602081905260409020613038908263ffffffff612eb916565b1561123f5760008281526001602081815260408320805492830181558352909120018054600160a060020a031916600160a060020a03831617905561307b613016565b600160a060020a031681600160a060020a0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610d9883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613663565b60008261311057506000610d9b565b8282028284828161311d57fe5b0414610d985760405160e560020a62461bcd028152600401808060200182810382526021815260200180613d0e6021913960400191505060405180910390fd5b6000610d988383613708565b60045460009060ff166131b05760405160e560020a62461bcd028152600401808060200182810382526024815260200180613d5f6024913960400191505060405180910390fd5b604080517f47454e4552414c5f504152544e45525f524f4c45000000000000000000000000815290519081900360140190206000906131ef9082611c3f565b9050600061320d6064611a2d600a548761310190919063ffffffff16565b9050600061322b6064611a2d600b548861310190919063ffffffff16565b600160a060020a038781166000908152601160205260408120549293509116156132e957600160a060020a0380881660009081526011602052604080822054905192169184156108fc0291859190818181858888f19350505050158015613296573d6000803e3d6000fd5b50604051600160a060020a0385169084156108fc029085906000818181858888f193505050501580156132cd573d6000803e3d6000fd5b506132e282612ccf888663ffffffff61359416565b9050613333565b604051600160a060020a0385169084156108fc029085906000818181858888f1935050505015801561331f573d6000803e3d6000fd5b50613330868463ffffffff61359416565b90505b600160a060020a038781166000908152601060209081526040808320815160c0810183528681524281850190815260058054948301948552606083018781526080840188815260a08501898152865460018082018955978b52989099209451600690980290940196875591519386019390935592516002850155915160038401805460ff191691151591909117905590516004830155915191018054600160a060020a03191691909216179055600e546133ed9087613537565b600e55604080518781529051600160a060020a038916917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25060019695505050505050565b6000610d9b8261376f565b6000828152602081905260409020613465908263ffffffff61377316565b1561123f5760005b6000838152600160205260409020548110156134ea5760008381526001602052604090208054600160a060020a0384169190839081106134a957fe5b600091825260209091200154600160a060020a031614156134e25760008381526001602052604090206134dd908290613788565b6134ea565b60010161346d565b506134f3613016565b600160a060020a031681600160a060020a0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600082820183811015610d98576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610d9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613832565b60009081526002919091016020526040902054151590565b60006135fa84846135d6565b61365b57508254600180820185556000858152602080822090930185905581860180548084018255908252838220018054600160a060020a031916600160a060020a0386161790558554858252600287019093526040902091909155610fba565b506000610fba565b600081836136f25760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136b757818101518382015260200161369f565b50505050905090810190601f1680156136e45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816136fe57fe5b0495945050505050565b8154600090821061374d5760405160e560020a62461bcd028152600401808060200182810382526022815260200180613a736022913960400191505060405180910390fd5b82600001828154811061375c57fe5b9060005260206000200154905092915050565b5490565b6000610d9883600160a060020a03841661388f565b815b815460001901811015613801578181600101815481106137a657fe5b9060005260206000200160009054906101000a9004600160a060020a03168282815481106137d057fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560010161378a565b508080548061380c57fe5b60008281526020902081016000199081018054600160a060020a03191690550190555050565b600081848411156138875760405160e560020a62461bcd0281526020600482018181528351602484015283519092839260449091019190850190808383600083156136b757818101518382015260200161369f565b505050900390565b600081815260028301602052604081205480156139d057835460001980830191908101906000908790839081106138c257fe5b90600052602060002001549050808760000184815481106138df57fe5b60009182526020909120015586548790806138f657fe5b60019003818190600052602060002001600090559055600087600101838154811061391d57fe5b600091825260209091200154600189018054600160a060020a03909216925082918690811061394857fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055508760010180548061398357fe5b6000828152602080822083016000199081018054600160a060020a03191690559092019092559281526002890190925250604080822060019485019055868252812055509150610d9b9050565b6000915050610d9b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1b5782800160ff19823516178555613a48565b82800160010185558215613a48579182015b82811115613a48578235825591602001919060010190613a2d565b50613a54929150613a58565b5090565b61130591905b80821115613a545760008155600101613a5e56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74496e766573746d656e74506f6f6c3a207468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e504f4f4c5f5245474953545259000000000000000000000000000000000000004c494d495445445f504152544e45525f524f4c450000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373526f6c65733a2063616c6c657220646f6573206e6f7420686176652074686520706f6f6c20726567797374727920726f6c65546f6b656e73616c65506f6f6c3a2077652063616e27742073656c6c203020746f6b656e732e416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b655468652073656e64657220646f6573206e6f742068617665207065726d697373696f6e546f6b656e73616c65506f6f6c3a2077652063616e27742073656c6c206d6f7265207468616e203330252066726f6d206f6e65207472616e73616374696f6e2e20506c6561736520646563726561736520696e766573746d656e7420616d6f756e742e496e766573746d656e74506f6f6c3a2074686520706f6f6c20697320616c7265616479206465616374697661746564546f6b656e73616c65506f6f6c3a206d696e696d616c20707572636861736520302e31424e422e535441525455505f5445414d5f524f4c45000000000000000000000000000000496e766573746d656e74506f6f6c3a2074686520706f6f6c20697320616c726561647920616374697661746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e766573746d656e74506f6f6c3a20636f6e74726163742062616c616e636520697320696e73756666696369656e74496e766573746d656e74506f6f6c3a20706f6f6c206465706f73697420626c6f636b6564526f6c65733a2063616c6c657220646f6573206e6f742068617665207468652072657475726e20696e7665736d656e74206c706172746e657220726f6c65a2646970667358221220c616a436f1adf592ef10499723664486e5ab901b980039dc6349378ef4c9b0b264736f6c63430006080033416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657253555045525f41444d494e5f524f4c45000000000000000000000000000000000000000000000000000000001c050ea3673fad2ac2f8559c81f2cd23a9ec195e00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da22293aa75e005f7a6411a85f5ae053ebafd3a90000000000000000000000003917ef75c96e35d9969fcd301f474920c2d9ca0c00000000000000000000000068af405930877980147caa9fa942ddd087ef513f00000000000000000000000051b486692321af984bc75d105c54419e35d963b90000000000000000000000004eac987ccbb935348570fd9fe963fb4d17c6571a000000000000000000000000aba81bdbdbf45edca8498d90ab1deb9d85186930000000000000000000000000a5ca66874ca008d7bcd3f3f817a87f98bea75fd20000000000000000000000000000000000000000000001e1d1c72d5b97e000000000000000000000000000000000000000000000000000000000000000000096424e422f5542414e4b20746f6b656e2053414c4520706f6f6c2e20496e7665737420746f2066757475726520646576656c6f706d656e74206f6620596f7542616e6b2e2057502068747470733a2f2f646f63732e676f6f676c652e636f6d2f646f63756d656e742f642f31767235496c6d5853487a596e556f41506274666f4979445f2d73614d4132745248565978486e6a76477a4500000000000000000000

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

0000000000000000000000001c050ea3673fad2ac2f8559c81f2cd23a9ec195e00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da22293aa75e005f7a6411a85f5ae053ebafd3a90000000000000000000000003917ef75c96e35d9969fcd301f474920c2d9ca0c00000000000000000000000068af405930877980147caa9fa942ddd087ef513f00000000000000000000000051b486692321af984bc75d105c54419e35d963b90000000000000000000000004eac987ccbb935348570fd9fe963fb4d17c6571a000000000000000000000000aba81bdbdbf45edca8498d90ab1deb9d85186930000000000000000000000000a5ca66874ca008d7bcd3f3f817a87f98bea75fd20000000000000000000000000000000000000000000001e1d1c72d5b97e000000000000000000000000000000000000000000000000000000000000000000096424e422f5542414e4b20746f6b656e2053414c4520706f6f6c2e20496e7665737420746f2066757475726520646576656c6f706d656e74206f6620596f7542616e6b2e2057502068747470733a2f2f646f63732e676f6f676c652e636f6d2f646f63756d656e742f642f31767235496c6d5853487a596e556f41506274666f4979445f2d73614d4132745248565978486e6a76477a4500000000000000000000

-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 0000000000000000000000001c050ea3673fad2ac2f8559c81f2cd23a9ec195e
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000da22293aa75e005f7a6411a85f5ae053ebafd3a9
Arg [8] : 0000000000000000000000003917ef75c96e35d9969fcd301f474920c2d9ca0c
Arg [9] : 00000000000000000000000068af405930877980147caa9fa942ddd087ef513f
Arg [10] : 00000000000000000000000051b486692321af984bc75d105c54419e35d963b9
Arg [11] : 0000000000000000000000004eac987ccbb935348570fd9fe963fb4d17c6571a
Arg [12] : 000000000000000000000000aba81bdbdbf45edca8498d90ab1deb9d85186930
Arg [13] : 000000000000000000000000a5ca66874ca008d7bcd3f3f817a87f98bea75fd2
Arg [14] : 0000000000000000000000000000000000000000000001e1d1c72d5b97e00000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [16] : 424e422f5542414e4b20746f6b656e2053414c4520706f6f6c2e20496e766573
Arg [17] : 7420746f2066757475726520646576656c6f706d656e74206f6620596f754261
Arg [18] : 6e6b2e2057502068747470733a2f2f646f63732e676f6f676c652e636f6d2f64
Arg [19] : 6f63756d656e742f642f31767235496c6d5853487a596e556f41506274666f49
Arg [20] : 79445f2d73614d4132745248565978486e6a76477a4500000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.