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

```asm
<path>:
  endbr64
  push   %r15
  mov    %edi,%eax
  push   %r14
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    0x60(%rsp),%esi
  mov    0x48(%rsp),%rbx
  mov    0x40(%rsp),%rdx
  mov    0x50(%rsp),%r15
  mov    %edi,-0x14(%rsp)
  mov    %rcx,%rdi
  mov    %r9,-0x8(%rsp)
  mov    %esi,(%rbx)
  test   %eax,%eax
  jle    L177
  mov    %eax,%ebx
  movslq %esi,%rax
  movslq %ebx,%r10
  imul   %esi,%ebx
  lea    (%rcx,%rax,4),%r11
  movslq %ebx,%rax
  mov    0x38(%rsp),%rbx
  lea    (%r12,%rax,4),%r9
  xor    %eax,%eax
  nopl   (%rax)
L180:
  mov    (%r9,%rax,4),%ecx
  sub    (%r11),%ecx
  sub    (%r8,%rax,4),%ecx
  mov    %ecx,(%rdx,%rax,4)
  mov    %esi,(%rbx,%rax,4)
  mov    %eax,(%r15,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%r10
  jne    L180
L177:
  movslq -0x14(%rsp),%r10
  lea    0x4(%r15),%rbx
  movl   $0x1,-0x18(%rsp)
  mov    %rbx,-0x20(%rsp)
  lea    -0x1(%r10),%ebx
  movslq %r10d,%r13
  mov    %ebx,-0x24(%rsp)
  mov    0x48(%rsp),%rbx
  add    $0x4,%rbx
  mov    %rbx,-0x10(%rsp)
  nopl   (%rax)
L146:
  test   %r13d,%r13d
  jle    L136
L96:
  mov    -0x24(%rsp),%ecx
  mov    -0x20(%rsp),%rbx
  mov    %r15,%rax
  mov    %r13d,%r9d
  lea    (%rbx,%rcx,4),%rbx
  mov    %r15,%rcx
  jmp    L40
  nopl   0x0(%rax)
L12:
  add    $0x4,%rcx
  cmp    %rcx,%rbx
  je     L157
L40:
  movslq (%rcx),%rsi
  mov    %rsi,%r11
  lea    0x0(,%rsi,4),%rbp
  mov    (%rdx,%rsi,4),%esi
  test   %esi,%esi
  jne    L12
  mov    -0x8(%rsp),%rbx
  mov    (%rbx,%rbp,1),%esi
  test   %esi,%esi
  js     L163
  mov    0x48(%rsp),%rbx
  addl   $0x1,-0x18(%rsp)
  movslq -0x18(%rsp),%r11
  lea    -0x4(%rbx,%r11,4),%r11
  mov    -0x24(%rsp),%ebx
  mov    %esi,(%r11)
  mov    -0x4(%r15,%r13,4),%esi
  movslq %ebx,%r13
  mov    %esi,(%rcx)
  mov    (%r11),%r14d
  test   %ebx,%ebx
  je     L94
  mov    -0x14(%rsp),%ebp
  movslq %r14d,%rcx
  mov    -0x20(%rsp),%rsi
  lea    (%rdi,%rcx,4),%rbx
  lea    -0x2(%r9),%ecx
  imul   %r14d,%ebp
  lea    (%rsi,%rcx,4),%r11
  xchg   %ax,%ax
L1:
  movslq (%rax),%rsi
  mov    %rsi,%rcx
  lea    (%rdx,%rsi,4),%r9
  add    %ebp,%ecx
  movslq %ecx,%rcx
  mov    (%r12,%rcx,4),%ecx
  sub    (%rbx),%ecx
  sub    (%r8,%rsi,4),%ecx
  cmp    %ecx,(%r9)
  jle    L81
  mov    %ecx,(%r9)
  mov    0x38(%rsp),%rcx
  mov    %r14d,(%rcx,%rsi,4)
L81:
  add    $0x4,%rax
  cmp    %rax,%r11
  jne    L1
  mov    -0x24(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x24(%rsp)
  test   %r13d,%r13d
  jg     L96
L136:
  mov    0x58(%rsp),%ecx
  nopl   0x0(%rax,%rax,1)
L21:
  mov    -0x18(%rsp),%ebx
  mov    0x48(%rsp),%rax
  lea    -0x1(%rbx),%esi
  mov    -0x10(%rsp),%rbx
  lea    (%rbx,%rsi,4),%r9
  nopl   (%rax)
L52:
  movslq (%rax),%rsi
  add    $0x4,%rax
  add    %ecx,(%rdi,%rsi,4)
  cmp    %rax,%r9
  jne    L52
  mov    -0x14(%rsp),%eax
  test   %eax,%eax
  jle    L146
  xor    %eax,%eax
  jmp    L54
  nopw   0x0(%rax,%rax,1)
L100:
  sub    %ecx,(%r8,%rax,4)
L87:
  add    $0x1,%rax
  cmp    %rax,%r10
  je     L146
L54:
  mov    (%rdx,%rax,4),%esi
  test   %esi,%esi
  je     L100
  sub    %ecx,%esi
  mov    %esi,(%rdx,%rax,4)
  jmp    L87
  nop
L157:
  mov    0x58(%rsp),%ecx
  nopl   0x0(%rax)
L44:
  movslq (%rax),%rsi
  mov    (%rdx,%rsi,4),%esi
  cmp    %esi,%ecx
  cmovg  %esi,%ecx
  add    $0x4,%rax
  cmp    %rax,%rbx
  jne    L44
  jmp    L21
L163:
  mov    0x68(%rsp),%rax
  mov    %r11d,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L94:
  movl   $0xffffffff,-0x24(%rsp)
  jmp    L146
```

assistant: ```c
void path(int n, int *a, int *f, int *u, int *v, int *fb, int *rc, int *pi, int *lr, int *uc, int INF, int ii, int *jj_p) {
  int k, j, jj, l, r, nuc, nlr, ia, min;
  lr[0] = ii;
  for (k = 0; k < n; k++) {
    pi[k] = a[ii * n + k] - u[ii] - v[k];
    rc[k] = ii;
    uc[k] = k;
  }
  nuc = n;
  nlr = 1;
  goto L40;
L20:
  r = lr[nlr - 1];
  for (l = 0; l < nuc; l++) {
    j = uc[l];
    ia = a[r * n + j] - u[r] - v[j];
    if (ia < pi[j]) {
      pi[j] = ia;
      rc[j] = r;
    }
  }
L40:
  for (l = 0; l < nuc; l++) {
    j = uc[l];
    if (pi[j] == 0)
      goto L100;
  }
  min = INF;
  for (l = 0; l < nuc; l++) {
    j = uc[l];
    if (min > pi[j])
      min = pi[j];
  }
  for (l = 0; l < nlr; l++) {
    r = lr[l];
    u[r] += min;
  }
  for (j = 0; j < n; j++) {
    if (pi[j] == 0) {
      v[j] -= min;
    } else {
      pi[j] -= min;
    }
  }
  goto L40;
L100:
  if (fb[j] < 0)
    goto L110;
  nlr++;
  lr[nlr - 1] = fb[j];
  uc[l] = uc[nuc - 1];
  nuc--;
  goto L20;
L110:
  jj = j;
  (*jj_p) = jj;
}
```