user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<consistency_test>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x450,%rsp
  mov    %edi,-0x444(%rbp)
  mov    %rsi,-0x450(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x410(%rbp),%rdx
  mov    -0x444(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <clock_gettime@plt>
  mov    -0x410(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  mov    -0x428(%rbp),%rax
  mov    %rax,-0x430(%rbp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,-0x43c(%rbp)
  lea    -0x43c(%rbp),%rax
  mov    %rax,%rdi
  call   <ctime@plt>
  mov    %rax,-0x420(%rbp)
  jmp    L95
L120:
  movl   $0xffffffff,-0x434(%rbp)
  movl   $0x0,-0x438(%rbp)
  jmp    L4
L136:
  lea    -0x410(%rbp),%rdx
  mov    -0x438(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rax,%rdx
  mov    -0x444(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <clock_gettime@plt>
  addl   $0x1,-0x438(%rbp)
L4:
  cmpl   $0x3f,-0x438(%rbp)
  jle    L136
  movl   $0x0,-0x438(%rbp)
  jmp    L145
L83:
  mov    -0x438(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x410,%rax
  mov    0x8(%rax),%rdx
  mov    (%rax),%rax
  mov    -0x438(%rbp),%ecx
  movslq %ecx,%rcx
  shl    $0x4,%rcx
  add    %rbp,%rcx
  sub    $0x410,%rcx
  mov    (%rcx),%rdi
  mov    0x8(%rcx),%rsi
  mov    %rdx,%rcx
  mov    %rax,%rdx
  call   <in_order@plt>
  test   %eax,%eax
  jne    L61
  mov    -0x438(%rbp),%eax
  mov    %eax,-0x434(%rbp)
L61:
  addl   $0x1,-0x438(%rbp)
L145:
  cmpl   $0x3e,-0x438(%rbp)
  jle    L83
  cmpl   $0x0,-0x434(%rbp)
  js     L99
  mov    -0x420(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x438(%rbp)
  jmp    L116
L66:
  mov    -0x438(%rbp),%eax
  cmp    -0x434(%rbp),%eax
  jne    L25
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L25:
  mov    -0x438(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x408,%rax
  mov    (%rax),%rdx
  mov    -0x438(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x410,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x434(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x438(%rbp)
  jne    L129
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L129:
  addl   $0x1,-0x438(%rbp)
L116:
  cmpl   $0x3f,-0x438(%rbp)
  jle    L66
  mov    -0x434(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x410,%rax
  mov    (%rax),%rax
  imul   $0x3b9aca00,%rax,%rax
  mov    %rax,-0x418(%rbp)
  mov    -0x434(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x408,%rax
  mov    (%rax),%rax
  add    %rax,-0x418(%rbp)
  mov    -0x434(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x410,%rax
  mov    (%rax),%rax
  imul   $0x3b9aca00,%rax,%rax
  sub    %rax,-0x418(%rbp)
  mov    -0x434(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x4,%rax
  add    %rbp,%rax
  sub    $0x408,%rax
  mov    (%rax),%rax
  sub    %rax,-0x418(%rbp)
  mov    -0x418(%rbp),%rax
  mov    %rax,%rsi
  lea    D41(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%edi
  call   <fflush@plt>
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,-0x43c(%rbp)
  lea    -0x43c(%rbp),%rax
  mov    %rax,%rdi
  call   <ctime@plt>
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
  jmp    L43
L99:
  mov    -0x410(%rbp),%rax
  mov    %rax,-0x430(%rbp)
L95:
  cmpq   $0xffffffffffffffff,-0x450(%rbp)
  je     L120
  mov    -0x430(%rbp),%rax
  sub    -0x428(%rbp),%rax
  cmp    %rax,-0x450(%rbp)
  ja     L120
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
L43:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L88
  call   <__stack_chk_fail@plt>
L88:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D36
type_infered: string
name: disassemble_data
arguments: data_tag: D50
type_infered: string
name: disassemble_data
arguments: data_tag: D41
type_infered: string
name: disassemble_data
arguments: data_tag: D54
type_infered: string
name: disassemble_data
arguments: data_tag: D12
type_infered: string

tool: D36: --------------------

tool: D50: %lu:%lu


tool: D41: Delta: %llu ns


tool: D54: [FAILED]

tool: D12: [OK]

assistant: ```c
int consistency_test(int clock_type, unsigned long seconds) {
  struct timespec list[64];
  int i, inconsistent;
  long now, then;
  time_t t;
  char *start_str;
  clock_gettime(clock_type, &list[0]);
  now = then = list[0].tv_sec;
  t = time(0);
  start_str = ctime(&t);
  while (seconds == -1 || now - then < seconds) {
    inconsistent = -1;
    for (i = 0; i < 64; i++)
      clock_gettime(clock_type, &list[i]);
    for (i = 0; i < 64 - 1; i++)
      if (!in_order(list[i], list[i + 1]))
        inconsistent = i;
    if (inconsistent >= 0) {
      unsigned long long delta;
      printf("\%s\n", start_str);
      for (i = 0; i < 64; i++) {
        if (i == inconsistent)
          printf("--------------------\n");
        printf("%lu:%lu\n", list[i].tv_sec, list[i].tv_nsec);
        if (i == inconsistent + 1)
          printf("--------------------\n");
      }
      delta = list[inconsistent].tv_sec * 1000000000ULL;
      delta += list[inconsistent].tv_nsec;
      delta -= list[inconsistent + 1].tv_sec * 1000000000ULL;
      delta -= list[inconsistent + 1].tv_nsec;
      printf("Delta: %llu ns\n", delta);
      fflush(0);
      t = time(0);
      printf("%s\n", ctime(&t));
      printf("[FAILED]\n");
      return -1;
    }
    now = list[0].tv_sec;
  }
  printf("[OK]\n");
  return 0;
}
```