pub fn mul_with_carry(a: u64, b: u64, acc: &mut u128) -> u64