function() public payable {
        if (msg.value == 0) {
            fetchDividends();
            return;
        }

        require(msg.value >= minInvest, "value can't be < than 0.005");

        if (investorsStorage[msg.sender].idx > 0) {
            investorsStorage[msg.sender].value += msg.value;
            
            if (!investorsStorage[msg.sender].invested10Eth && msg.value >= 10 ether) {
                investorsStorage[msg.sender].invested10Eth = true;
            }
        } else {
            address ref = msg.data.toAddr();
            uint idx = investorsStorage[msg.sender].idx;
            uint value = msg.value;
            idx = users.length++;
            if (ref.notZero() && investorsStorage[ref].idx > 0) {
                setUserBonus(ref, msg.value);
                value += refPercent.getValueByPercent(value);
            }
            emit newInvestor(msg.sender, now, msg.value);
            investorsStorage[msg.sender] = User({
                idx : idx,
                value : value,
                bonus : 0,
                invested10Eth: msg.value >= 10 ether,
                payTime : now
            });
        }

        sendValueToOwner(msg.value);
        sendValueToAdv(msg.value);

        emit logsDataPayable(msg.value, now, msg.sender);
    }