user: 下面的汇编指令对应的C源代码是什么:

```asm
<test_rand>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  lea    D45(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0xa,%esi
  lea    D96(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %rsp,%rax
  lea    0x28(%rsp),%rdx
L14:
  movl   $0x0,(%rax)
  add    $0x4,%rax
  cmp    %rdx,%rax
  jne    L14
  mov    $0x989680,%ebx
L21:
  mov    $0xa,%esi
  mov    $0x0,%edi
  call   <get_rand_int@plt>
  cltq
  addl   $0x1,(%rsp,%rax,4)
  sub    $0x1,%ebx
  jne    L21
  mov    $0x0,%ebx
  mov    %rsp,%r12
  lea    D37(%rip),%rbp
L15:
  pxor   %xmm0,%xmm0
  cvtsi2sdl (%r12,%rbx,4),%xmm0
  divsd  D106(%rip),%xmm0
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x1,%rbx
  cmp    $0xa,%rbx
  jne    L15
  movsd  D46(%rip),%xmm0
  lea    D65(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  D74(%rip),%xmm0
  lea    D14(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x989680,%ebx
  mov    $0x0,%ebp
L41:
  mov    D74(%rip),%rax
  movq   %rax,%xmm0
  call   <percentage_chance@plt>
  cmp    $0x1,%rax
  sbb    $0xffffffff,%ebp
  sub    $0x1,%ebx
  jne    L41
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  divsd  D106(%rip),%xmm0
  lea    D19(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  D74(%rip),%xmm0
  lea    D65(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L49
  mov    $0x0,%eax
  add    $0x30,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L49:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D45
type_guessed: string
name: parse_data
arguments: tag: D96
type_guessed: string
name: parse_data
arguments: tag: D37
type_guessed: string
name: parse_data
arguments: tag: D106
type_guessed: byte[8]
name: parse_data
arguments: tag: D46
type_guessed: byte[8]
name: parse_data
arguments: tag: D65
type_guessed: string
name: parse_data
arguments: tag: D74
type_guessed: f64
name: parse_data
arguments: tag: D14
type_guessed: string
name: parse_data
arguments: tag: D19
type_guessed: string

tool: D45: 
### RANDOM UTILITY UNIT TEST ###

tool: D96: 
Testing get_rand_int() with %d bins


tool: D37: Bin %d: %lf


tool: {"D106": [0x00,0x00,0x00,0x00,0xd0,0x12,0x63,0x41]}

tool: {"D46": [0x9a,0x99,0x99,0x99,0x99,0x99,0xb9,0x3f]}

tool: D65: Expected fraction: %lf


tool: D74: 0.5

tool: D14: 
Testing percentage_chance() with rate %lf


tool: D19: Percentage chance fraction: %lf


assistant: ```c
int test_rand() {
  int i;
  int num;
  int counter;
  double frac;
  int results[(10)];
  printf("\n### RANDOM UTILITY UNIT TEST ###\n");
  srand(time(NULL));
  printf("\nTesting get_rand_int() with %d bins\n", (10));
  for (i = 0; i < (10); i++)
    results[i] = 0;
  for (i = 0; i < (10000000); i++) {
    num = get_rand_int(0, (10));
    results[num]++;
  }
  for (i = 0; i < (10); i++) {
    frac = (double)results[i] / (10000000);
    printf("Bin %d: %lf\n", i, frac);
  }
  printf("Expected fraction: %lf\n", 1.0 / (10));
  printf("\nTesting percentage_chance() with rate %lf\n", (0.5));
  counter = 0;
  for (i = 0; i < (10000000); i++) {
    if (percentage_chance((0.5)))
      counter++;
  }
  printf("Percentage chance fraction: %lf\n", (double)counter / (10000000));
  printf("Expected fraction: %lf\n", (double)(0.5));
  return 0;
}
```