user: Demonstrate the C code that generates the assembly output below:

```asm
<variance_class>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %edi,-0x64(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x70(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    %rax,%rsi
  call   <variance_2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x64(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x70(%rbp),%rax
  mov    %edx,%ecx
  mov    $0x0,%edx
  mov    %rax,%rsi
  call   <variance_2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x64(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x70(%rbp),%rax
  mov    $0x0,%ecx
  mov    %rax,%rsi
  call   <variance_2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x64(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x64(%rbp),%eax
  mov    %eax,%esi
  shr    $0x1f,%esi
  add    %esi,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x70(%rbp),%rax
  mov    %rax,%rsi
  call   <variance_2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L57
L50:
  mov    -0x54(%rbp),%eax
  cltq
  mov    -0x54(%rbp),%edx
  mov    %edx,-0x40(%rbp,%rax,4)
  addl   $0x1,-0x54(%rbp)
L57:
  cmpl   $0x3,-0x54(%rbp)
  jle    L50
  movl   $0x2,-0x54(%rbp)
  jmp    L7
L32:
  movl   $0x0,-0x50(%rbp)
  jmp    L72
L20:
  mov    -0x50(%rbp),%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm1
  mov    -0x50(%rbp),%eax
  add    $0x1,%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm0
  comisd %xmm1,%xmm0
  jbe    L60
  mov    -0x50(%rbp),%eax
  add    $0x1,%eax
  cltq
  mov    -0x40(%rbp,%rax,4),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x50(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x50(%rbp),%eax
  cltq
  mov    -0x40(%rbp,%rax,4),%edx
  movslq %ecx,%rax
  mov    %edx,-0x40(%rbp,%rax,4)
  mov    -0x50(%rbp),%eax
  cltq
  mov    -0x4c(%rbp),%edx
  mov    %edx,-0x40(%rbp,%rax,4)
  mov    -0x50(%rbp),%eax
  add    $0x1,%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x50(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x50(%rbp),%eax
  cltq
  movsd  -0x30(%rbp,%rax,8),%xmm0
  movslq %edx,%rax
  movsd  %xmm0,-0x30(%rbp,%rax,8)
  mov    -0x50(%rbp),%eax
  cltq
  movsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp,%rax,8)
L60:
  addl   $0x1,-0x50(%rbp)
L72:
  mov    -0x50(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jle    L20
  subl   $0x1,-0x54(%rbp)
L7:
  cmpl   $0x0,-0x54(%rbp)
  jns    L32
  lea    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <match@plt>
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L18
  call   <__stack_chk_fail@plt>
L18:
  leave
  ret
```

assistant: ```c
int variance_class(int size, double **block) {
  int i, j;
  double a[4] = {0.0, 0.0, 0.0, 0.0};
  int order[4];
  a[0] = variance_2(size / 2, block, 0, 0);
  a[1] = variance_2(size / 2, block, 0, size / 2);
  a[2] = variance_2(size / 2, block, size / 2, 0);
  a[3] = variance_2(size / 2, block, size / 2, size / 2);
  for (i = 0; i < 4; ++i)
    order[i] = i;
  for (i = 2; i >= 0; --i)
    for (j = 0; j <= i; ++j)
      if (a[j] < a[j + 1]) {
        {
          int _temp;
          _temp = order[j + 1];
          order[j + 1] = order[j];
          order[j] = _temp;
        }
        {
          double _temp;
          _temp = a[j + 1];
          a[j + 1] = a[j];
          a[j] = _temp;
        }
      }
  return match(order);
}
```