user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  sub    $0x1a0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x198(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  nopl   0x0(%rax,%rax,1)
L38:
  mov    %ebp,%edi
  call   <switch1@plt>
  mov    %eax,(%rbx,%rbp,4)
  add    $0x1,%rbp
  cmp    $0x64,%rbp
  jne    L38
  xor    %ebp,%ebp
  cs nopw 0x0(%rax,%rax,1)
L101:
  mov    (%rbx,%rbp,4),%r12d
  mov    %ebp,%edi
  call   <switch1@plt>
  xor    %edi,%edi
  cmp    %eax,%r12d
  sete   %dil
  add    $0x1,%rbp
  call   <assert@plt>
  cmp    $0x64,%rbp
  jne    L101
  xor    %ebp,%ebp
  nopl   (%rax)
L66:
  mov    %ebp,%edi
  call   <switch2@plt>
  mov    %eax,(%rbx,%rbp,4)
  add    $0x1,%rbp
  cmp    $0x64,%rbp
  jne    L66
  xor    %ebp,%ebp
  xchg   %ax,%ax
L21:
  mov    (%rbx,%rbp,4),%r12d
  mov    %ebp,%edi
  call   <switch2@plt>
  xor    %edi,%edi
  cmp    %eax,%r12d
  sete   %dil
  add    $0x1,%rbp
  call   <assert@plt>
  cmp    $0x64,%rbp
  jne    L21
  xor    %ebp,%ebp
  nopl   (%rax)
L13:
  mov    %ebp,%edi
  call   <switch3@plt>
  mov    %eax,(%rbx,%rbp,4)
  add    $0x1,%rbp
  cmp    $0x64,%rbp
  jne    L13
  xor    %ebp,%ebp
  xchg   %ax,%ax
L31:
  mov    (%rbx,%rbp,4),%r12d
  mov    %ebp,%edi
  call   <switch3@plt>
  xor    %edi,%edi
  cmp    %eax,%r12d
  sete   %dil
  add    $0x1,%rbp
  call   <assert@plt>
  cmp    $0x64,%rbp
  jne    L31
  mov    %rbx,%r12
  mov    %rbx,%r13
  xor    %ebp,%ebp
  nopl   0x0(%rax,%rax,1)
L65:
  mov    %ebp,%edi
  add    $0x1,%ebp
  add    $0x4,%r13
  mov    %ebp,%esi
  call   <switch4@plt>
  mov    %eax,-0x4(%r13)
  cmp    $0x64,%ebp
  jne    L65
  mov    %rbx,%r13
  xor    %ebp,%ebp
  xchg   %ax,%ax
L48:
  mov    %ebp,%edi
  add    $0x1,%ebp
  mov    0x0(%r13),%r14d
  mov    %ebp,%esi
  call   <switch4@plt>
  xor    %edi,%edi
  cmp    %eax,%r14d
  sete   %dil
  add    $0x4,%r13
  call   <assert@plt>
  cmp    $0x64,%ebp
  jne    L48
  xor    %ebp,%ebp
  nopl   0x0(%rax)
L28:
  mov    %ebp,%edi
  add    $0x1,%ebp
  add    $0x4,%rbx
  mov    %ebp,%esi
  call   <switch5@plt>
  mov    %eax,-0x4(%rbx)
  cmp    $0x64,%ebp
  jne    L28
  xor    %ebx,%ebx
  nopw   0x0(%rax,%rax,1)
L63:
  mov    %ebx,%edi
  add    $0x1,%ebx
  mov    (%r12),%ebp
  mov    %ebx,%esi
  call   <switch5@plt>
  xor    %edi,%edi
  cmp    %eax,%ebp
  sete   %dil
  add    $0x4,%r12
  call   <assert@plt>
  cmp    $0x64,%ebx
  jne    L63
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L72
  add    $0x1a0,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L72:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int main(int argc) {
  int array[100];
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch1(i);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch1(i));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch2(i);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch2(i));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch3(i);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch3(i));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch4(i, i + 1);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch4(i, i + 1));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch5(i, i + 1);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch5(i, i + 1));
}
```