user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  movl   $0x0,-0x10(%rbp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0x0,%eax
  call   <print_version@plt>
  movl   $0x0,-0xc(%rbp)
  jmp    L93
L198:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D263(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark1@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L93:
  cmpl   $0x2,-0xc(%rbp)
  jle    L198
  movl   $0x0,-0xc(%rbp)
  jmp    L114
L59:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L114:
  cmpl   $0x2,-0xc(%rbp)
  jle    L59
  movl   $0x0,-0xc(%rbp)
  jmp    L7
L112:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D237(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark3@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L7:
  cmpl   $0x2,-0xc(%rbp)
  jle    L112
  movl   $0x0,-0xc(%rbp)
  jmp    L102
L181:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D298(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark4@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L102:
  cmpl   $0x2,-0xc(%rbp)
  jle    L181
  movl   $0x0,-0xc(%rbp)
  jmp    L186
L72:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark5@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L186:
  cmpl   $0x2,-0xc(%rbp)
  jle    L72
  movl   $0x0,-0xc(%rbp)
  jmp    L22
L118:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark6@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L22:
  cmpl   $0x2,-0xc(%rbp)
  jle    L118
  movl   $0x0,-0xc(%rbp)
  jmp    L86
L58:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D270(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark7@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L86:
  cmpl   $0x2,-0xc(%rbp)
  jle    L58
  movl   $0x0,-0xc(%rbp)
  jmp    L48
L136:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D211(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark8@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L48:
  cmpl   $0x2,-0xc(%rbp)
  jle    L136
  movl   $0x0,-0xc(%rbp)
  jmp    L66
L120:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D172(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark9@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L66:
  cmpl   $0x2,-0xc(%rbp)
  jle    L120
  movl   $0x0,-0xc(%rbp)
  jmp    L67
L124:
  addl   $0x1,-0x10(%rbp)
  lea    D235(%rip),%rax
  mov    %rax,%rsi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <benchmark10@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <print_results@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D86(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0xc(%rbp)
L67:
  cmpl   $0x2,-0xc(%rbp)
  jle    L124
  mov    -0x10(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <print_summary@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D235
type_guessed: string
name: read_data
arguments: label: D263
type_guessed: string
name: read_data
arguments: label: D86
type_guessed: string
name: read_data
arguments: label: D224
type_guessed: string
name: read_data
arguments: label: D237
type_guessed: string
name: read_data
arguments: label: D298
type_guessed: string
name: read_data
arguments: label: D15
type_guessed: string
name: read_data
arguments: label: D93
type_guessed: string
name: read_data
arguments: label: D270
type_guessed: string
name: read_data
arguments: label: D211
type_guessed: string
name: read_data
arguments: label: D172
type_guessed: string
name: read_data
arguments: label: D21
type_guessed: string

tool: D235: random/base

tool: D263: # c::native::%s::next


tool: D86: ok %d benchmark finished


tool: D224: # c::native::%s::normalized


tool: D237: # c::native::%s::min


tool: D298: # c::native::%s::max


tool: D15: # c::native::%s::normalized_min


tool: D93: # c::native::%s::normalized_max


tool: D270: # c::native::%s::state_size


tool: D211: # c::native::%s::copy


tool: D172: # c::native::%s::copy_state


tool: D21: # c::native::%s::set


assistant: ```c
int main(void) {
  double elapsed;
  int count;
  int i;
  count = 0;
  srand(time(NULL));
  print_version();
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::next\n", "random/base");
    elapsed = benchmark1();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::normalized\n", "random/base");
    elapsed = benchmark2();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::min\n", "random/base");
    elapsed = benchmark3();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::max\n", "random/base");
    elapsed = benchmark4();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::normalized_min\n", "random/base");
    elapsed = benchmark5();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::normalized_max\n", "random/base");
    elapsed = benchmark6();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::state_size\n", "random/base");
    elapsed = benchmark7();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::copy\n", "random/base");
    elapsed = benchmark8();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::copy_state\n", "random/base");
    elapsed = benchmark9();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  for (i = 0; i < 3; i++) {
    count += 1;
    printf("# c::native::%s::set\n", "random/base");
    elapsed = benchmark10();
    print_results(elapsed);
    printf("ok %d benchmark finished\n", count);
  }
  print_summary(count, count);
}
```