user: 请从给定的汇编指令推导出C源代码:

```asm
<prepareBoundaries>:
  endbr64
  push   %r15
  mov    %edi,%r15d
  push   %r14
  push   %r13
  mov    %ecx,%r13d
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  mov    %r8d,%ebx
  sub    $0x18,%rsp
  mov    %edi,(%r9)
  mov    0x50(%rsp),%rax
  mov    0x58(%rsp),%r14
  mov    %esi,(%rax)
  mov    %esi,%eax
  sub    %edi,%eax
  lea    0x4(,%rax,4),%edi
  mov    %edi,0xc(%rsp)
  call   <vrna_alloc@plt>
  mov    0xc(%rsp),%edi
  mov    %rax,(%r14)
  call   <vrna_alloc@plt>
  mov    0x60(%rsp),%rdx
  movslq %r15d,%rcx
  mov    %rax,(%rdx)
  lea    0x0(,%rcx,4),%rax
  sub    %rax,(%r14)
  mov    (%rdx),%r8
  sub    %rax,%r8
  mov    %r8,(%rdx)
  cmp    %r15d,%ebp
  jl     L7
  mov    %ebx,%eax
  mov    (%r14),%rsi
  movdqa D5(%rip),%xmm6
  mov    $0x1,%r9d
  shr    $0x1f,%eax
  movdqa D8(%rip),%xmm5
  movdqa D29(%rip),%xmm4
  lea    (%rbx,%rax,1),%edi
  and    $0x1,%edi
  sub    %eax,%edi
  nopl   (%rax)
L74:
  mov    %r12d,(%rsi,%rcx,4)
  mov    %ecx,%r14d
  mov    %r13d,(%r8,%rcx,4)
  mov    (%rsi,%rcx,4),%r10d
  lea    (%r10,%rcx,1),%edx
  cmp    %edx,%ebx
  jle    L89
  lea    0x1(%r10),%eax
  mov    %ebx,%r15d
  lea    (%rax,%rcx,1),%edx
  sub    %edx,%r15d
  cmp    %edx,%ebx
  lea    0x1(%r15),%r11d
  cmovl  %r9d,%r11d
  jl     L68
  cmp    $0x2,%r15d
  jbe    L68
  movd   %r10d,%xmm7
  mov    %r11d,%edx
  xor    %eax,%eax
  pshufd $0x0,%xmm7,%xmm1
  movd   %ecx,%xmm7
  shr    $0x2,%edx
  paddd  %xmm6,%xmm1
  pshufd $0x0,%xmm7,%xmm3
  nopl   0x0(%rax)
L15:
  movdqa %xmm1,%xmm0
  add    $0x1,%eax
  paddd  %xmm5,%xmm1
  paddd  %xmm4,%xmm0
  movdqa %xmm0,%xmm2
  paddd  %xmm3,%xmm2
  cmp    %eax,%edx
  jne    L15
  mov    %r11d,%r15d
  pshufd $0xff,%xmm2,%xmm2
  pshufd $0xff,%xmm0,%xmm0
  and    $0xfffffffc,%r15d
  movd   %xmm2,%edx
  movd   %xmm0,%eax
  add    %r15d,%r10d
  cmp    %r15d,%r11d
  je     L106
  lea    0x1(%r10),%eax
L68:
  lea    (%rax,%r14,1),%edx
  cmp    %edx,%ebx
  jle    L106
  lea    0x2(%r10),%eax
  lea    (%r14,%rax,1),%edx
  cmp    %edx,%ebx
  jle    L106
  lea    0x3(%r10),%eax
  lea    (%r14,%rax,1),%edx
L106:
  mov    %eax,(%rsi,%rcx,4)
L56:
  mov    %edx,%r10d
  shr    $0x1f,%r10d
  add    %r10d,%edx
  and    $0x1,%edx
  sub    %r10d,%edx
  cmp    %edx,%edi
  je     L2
  add    $0x1,%eax
  mov    %eax,(%rsi,%rcx,4)
L2:
  add    $0x1,%rcx
  cmp    %ecx,%ebp
  jge    L74
L7:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L89:
  mov    %r10d,%eax
  jmp    L56
```

tool_calls: name: disassemble_data
arguments: data_tag: D5
type_guessed: byte[16]
name: disassemble_data
arguments: data_tag: D8
type_guessed: byte[16]
name: disassemble_data
arguments: data_tag: D29
type_guessed: byte[16]

tool: {"D5": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D8": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D29": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

assistant: ```c
void prepareBoundaries(int min_k_pre, int max_k_pre, int min_l_pre, int max_l_pre, int bpdist, int *min_k, int *max_k, int **min_l, int **max_l) {
  int cnt;
  int mem = max_k_pre - min_k_pre + 1;
  *min_k = min_k_pre;
  *max_k = max_k_pre;
  *min_l = (int *)vrna_alloc(sizeof(int) * mem);
  *max_l = (int *)vrna_alloc(sizeof(int) * mem);
  *min_l -= min_k_pre;
  *max_l -= min_k_pre;
  for (cnt = min_k_pre; cnt <= max_k_pre; cnt++) {
    (*min_l)[cnt] = min_l_pre;
    (*max_l)[cnt] = max_l_pre;
    while ((*min_l)[cnt] + cnt < bpdist)
      (*min_l)[cnt]++;
    if ((bpdist % 2) != (((*min_l)[cnt] + cnt) % 2))
      (*min_l)[cnt]++;
  }
}
```