user: 请将以下的汇编代码转换成C语言代码：

```asm
<push>:
  endbr64
  push   %r15
  movslq %r9d,%rax
  mov    %rdx,%r15
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  push   %rbp
  mov    %rcx,%rbp
  push   %rbx
  sub    $0xf8,%rsp
  mov    %eax,0x88(%rsp)
  cmp    %r8d,%eax
  je     L166
  mov    %edi,%r14d
  mov    %r8d,%r12d
  shl    $0x2,%rax
  mov    $0x1,%edx
  mov    0x88(%rsp),%ebx
  test   %ebx,%ebx
  jne    L222
L315:
  lea    0x0(%rbp,%rax,1),%rcx
  mov    0x88(%rsp),%edi
  mov    %rcx,0x98(%rsp)
  mov    %edx,(%rcx)
  mov    %r14d,%ecx
  sub    %r12d,%ecx
  lea    0x1(%rcx,%rdi,1),%esi
  mov    %esi,0xe4(%rsp)
  cmp    %esi,%edx
  jg     L103
  mov    %edi,%ecx
  lea    0x1(%rdi),%edi
  lea    0x4(%rbp,%rax,1),%rax
  mov    %edi,0x8c(%rsp)
  lea    0x2(%rcx),%edi
  lea    0x3(%rcx),%edx
  mov    %rax,0xa0(%rsp)
  movslq %edi,%rax
  lea    0x4(%rcx),%r10d
  lea    0x5(%rcx),%r11d
  shl    $0x2,%rax
  lea    0x6(%rcx),%r9d
  lea    0x7(%rcx),%r8d
  mov    %edi,0x90(%rsp)
  lea    -0x4(%rbp,%rax,1),%rbx
  add    %rbp,%rax
  mov    %r10d,0x64(%rsp)
  mov    %rax,0xa8(%rsp)
  movslq %edx,%rax
  shl    $0x2,%rax
  mov    %rbx,0xb8(%rsp)
  lea    -0x4(%rbp,%rax,1),%rsi
  add    %rbp,%rax
  mov    %r11d,0x14(%rsp)
  mov    %rax,0x70(%rsp)
  movslq %r10d,%rax
  shl    $0x2,%rax
  mov    %rsi,0xc8(%rsp)
  lea    -0x4(%rbp,%rax,1),%rbx
  add    %rbp,%rax
  mov    %r9d,0x4(%rsp)
  mov    %rax,0x40(%rsp)
  movslq %r11d,%rax
  shl    $0x2,%rax
  mov    %rbx,0xd0(%rsp)
  lea    -0x4(%rbp,%rax,1),%rsi
  add    %rbp,%rax
  mov    %r8d,0x10(%rsp)
  mov    %rax,0x58(%rsp)
  movslq %r9d,%rax
  shl    $0x2,%rax
  mov    %rsi,0x78(%rsp)
  lea    -0x4(%rbp,%rax,1),%rbx
  add    %rbp,%rax
  mov    %edx,0x94(%rsp)
  mov    %rax,0x18(%rsp)
  movslq %r8d,%rax
  shl    $0x2,%rax
  mov    %rbx,0x50(%rsp)
  lea    -0x4(%rbp,%rax,1),%rsi
  lea    0x0(%rbp,%rax,1),%rbx
  mov    %rsi,0x68(%rsp)
  lea    0x8(%rcx),%esi
  movslq %esi,%rax
  mov    %esi,0x30(%rsp)
  shl    $0x2,%rax
  lea    -0x4(%rbp,%rax,1),%rcx
  add    %rbp,%rax
  mov    %rax,0xd8(%rsp)
  lea    0x0(,%rsi,4),%eax
  mov    %eax,0x34(%rsp)
  lea    0x0(,%r8,4),%eax
  mov    %eax,0x48(%rsp)
  lea    0x0(,%r9,4),%eax
  mov    %eax,0x80(%rsp)
  lea    0x0(,%r11,4),%eax
  mov    %eax,0xb0(%rsp)
  lea    0x0(,%r10,4),%eax
  mov    %eax,0xe0(%rsp)
  lea    0x0(,%rdx,4),%eax
  mov    %eax,0xc4(%rsp)
  lea    0x0(,%rdi,4),%eax
  mov    %r14d,%edi
  mov    %eax,0xc0(%rsp)
  lea    0x0(,%r12,4),%eax
  mov    %eax,0xb4(%rsp)
  mov    %r12d,%eax
  sub    %esi,%eax
  mov    %rcx,0x38(%rsp)
  mov    %r15,%rcx
  mov    %rbx,%r15
  sub    $0x1,%eax
  mov    %rcx,%rbx
  sub    %eax,%edi
  mov    %r12d,%eax
  mov    %r14d,%r12d
  mov    %edi,0x24(%rsp)
  mov    %rbp,%rdi
  mov    %eax,%r14d
  mov    %r13,%rbp
  mov    %rdi,%r13
L298:
  cmp    %r14d,0x8c(%rsp)
  je     L168
  mov    0x8c(%rsp),%r11d
  mov    $0x1,%eax
  test   %r11d,%r11d
  je     L107
  mov    0x98(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L107:
  mov    %r14d,%edx
  sub    0x8c(%rsp),%edx
  mov    0xa0(%rsp),%rdi
  mov    %r12d,%ecx
  sub    $0x1,%edx
  sub    %edx,%ecx
  mov    %eax,(%rdi)
  mov    %ecx,0xec(%rsp)
  cmp    %ecx,%eax
  jg     L231
  mov    %r14d,%eax
  mov    %r15,%r14
  mov    %eax,%r15d
L301:
  cmp    0x90(%rsp),%r15d
  je     L123
  mov    0x90(%rsp),%r10d
  mov    $0x1,%eax
  test   %r10d,%r10d
  je     L445
  mov    0xb8(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L445:
  mov    %r15d,%edx
  sub    0x90(%rsp),%edx
  mov    0xa8(%rsp),%rdi
  mov    %r12d,%ecx
  sub    $0x1,%edx
  sub    %edx,%ecx
  mov    %eax,(%rdi)
  mov    %ecx,0xe8(%rsp)
  cmp    %ecx,%eax
  jg     L206
  mov    %r13,%rax
  mov    %rbp,%r13
  mov    %r12d,%ebp
  mov    %rax,%r12
L240:
  cmp    0x94(%rsp),%r15d
  je     L295
  mov    0x94(%rsp),%r9d
  mov    $0x1,%eax
  test   %r9d,%r9d
  je     L414
  mov    0xc8(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L414:
  mov    0x70(%rsp),%rsi
  mov    %r15d,%edx
  sub    0x94(%rsp),%edx
  sub    $0x1,%edx
  mov    %eax,(%rsi)
  mov    %ebp,%esi
  sub    %edx,%esi
  mov    %esi,0x84(%rsp)
  cmp    %esi,%eax
  jg     L178
  mov    %r13,%rax
  mov    %r14,%r13
  mov    %ebp,%r14d
  mov    %rax,%rbp
L120:
  cmp    0x64(%rsp),%r15d
  je     L407
  mov    0x64(%rsp),%r8d
  mov    $0x1,%eax
  test   %r8d,%r8d
  je     L14
  mov    0xd0(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L14:
  mov    %r15d,%edx
  sub    0x64(%rsp),%edx
  mov    0x40(%rsp),%rsi
  mov    %r14d,%edi
  sub    $0x1,%edx
  sub    %edx,%edi
  mov    %eax,(%rsi)
  mov    %edi,0x4c(%rsp)
  cmp    %edi,%eax
  jg     L110
L328:
  cmp    0x14(%rsp),%r15d
  je     L36
  mov    0x14(%rsp),%edi
  mov    $0x1,%eax
  test   %edi,%edi
  je     L249
  mov    0x78(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L249:
  mov    %r15d,%edx
  sub    0x14(%rsp),%edx
  mov    0x58(%rsp),%rdi
  mov    %r14d,%esi
  sub    $0x1,%edx
  sub    %edx,%esi
  mov    %eax,(%rdi)
  mov    %esi,0x60(%rsp)
  cmp    %esi,%eax
  jg     L211
L175:
  cmp    0x4(%rsp),%r15d
  je     L404
  mov    0x4(%rsp),%esi
  mov    $0x1,%eax
  test   %esi,%esi
  je     L422
  mov    0x50(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L422:
  mov    0x18(%rsp),%rcx
  mov    %r15d,%edx
  sub    0x4(%rsp),%edx
  sub    $0x1,%edx
  mov    %eax,(%rcx)
  mov    %r14d,%ecx
  sub    %edx,%ecx
  mov    %ecx,0x20(%rsp)
  cmp    %ecx,%eax
  jg     L245
L441:
  cmp    0x10(%rsp),%r15d
  je     L79
  mov    0x10(%rsp),%ecx
  mov    $0x1,%eax
  test   %ecx,%ecx
  je     L393
  mov    0x68(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L393:
  mov    %r15d,%edx
  sub    0x10(%rsp),%edx
  mov    %r14d,%esi
  mov    %eax,0x0(%r13)
  sub    $0x1,%edx
  sub    %edx,%esi
  mov    %esi,0xc(%rsp)
  cmp    %esi,%eax
  jg     L311
  mov    %r12,%rax
  mov    %rbp,%r12
  mov    %r14d,%ebp
  mov    %rax,%r14
L379:
  cmp    0x30(%rsp),%r15d
  je     L344
  mov    0x30(%rsp),%edx
  mov    $0x1,%eax
  test   %edx,%edx
  je     L188
  mov    0x38(%rsp),%rax
  mov    (%rax),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
L188:
  mov    0xd8(%rsp),%rsi
  mov    0x88(%rsp),%ecx
  mov    %eax,(%rsi)
  lea    0x9(%rcx),%r9d
  cmp    0x24(%rsp),%eax
  jg     L234
  mov    %r13,0x28(%rsp)
  mov    %r15d,%r8d
  mov    %r12,%r13
  mov    %rbx,%r15
  mov    %ebp,%r12d
  mov    %rsi,%rbx
  mov    %r9d,%ebp
L196:
  mov    %ebp,%r9d
  mov    %r14,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  mov    %r8d,0x8(%rsp)
  call   <push>
  mov    (%rbx),%eax
  mov    0x8(%rsp),%r8d
  add    $0x1,%eax
  cmp    0x24(%rsp),%eax
  mov    %eax,(%rbx)
  jle    L196
  mov    %r12d,%ebp
  mov    %r13,%r12
  mov    0x28(%rsp),%r13
  mov    %r15,%rbx
  mov    %r8d,%r15d
L234:
  mov    0x0(%r13),%eax
  add    $0x1,%eax
  mov    %eax,0x0(%r13)
  cmp    0xc(%rsp),%eax
  jle    L379
  mov    %r14,%rax
  mov    %ebp,%r14d
  mov    %r12,%rbp
  mov    %rax,%r12
L311:
  mov    0x18(%rsp),%rdi
  mov    (%rdi),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rdi)
  cmp    0x20(%rsp),%eax
  jle    L441
L245:
  mov    0x58(%rsp),%rsi
  mov    (%rsi),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rsi)
  cmp    0x60(%rsp),%eax
  jle    L175
L211:
  mov    0x40(%rsp),%rcx
  mov    (%rcx),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rcx)
  cmp    0x4c(%rsp),%eax
  jle    L328
L110:
  mov    0x70(%rsp),%rsi
  mov    (%rsi),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rsi)
  cmp    0x84(%rsp),%eax
  jle    L120
  mov    %rbp,%rax
  mov    %r14d,%ebp
  mov    %r13,%r14
  mov    %rax,%r13
L178:
  mov    0xa8(%rsp),%rdi
  mov    (%rdi),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rdi)
  cmp    0xe8(%rsp),%eax
  jle    L240
  mov    %r12,%rax
  mov    %ebp,%r12d
  mov    %r13,%rbp
  mov    %rax,%r13
L206:
  mov    0xa0(%rsp),%rsi
  mov    (%rsi),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rsi)
  cmp    0xec(%rsp),%eax
  jle    L301
  mov    %r15d,%eax
  mov    %r14,%r15
  mov    %eax,%r14d
L231:
  mov    0x98(%rsp),%rcx
  mov    (%rcx),%eax
  mov    %eax,0x8(%rsp)
  add    $0x1,%eax
  mov    %eax,(%rcx)
  cmp    0xe4(%rsp),%eax
  jle    L298
L103:
  add    $0xf8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L344:
  movslq (%rbx),%rax
  mov    %r14,%rsi
  lea    0x1(%rax),%edx
  mov    (%r12,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0x34(%rsp),%edx
  call   <memcpy@plt>
  jmp    L234
  nopl   (%rax)
L79:
  movslq (%rbx),%rax
  mov    %r12,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%rbp,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0x48(%rsp),%edx
  call   <memcpy@plt>
  jmp    L311
L404:
  movslq (%rbx),%rax
  mov    %r12,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%rbp,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0x80(%rsp),%edx
  call   <memcpy@plt>
  jmp    L245
L36:
  movslq (%rbx),%rax
  mov    %r12,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%rbp,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0xb0(%rsp),%edx
  call   <memcpy@plt>
  jmp    L211
L407:
  movslq (%rbx),%rax
  mov    %r12,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%rbp,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0xe0(%rsp),%edx
  call   <memcpy@plt>
  jmp    L110
L295:
  movslq (%rbx),%rax
  mov    %r12,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%r13,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0xc4(%rsp),%edx
  call   <memcpy@plt>
  jmp    L178
L123:
  movslq (%rbx),%rax
  mov    %r13,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%rbp,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0xc0(%rsp),%edx
  call   <memcpy@plt>
  jmp    L206
L168:
  movslq (%rbx),%rax
  mov    %r13,%rsi
  lea    0x1(%rax),%edx
  mov    0x0(%rbp,%rax,8),%rdi
  mov    %edx,(%rbx)
  mov    0xb4(%rsp),%edx
  call   <memcpy@plt>
  jmp    L231
L166:
  mov    %rax,%rdi
  movslq (%rdx),%rax
  lea    0x1(%rax),%edx
  mov    %edx,(%r15)
  mov    %edi,%edx
  mov    (%rsi,%rax,8),%rdi
  add    $0xf8,%rsp
  pop    %rbx
  shl    $0x2,%edx
  pop    %rbp
  mov    %rcx,%rsi
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <memcpy@plt>
L222:
  mov    -0x4(%rcx,%rax,1),%ebx
  lea    0x1(%rbx),%edx
  jmp    L315
```

assistant: ```c
void push(int n, int **ret, int *i, int *dat, int maxLen, int len) {
  if (len == maxLen)
    memcpy(ret[(*i)++], dat, sizeof(int) * len);
  else
    for (dat[len] = !len ? 1 : dat[len - 1] + 1; dat[len] <= n - (maxLen - len - 1); ++dat[len])
      push(n, ret, i, dat, maxLen, len + 1);
}
```