    function participate_in_arbits_presale_crypto() public payable presale_open use_count {
        (                                                                   
            address p1,                                                     
            uint256 p2,                                                     
            uint256 p3,                                                     
            uint256 p4,                                                     
            bool p5,                                                        
            uint8 p6                                                        
        ) = db.get_participant(msg.sender);                                 
        participant memory subject = participant(p1, p2, p3, p4, p5, p6);   
        uint256 subject_tokens_to_add = msg.value.mul(db.get_presale_arbits_per_ether()).div(1 ether);                                     
        if (subject.arbits_kyc_whitelist) {                                                                                                
            subject_tokens_to_add = subject_tokens_to_add.mul(db.get_pre_kyc_bonus_numerator()).div(db.get_pre_kyc_bonus_denominator());   
        }                                                                                                                                  
        require(db.get_presale_arbits_total() >= db.get_presale_arbits_sold().add(subject_tokens_to_add));   
        require(db.get_arbits_max_contribution() >= subject_tokens_to_add);  
        require(db.get_arbits_min_contribution() <= subject_tokens_to_add);  
        db.add_presale_arbits_sold(subject_tokens_to_add);  
        db.add_arbits(msg.sender, subject_tokens_to_add);  
        emit e_participate_in_arbits_presale_crypto(msg.sender, msg.value);   
    }