user: What is the c source code of the assembly code below:

```asm
<francis_iter>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    %rdx,-0x58(%rbp)
  movl   $0x0,-0x3c(%rbp)
  mov    -0x4c(%rbp),%eax
  imul   $0x1e,%eax,%eax
  mov    %eax,-0x24(%rbp)
  movl   $0x0,-0x30(%rbp)
  mov    -0x4c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0x38(%rbp)
  jmp    L242
L244:
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x58(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x38(%rbp)
L242:
  mov    -0x4c(%rbp),%eax
  imul   %eax,%eax
  cmp    %eax,-0x38(%rbp)
  jl     L244
  mov    -0x4c(%rbp),%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <hessenberg@plt>
  jmp    L131
L195:
  mov    -0x4c(%rbp),%eax
  imul   -0x2c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L175
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L175
  subl   $0x1,-0x2c(%rbp)
  jmp    L136
L175:
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L136
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  je     L7
  jmp    L136
L7:
  subl   $0x2,-0x2c(%rbp)
L136:
  cmpl   $0x1,-0x2c(%rbp)
  jle    L215
  mov    -0x4c(%rbp),%eax
  imul   -0x2c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L259
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  je     L195
L259:
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L215
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  je     L195
L215:
  cmpl   $0x0,-0x2c(%rbp)
  jle    L131
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
  jmp    L226
L104:
  subl   $0x1,-0x28(%rbp)
L226:
  cmpl   $0x0,-0x28(%rbp)
  jle    L252
  mov    -0x4c(%rbp),%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  test   %eax,%eax
  jne    L104
L252:
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  jmp    L208
L139:
  mov    -0x38(%rbp),%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  add    $0x1,%eax
  imul   %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L204
L201:
  mov    -0x20(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  mov    -0x1c(%rbp),%ecx
  mov    -0x34(%rbp),%eax
  add    %ecx,%eax
  sub    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x34(%rbp)
L204:
  mov    -0x34(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jle    L201
  addl   $0x1,-0x38(%rbp)
L208:
  mov    -0x38(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jle    L139
  mov    -0x2c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <francisQR@plt>
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  jmp    L199
L314:
  mov    -0x38(%rbp),%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  sub    -0x28(%rbp),%eax
  add    $0x1,%eax
  imul   %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L211
L289:
  mov    -0x1c(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  sub    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%ecx
  mov    -0x34(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x58(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x34(%rbp)
L211:
  mov    -0x34(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jle    L289
  addl   $0x1,-0x38(%rbp)
L199:
  mov    -0x38(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jle    L314
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  jmp    L93
L318:
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  %xmm2,-0x60(%rbp)
  mov    -0x38(%rbp),%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  mov    %eax,%ebx
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  add    %ebx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D3(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  comisd -0x60(%rbp),%xmm0
  jb     L21
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  imul   -0x4c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
L21:
  addl   $0x1,-0x38(%rbp)
L93:
  mov    -0x2c(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jg     L318
  addl   $0x1,-0x30(%rbp)
L131:
  cmpl   $0x1,-0x2c(%rbp)
  jle    L103
  mov    -0x30(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L136
L103:
  mov    -0x30(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L96
  movl   $0x0,-0x3c(%rbp)
  jmp    L9
L96:
  movl   $0x1,-0x3c(%rbp)
L9:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x3c(%rbp),%eax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D3
type_guessed: byte[8]

tool: {"D3": [0x11,0xea,0x2d,0x81,0x99,0x97,0x71,0x3d]}

assistant: ```c
int francis_iter(double *A, int N, double *H) {
  int success, brkpoint;
  int i, j, it, p, q, t, u;
  double *temp;
  success = 0;
  brkpoint = 30 * N;
  it = 0;
  p = N - 1;
  temp = (double *)malloc(sizeof(double) * N * N);
  for (i = 0; i < N * N; ++i) {
    H[i] = A[i];
  }
  hessenberg(H, N);
  while (p > 1 && it < brkpoint) {
    while (p > 1 && (H[N * p + p - 1] == 0 || H[N * (p - 1) + p - 2] == 0)) {
      if (H[N * p + p - 1] == 0) {
        p--;
      } else if (H[N * (p - 1) + p - 2] == 0) {
        p = p - 2;
      }
    }
    if (p > 0) {
      q = p - 1;
      while (q > 0 && fabs(H[N * q + q - 1]) != 0) {
        q--;
      }
      for (i = q; i <= p; i++) {
        t = i * N;
        u = (i - q) * (p - q + 1);
        for (j = q; j <= p; j++) {
          temp[u + j - q] = H[t + j];
        }
      }
      francisQR(temp, p - q + 1);
      for (i = q; i <= p; i++) {
        t = i * N;
        u = (i - q) * (p - q + 1);
        for (j = q; j <= p; j++) {
          H[t + j] = temp[u + j - q];
        }
      }
      for (i = q; i <= p - 1; ++i) {
        if (fabs(H[(i + 1) * N + i]) <= 1e-12 * (fabs(H[i * N + i]) + fabs(H[(i + 1) * N + i + 1]))) {
          H[(i + 1) * N + i] = 0.;
        }
      }
      it++;
    }
  }
  if (it == brkpoint) {
    success = 0;
  } else {
    success = 1;
  }
  free(temp);
  return success;
}
```