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

```asm
<roll_3_xy>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  cmpl   $0x3,-0x14(%rbp)
  je     L200
  cmpl   $0x3,-0x14(%rbp)
  jg     L132
  cmpl   $0x2,-0x14(%rbp)
  je     L156
  cmpl   $0x2,-0x14(%rbp)
  jg     L132
  cmpl   $0x0,-0x14(%rbp)
  je     L213
  cmpl   $0x1,-0x14(%rbp)
  jne    L132
  movl   $0x0,-0x4(%rbp)
  jmp    L116
L38:
  mov    $0x7,%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  push   $0x1
  push   $0x1
  mov    $0x7,%r9d
  mov    %edx,%r8d
  mov    $0x7,%ecx
  mov    $0x0,%edx
  mov    %eax,%esi
  mov    $0x0,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <delay_ms@plt>
  cmpl   $0x6,-0x4(%rbp)
  jg     L162
  mov    -0x4(%rbp),%eax
  push   $0x0
  push   $0x1
  mov    $0x7,%r9d
  mov    %eax,%r8d
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x3,%esi
  mov    $0x3,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
L162:
  addl   $0x1,-0x4(%rbp)
L116:
  cmpl   $0x7,-0x4(%rbp)
  jle    L38
  jmp    L132
L156:
  movl   $0x0,-0x4(%rbp)
  jmp    L73
L75:
  mov    $0x7,%eax
  sub    -0x4(%rbp),%eax
  mov    -0x4(%rbp),%edx
  push   $0x1
  push   $0x1
  mov    $0x7,%r9d
  mov    $0x7,%r8d
  mov    %edx,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <delay_ms@plt>
  cmpl   $0x6,-0x4(%rbp)
  jg     L177
  mov    -0x4(%rbp),%eax
  push   $0x0
  push   $0x1
  mov    $0x7,%r9d
  mov    $0x7,%r8d
  mov    %eax,%ecx
  mov    $0x0,%edx
  mov    $0x4,%esi
  mov    $0x3,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
L177:
  addl   $0x1,-0x4(%rbp)
L73:
  cmpl   $0x7,-0x4(%rbp)
  jle    L75
  jmp    L132
L200:
  movl   $0x0,-0x4(%rbp)
  jmp    L60
L173:
  mov    $0x7,%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  push   $0x1
  push   $0x1
  mov    $0x7,%r9d
  mov    %edx,%r8d
  mov    $0x7,%ecx
  mov    $0x0,%edx
  mov    %eax,%esi
  mov    $0x0,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <delay_ms@plt>
  cmpl   $0x6,-0x4(%rbp)
  jg     L35
  mov    $0x7,%eax
  sub    -0x4(%rbp),%eax
  push   $0x0
  push   $0x1
  mov    $0x7,%r9d
  mov    %eax,%r8d
  mov    $0x7,%ecx
  mov    $0x0,%edx
  mov    $0x4,%esi
  mov    $0x4,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
L35:
  addl   $0x1,-0x4(%rbp)
L60:
  cmpl   $0x7,-0x4(%rbp)
  jle    L173
  jmp    L132
L213:
  movl   $0x0,-0x4(%rbp)
  jmp    L42
L96:
  mov    $0x7,%eax
  sub    -0x4(%rbp),%eax
  mov    -0x4(%rbp),%edx
  push   $0x1
  push   $0x1
  mov    $0x7,%r9d
  mov    $0x7,%r8d
  mov    %edx,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <delay_ms@plt>
  cmpl   $0x6,-0x4(%rbp)
  jg     L74
  mov    $0x7,%eax
  sub    -0x4(%rbp),%eax
  push   $0x0
  push   $0x1
  mov    $0x7,%r9d
  mov    $0x0,%r8d
  mov    %eax,%ecx
  mov    $0x0,%edx
  mov    $0x3,%esi
  mov    $0x4,%edi
  call   <box_apeak_xy@plt>
  add    $0x10,%rsp
L74:
  addl   $0x1,-0x4(%rbp)
L42:
  cmpl   $0x7,-0x4(%rbp)
  jle    L96
  jmp    L132
L132:
  nop
  leave
  ret
```

assistant: ```c
void roll_3_xy(int n, int delay) {
  int i;
  switch (n) {
  case 1:
    for (i = 0; i < 8; i++) {
      box_apeak_xy(0, i, 0, 7, 7 - i, 7, 1, 1);
      delay_ms(delay);
      if (i < 7)
        box_apeak_xy(3, 3, 0, 0, i, 7, 1, 0);
    };
    break;
  case 2:
    for (i = 0; i < 8; i++) {
      box_apeak_xy(7 - i, 0, 0, i, 7, 7, 1, 1);
      delay_ms(delay);
      if (i < 7)
        box_apeak_xy(3, 4, 0, i, 7, 7, 1, 0);
    };
    break;
  case 3:
    for (i = 0; i < 8; i++) {
      box_apeak_xy(0, i, 0, 7, 7 - i, 7, 1, 1);
      delay_ms(delay);
      if (i < 7)
        box_apeak_xy(4, 4, 0, 7, 7 - i, 7, 1, 0);
    };
    break;
  case 0:
    for (i = 0; i < 8; i++) {
      box_apeak_xy(7 - i, 0, 0, i, 7, 7, 1, 1);
      delay_ms(delay);
      if (i < 7)
        box_apeak_xy(4, 3, 0, 7 - i, 0, 7, 1, 0);
    };
  }
}
```