user: Translate the below assembly code into C programming language:

```asm
<consistency_test>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x438,%rsp
  mov    %edi,%r12d
  mov    %rsi,%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x428(%rsp)
  xor    %eax,%eax
  lea    0x20(%rsp),%r15
  mov    %r15,%rsi
  call   <clock_gettime@plt>
  mov    0x20(%rsp),%rbx
  mov    %rbx,(%rsp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,0x1c(%rsp)
  lea    0x1c(%rsp),%rdi
  call   <ctime@plt>
  mov    %rax,0x8(%rsp)
  mov    %rbx,%rax
  jmp    L156
L73:
  mov    %r15,%rbp
  mov    $0x0,%ebx
  jmp    L2
L129:
  mov    %r13d,%ebp
L64:
  mov    0x8(%rsp),%rdi
  call   <puts@plt>
  mov    $0x0,%ebx
  lea    0x28(%rsp),%r15
  lea    D52(%rip),%r14
  lea    0x1(%rbp),%r13d
  jmp    L120
L108:
  lea    D12(%rip),%rdi
  call   <puts@plt>
  jmp    L6
L98:
  add    $0x1,%rbx
  cmp    $0x40,%rbx
  je     L57
L120:
  mov    %ebx,%r12d
  cmp    %ebx,%ebp
  je     L108
L6:
  mov    %rbx,%rax
  shl    $0x4,%rax
  mov    0x20(%rsp,%rax,1),%rsi
  mov    (%r15,%rax,1),%rdx
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    %r12d,%r13d
  jne    L98
  lea    D12(%rip),%rdi
  call   <puts@plt>
  jmp    L98
L57:
  movslq %ebp,%rax
  shl    $0x4,%rax
  imul   $0x3b9aca00,0x20(%rsp,%rax,1),%rsi
  add    0x28(%rsp,%rax,1),%rsi
  movslq %r13d,%rax
  shl    $0x4,%rax
  sub    0x28(%rsp,%rax,1),%rsi
  imul   $0x3b9aca00,0x20(%rsp,%rax,1),%rax
  sub    %rax,%rsi
  lea    D33(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%edi
  call   <fflush@plt>
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,0x1c(%rsp)
  lea    0x1c(%rsp),%rdi
  call   <ctime@plt>
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D20(%rip),%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
L27:
  mov    0x428(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L44
  add    $0x438,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L159:
  lea    D49(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L27
L173:
  cmp    $0x3f,%ebx
  je     L64
  mov    %ebp,%r13d
L29:
  mov    %ebx,%ebp
L14:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rax
  shl    $0x4,%rax
  mov    0x20(%rsp,%rax,1),%rdx
  mov    0x28(%rsp,%rax,1),%rcx
  movslq %ebp,%rax
  shl    $0x4,%rax
  mov    0x20(%rsp,%rax,1),%rdi
  mov    0x28(%rsp,%rax,1),%rsi
  call   <in_order@plt>
  test   %eax,%eax
  je     L173
  cmp    $0x3f,%ebx
  jne    L29
  test   %r13d,%r13d
  jns    L129
  mov    0x20(%rsp),%rax
L156:
  cmp    $0xffffffffffffffff,%r14
  je     L73
  sub    (%rsp),%rax
  cmp    %r14,%rax
  jae    L159
  mov    %r15,%rbp
  mov    $0x0,%ebx
L2:
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <clock_gettime@plt>
  add    $0x1,%ebx
  add    $0x10,%rbp
  cmp    $0x3f,%ebx
  jle    L2
  mov    $0xffffffff,%r13d
  mov    $0x0,%ebp
  jmp    L14
L44:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D52
type: string
name: disassemble_data
arguments: data_tag: D12
type: string
name: disassemble_data
arguments: data_tag: D33
type: string
name: disassemble_data
arguments: data_tag: D20
type: string
name: disassemble_data
arguments: data_tag: D49
type: string

tool: D52: %lu:%lu


tool: D12: --------------------

tool: D33: Delta: %llu ns


tool: D20: [FAILED]

tool: D49: [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;
}
```