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

```asm
<checkFileContent>:
  endbr64
  push   %r15
  lea    D136(%rip),%r15
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rdi,%r12
  mov    $0x5f5e100,%edi
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  call   <allocMemory@plt>
  movq   $0x0,(%rsp)
  mov    %rax,%rbp
  cs nopw 0x0(%rax,%rax,1)
L191:
  mov    %r12,%rdx
  mov    $0x5f5e100,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L225
  movzbl 0x0(%rbp),%eax
  add    $0x1,%rbx
  xor    %r14d,%r14d
  test   %al,%al
  jne    L221
  jmp    L21
  nopl   (%rax)
L38:
  movzbl 0x1(%rbp,%r14,1),%eax
  lea    0x1(%r14),%rdx
  test   %al,%al
  je     L111
L87:
  mov    %rdx,%r14
L221:
  mov    %eax,%edx
  and    $0xffffffdf,%edx
  cmp    $0xa,%dl
  je     L38
  cmp    $0x2d,%al
  je     L38
  mov    %r13,%rsi
  mov    %r15,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  movsbl 0x0(%rbp,%r14,1),%edx
  test   %dl,%dl
  je     L160
L207:
  mov    %r14,%rcx
  mov    %rbx,%rsi
  lea    D29(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rsi
  lea    D146(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  movzbl 0x1(%rbp,%r14,1),%eax
  lea    0x1(%r14),%rdx
  test   %al,%al
  jne    L87
L111:
  cmpb   $0xa,0x0(%rbp,%r14,1)
  je     L164
  mov    %rdx,%rsi
  lea    D101(%rip),%rdi
  xor    %eax,%eax
  mov    %rdx,0x8(%rsp)
  call   <printf@plt>
  mov    0x8(%rsp),%rdx
  cmp    $0xa,%rdx
  ja     L156
L120:
  mov    (%rsp),%rax
  test   %rax,%rax
  je     L159
  cmp    %rdx,%rax
  je     L191
L7:
  mov    %r13,%rsi
  lea    D26(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbx,%rsi
  lea    D123(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  jmp    L191
  nopl   0x0(%rax)
L160:
  lea    D139(%rip),%rdi
  call   <puts@plt>
  movsbl 0x0(%rbp,%r14,1),%edx
  jmp    L207
  nop
L159:
  mov    %rdx,(%rsp)
  jmp    L191
L83:
  mov    %r14,%rdx
  nopl   0x0(%rax)
L156:
  mov    %r13,%rsi
  lea    D59(%rip),%rdi
  xor    %eax,%eax
  mov    %rdx,0x8(%rsp)
  call   <printf@plt>
  mov    $0xa,%esi
  lea    D131(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbx,%rsi
  lea    D34(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x8(%rsp),%rsi
  lea    D31(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  mov    0x8(%rsp),%rdx
  jmp    L120
  xchg   %ax,%ax
L164:
  mov    %r14,%rsi
  lea    D101(%rip),%rdi
  call   <printf@plt>
  cmp    $0xa,%r14
  ja     L83
  test   %r14,%r14
  jne    L48
L162:
  mov    %r13,%rsi
  lea    D5(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <fclose@plt>
  xor    %edi,%edi
  call   <exit@plt>
  cmpq   $0x0,(%rsp)
  je     L191
  jmp    L7
  nopw   0x0(%rax,%rax,1)
L225:
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <rewind@plt>
  mov    (%rsp),%rax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L21:
  cmpb   $0xa,-0x1(%rbp)
  je     L195
  xor    %esi,%esi
  lea    D101(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L162
L195:
  mov    $0xffffffffffffffff,%rsi
  lea    D101(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0xffffffffffffffff,%rdx
  jmp    L156
L48:
  mov    %r14,%rdx
  jmp    L120
```

tool_calls: name: retrieve_data
arguments: label: D136
type: string
name: retrieve_data
arguments: label: D29
type: string
name: retrieve_data
arguments: label: D146
type: string
name: retrieve_data
arguments: label: D101
type: string
name: retrieve_data
arguments: label: D26
type: string
name: retrieve_data
arguments: label: D123
type: string
name: retrieve_data
arguments: label: D139
type: string
name: retrieve_data
arguments: label: D59
type: string
name: retrieve_data
arguments: label: D131
type: string
name: retrieve_data
arguments: label: D34
type: string
name: retrieve_data
arguments: label: D31
type: string
name: retrieve_data
arguments: label: D5
type: string

tool: D136: 
Error: Processed file %s has character(s) other than "*" or "-"

tool: D29: 
(row #%d has character(%d) 

tool: D146: @ column %d)



tool: D101: 
checkIndex == %d after while



tool: D26: 
Error: Processed file %s has rows with different lengths


tool: D123: (row #%d)


tool: D139: 
[DEBUG] '\0' == row[checkIndex] =(

tool: D59: 
Error: Processed file %s has too long row of characters


tool: D131: Maximum allowed amount of characters per row is: %d


tool: D34: (row #%d had 

tool: D31: %d characters)



tool: D5: 
Error: Processed file %s has an empty row


assistant: ```c
unsigned long long checkFileContent(FILE *gridFile, char *fileName) {
  char *row;
  unsigned long long rowLen = 0;
  unsigned long long checkIndex = 0;
  unsigned long long rowCounter = 0;
  row = allocMemory(100000000);
  while (NULL != fgets(row, 100000000, gridFile)) {
    while ('\0' != row[checkIndex]) {
      if (row[checkIndex] != '-' && row[checkIndex] != '*' && row[checkIndex] != '\n') {
        printf("\nError: Processed file %s has character(s) other than \"*\" or \"-\"", fileName);
        if ('\0' == row[checkIndex]) {
          printf("\n[DEBUG] \'\\0\' == row[checkIndex] =(\n");
        }
        printf("\n(row #%d has character(%d) ", rowCounter + 1, row[checkIndex], checkIndex);
        printf("@ column %d)\n\n", checkIndex);
        free(row);
        fclose(gridFile);
        exit(0);
      }
      checkIndex++;
    }
    if ('\n' == row[checkIndex - 1]) {
      checkIndex--;
    }
    printf("\ncheckIndex == %d after while\n\n", checkIndex);
    if (checkIndex > 10) {
      printf("\nError: Processed file %s has too long row of characters\n", fileName);
      printf("Maximum allowed amount of characters per row is: %d\n", 10);
      printf("(row #%d had ", rowCounter + 1);
      printf("%d characters)\n\n", checkIndex);
      free(row);
      fclose(gridFile);
      exit(0);
    }
    if (0 == checkIndex) {
      printf("\nError: Processed file %s has an empty row\n", fileName);
      free(row);
      fclose(gridFile);
      exit(0);
    }
    if (0 == rowLen) {
      rowLen = checkIndex;
    }
    if (checkIndex != rowLen) {
      printf("\nError: Processed file %s has rows with different lengths\n", fileName);
      printf("(row #%d)\n", rowCounter + 1);
      free(row);
      fclose(gridFile);
      exit(0);
    }
    rowCounter++;
    checkIndex = 0;
  }
  free(row);
  rewind(gridFile);
  return rowLen;
}
```