user: What would the C source look like for the assembly code provided here:

```asm
<maze_solve_helper>:
  endbr64
  push   %r15
  mov    %ecx,%r9d
  push   %r14
  push   %r13
  mov    %r8d,%r13d
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x18,%rsp
  cmp    $0x28,%esi
  jne    L76
  cmp    $0x4f,%edx
  jne    L76
  movslq %esi,%r14
  movslq %edx,%r15
L10:
  lea    (%r14,%r14,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  movb   $0x2e,(%rax,%r15,1)
  add    $0x18,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L76:
  test   %ebp,%ebp
  je     L13
  lea    -0x1(%rbp),%esi
  cmp    %r9d,%esi
  jne    L64
  cmp    %r13d,%ebx
  jne    L64
L13:
  cmp    %r9d,%ebp
  lea    -0x1(%rbx),%edx
  setne  %r10b
  cmp    %edx,%r13d
  jne    L160
  test   %r10b,%r10b
  jne    L160
L196:
  lea    0x1(%rbp),%esi
  cmp    %esi,%r9d
  jne    L21
  cmp    %r13d,%ebx
  jne    L21
L15:
  lea    0x1(%rbx),%edx
  cmp    %edx,%r13d
  jne    L206
  test   %r10b,%r10b
  jne    L206
L85:
  xor    %eax,%eax
L139:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L160:
  movslq %ebp,%r14
  movslq %edx,%rcx
  lea    (%r14,%r14,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%rcx,1)
  je     L196
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %r9d,0xc(%rsp)
  movslq %ebx,%r15
  mov    %r10b,0x8(%rsp)
  call   <maze_solve_helper>
  movzbl 0x8(%rsp),%r10d
  mov    0xc(%rsp),%r9d
  test   %eax,%eax
  jne    L10
  jmp    L196
  nopl   0x0(%rax,%rax,1)
L21:
  movslq %esi,%rax
  movslq %ebx,%r15
  lea    (%rax,%rax,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%r15,1)
  je     L15
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebx,%edx
  mov    %r12,%rdi
  mov    %r10b,0x8(%rsp)
  movslq %ebp,%r14
  call   <maze_solve_helper>
  movzbl 0x8(%rsp),%r10d
  test   %eax,%eax
  jne    L10
  jmp    L15
  cs nopw 0x0(%rax,%rax,1)
L206:
  movslq %ebp,%r14
  movslq %edx,%rcx
  lea    (%r14,%r14,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%rcx,1)
  je     L85
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebp,%esi
  mov    %r12,%rdi
  call   <maze_solve_helper>
  movslq %ebx,%r15
  test   %eax,%eax
  jne    L10
  xor    %eax,%eax
  jmp    L139
  nopl   0x0(%rax)
L64:
  movslq %esi,%rax
  movslq %ebx,%r15
  lea    (%rax,%rax,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%r15,1)
  je     L13
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebx,%edx
  mov    %r12,%rdi
  mov    %r9d,0x8(%rsp)
  movslq %ebp,%r14
  call   <maze_solve_helper>
  mov    0x8(%rsp),%r9d
  test   %eax,%eax
  je     L13
  jmp    L10
```

assistant: ```c
int maze_solve_helper(char maze[41][81], int r, int c, int pr, int pc) {
  int res = 0, nr = 0, nc = 0;
  if (r == 40 && c == 79)
    goto success;
  if (r != 0) {
    nr = r - 1;
    nc = c;
    if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
      res = maze_solve_helper(maze, nr, nc, r, c);
    if (res)
      goto success;
  }
  nr = r;
  nc = c - 1;
  if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
    res = maze_solve_helper(maze, nr, nc, r, c);
  if (res)
    goto success;
  nr = r + 1;
  nc = c;
  if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
    res = maze_solve_helper(maze, nr, nc, r, c);
  if (res)
    goto success;
  nr = r;
  nc = c + 1;
  if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
    res = maze_solve_helper(maze, nr, nc, r, c);
  if (res)
    goto success;
  return 0;
success:
  maze[r][c] = '.';
  return 1;
}
```