function() payable {
        
        require(isPayableEnabled);

        
        if(msg.value <= 0) { revert(); }

        
        uint supportedAmount = msg.value.mul(rate.ETH_USD_rate()).div(10**18);
        
        if(supportedAmount < minimumSupport) { revert(); }

        
        uint etherRatioForOwner = rbInformationStore.etherRatioForOwner();
        uint etherRatioForSponsee = uint(100).sub(etherRatioForOwner).sub(etherRatioForInvestor);

        
        
        uint etherForOwner = msg.value.mul(etherRatioForOwner).div(100);
        uint etherForInvestor = msg.value.mul(etherRatioForInvestor).div(100);
        uint etherForSponsee = msg.value.mul(etherRatioForSponsee).div(100);

        
        address profitContainerAddress = rbInformationStore.profitContainerAddress();
        address companyWalletAddress = rbInformationStore.companyWalletAddress();

        
        if(!profitContainerAddress.send(etherForInvestor)) { revert(); }
        if(!companyWalletAddress.send(etherForOwner)) { revert(); }
        if(!sponseeAddress.send(etherForSponsee)) { revert(); }

        
        
        
        uint tokenAmount = msg.value.mul(rate.ETH_USD_rate());

        
        balances[msg.sender] = balances[msg.sender].add(tokenAmount);

        
        totalSupply = totalSupply.add(tokenAmount);

        
        if(totalSupply > cap) { revert(); }

        
        LogExchange(msg.sender, this, tokenAmount);

        
        LogReceivedEther(msg.sender, this, msg.value, name);

        
        Transfer(address(0x0), msg.sender, tokenAmount);
    }