user: What is the c source code of the assembly code below:

```asm
<ipmi_test>:
  endbr64
  push   %r15
  mov    $0x1,%r15d
  push   %r14
  push   %r13
  mov    %edi,%r13d
  lea    D124(%rip),%rdi
  push   %r12
  push   %rbp
  lea    D28(%rip),%rbp
  push   %rbx
  sub    $0x138,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x128(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%r12
  call   <puts@plt>
  nopl   0x0(%rax)
L120:
  mov    $0x2,%edx
  mov    %r15d,%esi
  mov    %r13d,%edi
  call   <lseek@plt>
  mov    $0x110,%edx
  mov    %r12,%rsi
  mov    %r13d,%edi
  call   <read@plt>
  mov    %r15d,%esi
  lea    D100(%rip),%rdi
  mov    %eax,0xc(%rsp)
  mov    %eax,%ebx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%eax
  test   %ebx,%ebx
  jle    L122
  sub    $0x1,%eax
  mov    %r12,%r14
  lea    0x11(%rsp,%rax,1),%rbx
  nopl   0x0(%rax,%rax,1)
L128:
  movzbl (%r14),%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  add    $0x1,%r14
  call   <printf@plt>
  cmp    %rbx,%r14
  jne    L128
L122:
  mov    0xc(%rsp),%esi
  lea    D127(%rip),%rdi
  xor    %eax,%eax
  add    $0x1,%r15d
  call   <printf@plt>
  cmp    $0x14,%r15d
  jne    L120
  mov    $0x1,%r15d
  lea    D28(%rip),%rbp
  nopl   0x0(%rax)
L44:
  mov    $0x2,%edx
  mov    %r15d,%esi
  mov    %r13d,%edi
  call   <lseek@plt>
  mov    $0x110,%edx
  mov    %r12,%rsi
  mov    %r13d,%edi
  call   <read@plt>
  mov    %r15d,%esi
  lea    D98(%rip),%rdi
  mov    %eax,0xc(%rsp)
  mov    %eax,%ebx
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%eax
  test   %ebx,%ebx
  jle    L111
  sub    $0x1,%eax
  mov    %r12,%r14
  lea    0x11(%rsp,%rax,1),%rbx
L16:
  movzbl (%r14),%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  add    $0x1,%r14
  call   <printf@plt>
  cmp    %rbx,%r14
  jne    L16
L111:
  mov    0xc(%rsp),%esi
  lea    D127(%rip),%rdi
  xor    %eax,%eax
  add    $0x1,%r15d
  call   <printf@plt>
  cmp    $0x14,%r15d
  jne    L44
  xor    %esi,%esi
  mov    $0x2,%edx
  mov    %r13d,%edi
  call   <lseek@plt>
  mov    %r13d,%edi
  mov    $0x110,%edx
  mov    %r12,%rsi
  call   <read@plt>
  lea    D19(%rip),%rdi
  mov    %eax,%r14d
  xor    %eax,%eax
  call   <printf@plt>
  test   %r14d,%r14d
  jle    L102
  lea    -0x1(%r14),%eax
  mov    %r12,%r15
  lea    D28(%rip),%rbx
  lea    0x11(%rsp,%rax,1),%rbp
  nopl   0x0(%rax,%rax,1)
L19:
  movzbl (%r15),%esi
  mov    %rbx,%rdi
  xor    %eax,%eax
  add    $0x1,%r15
  call   <printf@plt>
  cmp    %rbp,%r15
  jne    L19
L102:
  mov    %r14d,%esi
  lea    D127(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %esi,%esi
  mov    $0x2,%edx
  mov    %r13d,%edi
  call   <lseek@plt>
  mov    %r13d,%edi
  mov    $0x110,%edx
  mov    %r12,%rsi
  call   <read@plt>
  lea    D154(%rip),%rdi
  mov    %eax,%r14d
  xor    %eax,%eax
  call   <printf@plt>
  test   %r14d,%r14d
  jle    L110
  lea    -0x1(%r14),%eax
  mov    %r12,%r15
  lea    D28(%rip),%rbx
  lea    0x11(%rsp,%rax,1),%rbp
L67:
  movzbl (%r15),%esi
  mov    %rbx,%rdi
  xor    %eax,%eax
  add    $0x1,%r15
  call   <printf@plt>
  cmp    %rbp,%r15
  jne    L67
L110:
  mov    %r14d,%esi
  lea    D127(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %esi,%esi
  mov    $0x2,%edx
  mov    %r13d,%edi
  call   <lseek@plt>
  mov    %r13d,%edi
  mov    $0x110,%edx
  mov    %r12,%rsi
  call   <read@plt>
  lea    D34(%rip),%rdi
  mov    %eax,%ebp
  xor    %eax,%eax
  call   <printf@plt>
  test   %ebp,%ebp
  jle    L49
  lea    -0x1(%rbp),%eax
  lea    D28(%rip),%rbx
  lea    0x11(%rsp,%rax,1),%r13
  nopw   0x0(%rax,%rax,1)
L42:
  movzbl (%r12),%esi
  mov    %rbx,%rdi
  xor    %eax,%eax
  add    $0x1,%r12
  call   <printf@plt>
  cmp    %r12,%r13
  jne    L42
L49:
  xor    %eax,%eax
  mov    %ebp,%esi
  lea    D127(%rip),%rdi
  call   <printf@plt>
  mov    0x128(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  add    $0x138,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L28:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D124
type_infered: string
name: disassemble_data
arguments: label: D28
type_infered: string
name: disassemble_data
arguments: label: D100
type_infered: string
name: disassemble_data
arguments: label: D127
type_infered: string
name: disassemble_data
arguments: label: D98
type_infered: string
name: disassemble_data
arguments: label: D19
type_infered: string
name: disassemble_data
arguments: label: D154
type_infered: string
name: disassemble_data
arguments: label: D34
type_infered: string

tool: D124: ==IPMI RAW TEST==

tool: D28: %x 

tool: D100: IPMI Sensor Reading ID %d: 

tool: D127: Error Code: %d


tool: D98: IPMI Get SDR Record ID %d: 

tool: D19: IPMI Dell Reset Energy: 

tool: D154: IPMI Dell Cumulative Energy: 

tool: D34: IPMI Dell Current Power: 

assistant: ```c
void ipmi_test(int fildes) {
  printf("==IPMI RAW TEST==\n");
  unsigned char data[272];
  int size;
  int i = 0;
  int j = 0;
  for (i = 1; i < 20; i++) {
    lseek(fildes, 0x0001000000000000 | i, 2);
    size = read(fildes, data, sizeof(data));
    printf("IPMI Sensor Reading ID %d: ", i);
    for (j = 0; j < size; j++) {
      printf("%x ", data[j]);
    }
    printf("Error Code: %d\n", size);
  }
  for (i = 1; i < 20; i++) {
    lseek(fildes, 0x0000000000000000 | i, 2);
    size = read(fildes, data, sizeof(data));
    printf("IPMI Get SDR Record ID %d: ", i);
    for (j = 0; j < size; j++) {
      printf("%x ", data[j]);
    }
    printf("Error Code: %d\n", size);
  }
  lseek(fildes, 0x0002000000000000, 2);
  size = read(fildes, data, sizeof(data));
  printf("IPMI Dell Reset Energy: ");
  for (j = 0; j < size; j++) {
    printf("%x ", data[j]);
  }
  printf("Error Code: %d\n", size);
  lseek(fildes, 0x0003000000000000, 2);
  size = read(fildes, data, sizeof(data));
  printf("IPMI Dell Cumulative Energy: ");
  for (j = 0; j < size; j++) {
    printf("%x ", data[j]);
  }
  printf("Error Code: %d\n", size);
  lseek(fildes, 0x0004000000000000, 2);
  size = read(fildes, data, sizeof(data));
  printf("IPMI Dell Current Power: ");
  for (j = 0; j < size; j++) {
    printf("%x ", data[j]);
  }
  printf("Error Code: %d\n", size);
}
```