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

```asm
<gen>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %esi,0x28(%rsp)
  cmp    %edi,%esi
  jl     L11
  lea    D0(%rip),%r13
  mov    %edi,%r14d
L167:
  mov    0x28(%rsp),%eax
  mov    %r13,%rdi
  lea    (%rax,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    %eax,%esi
  mov    %eax,0x2c(%rsp)
  call   <printf@plt>
  mov    %ebx,%eax
  sub    $0x1,%eax
  mov    %eax,0x1c(%rsp)
  cmp    %r14d,%eax
  jl     L178
L15:
  mov    0x1c(%rsp),%eax
  mov    %r13,%rdi
  lea    (%rax,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    %eax,%esi
  mov    %eax,0x30(%rsp)
  call   <printf@plt>
  mov    %ebx,%eax
  sub    $0x1,%eax
  mov    %eax,0x20(%rsp)
  cmp    %r14d,%eax
  jl     L49
L96:
  mov    0x20(%rsp),%eax
  mov    %r13,%rdi
  lea    (%rax,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    %eax,%esi
  mov    %eax,0x34(%rsp)
  call   <printf@plt>
  mov    %ebx,%eax
  sub    $0x1,%eax
  mov    %eax,0x24(%rsp)
  cmp    %r14d,%eax
  jl     L117
L94:
  mov    0x24(%rsp),%eax
  mov    %r13,%rdi
  lea    (%rax,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    %eax,%esi
  mov    %eax,0x38(%rsp)
  call   <printf@plt>
  mov    %ebx,%eax
  sub    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %r14d,%eax
  jl     L21
L161:
  mov    0x8(%rsp),%eax
  mov    %r13,%rdi
  add    %r14d,%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  mov    %ebx,%esi
  lea    -0x1(%rbx),%r15d
  call   <printf@plt>
  cmp    %r14d,%r15d
  jl     L61
  mov    %ebx,0xc(%rsp)
  mov    %r14d,%ebx
L38:
  lea    (%r15,%rbx,1),%eax
  mov    %r13,%rdi
  mov    %eax,%ebp
  shr    $0x1f,%ebp
  add    %eax,%ebp
  sar    %ebp
  mov    %ebp,%esi
  call   <printf@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x14(%rsp)
  cmp    %ebx,%eax
  jl     L18
  mov    %ebp,0x10(%rsp)
  mov    %ebx,%ebp
L121:
  mov    0x14(%rsp),%eax
  mov    %r13,%rdi
  add    %ebp,%eax
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  sar    %ebx
  mov    %ebx,%esi
  lea    -0x1(%rbx),%r14d
  call   <printf@plt>
  cmp    %ebp,%r14d
  jl     L142
  mov    %ebx,0x18(%rsp)
  mov    %r14d,%ebx
L71:
  lea    (%rbx,%rbp,1),%eax
  mov    %r13,%rdi
  mov    %eax,%r12d
  shr    $0x1f,%r12d
  add    %eax,%r12d
  sar    %r12d
  mov    %r12d,%esi
  lea    -0x1(%r12),%r14d
  call   <printf@plt>
  cmp    %ebp,%r14d
  jl     L12
  mov    %r12d,%ecx
  mov    %ebx,%r12d
  mov    %r14d,%ebx
  mov    %ebp,%r14d
L151:
  lea    (%rbx,%r14,1),%edx
  mov    %r13,%rdi
  mov    %ecx,0x3c(%rsp)
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebp
  mov    %eax,%esi
  call   <printf@plt>
  mov    %r14d,%edi
  lea    -0x1(%rbp),%esi
  lea    0x1(%rbp),%r14d
  call   <gen>
  cmp    %r14d,%ebx
  mov    0x3c(%rsp),%ecx
  jge    L151
  mov    %r12d,%ebx
  mov    %ecx,%r12d
L12:
  lea    0x1(%r12),%ebp
  cmp    %ebp,%ebx
  jge    L71
  mov    0x18(%rsp),%ebx
L142:
  lea    0x1(%rbx),%ebp
  cmp    %ebp,0x14(%rsp)
  jge    L121
  mov    0x10(%rsp),%ebp
L18:
  lea    0x1(%rbp),%ebx
  cmp    %ebx,%r15d
  jge    L38
  mov    0xc(%rsp),%ebx
L61:
  lea    0x1(%rbx),%r14d
  cmp    %r14d,0x8(%rsp)
  jge    L161
L21:
  mov    0x38(%rsp),%r14d
  add    $0x1,%r14d
  cmp    %r14d,0x24(%rsp)
  jge    L94
L117:
  mov    0x34(%rsp),%r14d
  add    $0x1,%r14d
  cmp    %r14d,0x20(%rsp)
  jge    L96
L49:
  mov    0x30(%rsp),%r14d
  add    $0x1,%r14d
  cmp    %r14d,0x1c(%rsp)
  jge    L15
L178:
  mov    0x2c(%rsp),%r14d
  add    $0x1,%r14d
  cmp    0x28(%rsp),%r14d
  jle    L167
L11:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D0
data_type: string

tool: D0: %d


assistant: ```c
void gen(int lo, int hi) {
  if (lo > hi)
    return;
  int mid = (lo + hi) / 2;
  printf("%d\n", mid);
  gen(lo, mid - 1);
  gen(mid + 1, hi);
}
```