user: 下面的汇编指令对应的C源代码是什么：

```asm
<read_mixed_cell>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x48,%rsp
  mov    %edi,-0x58(%rbp)
  mov    %esi,%r15d
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  movslq %edi,%rax
  lea    0xf(,%rax,4),%rax
  mov    %rax,%rcx
  and    $0xfffffffffffffff0,%rcx
  and    $0xfffffffffffff000,%rax
  mov    %rsp,%rdx
  sub    %rax,%rdx
L122:
  cmp    %rdx,%rsp
  je     L93
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L122
L93:
  mov    %rcx,%rax
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L64
  orq    $0x0,-0x8(%rsp,%rax,1)
L64:
  mov    %rsp,%r14
  movslq %r15d,%rax
  lea    0xf(,%rax,8),%rax
  mov    %rax,%rdx
  and    $0xfffffffffffffff0,%rdx
  and    $0xfffffffffffff000,%rax
  mov    %rsp,%rcx
  sub    %rax,%rcx
L18:
  cmp    %rcx,%rsp
  je     L75
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L18
L75:
  mov    %rdx,%rax
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L70
  orq    $0x0,-0x8(%rsp,%rax,1)
L70:
  mov    %rsp,%rbx
  mov    %rbx,-0x70(%rbp)
  mov    %r15d,%esi
  lea    D45(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  test   %r15d,%r15d
  jle    L142
  mov    %r15d,%eax
  lea    (%rbx,%rax,8),%r13
  lea    D43(%rip),%r12
L28:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  add    $0x8,%rbx
  cmp    %r13,%rbx
  jne    L28
L142:
  lea    D16(%rip),%rdi
  call   <puts@plt>
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  mov    %r15d,-0x40(%rbp)
  test   %eax,%eax
  jle    L41
  mov    %r14,-0x68(%rbp)
  mov    %r14,%r13
  mov    $0x0,%r12d
  mov    $0x0,%ebx
  lea    D35(%rip),%r15
L82:
  add    $0x1,%ebx
  mov    %ebx,%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  lea    D10(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  add    0x0(%r13),%r12d
  add    $0x4,%r13
  cmp    -0x58(%rbp),%ebx
  jne    L82
  mov    -0x58(%rbp),%ebx
  lea    0x1(%rbx),%r13d
  lea    (%r12,%r13,1),%edi
  mov    %edi,-0x3c(%rbp)
  mov    $0x4,%esi
  call   <calloc@plt>
  mov    %rax,-0x60(%rbp)
  mov    %r12d,(%rax)
  mov    %ebx,%ecx
  mov    $0x0,%eax
L130:
  mov    (%r14,%rax,4),%edx
  mov    -0x60(%rbp),%rsi
  mov    %edx,0x4(%rsi,%rax,4)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L130
  lea    D63(%rip),%rdi
  call   <puts@plt>
  movl   $0x0,-0x54(%rbp)
L139:
  addl   $0x1,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  mov    -0x68(%rbp),%rbx
  mov    %rbx,%r14
  mov    %eax,%edx
  mov    (%rbx),%esi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,(%rbx)
  jle    L107
  movslq %r13d,%rax
  mov    -0x60(%rbp),%rcx
  lea    (%rcx,%rax,4),%r12
  mov    $0x0,%ebx
L68:
  lea    0x1(%rbx,%r13,1),%r15d
  mov    %r12,%rsi
  lea    D10(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  add    $0x1,%ebx
  add    $0x4,%r12
  cmp    %ebx,(%r14)
  jg     L68
  mov    %r15d,%r13d
L107:
  addq   $0x4,-0x68(%rbp)
  mov    -0x58(%rbp),%edx
  cmp    %edx,-0x54(%rbp)
  jne    L139
L59:
  lea    -0x44(%rbp),%rsi
  mov    -0x70(%rbp),%rcx
  mov    -0x60(%rbp),%rdx
  mov    $0xd,%edi
  call   <_ada_use_celcon@plt>
  mov    -0x38(%rbp),%rdx
  sub    %fs:0x28,%rdx
  jne    L16
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
L41:
  mov    -0x58(%rbp),%edi
  add    $0x1,%edi
  mov    %edi,-0x3c(%rbp)
  mov    $0x4,%esi
  call   <calloc@plt>
  mov    %rax,-0x60(%rbp)
  movl   $0x0,(%rax)
  lea    D63(%rip),%rdi
  call   <puts@plt>
  jmp    L59
L16:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D45
type_infered: string
name: disassemble_data
arguments: data_label: D43
type_infered: string
name: disassemble_data
arguments: data_label: D16
type_infered: string
name: disassemble_data
arguments: data_label: D35
type_infered: string
name: disassemble_data
arguments: data_label: D10
type_infered: string
name: disassemble_data
arguments: data_label: D63
type_infered: string
name: disassemble_data
arguments: data_label: D50
type_infered: string

tool: D45: Give the inner normal (%d-vector) : 

tool: D43: %lf

tool: D16: Reading the number of points in each support...

tool: D35:   #points in support %d : 

tool: D10: %d

tool: D63: Reading the labels for each support...

tool: D50:   give %d labels for support %d : 

assistant: ```c
int read_mixed_cell(int r, int n) {
  int a[3], *b, cnt[r], i, j, k, fail, sum;
  double c[n];
  printf("Give the inner normal (%d-vector) : ", n);
  for (i = 0; i < n; i++)
    scanf("%lf", &c[i]);
  printf("Reading the number of points in each support...\n");
  a[0] = r;
  a[1] = n;
  sum = 0;
  for (i = 0; i < r; i++) {
    printf("  #points in support %d : ", i + 1);
    scanf("%d", &cnt[i]);
    sum += cnt[i];
  }
  a[2] = 1 + r + sum;
  b = calloc(a[2], sizeof(int));
  b[0] = sum;
  for (i = 0; i < r; i++)
    b[i + 1] = cnt[i];
  printf("Reading the labels for each support...\n");
  k = r + 1;
  for (i = 0; i < r; i++) {
    printf("  give %d labels for support %d : ", cnt[i], i + 1);
    for (j = 0; j < cnt[i]; j++)
      scanf("%d", &b[k++]);
  }
  fail = _ada_use_celcon(13, a, b, c);
  return fail;
}
```