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

```asm
<walk>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,(%rsp)
  mov    %ecx,0xc(%rsp)
  movslq %esi,%rax
  mov    %rax,%r13
  shl    $0x5,%r13
  add    %rax,%r13
  lea    (%rdi,%r13,1),%r14
  movslq %edx,%rax
  mov    $0x0,%r12d
  cmpb   $0x0,(%r14,%rax,1)
  jne    L58
  mov    %esi,%ebp
  mov    %edx,%ebx
  movb   $0x2,(%r14,%rax,1)
  lea    -0x1(%rcx),%r15d
  cmp    %esi,%r15d
  jle    L156
  movzbl 0x21(%rax,%r14,1),%eax
  mov    $0x1,%r12d
  cmp    $0x1,%al
  je     L156
  mov    $0x0,%r12d
  test   %al,%al
  je     L247
L156:
  test   %ebp,%ebp
  jle    L53
  movslq %ebx,%rax
  add    (%rsp),%r13
  movzbl -0x21(%rax,%r13,1),%eax
  cmp    $0x1,%al
  je     L280
  test   %al,%al
  je     L236
L53:
  cmp    %ebx,%r15d
  jle    L104
  lea    0x1(%rbx),%edx
  movslq %edx,%rax
  movzbl (%r14,%rax,1),%eax
  cmp    $0x1,%al
  je     L150
  test   %al,%al
  je     L271
L104:
  test   %ebx,%ebx
  jle    L244
  lea    -0x1(%rbx),%edx
  movslq %edx,%rax
  movzbl (%r14,%rax,1),%eax
  cmp    $0x1,%al
  je     L1
  test   %al,%al
  je     L224
L244:
  test   %ebp,%ebp
  jne    L64
  test   %ebx,%ebx
  je     L64
  add    $0x1,%r12d
L208:
  cmp    %ebp,%r15d
  je     L58
  cmp    %ebx,%r15d
  sete   %al
  cmp    $0x1,%al
  sbb    $0xffffffff,%r12d
  jmp    L58
L247:
  lea    0x1(%rsi),%esi
  mov    %ebx,%edx
  call   <walk>
  mov    %eax,%r12d
  jmp    L156
L280:
  add    $0x1,%r12d
  jmp    L53
L236:
  lea    -0x1(%rbp),%esi
  mov    0xc(%rsp),%ecx
  mov    %ebx,%edx
  mov    (%rsp),%rdi
  call   <walk>
  add    %eax,%r12d
  jmp    L53
L150:
  add    $0x1,%r12d
  jmp    L104
L271:
  mov    0xc(%rsp),%ecx
  mov    %ebp,%esi
  mov    (%rsp),%rdi
  call   <walk>
  add    %eax,%r12d
  jmp    L104
L1:
  add    $0x1,%r12d
  jmp    L244
L224:
  mov    0xc(%rsp),%ecx
  mov    %ebp,%esi
  mov    (%rsp),%rdi
  call   <walk>
  add    %eax,%r12d
  jmp    L244
L64:
  cmp    %ebx,%r15d
  je     L67
  cmp    %ebp,%r15d
  je     L75
L67:
  test   %ebx,%ebx
  jne    L208
  test   %ebp,%ebp
  je     L208
L207:
  add    $0x1,%r12d
L58:
  mov    %r12d,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L75:
  add    $0x1,%r12d
  test   %ebx,%ebx
  jne    L58
  test   %ebp,%ebp
  jne    L207
  jmp    L58
```

assistant: ```c
int walk(char maze[][33], int lin, int col, int n) {
  int walls = 0;
  if (!maze[lin][col]) {
    maze[lin][col] = 2;
    if (lin < n - 1) {
      if (maze[lin + 1][col] == 1)
        walls++;
      else if (!maze[lin + 1][col])
        walls += walk(maze, lin + 1, col, n);
    }
    if (lin > 0) {
      if (maze[lin - 1][col] == 1)
        walls++;
      else if (!maze[lin - 1][col])
        walls += walk(maze, lin - 1, col, n);
    }
    if (col < n - 1) {
      if (maze[lin][col + 1] == 1)
        walls++;
      else if (!maze[lin][col + 1])
        walls += walk(maze, lin, col + 1, n);
    }
    if (col > 0) {
      if (maze[lin][col - 1] == 1)
        walls++;
      else if (!maze[lin][col - 1])
        walls += walk(maze, lin, col - 1, n);
    }
    if (lin == 0 && col != 0)
      walls++;
    else if (lin == n - 1 && col != n - 1)
      walls++;
    if (col == 0 && lin != 0)
      walls++;
    else if (col == n - 1 && lin != n - 1)
      walls++;
  }
  return walls;
}
```