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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1f0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1e4(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,%rsi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x1d8(%rbp)
  lea    -0x1f0(%rbp),%rdx
  mov    -0x1d8(%rbp),%rax
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  jmp    L62
L76:
  lea    -0x1e8(%rbp),%rcx
  lea    -0x1ec(%rbp),%rdx
  mov    -0x1d8(%rbp),%rax
  lea    D19(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  movl   $0x0,-0x1e0(%rbp)
  jmp    L25
L88:
  lea    -0x1d0(%rbp),%rcx
  mov    -0x1e0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    (%rcx,%rax,1),%rdx
  mov    -0x1d8(%rbp),%rax
  lea    D36(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  addl   $0x1,-0x1e0(%rbp)
L25:
  mov    -0x1ec(%rbp),%eax
  cmp    %eax,-0x1e0(%rbp)
  jl     L88
  movl   $0x0,-0x1dc(%rbp)
  jmp    L116
L41:
  mov    -0x1ec(%rbp),%eax
  mov    -0x1dc(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x1d0,%rax
  movb   $0x0,(%rax)
  addl   $0x1,-0x1dc(%rbp)
L116:
  mov    -0x1e8(%rbp),%eax
  cmp    %eax,-0x1dc(%rbp)
  jle    L41
  movl   $0x0,-0x1e0(%rbp)
  jmp    L118
L0:
  movl   $0x0,-0x1dc(%rbp)
  jmp    L89
L108:
  mov    -0x1dc(%rbp),%edx
  mov    -0x1e0(%rbp),%ecx
  lea    -0x1d0(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <processTile@plt>
  addl   $0x1,-0x1dc(%rbp)
L89:
  mov    -0x1e8(%rbp),%eax
  cmp    %eax,-0x1dc(%rbp)
  jl     L108
  addl   $0x1,-0x1e0(%rbp)
L118:
  mov    -0x1ec(%rbp),%eax
  cmp    %eax,-0x1e0(%rbp)
  jl     L0
  mov    -0x1e4(%rbp),%eax
  mov    %eax,%esi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x1e0(%rbp)
  jmp    L47
L52:
  lea    -0x1d0(%rbp),%rcx
  mov    -0x1e0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  mov    %rax,%rdi
  call   <puts@plt>
  addl   $0x1,-0x1e0(%rbp)
L47:
  mov    -0x1ec(%rbp),%eax
  cmp    %eax,-0x1e0(%rbp)
  jl     L52
  mov    $0xa,%edi
  call   <putchar@plt>
L62:
  mov    -0x1e4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x1e4(%rbp)
  mov    -0x1f0(%rbp),%edx
  cmp    %edx,%eax
  jl     L76
  mov    -0x1d8(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D54
data_type: string
name: unpack_data
arguments: label: D8
data_type: string
name: unpack_data
arguments: label: D31
data_type: string
name: unpack_data
arguments: label: D19
data_type: string
name: unpack_data
arguments: label: D36
data_type: string
name: unpack_data
arguments: label: D15
data_type: string

tool: D54: r

tool: D8: fire.in

tool: D31: %d

tool: D19: %d %d

tool: D36: %s

tool: D15: Map #%d:


assistant: ```c
int main(void) {
  int cases, caseNum = 0;
  int rows, cols, r, c;
  FILE *fp = fopen("fire.in", "r");
  fscanf(fp, "%d", &cases);
  char map[21][21];
  while (caseNum++ < cases) {
    fscanf(fp, "%d %d", &rows, &cols);
    for (r = 0; r < rows; r++) {
      fscanf(fp, "%s", map[r]);
    }
    for (c = 0; c <= cols; c++) {
      map[rows][c] = '\0';
    }
    for (r = 0; r < rows; r++) {
      for (c = 0; c < cols; c++) {
        processTile(map, r, c);
      }
    }
    printf("Map #%d:\n", caseNum);
    for (r = 0; r < rows; r++) {
      printf("%s\n", map[r]);
    }
    printf("\n");
  }
  fclose(fp);
  return 0;
}
```